diff --git a/404.html b/404.html index 6f0579712..505097a69 100755 --- a/404.html +++ b/404.html @@ -2,16 +2,13 @@ - -Página não encontrada | Franzininho - - - + +Página não encontrada | Franzininho + + + -
-
Ir para o conteúdo principal

Página não encontrada

Não foi possível encontrar o que você estava procurando.

Entre em contato com o proprietário do site que vinculou a URL original e informe a ele que o link está quebrado.

- - +
Ir para o conteúdo principal

Página não encontrada

Não foi possível encontrar o que você estava procurando.

Entre em contato com o proprietário do site que vinculou a URL original e informe a ele que o link está quebrado.

\ No newline at end of file diff --git a/assets/css/styles.048ffe62.css b/assets/css/styles.048ffe62.css new file mode 100755 index 000000000..300e6eaa9 --- /dev/null +++ b/assets/css/styles.048ffe62.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:rgba(0,0,0,.05);--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 rgba(0,0,0,.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,.2),0 2px 4px 0 rgba(0,0,0,.1);--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:rgba(0,0,0,.03);--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#2c8240;--ifm-color-primary-dark:#21af90;--ifm-color-primary-darker:#1fa588;--ifm-color-primary-darkest:#1a8870;--ifm-color-primary-light:#46cbae;--ifm-color-primary-lighter:#66d4bd;--ifm-color-primary-lightest:#92e0d0;--ifm-code-font-size:95%;--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:rgba(0,0,0,.1);--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:transparent}*{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid rgba(0,0,0,.1);border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%;height:auto;width:auto}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:rgba(53,120,229,.15);--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:rgba(235,237,240,.15);--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:rgba(0,164,0,.15);--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:rgba(84,199,236,.15);--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:rgba(255,186,0,.15);--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:rgba(250,56,62,.15);--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:transparent;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.sidebar_re4s,.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor transparent;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title,.title_f1Hy{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:hsla(0,0%,100%,.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,.5);color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:hsla(0,0%,100%,.05);--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:rgba(0,0,0,.6);right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover,.sidebarItemLink_mo7H:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.sidebarItemTitle_pO2u,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid transparent;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:hsla(0,0%,100%,.05);--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:hsla(0,0%,100%,.1);--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:hsla(0,0%,100%,.07);--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}.docusaurus-highlight-code-line{background-color:#484d5b;display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_YfHR,.sidebarLogo_isFc,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}[data-theme=dark]:root{--docusaurus-collapse-button-bg:hsla(0,0%,100%,.05);--docusaurus-collapse-button-bg-hover:hsla(0,0%,100%,.1)}.collapseSidebarButton_PEFL{display:none;margin:0}.iconExternalLink_nPIU{margin-left:.3rem}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}@supports selector(:has(*)){.navbarSearchContainer_Bca1:not(:has(>*)){display:none}}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.sidebar_re4s{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size)}.container_mt6G,.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.authorCol_Hf19{flex-grow:1!important;max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.heroBanner_UJJx{overflow:hidden;padding:4rem 0;position:relative;text-align:center}.buttons_pzbO{justify-content:center}.buttons_pzbO,.features_keug{align-items:center;display:flex}.features_keug{padding:2rem 0;text-align:center;width:100%}.featureImage_yA8i{height:200px;width:200px}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tocCollapsibleContent_vkbj a{display:block}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:transparent transparent transparent var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.img_ev3q{height:auto}.tableOfContents_bqdL{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_JAkA{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.sidebar_re4s,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media screen and (max-width:966px){.heroBanner_UJJx{padding:2rem}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.title_f1Hy{font-size:2rem}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/css/styles.b14a2c92.css b/assets/css/styles.b14a2c92.css deleted file mode 100755 index 409567688..000000000 --- a/assets/css/styles.b14a2c92.css +++ /dev/null @@ -1 +0,0 @@ -.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#2c8240;--ifm-color-primary-dark:#21af90;--ifm-color-primary-darker:#1fa588;--ifm-color-primary-darkest:#1a8870;--ifm-color-primary-light:#46cbae;--ifm-color-primary-lighter:#66d4bd;--ifm-color-primary-lightest:#92e0d0;--ifm-code-font-size:95%;--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}*{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_tbUL,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.sidebar_re4s,.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_S0QG>:last-child,.collapsibleContent_i85q>:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title,.title_f1Hy{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover,.sidebarItemLink_mo7H:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.sidebarItemTitle_pO2u,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}.docusaurus-highlight-code-line{background-color:#484d5b;display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_b6E3,.sidebarLogo_isFc,.themedImage_ToTc,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA,html:not([data-theme]) .themedComponent--light_NU7w{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.sidebar_re4s{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size)}.container_mt6G,.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.docMainContainer_gTbr,.docPage__5DB{display:flex;width:100%}.docPage__5DB{flex:1 0}.docsWrapper_BCFX{display:flex;flex:1 0 auto}.authorCol_Hf19{flex-grow:1!important;max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.heroBanner_UJJx{overflow:hidden;padding:4rem 0;position:relative;text-align:center}.buttons_pzbO{justify-content:center}.buttons_pzbO,.features_keug{align-items:center;display:flex}.features_keug{padding:2rem 0;text-align:center;width:100%}.featureImage_yA8i{height:200px;width:200px}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_vwxv{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tocCollapsibleContent_vkbj a{display:block}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.img_ev3q{height:auto}.admonition_LlT9{margin-bottom:1em}.admonitionHeading_tbUL{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem}.admonitionHeading_tbUL code{text-transform:none}.admonitionIcon_kALy{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_kALy svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.blogPostFooterDetailsFull_mRVl{flex-direction:column}.tableOfContents_bqdL{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_m80_{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.searchBox_ZlJk{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_BlDH,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_m80_:focus,.expandButton_m80_:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_m80_{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_BlDH{transform:rotate(180deg)}.docSidebarContainer_b6E3{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_b3ry{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_Xe31{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_gTbr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_Uz_u{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_czyv{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.sidebar_re4s,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media screen and (max-width:966px){.heroBanner_UJJx{padding:2rem}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.title_f1Hy{font-size:2rem}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/js/01a85c17.4eb05196.js b/assets/js/01a85c17.4eb05196.js new file mode 100755 index 000000000..706bc942c --- /dev/null +++ b/assets/js/01a85c17.4eb05196.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8412],{9452:(e,s,t)=>{t.d(s,{c:()=>v});var a=t(11504),i=t(34064),r=t(99012),n=t(11432),l=t(10867),c=t(84357),o=t(55592),m=t(13376);function d(e){const{pathname:s}=(0,o.IT)();return(0,a.useMemo)((()=>e.filter((e=>function(e,s){return!(e.unlisted&&!(0,m.Sc)(e.permalink,s))}(e,s)))),[e,s])}const u={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};var h=t(17624);function g(e){let{sidebar:s}=e;const t=d(s.items);return(0,h.jsx)("aside",{className:"col col--3",children:(0,h.jsxs)("nav",{className:(0,i.c)(u.sidebar,"thin-scrollbar"),"aria-label":(0,c.G)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,h.jsx)("div",{className:(0,i.c)(u.sidebarItemTitle,"margin-bottom--md"),children:s.title}),(0,h.jsx)("ul",{className:(0,i.c)(u.sidebarItemList,"clean-list"),children:t.map((e=>(0,h.jsx)("li",{className:u.sidebarItem,children:(0,h.jsx)(l.c,{isNavLink:!0,to:e.permalink,className:u.sidebarItemLink,activeClassName:u.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var b=t(45168);function j(e){let{sidebar:s}=e;const t=d(s.items);return(0,h.jsx)("ul",{className:"menu__list",children:t.map((e=>(0,h.jsx)("li",{className:"menu__list-item",children:(0,h.jsx)(l.c,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function p(e){return(0,h.jsx)(b.Mx,{component:j,props:e})}function x(e){let{sidebar:s}=e;const t=(0,n.U)();return s?.items.length?"mobile"===t?(0,h.jsx)(p,{sidebar:s}):(0,h.jsx)(g,{sidebar:s}):null}function v(e){const{sidebar:s,toc:t,children:a,...n}=e,l=s&&s.items.length>0;return(0,h.jsx)(r.c,{...n,children:(0,h.jsx)("div",{className:"container margin-vert--lg",children:(0,h.jsxs)("div",{className:"row",children:[(0,h.jsx)(x,{sidebar:s}),(0,h.jsx)("main",{className:(0,i.c)("col",{"col--7":l,"col--9 col--offset-1":!l}),children:a}),t&&(0,h.jsx)("div",{className:"col col--2",children:t})]})})})}},43024:(e,s,t)=>{t.r(s),t.d(s,{default:()=>j});t(11504);var a=t(34064),i=t(84357);const r=()=>(0,i.G)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var n=t(68900),l=t(45864),c=t(9452),o=t(83020),m=t(56448);const d={tag:"tag_Nnez"};var u=t(17624);function h(e){let{letterEntry:s}=e;return(0,u.jsxs)("article",{children:[(0,u.jsx)(m.c,{as:"h2",id:s.letter,children:s.letter}),(0,u.jsx)("ul",{className:"padding--none",children:s.tags.map((e=>(0,u.jsx)("li",{className:d.tag,children:(0,u.jsx)(o.c,{...e})},e.permalink)))}),(0,u.jsx)("hr",{})]})}function g(e){let{tags:s}=e;const t=function(e){const s={};return Object.values(e).forEach((e=>{const t=function(e){return e[0].toUpperCase()}(e.label);s[t]??=[],s[t].push(e)})),Object.entries(s).sort(((e,s)=>{let[t]=e,[a]=s;return t.localeCompare(a)})).map((e=>{let[s,t]=e;return{letter:s,tags:t.sort(((e,s)=>e.label.localeCompare(s.label)))}}))}(s);return(0,u.jsx)("section",{className:"margin-vert--lg",children:t.map((e=>(0,u.jsx)(h,{letterEntry:e},e.letter)))})}var b=t(48712);function j(e){let{tags:s,sidebar:t}=e;const i=r();return(0,u.jsxs)(n.cr,{className:(0,a.c)(l.W.wrapper.blogPages,l.W.page.blogTagsListPage),children:[(0,u.jsx)(n.U7,{title:i}),(0,u.jsx)(b.c,{tag:"blog_tags_list"}),(0,u.jsxs)(c.c,{sidebar:t,children:[(0,u.jsx)(m.c,{as:"h1",children:i}),(0,u.jsx)(g,{tags:s})]})]})}},83020:(e,s,t)=>{t.d(s,{c:()=>l});t(11504);var a=t(34064),i=t(10867);const r={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var n=t(17624);function l(e){let{permalink:s,label:t,count:l}=e;return(0,n.jsxs)(i.c,{href:s,className:(0,a.c)(r.tag,l?r.tagWithCount:r.tagRegular),children:[t,l&&(0,n.jsx)("span",{children:l})]})}}}]); \ No newline at end of file diff --git a/assets/js/01a85c17.933066fe.js b/assets/js/01a85c17.933066fe.js deleted file mode 100755 index 8b8eba153..000000000 --- a/assets/js/01a85c17.933066fe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4013],{9058:(e,t,a)=>{a.d(t,{Z:()=>E});var l=a(7294),n=a(4334),r=a(7961),s=a(7524),i=a(9960),c=a(5999);const m={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};function o(e){let{sidebar:t}=e;return l.createElement("aside",{className:"col col--3"},l.createElement("nav",{className:(0,n.Z)(m.sidebar,"thin-scrollbar"),"aria-label":(0,c.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},l.createElement("div",{className:(0,n.Z)(m.sidebarItemTitle,"margin-bottom--md")},t.title),l.createElement("ul",{className:(0,n.Z)(m.sidebarItemList,"clean-list")},t.items.map((e=>l.createElement("li",{key:e.permalink,className:m.sidebarItem},l.createElement(i.Z,{isNavLink:!0,to:e.permalink,className:m.sidebarItemLink,activeClassName:m.sidebarItemLinkActive},e.title)))))))}var u=a(3102);function g(e){let{sidebar:t}=e;return l.createElement("ul",{className:"menu__list"},t.items.map((e=>l.createElement("li",{key:e.permalink,className:"menu__list-item"},l.createElement(i.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title)))))}function b(e){return l.createElement(u.Zo,{component:g,props:e})}function d(e){let{sidebar:t}=e;const a=(0,s.i)();return t?.items.length?"mobile"===a?l.createElement(b,{sidebar:t}):l.createElement(o,{sidebar:t}):null}function E(e){const{sidebar:t,toc:a,children:s,...i}=e,c=t&&t.items.length>0;return l.createElement(r.Z,i,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement(d,{sidebar:t}),l.createElement("main",{className:(0,n.Z)("col",{"col--7":c,"col--9 col--offset-1":!c}),itemScope:!0,itemType:"http://schema.org/Blog"},s),a&&l.createElement("div",{className:"col col--2"},a))))}},1223:(e,t,a)=>{a.r(t),a.d(t,{default:()=>E});var l=a(7294),n=a(4334),r=a(5999);const s=()=>(0,r.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var i=a(1944),c=a(5281),m=a(9058),o=a(3008);const u={tag:"tag_Nnez"};function g(e){let{letterEntry:t}=e;return l.createElement("article",null,l.createElement("h2",null,t.letter),l.createElement("ul",{className:"padding--none"},t.tags.map((e=>l.createElement("li",{key:e.permalink,className:u.tag},l.createElement(o.Z,e))))),l.createElement("hr",null))}function b(e){let{tags:t}=e;const a=function(e){const t={};return Object.values(e).forEach((e=>{const a=function(e){return e[0].toUpperCase()}(e.label);t[a]??=[],t[a].push(e)})),Object.entries(t).sort(((e,t)=>{let[a]=e,[l]=t;return a.localeCompare(l)})).map((e=>{let[t,a]=e;return{letter:t,tags:a.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}(t);return l.createElement("section",{className:"margin-vert--lg"},a.map((e=>l.createElement(g,{key:e.letter,letterEntry:e}))))}var d=a(197);function E(e){let{tags:t,sidebar:a}=e;const r=s();return l.createElement(i.FG,{className:(0,n.Z)(c.k.wrapper.blogPages,c.k.page.blogTagsListPage)},l.createElement(i.d,{title:r}),l.createElement(d.Z,{tag:"blog_tags_list"}),l.createElement(m.Z,{sidebar:a},l.createElement("h1",null,r),l.createElement(b,{tags:t})))}},3008:(e,t,a)=>{a.d(t,{Z:()=>i});var l=a(7294),n=a(4334),r=a(9960);const s={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function i(e){let{permalink:t,label:a,count:i}=e;return l.createElement(r.Z,{href:t,className:(0,n.Z)(s.tag,i?s.tagWithCount:s.tagRegular)},a,i&&l.createElement("span",null,i))}}}]); \ No newline at end of file diff --git a/assets/js/031793e1.f568634d.js b/assets/js/031793e1.a22511d3.js similarity index 54% rename from assets/js/031793e1.f568634d.js rename to assets/js/031793e1.a22511d3.js index 2f27a8c32..a97d41f44 100755 --- a/assets/js/031793e1.f568634d.js +++ b/assets/js/031793e1.a22511d3.js @@ -1 +1 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1633],{2511:a=>{a.exports=JSON.parse('{"label":"facebook","permalink":"/blog/tags/facebook","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8908],{3272:a=>{a.exports=JSON.parse('{"label":"facebook","permalink":"/blog/tags/facebook","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/032edc05.5007b327.js b/assets/js/032edc05.5007b327.js deleted file mode 100755 index 54e994ae4..000000000 --- a/assets/js/032edc05.5007b327.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9860],{3905:(A,a,e)=>{e.d(a,{Zo:()=>d,kt:()=>c});var t=e(7294);function r(A,a,e){return a in A?Object.defineProperty(A,a,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[a]=e,A}function i(A,a){var e=Object.keys(A);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(A);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(A,a).enumerable}))),e.push.apply(e,t)}return e}function o(A){for(var a=1;a=0||(r[e]=A[e]);return r}(A,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(A);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(A,e)&&(r[e]=A[e])}return r}var s=t.createContext({}),l=function(A){var a=t.useContext(s),e=a;return A&&(e="function"==typeof A?A(a):o(o({},a),A)),e},d=function(A){var a=l(A.components);return t.createElement(s.Provider,{value:a},A.children)},p="mdxType",m={inlineCode:"code",wrapper:function(A){var a=A.children;return t.createElement(t.Fragment,{},a)}},u=t.forwardRef((function(A,a){var e=A.components,r=A.mdxType,i=A.originalType,s=A.parentName,d=n(A,["components","mdxType","originalType","parentName"]),p=l(e),u=r,c=p["".concat(s,".").concat(u)]||p[u]||m[u]||i;return e?t.createElement(c,o(o({ref:a},d),{},{components:e})):t.createElement(c,o({ref:a},d))}));function c(A,a){var e=arguments,r=a&&a.mdxType;if("string"==typeof A||r){var i=e.length,o=new Array(i);o[0]=u;var n={};for(var s in a)hasOwnProperty.call(a,s)&&(n[s]=a[s]);n.originalType=A,n[p]="string"==typeof A?A:r,o[1]=n;for(var l=2;l{e.r(a),e.d(a,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>n,toc:()=>l});var t=e(3117),r=(e(7294),e(3905));const i={id:"circuitpython-ferramentas",title:"Instalando as ferramentas",slug:"/franzininho-wifi/exemplos-circuitpython/ferramentas",description:"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi",author:"Diana Santos"},o=void 0,n={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas",title:"Instalando as ferramentas",description:"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/instalacao-ferramentas.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/ferramentas",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/ferramentas",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/instalacao-ferramentas.md",tags:[],version:"current",frontMatter:{id:"circuitpython-ferramentas",title:"Instalando as ferramentas",slug:"/franzininho-wifi/exemplos-circuitpython/ferramentas",description:"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos"},next:{title:"Hello World!",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/hello-world"}},s={},l=[{value:"Windows",id:"windows",level:2},{value:"Instalando o Mu Editor",id:"instalando-o-mu-editor",level:3},{value:"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)",id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional",level:3},{value:"Linux",id:"linux",level:2},{value:"Instalando o Mu Editor",id:"instalando-o-mu-editor-1",level:3},{value:"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)",id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional-1",level:3},{value:"Ferramentas Alternativas",id:"ferramentas-alternativas",level:2},{value:"Franzininho WiFi: Configurando o Thonny IDE para trabalhar com CircuitPython",id:"franzininho-wifi-configurando-o-thonny-ide-para-trabalhar-com-circuitpython",level:3}],d={toc:l},p="wrapper";function m(A){let{components:a,...i}=A;return(0,r.kt)(p,(0,t.Z)({},d,i,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"O CircuitPython n\xe3o exige ferramentas espec\xedficas para programa\xe7\xe3o. Um simples editor de texto j\xe1 \xe9 suficiente. Por\xe9m, para facilitar e dar maior produtividade a codifica\xe7\xe3o podemos usar algumas ferramentas."),(0,r.kt)("p",null,"Recomendamos as seguintes ferramentas para trabalhar com o CircuitPython:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://codewith.mu/"},"Mu Editor")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://thonny.org/"},"Thonny IDE")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://code.visualstudio.com/"},"VS Code"))),(0,r.kt)("p",null,"Nesse tutorial focaremos no Mu Editor pela simplicidade e facilidade do seu uso. Abaixo exibimos o processo de instala\xe7\xe3o para os sistemas operacionais ",(0,r.kt)("a",{parentName:"p",href:"#windows"},"Windows")," e ",(0,r.kt)("a",{parentName:"p",href:"#linux"},"Linux"),"."),(0,r.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/BIs9uYHytJk",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,r.kt)("h2",{id:"windows"},"Windows"),(0,r.kt)("h3",{id:"instalando-o-mu-editor"},"Instalando o Mu Editor"),(0,r.kt)("p",null,"Para a instala\xe7\xe3o do Mu Editor no Windows voc\xea deve seguir os seguintes passos:"),(0,r.kt)("p",null,"Passo 1: Acesse o site ",(0,r.kt)("a",{parentName:"p",href:"https://codewith.mu/"},"https://codewith.mu/")," e clique em Download:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem1",src:e(2010).Z,width:"512",height:"84"})),(0,r.kt)("p",null,"Passo 2: Clique na op\xe7\xe3o Windows Installer."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem2",src:e(793).Z,width:"512",height:"203"})),(0,r.kt)("p",null,"Passo 3: Salve-o em seu computador."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem3",src:e(3716).Z,width:"1497",height:"884"})),(0,r.kt)("p",null,"Passo 4: Aguarde at\xe9 terminar o download e ap\xf3s isso clique em abrir o arquivo que voc\xea acabou de baixar."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem4",src:e(6782).Z,width:"326",height:"88"})),(0,r.kt)("p",null,"Passo 5: Ap\xf3s baixar o programa, d\xea dois cliques e ent\xe3o ir\xe1 aparecer uma tela onde voc\xea ter\xe1 que aceitar os termos de uso do software, clique na caixa de sele\xe7\xe3o e pressione Install e aguarde a instala\xe7\xe3o."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem5",src:e(2079).Z,width:"493",height:"389"})),(0,r.kt)("p",null,"Passo 8: Procure em seu computador: Mu Editor"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem8",src:e(2962).Z,width:"667",height:"630"})),(0,r.kt)("p",null,"Passo 9: Ao abrir o programa aguarde, est\xe1 \xe9 a tela de inicio do Mu Editor."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem-extra",src:e(1845).Z,width:"837",height:"663"})),(0,r.kt)("p",null,'Passo 10: Ap\xf3s isso escolha CircuitPython, conforme a imagem abaixo:\nse por acaso ele n\xe3o abrir, clique em "Modo".'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem9",src:e(5093).Z,width:"995",height:"617"})),(0,r.kt)("p",null,"Passo 11: Pronto, agora \xe9 s\xf3 se divertir!"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem10",src:e(394).Z,width:"512",height:"311"})),(0,r.kt)("p",null,"Passo 12: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na pr\xf3xima se\xe7\xe3o. "),(0,r.kt)("h3",{id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional"},"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)"),(0,r.kt)("p",null,"A seguir apresentaremos a instala\xe7\xe3o de terminal serial para acesso ao REPL atrav\xe9s da comunica\xe7\xe3o serial."),(0,r.kt)("p",null,"Instalaremos o terminal serial Putty para nossos exemplos. Fa\xe7a o download em: ",(0,r.kt)("a",{parentName:"p",href:"https://www.putty.org/"},"https://www.putty.org/")),(0,r.kt)("p",null,"No site, clique na primeira op\xe7\xe3o"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem1",src:e(4492).Z,width:"512",height:"249"})),(0,r.kt)("p",null,"Veja qual \xe9 o seu sistema. No meu caso \xe9 de 64bits por isso vou clicar na op\xe7\xe3o de 64 bits x86. Ap\xf3s isso \xe9 s\xf3 salvar."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem2",src:e(5294).Z,width:"512",height:"246"})),(0,r.kt)("p",null,"Ap\xf3s realizar o download, d\xea dois cliques no arquivo. Ser\xe1 aberta a janela conforme a figura abaixo. Clique em next e depois em install:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem4",src:e(1846).Z,width:"512",height:"399"})),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem3",src:e(3874).Z,width:"512",height:"399"})),(0,r.kt)("p",null,"Novamente clique em install:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem4",src:e(4653).Z,width:"512",height:"403"})),(0,r.kt)("p",null,"Aguarde e clique em finish:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem5",src:e(7148).Z,width:"512",height:"404"})),(0,r.kt)("p",null,"Pronto finalizamos a etapa de configura\xe7\xe3o. O pr\xf3ximo passo \xe9 abrir o programa PuTTy em seu computador, mais abaixo estarei explicando os primeiros passos com ele."),(0,r.kt)("p",null,"Como citei acima, abra o programa PuTTY"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem1",src:e(4172).Z,width:"512",height:"420"})),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem2",src:e(7582).Z,width:"512",height:"463"})),(0,r.kt)("p",null,"Ent\xe3o abrir\xe1 uma janela conforme a imagem acima. Enquanto isso, vamos at\xe9 o gerenciador de dispositivos."),(0,r.kt)("p",null,"V\xe1 em Portas (COM e LTP). Aqui voc\xea encontra em qual porta a placa est\xe1 conectada. Clicando para expandir voc\xea ver\xe1 Dispositivo Serial USB (COM3)"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem3",src:e(9114).Z,width:"512",height:"375"})),(0,r.kt)("p",null,"Agora faremos algumas altera\xe7\xf5es, conforme a imagem abaixo, em COM 1 altere para COM3 e selecione a op\xe7\xe3o Serial e clique em open."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem4",src:e(7456).Z,width:"512",height:"464"})),(0,r.kt)("p",null,"Ent\xe3o aparecer\xe1 uma tela, similar a um terminal. Pressione Ctrl + C para entrar no interpretador Python da placa:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem5",src:e(166).Z,width:"512",height:"325"})),(0,r.kt)("p",null,"Agora que a placa j\xe1 est\xe1 conectada, podemos enviar alguns comandos para ela executar atrav\xe9s do REPL."),(0,r.kt)("p",null,"Digite print(\u201cOl\xe1, Mundo!\u201d) e d\xea o enter."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem6",src:e(1262).Z,width:"512",height:"323"})),(0,r.kt)("p",null,"Executamos acima o comando print. Voc\xea pode testar outras mensagens trocando o texto que est\xe1 entre aspas."),(0,r.kt)("p",null,"Podemos tamb\xe9m executar algumas opera\xe7\xf5es matem\xe1ticas."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem7",src:e(4537).Z,width:"512",height:"317"})),(0,r.kt)("p",null,"Tamb\xe9m podemos ter acesso \xe0s fun\xe7\xf5es do CircuitPython para acesso ao hardware. Vamos ver quais pinos a Franzininho WiFi possui dispon\xedvel?"),(0,r.kt)("p",null,"Digite import board, d\xea enter. Digite dir(board) e d\xea o enter."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem8",src:e(5013).Z,width:"512",height:"323"})),(0,r.kt)("p",null,"Esses s\xe3o os pinos que trabalharemos para nossas aplica\xe7\xf5es."),(0,r.kt)("p",null,"Essa foi apenas uma experi\xeancia r\xe1pida para acesso ao REPL. Essa ferramenta nos ajudar\xe1 a testar c\xf3digos ou dispositivos rapidamente."),(0,r.kt)("p",null,"Para editar c\xf3digos maiores e projetos que voc\xea precisa salvar, recomendamos que edite no arquivo code.py"),(0,r.kt)("p",null,"Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):"),(0,r.kt)("h2",{id:"linux"},"Linux"),(0,r.kt)("h3",{id:"instalando-o-mu-editor-1"},"Instalando o Mu Editor"),(0,r.kt)("p",null,"Para a instalar o Mu Editor no Linux voc\xea deve seguir os passos a seguir:"),(0,r.kt)("p",null,"Passo 1: Acesse o site ",(0,r.kt)("a",{parentName:"p",href:"https://codewith.mu/"},"https://codewith.mu/")," e clique em Download:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem1",src:e(2010).Z,width:"512",height:"84"})),(0,r.kt)("p",null,"Passo 2: Clique na op\xe7\xe3o Python Package (Linux or Native Python)"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem2",src:e(2589).Z,width:"512",height:"208"})),(0,r.kt)("p",null,"Passo 3: Abra seu terminal e digite o comando abaixo, ele vai instalar bibliotecas do python, aguarde at\xe9 finalizar:"),(0,r.kt)("p",null,"pip3 install mu-editor==1.1.0b5"),(0,r.kt)("p",null,"Passo 4: Agora digite este comando:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"mu-editor\n")),(0,r.kt)("p",null,"Passo 5: Pronto, agora \xe9 s\xf3 se divertir!"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem3",src:e(394).Z,width:"512",height:"311"})),(0,r.kt)("p",null,"Passo 6: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na pr\xf3xima se\xe7\xe3o. "),(0,r.kt)("h3",{id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional-1"},"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)"),(0,r.kt)("p",null,"A seguir apresentaremos a instala\xe7\xe3o de terminal serial para acesso ao REPL atrav\xe9s da comunica\xe7\xe3o serial."),(0,r.kt)("p",null,"Instale um terminal, por exemplo, para instalar o picocom, digite os comandos abaixo:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"sudo apt-get update \nsudo apt-get install picocom\n")),(0,r.kt)("p",null,"Para acessar a Franzininho WiFi atrav\xe9s do REPL usando o terminal serial no Linux, o primeiro passo \xe9 conectar a placa Franzininho Wifi em seu computador e logo ir\xe1 aparecer algo parecido com um dispositivo de pendrive, conforme a imagem abaixo:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem1",src:e(5604).Z,width:"512",height:"288"})),(0,r.kt)("p",null,"Agora abriremos o terminal Serial e a porta serial que a placa est\xe1 conectada. Abra o terminal de comandos e digite o seguinte comando: picomcom /dev/ttyACM0 de enter."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem2",src:e(3816).Z,width:"512",height:"185"})),(0,r.kt)("p",null,"Agora pressione Ctrl+C no teclado e ent\xe3o aparecer\xe1 >>>"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem3",src:e(5151).Z,width:"512",height:"350"})),(0,r.kt)("p",null,"Pronto, estamos na placa Franzininho WiFi e podemos enviar comandos diretamente para ela."),(0,r.kt)("p",null,"Digite: print(\u201cHello World\u201d) e aperte o enter (voc\xea pode escrever qualquer coisa nas aspas, ent\xe3o aparecer\xe1 o que voc\xea escreveu:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem4",src:e(2305).Z,width:"512",height:"350"})),(0,r.kt)("p",null,"Note que estamos executando comando Python atrav\xe9s do REPL."),(0,r.kt)("p",null,"Agora faremos uma opera\xe7\xe3o matem\xe1tica, digite um numero, escolha uma opera\xe7\xe3o matem\xe1tica e digite outro valor, aperte o enter e observe o resultado:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem5",src:e(4598).Z,width:"512",height:"197"})),(0,r.kt)("p",null,"Agora digite o seguinte c\xf3digo no terminal:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"import board \ndir(board)\n")),(0,r.kt)("p",null,"Ent\xe3o aparecer\xe1 o conjunto de pinos dispon\xedveis na Franzininho Wifi."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem6",src:e(8943).Z,width:"512",height:"455"})),(0,r.kt)("p",null,"Esse foi apenas uma experi\xeancia r\xe1pia para acesso ao REPL. Essa ferramenta nos ajudar\xe1 a testar c\xf3digos ou dispositivos rapidamente."),(0,r.kt)("p",null,"Para editar c\xf3digos maiores e projetos que voc\xea precisa salvar, recomendamos que edite no arquivo code.py"),(0,r.kt)("p",null,"Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem7",src:e(2716).Z,width:"512",height:"288"})),(0,r.kt)("p",null,"Agora veremos o que \xe9 poss\xedvel fazer com o CircuitPyhton. Bora l\xe1?"),(0,r.kt)("h2",{id:"ferramentas-alternativas"},"Ferramentas Alternativas"),(0,r.kt)("h3",{id:"franzininho-wifi-configurando-o-thonny-ide-para-trabalhar-com-circuitpython"},"Franzininho WiFi: Configurando o Thonny IDE para trabalhar com CircuitPython"),(0,r.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/Yetzf8qK4II",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Autor"),(0,r.kt)("th",{parentName:"tr",align:null},"Diana Santos"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Autor"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data:"),(0,r.kt)("td",{parentName:"tr",align:null},"16/09/2021")))))}m.isMDXComponent=!0},2010:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x00-Editor_MU-ba3cd8ace939ffb0580dccaa4d0cdf53.png"},793:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x01_download_MU-1e512cd327051fda3b809c3dca11e0e1.png"},3716:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x02_Salvando_MU-627c3187f23bd43d9b79bc1029a65d2c.png"},6782:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x03_Baixando_MU-cddf32749baf5f161bc03512ba6509a6.png"},2079:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x04_instalando_Mu-editor-fed42a430dfd8203d44422123c053adf.gif"},2962:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x07-mu-editor-bc3568dc373360e74c594f28cb4dbded.png"},5093:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x08-selecione-modo-CircuitPython-cb06a6b862933996fb94dc153d7d44aa.png"},394:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x09_Interface_MU-9c35d912dbd0ca1a16f4e0b523982bac.png"},2589:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x10_download_MU_Linux-a46194baf736d62391b0d282854d3a0e.png"},4492:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x11_download_PuTTY-a2fd196a5e5149dca4811e220668539e.png"},5294:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x12_download_PuTTY-f5a2bf87198362425fdf0e409182d301.png"},1846:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x13_instalando_PuTTY-b45a58274db088bdc65b073e7db5cf31.png"},3874:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x14_instalando_PuTTY-d24ca496b48bc5fa2d87cf80ced6d87c.png"},4653:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x15_instalando_PuTTY-8a2fbf9577e279e73d02a14c70f289f4.png"},7148:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x16_instalando_PuTTY-8bb87629f700be7f5995b4ba08a175b5.png"},4172:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x17_abrindo_PuTTY-20d9bdb1e80562c28eaba1eb272e4284.png"},7582:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x18_programa_PuTTY-915f0658ce66350947a7735b23620b09.png"},9114:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x19_portasCOM_PuTTY-7a25cf5c79c7671f146598766973b79f.png"},7456:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x20_portasCOM_PuTTY-1cc40445920776386501a52dfd3afc01.png"},166:(A,a,e)=>{e.d(a,{Z:()=>t});const t="data:image/png;base64,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"},1262:(A,a,e)=>{e.d(a,{Z:()=>t});const t="data:image/png;base64,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"},4537:(A,a,e)=>{e.d(a,{Z:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAE9CAYAAAB9dNoUAAAABHNCSVQICAgIfAhkiAAAIABJREFUeJzt3Xd8VfXh//H3HbkZZDKSEPYKgbCXIFumsmSoKCCKaFXcXylqtXXU1tZq9dfW1tZWRNqqVSytUHEAMpVNAiSElQDZZO9x7/n9EcyQCAEhKJ/X8/Hg8SBnfu7l8eC8cu6559gsy7IEAACMYr/cAwAAAI3P2dAFs7KytGbNanl5OSXZZVlSYGCQJk6ceAmHBwAALoUGnQFYtWqVHn54kZo166/y8khVVDRVWZm3li9fptGjR6uwsPBSjxMAAFxEDQqA3NxcWVa24uO7a+7cIM2Zs0r79xeqU6eOWr9+vdxu96UeJwAAjcLj8ai4uLjePyUlJbocl85VVFR8637PNu9sGvQRgMPh0KlTJTp27Kj+7/9+pe7dDyg2dqJcrqoDv81mq2dEhdq7e4/ySj3yDmilvn07ySUp58QB7Tt2SpbNpQ49+qhNiI8sd7kOxe6RX4feah3kXb2J3OSDSioJVu/OYcpK3Kd9iVnybtpK/Xt0llcD0sVTXqS4mN3KLrHkcAWpR/9eCqznFZ+M+0pHMsvl7e2Sp7Jcla4QhXkXKz2vTC5X1TS3K1gt/KXgiEiFB3lLlltH4+MV2j5S/r5eDXkbAQA/ABs3btQLL7ygqKgoeTye6ukOh0MfffSR1q5dq9atWzfqmD755BNlZmZq/vz5dY65KSkp+tnPfqZXXnlFTZo0Oa9tfuthtLi4WNnZ2SooKFBRUbGKijbp9tuj1aVLsTZunKR+/YLldle9MUVFRXXW9ZSm6Q/33KxlMSlyOh1K3r5KB/OkpF3/0rxbfqNsy67yrMO6Z8Ld2ldYKVtpnl7se5WeXxFbsxF3gVY+H6U+f/pSkls7P16tQh9p+3tPa9m64w16caWnEvXEw79TicdLh/77Kz32189UXM9yNtmkyhL97t7B2pOYJ4e96s21eyr026mDtSexQE6nXclfvq1fv7dVHkklp7bpjuv/ovyKBl9GAQD4ASguLtbzzz+v3/72t3r11Ver/7z88stasmSJKioqGn1M48ePV35+vpYuXVo9LSMjQ/fff78eeuih8z74S5Ksb/HMM89YkixJ1quvyrKsmj+nTsmKjh5hPffcc9bixYutBx54oNaabmv7P56wFv3pS8tda2pFSbK1eNhIa21CXvW0pHW/t6Y89b5VWJBjPXezrEFTf2wlFFfNKzzyuTWzo6xrnl9dZ1zHN71tzfz5ym8bdh1FyfutBQ/81ir2WFZ5zl5rzswlVkx8grU7JtFyW5ZVduqQtWXXMctjWZblLrF+dedEa8fRvFpbqLSen+lvbT9aUPVT9hHrgVmLrONlFdbWP95h/fKjhAaNAwDww7F69Wpr+/bt9c57/fXXraNHjzbyiKpUVlZar7zyivXWW29Z6enp1uTJk639+/df8PbqPQMQFxen1q0j9PHH2/Tqq9GaOLFqsePHpdmzB+qf/3xEU6YMVUVFhRITExUeHl6zcnGKPntvj2bO6F3n9ELZoS+1u+9s9e4SWD2tzeChspau04lcydlhseb1KdPazQmSpK3/+VCjHnxZAc6qjxlKCzJ0JHaXVq+O14LZQxpeODab7DapOOeUmnRoq8LcWL318X5VSipJ/kqvfrJHZZJU6ZbH7a57PYPHLbenqHqaI6StbpgUpOV/e0/vJXTS3LFdGj4OAEC93njjDQ0YMEBjxoyp82fEiBG6/fbb65yGbyzW9/AWOQ6HQw888IDS0tIUFhamF198Ud27d7/g7dV7/rqsrEzh4c0VEjJQDz74kJ5/fqlat26t/fvL9e67nykmxiO7vVRBQUFavHixJk+eXLOy2yN3qZ+8XHW3aZVVSt4uOWpPtNvkVemRLKnS46MhkyfpnU92Ka97uf55IFI/vaed3l9V9Q9fmHNSO3ftVUnTQHlOFUmdWpzeiEdHdqzWBx/vkeVqqxvvu1kd/E5/Jm+3q3TDm3rxV5WK27hHc194Xq2cO+TycsgmyWb3UoDrfE7hOzX4uhv0Uq9xmvjeFrX2PvcaAICzW7hwoRYuXHi5h/GDkJaWpuTkZD311FPasWOHunbtWv91eA1Q79GvamMOVVam6e2379S8eZ8qMnKI7r//r3rkkfZ65plnVVFRIYfDocDAwLorNwlQRLcyJSTkadhAn+rJrlYd1TzpX8oulIL8q6YVHD2q7Ak91SzAo/LSSrXs2FP9Kj/Un1Yka9CcqWrmdVClVtVv383b9tON8/upMuETDbv3TfX97Bm1kiTZ1ab7SN3RfrBkcyrAp9ZLsjxy9b9ec2+9XSH3+ikowEcnYrdKdrvskmwV5Sq1+dV+5ed+w5pHaeadU9SxZfNzLgsA+GGy2+u/RO7bpjeG5ORkPf7443riiScUFRWlV199VUuXLtVtt912QRFQ7ytxOp3asydGqal7lZJyi1580dKjjx46Pdcmj8ejkJCQMw/+kmQP0eT77teK+Q/r0z2HdCozU3Fb1+i47wA9dLOXnv71cqWkZ+rkob16ZuELWvyz2WrhVamiwmK5XU01ZlxPPXb/Rl0V1V52T4UyKiQpVVs3xCsrO01bd2xV77GD1aLWLl1+AWrWvLmaNQuWy17zJlgej0rkq+bNmyoooCpGfP2aae/GLTqRlqSPlr2pPPvXp3ksVRTnylPntI+l8nyr7jSPJFXI8nz/Tg8BAL47y7KUkZGhU6dOKT09vfpPdna2MjMzL8uYkpOT9ZOf/ERLlixRVFSUJOm+++5TQUGB/va3v13QxyT1ngHYs2ePunaNUmior0JD71FycpISEr6Qzeat5ORkBQUFqays6ity9WnRcZze/G+w3v/3h9rrkUK6DNecIVLn6U/K4f2B/rFsqdxeAZqzdLX6tQ+RpzRf182aKH8vKXjAtVq7qpe6hnnJ4e6s58c4JctP2Yff1V+/qpBvxCD94oEJqn/Pdbn8m2nuzKvkrJU5zTsN1wt3Z+u9N1er34zHtcjWuupNcLg0Yu4jCgv2rVnY5tTo+5YqPKTmTIbsDnUbM1shtacBAK4YnTt31sqVKxUXF3fGPC8vLwUHBzf6mE6cOKHFixcrOjq6eprD4dA999yjlStXqqysTL6+vmfZwpls1jeudHC73Zo5c6buvfdepaWlyW63Kzc3Vzk5OSotLVV2drYef/xxtW3b9uK8KgAA0OjOOAPgcDg0a9Ys3XXXXUpKSpLNZlNwcLB8fHyUmpqqdevWcfAHAOAH7owzAFLV5x95eXn1XlQQFBTUKAMDAACXTr0BAAAArmyX7/sMAADgsiEAAAAwEAEAAICBnFu2bLncYwAAAN+BZVny8vJSv379GvwcA5uqnvgHAAB+4PLz8+XxeBoUATzMHgCAK0DtuwQ25NkAXAMAAMAV4HwfCEQAAABwBfs6DL4ZCAQAAABXKJvNprKyMh06dEjl5eV1IoAAAADgCvT1wf/gwYMqKCg4IwIIAAAArjBfH/zj4+Pl5eWlbt26ybIsJSQkqLy8XBIBAADAFamoqEgOh0NdunRRkyZNFBkZKY/Ho5KSEtlsNr4GCADAlcayLPn5+SkyMlJOp1Mej0cul0tdu3atnk8AAABwBfLx8ZFlWdU3BbIsS97e3tU/8xEAAABXoPruBlh7GgEAAICBCAAAAAxEAAAAYKDvfQAMGj1G0WGXexQN133kSPVsG3S5hwEAwFl97wOg75Bhim7V0KW95N/EddYlRkyarVlDaorisZf+oodmD9U9T/xSz/74pjrLtu/aU317dVeTWtNG3XKXfv7r3+iJBZPO2HbktDt07ZDusuXlNXTAZwht31Ftgmp9OcPLT506dla4//k95OGbmvUaoieee0G3DA0598Je4Vry7OOKblN7YoAefeH3+r+5Y/Wjx36hnz9+S/WccTferemD+UIJAPyQ2L0jOuuGObeovsPm1Dm3qUfbM6cPnXazxg+NvOSDk6TXf/GM3tvVwIUjRmnuggnfPr/lKI0e0l7Hd6dXT2oR3k6usmw1D4tQM29P9fTpDzyo+dMnatz4KXrk0QfVL6Bq+vp//FlP/n2TLEfgGZtv7kjThy/8UTEXfvzXoGvn6pWlf9S0jlU/37vkZT371J3qEHjuZzufTVbMVq2NyVRgYNMGLO2nsKbhCvCqO61paFt5e0rUNCxCLbzd1XNSCrLVY/SC7zQ+AEDjcpalHFa2baIee/bH2rP+C/1n7VfVMw+llGrG3U9pwN7devfdj1RyenrCwVTNvukmRfc5of+8uVRHis++kxFzl+iGHl7anlui9k0CVJqepE/efVN7MqXBUxZo1ujeOvTVKvmEDlaQM1lvv/5XHSvprUVPXq/2Tby1cdkT+s+Bqm1Nmb9YQ7rYdSDXS92CXUqM/VR/eXejmkYO1x0Lr1ePMIdCn+onhzNfH7/2O21Nr6wex+hJg2RLO6RtpTVjKyxIVW5GqsqysxWYVyBJ6j71LvW05euZF96UJPW7aZHG33mTdr38btVKlkceT90DcvcRE9U/uo+a9uqp9GNHte6t93Tw/P89dPDATu2ODtfgGTO18jd7FNHcWyeO7dLWlGH6+fPjtXnN6/rfkQ5actdEKXWXfvWntVq0+GH5eeWr1N5EYU63dn7xjj5cd0SSSxPmLtSgbmHylCQrtchP1v4KSVJE3xGaMXakQv3tyjweq/ffXKHUr/vHsqsst0yqqD2ychXkp6kgO0s52dkKK8yvnrN/3UHNuHqWRrWT1iddwIsGADQ6h6Snj8Vs0xcnpAkjx2rsyL7Ky9yl9CyPTiXu08bP49R76FhNmnyNfK00HU7KUvGpRG37YoOC2g3QpBkz1ba5R3sPJH7rTpJijmjgpAnK2/Uv/b/X3tPmtAjdMGegtm2J1cmE3bI6jVO0f7Ze+P1rOuj2U0hlrjLyj2v7hi9khfdTi5It2nuialsJez0aO7mfkv77U/1h+U6NmDNH+ny9DmUd15btpWrZ4pheevEvWr/+S50s8tQZx9TpN8iTuFlb9idXT6uoKNCunXE6mVOh5IQYncgs0oQJA7Rzy791IqWqbFLj0tSn/2B5jmxVSomk8CgNi/DS5t37qreTmXRY2zZs1BfrN6lV3+vUK7pcO2JTzvsfpHVUTwW6k+UT3FNdBg5UYNZupZa5tf2r1fIJ7SCHLVcJO7drc0aGenXurB3btmp7UYRuGBKqD598Tu8c9dHU6SN0cP1W9Vt4uzqWJ+iVV9/Uxg2FmjB1pDzJG7Qtp6NuHN1Ha37/W324/gslh16lW4aEa0vM4apB2IM1sE+kDsdsUErB1yMrVVlZvvYf2KvE9FIlH4rV8YzCqlmV6eo8bLxC3YnaeSjnvF8zAOC7Cw0N1R133FHv9//rU3MNwOHN+n8v/1cl9va68aaFqvnYPVNv/fk3ij/p1Ljr52hYrc/j17z/hv6zOVl9R03X7NGdvn0vrlCVJcTo0w9jq34+vlp5tuYacnq2o6JQ+zZW/Xadtn2zYpOrjzrydtil2q8lyFvJyTFasUOS8pWclaPg0KpZPmG+cjq9v2UQgfJyFKswp6DO1M1rPtfxfOno9rXavD9dklOyrDpvjWynJ53lY/gJN92tnz/9rJ595lmNig6W5biwz8RtNpusykxtTirX9Gs66PPXNslyOiRJTof99ECkZj6u6r939K3Q/oTtipWk458qq7BCQZJ6BLm0fvO601s+qL2J+apwe6lDr06y+6Yq8fSc5DWbVNihnbp+PQhPgeLiDyi7sO7Ytq/7QodSKpW4Y502xqbVmVfutsvLh+sAAOCHovp/7NE3LtTIri11NH6VXv7XZ9ULdBo5WTcNH6TCjAN69pF39PXH2/bI/rpn2mSFeDL05m8eVEziWfZSXimvlq3VtZuUEidJPeS0F+ro6dlllR75lX3bqm5V1jplr7xKud01p/XdllvlWVV/t+x2OZ1fv6QAdY5sqsMJX5+TzldeibdCW4ZKijvLYCsVk2zTtCETtWXHMklS7+mTFOCTph2nTi9SWCF3Za2DXYvRiu7m0JNP/1SSNGbOQrWy1Tr70Geafj17sL5876dasavOefV6X69Hdq1d+pyKE3vry4oARXuqXq9ls8mmqr93bN1HgX5Vfy8t/8Z74nGrQlK6p0I92nTWkaSq3+wjmvvIlpinY6l58urauWanUd0UcCq75iMLT6a+2LFOeTVn+c+hiYK8KpWfVdTQFQAAl5nTt/kgzb95qDxK1Z9/+ZxSqo8jrXXLbderWViZPvvgD9oW9/WFc06NmzpP0dH+OrLzI/3hk50N2I0lZ6ld/ac/rF6TLLmLypTwyQqlSxo960ca16etHK0fVru8Em3f9F9t2pWsbmPmaHyP5gpt11lenR9V6MAMffKvZWoxZqB6dmupiYM26+OMdhoQ1UN5N0/U2uUfqyz1pNyuqVr86IPy+NpUfOpQrQCQtuw/rDmd2kv64qyjjVmxXF0fulNP/fgRlVTa5WOv1Kdv/0lq0lGzZ09Vq/Dm6tzCpYebtVP2gc/01seHlOkZrR8veVQVJTb5t2ylAJuP2mibTkiaMnKAwgJK9cU5Dv6SNKR3tPq08VXJ1fF6d/1ezVr0tHpG+WrIoI3an5qlWSOmKypynIKaBSk4MECDW0qRw/urd4dC9bR9Ltfkm9UnKloa1VFLl8Vq/txJevBqu2yOIvkEORXWZ5pcnyxTfJcWuvu+B+XnZVNJWYG2r19VM4iA/vr1X+7ViicW6+PY7HP/83bqpTCvCm3cevLcywIAvhccsmxPl+Sc0P9WrVdBnY/MLVnuIn20YpWSTxXVmS5JMZ+t1I641AbuJkQDowL097dXqbCsWElx27Qptmpdu9OllIPbFJeYrvTUZCUdT1J+YYU8squyMFsHY3Yo7liq0lOTdSwpVSUVJUo8mKDk5GTlFbmVd/KoDiWeVHpmtlSapp3xqfKUFeh47Db9+6PtdUaRGZeq6LEjFJq9UQkZZxtvhQ58+aVySqWstESte/cDxRVJstyy2906deKgdsTEKT09TcknkpSanaqY2JOyyvJ0/EiM/rH8v8ouyFNacrpKJc2aPkPH172pdQmnzrZTSVJ5Sb4OxScqOTVZGbllctjKdTBmv5JT05S4Z7fS88qUm5Ko/7z9rmLTC5SdmaLsvHwdjj+s5IxUFbhtOnnwoI6eTFFmaoL27smQ3SrU8f0xeveDDcrJz1VORoYOxu9XUaVdeafSFLdtrbYfqXWgLz+lQwfitW/fCZU34KOkUROnqYU7Tiu2Jpx7YQDAJXG+1wDYVPcT9kti8E2P6LZRnZSasFsrlr+h2MxLvcdvFxo5QC1tR7X3YAN+s70o/DRh7HDtWLtGWZ5zL/1D1OfqCdLhNdpz1qgCAFxKPXr00JYtW+TxNOxg0ygB4BPYTF52jwK9ncrIyFTFJd8jAABmOd8AaJTLtkvzs1QqqeCcSwIAgMbwvb8VMAAAuPjOGgBB7XrquunXa9zVveqZ66VxP3pIcydFX6KhfRdODRt/rQZ2acB97yV17dtPHVsHXOIxAQDw/VEVACEtNP/uB/XUE4/p3pnXVM/0DQhRRLvOGjduinr6112xx+x56uxO0vJV+y9451ETbtMvf/ETje5adaObDoNn6tlfPKtbx0Zd8DarVCqi12hNHdm/QUtPv/0OTR7d/TvuEwCAHw671FIPLnpIrtxdeuOPf1dmyxF6bNFkSVLavg1645XXlJhaKC/fmpVszTqqvbNcpZ4gXT9hwAXvPH5NnHy7RWvqtTMlSYOHjVZkuPTBnixdf8PNGjWwjSR/XTdrvmZPGylJunr8DE2fPEz9J83WXQvmqXdorQ369dAN8xfo9lunas++eOUU11wIMXjCDbpj4ULNnjzyjHHkpJTIk5N+xnQAAK5U9s7DB8nK36e/vLNRqTkn9K/fP62CkF4aHX56CUdz2e1174HrtBzKz0lTSvIJqeUwPXjj0AvcfbkS4mNV2qybBve9RpHNCnTgwEmVVmaq0hWu3oO6SypUbn6uOvYfpEhJ6cV+Gn3tLA1s7VR6oZem3v+ImkpSRE/deudYWeVZyiqzacqwXmrqW/XEumHXzlVUC48yMzJUFtReC26o+yjfykq3PLXupAcAwJXO2TwgUNk58XUmJiWVK6KDpLT6V6rITlfb8Alq1cxXNstffo7w+hc8Jy/ZS05ozYG2uu/RO5TwxUod9w5UhLe0I+6kWg6q+r7glk9WqlvvB+QlKWFTkk6Oaap/v75caZJ82i9Wf28pr18X2Yv36f1/Vt3GuK8zWlP8/CS1Uudu/lr/8vLT975vp3sfmqgBEdKO08/qycjIUFDe+T+4BwCAHyp7VmGBmobUfZBPu3beSkk8/YPbI1lSzdcKXZrz8CL55Mfrk9WrtDpmv3Ldtb9z6FTPfsM0OCqsAbu3ZLN7af37f9WhzJPasHGPHHbJY0neTodk1WzX7rTJI0kBdhXlZ1a3ieUpk+WRXA5vuStKqpfPK6lQ1bCC5OdnV82jBrJV6mWTj8uvesp/l72k5Vuu0Lv0AABQD/uhDV/JEdRLd9wwWJKvZi56WkG5e7UuVXJ6+0gtmsjl45JvoOTlJUltFBTi1p59O7V7n0f9+/RTc78mNVvsPlwPPPawhnby+5Zd1uYrH29ftVa6nnloidbHOeTr7Ss/Pyk3r0hNmraRXdK8+3+iPm2aVj2Mz99bPj41FyT4ePvIN1zadCxJTUL7qmekXc7ITrruqjYK9rUkHVBKordGTuwmSeowaowCs/K1M7G4ehsLf7pEN08b+J3fTAAAfigcUuHTX+7aqT5XT9X0a0fJkbRJLy1dI0m67tZHdMvYvvIP8leHnsM0sFNzbd61WTtKIzRv2hSNGdJZB7fGKLhTe/nnHNORtAINm3izBvmf0I9/t+ocu5aumzdN3cJbq2OotCX2qK5bcKt6tAlT8wCnNn22WqE9R2n2pGtUtn+10rwjFR6Yr7Bu/dSzQ0sFVqYoLXCgJlzVQ4GBAdr68Sc6lhus62fdrGuiW2vPrhi1iOgm16ktWr32S3UefotunDpRnbzz9NYb/6xzU6L+o4arIiNRsfHJl+htBgDg0rrszwK48UdPKDh5pf780YV/PRAAAJyfy34r4Pde/8XF3iQAALjIuBUwAAAGIgAAADAQAQAAgIEa5XHAVXvqrB/dM0vtwnx0YNNKLf94d8083w6aNWWEtr33lo5/Y7XoMdM1Y3RfOXKz9P7fXtW+7EYbMQAAVyy7d+suunn+rWrudebM6fMXqn/kmdOHz5ynSaN7nMdunJq76Bod3vhXPfHk03J0HqwhfZpKkvqMna7rr+mliIgOip46SSNG1Tx5sNekWzU8vImee/Knevo3HPwBALhY7GUnDymlzE/3PLVEs64dUWdm7JFcjZv/pBbOmaHaN/uN3X1M7YZer0fuX6heLRuymxDZKy0dPZopScqrqJDNu+rxu/E7dikux66uUa3VsiJHG7YdqFrFt5X6hji1I2a/Jk8eqy4N2g8AAGgIh6Snk/bt0IZjlRo1ZJTGXTNA5UXHlJxWpOzjB7RpbayiBozU2KnjFOxdoINH0lSac1zbN2yQX0RPjb3uBnWOcOlA3GG5v/WOAsU6Zo/QTdMnqf/VV8uWeUJr1myTR1JlaZ4GDrtWLUK81KQiWxu+Oh0ATVpp2txJ6hHmJ5szQOEdW6ok7pCy3I3zxgAA8ENyvjcCqrkIMPErvfantarwaqtrr52qml+4c/SPN19RYqZLw8ZN1pBav4l//u+3tG5vlnoMGa8pQzucZTe+mtqnmbb/+x299tK/5N00TMN7N6uaZWunypSdemrJi9qdU6Ywx+lVHG3UPsyhD379mv74lzeUmumrNkM7NvBtAAAAZ1N9EeC4OXdrWMdmiotZoXdWbqxeoNvY6Zp1dV9lHd+lpxZ/WP1QHf8eQ7Rg8kT5Fx/Xn194RPFnfZheqHwlnTyeKkk66S6Qy6eFpCzJStJnXyRJkj764H81q2Qf0PEDV8vtL6lQCgoMVGFuyRlbBgAA58/pFzpYt90yVOXlSfr9c39SZvWstpq3cIaCQvK16u8va9eR3K9X0cTpt6lbV2/Fb/tA/1sb04DdJGnzwSJdd88iBbp8VJSSoA9i4s+xTrL+vu2oZix6UuOd5arIPax//iP1Ql8nAACoxebwDrU6tvLToaOJ35jlp85d2urwoW8eqG1q3b6rSo7HK+s8n6Dbulu0wnydStq/V6fKzr28JIV36qFWgZbidu9X8bkXBwDASOf7LICL/jAgAADQ+M43ALgTIAAABiIAAAAwEAEAAICB6gRA20HDNaRP3e/ad+w9UnPmzNE1A1o36sAAAMClUysAeure+bdqypTB1VPaXj1cEwZFyuFwqGPf6zSuOycMAAC4ElQf0afdOU4FOSkqKC2vnnlV9+5KOPI/LVu2TNtP5qrpiAmXZZAAAODiqgoA35HqEu7W5xsPym05qmfuPpKq5iG91L13LwU7Xcr8qiE3/QEAAN93dkm69YFxqti5QvvKbLLVmlmZn6kmIa101dBh6trWR87irMs0TAAAcDHZpSA1sUkRQxbosWkj1bN7Hw1rUjVzYI/uSor7UG++9po2J6Sr1bBRl3WwAADg4nBKefrjC09KkqIn3aEZvcq0qahqZkpWido066bw8CNq28Sl3NTkyzhUAABwsVRfBBjae4jG9e0gb5/mGtLKJUna/NF7yvDvooV3LlCEI0Mfrt512QYKAAAuHp4FAADAFYBnAQAAgHNyNspe5kkKVN1zDU5JX0ra1igjAAAAtTROADwvqU09018RAQAAwGXQOB8BuM9zOgAAuKS4BgAAAAPZvVtHas7tt6ttszNnzrj9Rxrcy/eM6SNm3qqp4/s3wvAAAMClYC87maCkQqdufeBxzZ0+vs7M3fEZGjHr/3TvglvU0afW9J2H1LL/eC1++F4N6dLIIwYAAN9ZzX0A2vTTHZPHKjzYo/Wf/kObd6SXF9H+AAAGhklEQVScXiRAs+bMU1SnFjqwfZVW/G9H9crDr5utYf17KCvxS/39nY9UVPEtezkmqX0901+S9OhFey0AABjrwu8DcGKX/vruVlW6WmnM2GsVXj2jQO//fZlOZrt01agJGlwzQxtXv6OtcTmKGjBaEwa3v1ivAQAAXGLVXwOcOO9eXd0uWHu3vaMP/vdV9QI9JszSjMG9lX54i5b8flX19KDeQ3X7pAnyyTusV3/2kpJyG3fgAADgwjkDwodpwdyhKiw8qJ///DWVV8/qoAV3z5Kff6ZWvPGU9lU/B8ipyTfepa6dbIrZsFyfbkq4LAMHAAAXzmZzBFjNAmw6lZv/jVlOtQhtpsyM9DNWCm4WrtystIbvhWsAAAC4pM73GgCn5S7QqXpP31fWe/CXdH4HfwAA8L1zeW8EZLusewcAwFiN8yyAOyX5qe7DgByS9jfK3gEAwDc0TgB81ih7AQAADcSzAAAAMBABAACAgQgAAAAMRAAAAGAgAgAAAAMRAAAAGIgAAADAQAQAAAAGIgAAADAQAQAAgIEIAAAADEQAAABgIAIAAAADEQAAABiIAAAAwEAEAAAABiIAAAAwEAEAAICBCAAAAAxEAAAAYCACAAAAAxEAAAAYiAAAAMBABAAAAAYiAAAAMBABAACAgQgAAAAMRAAAAGAgAgAAAAMRAAAAGIgAAADAQAQAAAAGIgAAADAQAQAAgIEIAAAADEQAAABgIAIAAAADEQAAABiIAAAAwEAEAAAABiIAAAAwEAEAAICBCAAAAAxEAAAAYCACAAAAAxEAAAAYiAAAAMBABAAAAAYiAAAAMBABAACAgQgAAAAMRAAAAGAgAgAAAAMRAAAAGIgAAADAQAQAAAAGIgAAADAQAQAAgIEIAAAADEQAAABgIAIAAAADEQAAABiIAAAAwEAEAAAABiIAAAAwEAEAAICBCAAAAAxEAAAAYCACAAAAAxEAAAAYiAAAAMBABAAAAAYiAAAAMBABAACAgQgAAAAMRAAAAGAgAgAAAAMRAAAAGIgAAADAQAQAAAAGIgAAADAQAQAAgIEIAAAADEQAAABgIAIAAAADEQAAABiIAAAAwEAEAAAABiIAAAAwEAEAAICBCAAAAAxEAAAAYCACAAAAAxEAAAAYiAAAAMBABAAAAAYiAAAAMBABAACAgQgAAAAMRAAAAGAgAgAAAAMRAAAAGIgAAADAQAQAAAAGIgAAADAQAQAAgIEIAAAADEQAAABgIAIAAAADEQAAABiIAAAAwEAEAAAABiIAAAAwEAEAAICBCAAAAAxEAAAAYCACAAAAAxEAAAAYiAAAAMBABAAAAAYiAAAAMBABAACAgQgAAAAMRAAAAGAgAgAAAAMRAAAAGIgAAADAQAQAAAAGIgAAADAQAQAAgIEIAAAADEQAAABgIAIAAAADEQAAABiIAAAAwEAEAAAABiIAAAAwEAEAAICBCAAAAAxEAAAAYCACAAAAAxEAAAAYiAAAAMBABAAAAAYiAAAAMBABAACAgQgAAAAMRAAAAGAgAgAAAAMRAAAAGIgAAADAQAQAAAAGIgAAADAQAQAAgIEIAAAADEQAAABgIAIAAAADEQAAABiIAAAAwEAEAAAABiIAAAAwEAEAAICBCAAAAAxEAAAAYCACAAAAAxEAAAAYiAAAAMBABAAAAAYiAAAAMBABAACAgQgAAAAMRAAAAGAgAgAAAAMRAAAAGIgAAADAQAQAAAAGIgAAADAQAQAAgIEIAAAADEQAAABgIAIAAAADEQAAABiIAAAAwEAEAAAABiIAAAAwEAEAAICBCAAAAAxEAAAAYCACAAAAAxEAAAAYiAAAAMBABAAAAAYiAAAAMBABAACAgQgAAAAMRAAAAGAgAgAAAAMRAAAAGIgAAADAQAQAAAAGIgAAADAQAQAAgIEIAAAADEQAAABgIAIAAAADEQAAABiIAAAAwEAEAAAABiIAAAAwEAEAAICBCAAAAAxEAAAAYCACAAAAAxEAAAAYiAAAAOAKVFlZKY/HU/2zzWaT2+2W2+2WRAAAAHDFsdlsKigoUGJiYvXPHo9HR48eVVFRkWw2GwEAAMCVyNvbWzk5OUpMTFRlZaWOHj2qwsJCuVwuSZLzMo8PAABcJDabTTabTZLk7++vqKgoJSQkqKioSJWVlYqKipKfn58sy5JTUublHS4AALgYfHx86nzu7+vrK5fLpWPHjqlbt27y9/eXZVmSpP8PhTGC2N2Ah9AAAAAASUVORK5CYII="},5013:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x24_import_board_PuTTY-df7b0aa097c0c1401a4eef05125f0b68.png"},5604:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x25_Abrindo_CircuitPython-fb8b73b9a545ac844c7417339ae1a3d3.png"},3816:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x26_picocom_CircuitPython-98bf26e28bd6b7844fd511a9fb03d515.png"},5151:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x27_picocom_CircuitPython-875a98e0cc370a46b3b7fd5570ea2561.png"},2305:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x28_picocom_CircuitPython-875a98e0cc370a46b3b7fd5570ea2561.png"},4598:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x29_picocom_CircuitPython-b38e05a5af6b1d093d1104121738c9d2.png"},8943:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x30_picocom_CircuitPython-e811b70d31657093cf5e7b9543204f48.png"},2716:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x31_picocom_CircuitPython-4e4bbca646ac4c84260448666800499d.png"},1845:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/tela-mu-editor-048cc19129e3e39e76455b7a837ae9e1.png"}}]); \ No newline at end of file diff --git a/assets/js/032edc05.e046e386.js b/assets/js/032edc05.e046e386.js new file mode 100755 index 000000000..d40a2230c --- /dev/null +++ b/assets/js/032edc05.e046e386.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1288],{25444:(A,e,a)=>{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>s,default:()=>l,frontMatter:()=>n,metadata:()=>t,toc:()=>d});var i=a(17624),r=a(95788);const n={id:"circuitpython-ferramentas",title:"Instalando as ferramentas",slug:"/franzininho-wifi/exemplos-circuitpython/ferramentas",description:"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi",author:"Diana Santos"},s=void 0,t={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas",title:"Instalando as ferramentas",description:"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/instalacao-ferramentas.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/ferramentas",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/ferramentas",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/instalacao-ferramentas.md",tags:[],version:"current",frontMatter:{id:"circuitpython-ferramentas",title:"Instalando as ferramentas",slug:"/franzininho-wifi/exemplos-circuitpython/ferramentas",description:"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos"},next:{title:"Hello World!",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/hello-world"}},o={},d=[{value:"Windows",id:"windows",level:2},{value:"Instalando o Mu Editor",id:"instalando-o-mu-editor",level:3},{value:"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)",id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional",level:3},{value:"Linux",id:"linux",level:2},{value:"Instalando o Mu Editor",id:"instalando-o-mu-editor-1",level:3},{value:"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)",id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional-1",level:3},{value:"Ferramentas Alternativas",id:"ferramentas-alternativas",level:2},{value:"Franzininho WiFi: Configurando o Thonny IDE para trabalhar com CircuitPython",id:"franzininho-wifi-configurando-o-thonny-ide-para-trabalhar-com-circuitpython",level:3}];function c(A){const e={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...A.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.p,{children:"O CircuitPython n\xe3o exige ferramentas espec\xedficas para programa\xe7\xe3o. Um simples editor de texto j\xe1 \xe9 suficiente. Por\xe9m, para facilitar e dar maior produtividade a codifica\xe7\xe3o podemos usar algumas ferramentas."}),"\n",(0,i.jsx)(e.p,{children:"Recomendamos as seguintes ferramentas para trabalhar com o CircuitPython:"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsx)(e.li,{children:(0,i.jsx)(e.a,{href:"https://codewith.mu/",children:"Mu Editor"})}),"\n",(0,i.jsx)(e.li,{children:(0,i.jsx)(e.a,{href:"https://thonny.org/",children:"Thonny IDE"})}),"\n",(0,i.jsx)(e.li,{children:(0,i.jsx)(e.a,{href:"https://code.visualstudio.com/",children:"VS Code"})}),"\n"]}),"\n",(0,i.jsxs)(e.p,{children:["Nesse tutorial focaremos no Mu Editor pela simplicidade e facilidade do seu uso. Abaixo exibimos o processo de instala\xe7\xe3o para os sistemas operacionais ",(0,i.jsx)(e.a,{href:"#windows",children:"Windows"})," e ",(0,i.jsx)(e.a,{href:"#linux",children:"Linux"}),"."]}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/BIs9uYHytJk",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,i.jsx)(e.h2,{id:"windows",children:"Windows"}),"\n",(0,i.jsx)(e.h3,{id:"instalando-o-mu-editor",children:"Instalando o Mu Editor"}),"\n",(0,i.jsx)(e.p,{children:"Para a instala\xe7\xe3o do Mu Editor no Windows voc\xea deve seguir os seguintes passos:"}),"\n",(0,i.jsxs)(e.p,{children:["Passo 1: Acesse o site ",(0,i.jsx)(e.a,{href:"https://codewith.mu/",children:"https://codewith.mu/"})," e clique em Download:"]}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem1",src:a(7588).c+"",width:"512",height:"84"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 2: Clique na op\xe7\xe3o Windows Installer."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem2",src:a(4564).c+"",width:"512",height:"203"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 3: Salve-o em seu computador."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem3",src:a(68232).c+"",width:"1497",height:"884"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 4: Aguarde at\xe9 terminar o download e ap\xf3s isso clique em abrir o arquivo que voc\xea acabou de baixar."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem4",src:a(52660).c+"",width:"326",height:"88"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 5: Ap\xf3s baixar o programa, d\xea dois cliques e ent\xe3o ir\xe1 aparecer uma tela onde voc\xea ter\xe1 que aceitar os termos de uso do software, clique na caixa de sele\xe7\xe3o e pressione Install e aguarde a instala\xe7\xe3o."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem5",src:a(64916).c+"",width:"493",height:"389"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 8: Procure em seu computador: Mu Editor"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem8",src:a(81128).c+"",width:"667",height:"630"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 9: Ao abrir o programa aguarde, est\xe1 \xe9 a tela de inicio do Mu Editor."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem-extra",src:a(71116).c+"",width:"837",height:"663"})}),"\n",(0,i.jsx)(e.p,{children:'Passo 10: Ap\xf3s isso escolha CircuitPython, conforme a imagem abaixo:\nse por acaso ele n\xe3o abrir, clique em "Modo".'}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem9",src:a(22084).c+"",width:"995",height:"617"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 11: Pronto, agora \xe9 s\xf3 se divertir!"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem10",src:a(49576).c+"",width:"512",height:"311"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 12: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na pr\xf3xima se\xe7\xe3o."}),"\n",(0,i.jsx)(e.h3,{id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional",children:"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)"}),"\n",(0,i.jsx)(e.p,{children:"A seguir apresentaremos a instala\xe7\xe3o de terminal serial para acesso ao REPL atrav\xe9s da comunica\xe7\xe3o serial."}),"\n",(0,i.jsxs)(e.p,{children:["Instalaremos o terminal serial Putty para nossos exemplos. Fa\xe7a o download em: ",(0,i.jsx)(e.a,{href:"https://www.putty.org/",children:"https://www.putty.org/"})]}),"\n",(0,i.jsx)(e.p,{children:"No site, clique na primeira op\xe7\xe3o"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem1",src:a(29056).c+"",width:"512",height:"249"})}),"\n",(0,i.jsx)(e.p,{children:"Veja qual \xe9 o seu sistema. No meu caso \xe9 de 64bits por isso vou clicar na op\xe7\xe3o de 64 bits x86. Ap\xf3s isso \xe9 s\xf3 salvar."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem2",src:a(52288).c+"",width:"512",height:"246"})}),"\n",(0,i.jsx)(e.p,{children:"Ap\xf3s realizar o download, d\xea dois cliques no arquivo. Ser\xe1 aberta a janela conforme a figura abaixo. Clique em next e depois em install:"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem4",src:a(49892).c+"",width:"512",height:"399"})}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem3",src:a(9956).c+"",width:"512",height:"399"})}),"\n",(0,i.jsx)(e.p,{children:"Novamente clique em install:"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem4",src:a(79404).c+"",width:"512",height:"403"})}),"\n",(0,i.jsx)(e.p,{children:"Aguarde e clique em finish:"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem5",src:a(96160).c+"",width:"512",height:"404"})}),"\n",(0,i.jsx)(e.p,{children:"Pronto finalizamos a etapa de configura\xe7\xe3o. O pr\xf3ximo passo \xe9 abrir o programa PuTTy em seu computador, mais abaixo estarei explicando os primeiros passos com ele."}),"\n",(0,i.jsx)(e.p,{children:"Como citei acima, abra o programa PuTTY"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem1",src:a(34352).c+"",width:"512",height:"420"})}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem2",src:a(89672).c+"",width:"512",height:"463"})}),"\n",(0,i.jsx)(e.p,{children:"Ent\xe3o abrir\xe1 uma janela conforme a imagem acima. Enquanto isso, vamos at\xe9 o gerenciador de dispositivos."}),"\n",(0,i.jsx)(e.p,{children:"V\xe1 em Portas (COM e LTP). Aqui voc\xea encontra em qual porta a placa est\xe1 conectada. Clicando para expandir voc\xea ver\xe1 Dispositivo Serial USB (COM3)"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem3",src:a(82636).c+"",width:"512",height:"375"})}),"\n",(0,i.jsx)(e.p,{children:"Agora faremos algumas altera\xe7\xf5es, conforme a imagem abaixo, em COM 1 altere para COM3 e selecione a op\xe7\xe3o Serial e clique em open."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem4",src:a(23615).c+"",width:"512",height:"464"})}),"\n",(0,i.jsx)(e.p,{children:"Ent\xe3o aparecer\xe1 uma tela, similar a um terminal. Pressione Ctrl + C para entrar no interpretador Python da placa:"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem5",src:a(76204).c+"",width:"512",height:"325"})}),"\n",(0,i.jsx)(e.p,{children:"Agora que a placa j\xe1 est\xe1 conectada, podemos enviar alguns comandos para ela executar atrav\xe9s do REPL."}),"\n",(0,i.jsx)(e.p,{children:"Digite print(\u201cOl\xe1, Mundo!\u201d) e d\xea o enter."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem6",src:a(24404).c+"",width:"512",height:"323"})}),"\n",(0,i.jsx)(e.p,{children:"Executamos acima o comando print. Voc\xea pode testar outras mensagens trocando o texto que est\xe1 entre aspas."}),"\n",(0,i.jsx)(e.p,{children:"Podemos tamb\xe9m executar algumas opera\xe7\xf5es matem\xe1ticas."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem7",src:a(43524).c+"",width:"512",height:"317"})}),"\n",(0,i.jsx)(e.p,{children:"Tamb\xe9m podemos ter acesso \xe0s fun\xe7\xf5es do CircuitPython para acesso ao hardware. Vamos ver quais pinos a Franzininho WiFi possui dispon\xedvel?"}),"\n",(0,i.jsx)(e.p,{children:"Digite import board, d\xea enter. Digite dir(board) e d\xea o enter."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem8",src:a(63228).c+"",width:"512",height:"323"})}),"\n",(0,i.jsx)(e.p,{children:"Esses s\xe3o os pinos que trabalharemos para nossas aplica\xe7\xf5es."}),"\n",(0,i.jsx)(e.p,{children:"Essa foi apenas uma experi\xeancia r\xe1pida para acesso ao REPL. Essa ferramenta nos ajudar\xe1 a testar c\xf3digos ou dispositivos rapidamente."}),"\n",(0,i.jsx)(e.p,{children:"Para editar c\xf3digos maiores e projetos que voc\xea precisa salvar, recomendamos que edite no arquivo code.py"}),"\n",(0,i.jsx)(e.p,{children:"Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):"}),"\n",(0,i.jsx)(e.h2,{id:"linux",children:"Linux"}),"\n",(0,i.jsx)(e.h3,{id:"instalando-o-mu-editor-1",children:"Instalando o Mu Editor"}),"\n",(0,i.jsx)(e.p,{children:"Para a instalar o Mu Editor no Linux voc\xea deve seguir os passos a seguir:"}),"\n",(0,i.jsxs)(e.p,{children:["Passo 1: Acesse o site ",(0,i.jsx)(e.a,{href:"https://codewith.mu/",children:"https://codewith.mu/"})," e clique em Download:"]}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem1",src:a(7588).c+"",width:"512",height:"84"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 2: Clique na op\xe7\xe3o Python Package (Linux or Native Python)"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem2",src:a(41244).c+"",width:"512",height:"208"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 3: Abra seu terminal e digite o comando abaixo, ele vai instalar bibliotecas do python, aguarde at\xe9 finalizar:"}),"\n",(0,i.jsx)(e.p,{children:"pip3 install mu-editor==1.1.0b5"}),"\n",(0,i.jsx)(e.p,{children:"Passo 4: Agora digite este comando:"}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{children:"mu-editor\n"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 5: Pronto, agora \xe9 s\xf3 se divertir!"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem3",src:a(49576).c+"",width:"512",height:"311"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 6: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na pr\xf3xima se\xe7\xe3o."}),"\n",(0,i.jsx)(e.h3,{id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional-1",children:"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)"}),"\n",(0,i.jsx)(e.p,{children:"A seguir apresentaremos a instala\xe7\xe3o de terminal serial para acesso ao REPL atrav\xe9s da comunica\xe7\xe3o serial."}),"\n",(0,i.jsx)(e.p,{children:"Instale um terminal, por exemplo, para instalar o picocom, digite os comandos abaixo:"}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{children:"sudo apt-get update \nsudo apt-get install picocom\n"})}),"\n",(0,i.jsx)(e.p,{children:"Para acessar a Franzininho WiFi atrav\xe9s do REPL usando o terminal serial no Linux, o primeiro passo \xe9 conectar a placa Franzininho Wifi em seu computador e logo ir\xe1 aparecer algo parecido com um dispositivo de pendrive, conforme a imagem abaixo:"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem1",src:a(97400).c+"",width:"512",height:"288"})}),"\n",(0,i.jsx)(e.p,{children:"Agora abriremos o terminal Serial e a porta serial que a placa est\xe1 conectada. Abra o terminal de comandos e digite o seguinte comando: picomcom /dev/ttyACM0 de enter."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem2",src:a(59384).c+"",width:"512",height:"185"})}),"\n",(0,i.jsx)(e.p,{children:"Agora pressione Ctrl+C no teclado e ent\xe3o aparecer\xe1 >>>"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem3",src:a(20664).c+"",width:"512",height:"350"})}),"\n",(0,i.jsx)(e.p,{children:"Pronto, estamos na placa Franzininho WiFi e podemos enviar comandos diretamente para ela."}),"\n",(0,i.jsx)(e.p,{children:"Digite: print(\u201cHello World\u201d) e aperte o enter (voc\xea pode escrever qualquer coisa nas aspas, ent\xe3o aparecer\xe1 o que voc\xea escreveu:"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem4",src:a(95384).c+"",width:"512",height:"350"})}),"\n",(0,i.jsx)(e.p,{children:"Note que estamos executando comando Python atrav\xe9s do REPL."}),"\n",(0,i.jsx)(e.p,{children:"Agora faremos uma opera\xe7\xe3o matem\xe1tica, digite um numero, escolha uma opera\xe7\xe3o matem\xe1tica e digite outro valor, aperte o enter e observe o resultado:"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem5",src:a(16508).c+"",width:"512",height:"197"})}),"\n",(0,i.jsx)(e.p,{children:"Agora digite o seguinte c\xf3digo no terminal:"}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{children:"import board \ndir(board)\n"})}),"\n",(0,i.jsx)(e.p,{children:"Ent\xe3o aparecer\xe1 o conjunto de pinos dispon\xedveis na Franzininho Wifi."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem6",src:a(15311).c+"",width:"512",height:"455"})}),"\n",(0,i.jsx)(e.p,{children:"Esse foi apenas uma experi\xeancia r\xe1pia para acesso ao REPL. Essa ferramenta nos ajudar\xe1 a testar c\xf3digos ou dispositivos rapidamente."}),"\n",(0,i.jsx)(e.p,{children:"Para editar c\xf3digos maiores e projetos que voc\xea precisa salvar, recomendamos que edite no arquivo code.py"}),"\n",(0,i.jsx)(e.p,{children:"Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem7",src:a(49828).c+"",width:"512",height:"288"})}),"\n",(0,i.jsx)(e.p,{children:"Agora veremos o que \xe9 poss\xedvel fazer com o CircuitPyhton. Bora l\xe1?"}),"\n",(0,i.jsx)(e.h2,{id:"ferramentas-alternativas",children:"Ferramentas Alternativas"}),"\n",(0,i.jsx)(e.h3,{id:"franzininho-wifi-configurando-o-thonny-ide-para-trabalhar-com-circuitpython",children:"Franzininho WiFi: Configurando o Thonny IDE para trabalhar com CircuitPython"}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/Yetzf8qK4II",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Autor"}),(0,i.jsx)(e.th,{children:"Diana Santos"})]})}),(0,i.jsxs)(e.tbody,{children:[(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:"Autor"}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:"Data:"}),(0,i.jsx)(e.td,{children:"16/09/2021"})]})]})]})]})}function l(A={}){const{wrapper:e}={...(0,r.MN)(),...A.components};return e?(0,i.jsx)(e,{...A,children:(0,i.jsx)(c,{...A})}):c(A)}},95788:(A,e,a)=>{a.d(e,{MN:()=>d});var i=a(11504);function r(A,e,a){return e in A?Object.defineProperty(A,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):A[e]=a,A}function n(A,e){var a=Object.keys(A);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(A);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(A,e).enumerable}))),a.push.apply(a,i)}return a}function s(A){for(var e=1;e=0||(r[a]=A[a]);return r}(A,e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(A);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(A,a)&&(r[a]=A[a])}return r}var o=i.createContext({}),d=function(A){var e=i.useContext(o),a=e;return A&&(a="function"==typeof A?A(e):s(s({},e),A)),a},c={inlineCode:"code",wrapper:function(A){var e=A.children;return i.createElement(i.Fragment,{},e)}},l=i.forwardRef((function(A,e){var a=A.components,r=A.mdxType,n=A.originalType,o=A.parentName,l=t(A,["components","mdxType","originalType","parentName"]),p=d(a),m=r,E=p["".concat(o,".").concat(m)]||p[m]||c[m]||n;return a?i.createElement(E,s(s({ref:e},l),{},{components:a})):i.createElement(E,s({ref:e},l))}));l.displayName="MDXCreateElement"},7588:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x00-Editor_MU-ba3cd8ace939ffb0580dccaa4d0cdf53.png"},4564:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x01_download_MU-1e512cd327051fda3b809c3dca11e0e1.png"},68232:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x02_Salvando_MU-627c3187f23bd43d9b79bc1029a65d2c.png"},52660:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x03_Baixando_MU-cddf32749baf5f161bc03512ba6509a6.png"},64916:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x04_instalando_Mu-editor-fed42a430dfd8203d44422123c053adf.gif"},81128:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x07-mu-editor-bc3568dc373360e74c594f28cb4dbded.png"},22084:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x08-selecione-modo-CircuitPython-cb06a6b862933996fb94dc153d7d44aa.png"},49576:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x09_Interface_MU-9c35d912dbd0ca1a16f4e0b523982bac.png"},41244:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x10_download_MU_Linux-a46194baf736d62391b0d282854d3a0e.png"},29056:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x11_download_PuTTY-a2fd196a5e5149dca4811e220668539e.png"},52288:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x12_download_PuTTY-f5a2bf87198362425fdf0e409182d301.png"},49892:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x13_instalando_PuTTY-b45a58274db088bdc65b073e7db5cf31.png"},9956:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x14_instalando_PuTTY-d24ca496b48bc5fa2d87cf80ced6d87c.png"},79404:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x15_instalando_PuTTY-8a2fbf9577e279e73d02a14c70f289f4.png"},96160:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x16_instalando_PuTTY-8bb87629f700be7f5995b4ba08a175b5.png"},34352:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x17_abrindo_PuTTY-20d9bdb1e80562c28eaba1eb272e4284.png"},89672:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x18_programa_PuTTY-915f0658ce66350947a7735b23620b09.png"},82636:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x19_portasCOM_PuTTY-7a25cf5c79c7671f146598766973b79f.png"},23615:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x20_portasCOM_PuTTY-1cc40445920776386501a52dfd3afc01.png"},76204:(A,e,a)=>{a.d(e,{c:()=>i});const i="data:image/png;base64,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"},24404:(A,e,a)=>{a.d(e,{c:()=>i});const i="data:image/png;base64,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"},43524:(A,e,a)=>{a.d(e,{c:()=>i});const i="data:image/png;base64,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"},63228:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x24_import_board_PuTTY-df7b0aa097c0c1401a4eef05125f0b68.png"},97400:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x25_Abrindo_CircuitPython-fb8b73b9a545ac844c7417339ae1a3d3.png"},59384:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x26_picocom_CircuitPython-98bf26e28bd6b7844fd511a9fb03d515.png"},20664:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x27_picocom_CircuitPython-875a98e0cc370a46b3b7fd5570ea2561.png"},95384:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x28_picocom_CircuitPython-875a98e0cc370a46b3b7fd5570ea2561.png"},16508:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x29_picocom_CircuitPython-b38e05a5af6b1d093d1104121738c9d2.png"},15311:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x30_picocom_CircuitPython-e811b70d31657093cf5e7b9543204f48.png"},49828:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x31_picocom_CircuitPython-4e4bbca646ac4c84260448666800499d.png"},71116:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/tela-mu-editor-048cc19129e3e39e76455b7a837ae9e1.png"}}]); \ No newline at end of file diff --git a/assets/js/06f5a5e3.dbc11a81.js b/assets/js/06f5a5e3.dbc11a81.js deleted file mode 100755 index 9ca83d202..000000000 --- a/assets/js/06f5a5e3.dbc11a81.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6817],{3905:(e,a,o)=>{o.d(a,{Zo:()=>c,kt:()=>f});var n=o(7294);function i(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function r(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function t(e){for(var a=1;a=0||(i[o]=e[o]);return i}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var l=n.createContext({}),d=function(e){var a=n.useContext(l),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},c=function(e){var a=d(e.components);return n.createElement(l.Provider,{value:a},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var o=e.components,i=e.mdxType,r=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=d(o),u=i,f=p["".concat(l,".").concat(u)]||p[u]||m[u]||r;return o?n.createElement(f,t(t({ref:a},c),{},{components:o})):n.createElement(f,t({ref:a},c))}));function f(e,a){var o=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var r=o.length,t=new Array(r);t[0]=u;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[p]="string"==typeof e?e:i,t[1]=s;for(var d=2;d{o.r(a),o.d(a,{assets:()=>l,contentTitle:()=>t,default:()=>m,frontMatter:()=>r,metadata:()=>s,toc:()=>d});var n=o(3117),i=(o(7294),o(3905));const r={id:"franzininho-wifi-espidf-03",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-espidf/entrada-analogica",description:"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico",author:"Kayann Soares"},t=void 0,s={unversionedId:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03",id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03",title:"Entrada Anal\xf3gica",description:"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x03-entrada-analogica.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/entrada-analogica",permalink:"/docs/franzininho-wifi/exemplos-espidf/entrada-analogica",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x03-entrada-analogica.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-03",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-espidf/entrada-analogica",description:"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico",author:"Kayann Soares"},sidebar:"docs",previous:{title:"Entrada digital",permalink:"/docs/franzininho-wifi/exemplos-espidf/entrada-digital"},next:{title:"PWM com LEDC",permalink:"/docs/franzininho-wifi/exemplos-espidf/ledc"}},l={},d=[{value:"Recursos",id:"recursos",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],c={toc:d},p="wrapper";function m(e){let{components:a,...r}=e;return(0,i.kt)(p,(0,n.Z)({},c,r,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Nesse exemplo vamos entender como usar o Conversor Anal\xf3gico-Digital (Analog to Digital Converter(ADC)) na Franzininho WiFi. O objetivo deste exemplo \xe9 apresentar projeto simples para configurar o ADC, ler o valor de uma entrada anal\xf3gica controlada por um potenci\xf4metro e imprimir o valor da convers\xe3o atrav\xe9s da comunica\xe7\xe3o serial. Ao final, estaremos preparados para fazer leitura anal\xf3gica simples como tamb\xe9m para utiliza\xe7\xe3o de sensores mais complexos."),(0,i.kt)("h2",{id:"recursos"},"Recursos"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Placa Franzininho WiFi"),(0,i.kt)("li",{parentName:"ul"},"Potenci\xf4metro"),(0,i.kt)("li",{parentName:"ul"},"Protoboard"),(0,i.kt)("li",{parentName:"ul"},"Jumpers"),(0,i.kt)("li",{parentName:"ul"},"Computador com ESP-IDF instalado e configurado.")),(0,i.kt)("h2",{id:"desenvolvimento"},"Desenvolvimento"),(0,i.kt)("p",null,"Um potenci\xf4metro \xe9 um dispositivo anal\xf3gico rotativo operado mecanicamente por meio de Um potenci\xf4metro \xe9 um dispositivo anal\xf3gico rotativo operado mecanicamente por meio de 3 terminais, ele fornece uma quantidade vari\xe1vel de resist\xeancia quando seu eixo \xe9 girado. Quando uma tens\xe3o \xe9 aplicada nos terminais do potenci\xf4metro, que est\xe1 conectado a uma entrada anal\xf3gica, conseguimos medir uma resist\xeancia produzida pelo potenci\xf4metro como um valor anal\xf3gico."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"potenciometro",src:o(4618).Z,width:"600",height:"600"})),(0,i.kt)("p",null,"O Conversor Analogico-Digital \xe9 um dispositivo que converte um sinal anal\xf3gico num sinal digital. Logo, este exemplo vem com o intuito de monitorar o estado do potenci\xf4metro a partir de uma comunica\xe7\xe3o serial, assim podemos ter base para trabalharmos futuramente com sensores anal\xf3gicos."),(0,i.kt)("p",null,"Conecte os tr\xeas fios do potenci\xf4metro \xe0 sua placa. O primeiro fio vai de um dos pinos externos do potenci\xf4metro para o GND. J\xe1 o segundo vai do outro pino externo do potenci\xf4metro para 3,3 Volts. E por \xfaltimo, o terceiro vai do pino do meio do potenci\xf4metro ao pino anal\xf3gico GPIO1."),(0,i.kt)("p",null,"Quando se gira o potenci\xf4metro, altera-se a resist\xeancia, impactando diretamente no pino central do potenci\xf4metro, portanto, muda-se a tens\xe3o. Quando o eixo \xe9 girado no sentido direito a tens\xe3o se aproxima de 3,3V, ao contr\xe1rio se aproxima de 0. Essa tens\xe3o que voc\xea est\xe1 lendo na entrada anal\xf3gica."),(0,i.kt)("p",null,"A Franzininho WIFI possui 20 entradas de ADC, sendo que o ADC1 possui 10 canais configurados do GPIO1 ao GPIO10, j\xe1 o ADC2 possui 10 canais configurados do GPIO11 ao GPIO20. O conversor anal\xf3gico-digital da ESP32-S2 que iremos utilizar possui 12bits de resolu\xe7\xe3o, portanto, ele l\xea a tens\xe3o e a converte em um n\xfamero entre 0 a 4095. A fun\xe7\xe3o adc1_get_raw() ir\xe1 fazer a captura da quantidade de tens\xe3o aplicada ao pino do canal configurado."),(0,i.kt)("h3",{id:"esquem\xe1tico"},"Esquem\xe1tico"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"esquem\xe1tico",src:o(4624).Z,width:"1053",height:"552"})),(0,i.kt)("p",null,"Em uma protoboard, conecte os tr\xeas fios do potenci\xf4metro na Franzininho WIFI. O primeiro vai de um dos pinos externos do potenci\xf4metro para o GND. O segundo vai do outro pino externo do potenci\xf4metro para 3,3 volts. O terceiro vai do pino do meio do potenci\xf4metro ao pino anal\xf3gico GPIO1."),(0,i.kt)("h3",{id:"c\xf3digo"},"C\xf3digo"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-c"},'/*\n Autor : Kayann Soares\n Utiliza\xe7\xe3o simples da Leitura de Dados Analogicos.\n*/\n\n// Bibliotecas Necessarias\n#include \n#include "sdkconfig.h"\n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "esp_system.h"\n#include "esp_spi_flash.h"\n#include \n\n// Main\nvoid app_main(){\n\n // Configurando a resolu\xe7\xe3o do ADC para 13bits \n adc1_config_width(ADC_WIDTH_BIT_13);\n // Configurando o Channel do ADC para o Channel 0\n adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_DB_11);\n\n\n while(1){\n\n // Fun\xe7\xe3o que de leitura do valor analogico, passando o ADC1 que \xe9 o do GPIO1\n int sensorValue = adc1_get_raw(ADC1_CHANNEL_0);\n\n // Imprimindo valores lidos\n printf("%d\\n", sensorValue);\n\n // Rotina de Delay de 1 segundo\n vTaskDelay(1000 / portTICK_PERIOD_MS);\n // Descarrega os buffers de sa\xedda de dados\n fflush(stdout);\n\n }\n}\n\n')),(0,i.kt)("p",null,"Voc\xea encontra o projeto completo em: ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/EntradaAnalogica"},"Entrada Anal\xf3gica")),(0,i.kt)("h3",{id:"compila\xe7\xe3o"},"Compila\xe7\xe3o"),(0,i.kt)("p",null,"Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o set-target para ESP 32-S2:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"idf.py set-target esp32s2\n")),(0,i.kt)("p",null,"Ap\xf3s a compila\xe7\xe3o vamos enviar o c\xf3digo fonte para nossa placa, no editor pressione o \xedcone de raio para dar o FLASH e aguarde alguns segundos para assim dar in\xedcio ao programa"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"compilar",src:o(1134).Z,width:"290",height:"38"})),(0,i.kt)("p",null,"Para vermos a sa\xedda de dados do nosso projeto clique no \xedcone no formato de monitor:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"upload",src:o(7428).Z,width:"290",height:"38"})),(0,i.kt)("h3",{id:"resultados"},"Resultados"),(0,i.kt)("p",null,"Valores mostrados no terminal quando o potenci\xf4metro \xe9 rotacionado."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"resultado",src:o(8453).Z,width:"870",height:"1034"})),(0,i.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,i.kt)("p",null,"Conclu\xedmos o estudo do perif\xe9rico base para iniciar no desenvolvimento com microcontroladores da Espressif usando o Framework IDF, a partir desse artigo podemos replicar para as demais fam\xedlias do ESP32, estes conceitos podem ser levados tamb\xe9m para trabalharmos com outros microcontroladores que utilizem C e uma programa\xe7\xe3o mais abstrata. Este artigo visa no estudo do perif\xe9rico ADC, ao final deste projeto \xe9 poss\xedvel aprender a utilizar o ADC da Franzininho WiFi para leitura de dados anal\xf3gicos e lhe dar\xe1 o desafio de aplicar esse aprendizado na leitura de sensores anal\xf3gicos para voc\xea aplicar em seus projetos utilizando o ESP-IDF. Bons estudos."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Autor"),(0,i.kt)("th",{parentName:"tr",align:null},(0,i.kt)("a",{parentName:"th",href:"https://www.linkedin.com/in/kayann-soares/"},"Kayann Soares")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Data:"),(0,i.kt)("td",{parentName:"tr",align:null},"01/06/2021")))))}m.isMDXComponent=!0},4618:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/1-0b0654e661127263f869c0c80b03bac3.png"},4624:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/2-69ca8447ac89435582336566a7ce32b9.png"},1134:(e,a,o)=>{o.d(a,{Z:()=>n});const n="data:image/png;base64,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"},7428:(e,a,o)=>{o.d(a,{Z:()=>n});const n="data:image/png;base64,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"},8453:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/5-6b4ef51aea33afc7045c96689c8d6371.png"}}]); \ No newline at end of file diff --git a/assets/js/06f5a5e3.e2bcae0a.js b/assets/js/06f5a5e3.e2bcae0a.js new file mode 100755 index 000000000..6663e60a7 --- /dev/null +++ b/assets/js/06f5a5e3.e2bcae0a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7952],{15644:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>d,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var n=a(17624),i=a(95788);const r={id:"franzininho-wifi-espidf-03",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-espidf/entrada-analogica",description:"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico",author:"Kayann Soares"},s=void 0,t={id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03",title:"Entrada Anal\xf3gica",description:"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x03-entrada-analogica.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/entrada-analogica",permalink:"/docs/franzininho-wifi/exemplos-espidf/entrada-analogica",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x03-entrada-analogica.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-03",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-espidf/entrada-analogica",description:"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico",author:"Kayann Soares"},sidebar:"docs",previous:{title:"Entrada digital",permalink:"/docs/franzininho-wifi/exemplos-espidf/entrada-digital"},next:{title:"PWM com LEDC",permalink:"/docs/franzininho-wifi/exemplos-espidf/ledc"}},d={},c=[{value:"Recursos",id:"recursos",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function l(e){const o={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.p,{children:"Nesse exemplo vamos entender como usar o Conversor Anal\xf3gico-Digital (Analog to Digital Converter(ADC)) na Franzininho WiFi. O objetivo deste exemplo \xe9 apresentar projeto simples para configurar o ADC, ler o valor de uma entrada anal\xf3gica controlada por um potenci\xf4metro e imprimir o valor da convers\xe3o atrav\xe9s da comunica\xe7\xe3o serial. Ao final, estaremos preparados para fazer leitura anal\xf3gica simples como tamb\xe9m para utiliza\xe7\xe3o de sensores mais complexos."}),"\n",(0,n.jsx)(o.h2,{id:"recursos",children:"Recursos"}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:"Placa Franzininho WiFi"}),"\n",(0,n.jsx)(o.li,{children:"Potenci\xf4metro"}),"\n",(0,n.jsx)(o.li,{children:"Protoboard"}),"\n",(0,n.jsx)(o.li,{children:"Jumpers"}),"\n",(0,n.jsx)(o.li,{children:"Computador com ESP-IDF instalado e configurado."}),"\n"]}),"\n",(0,n.jsx)(o.h2,{id:"desenvolvimento",children:"Desenvolvimento"}),"\n",(0,n.jsx)(o.p,{children:"Um potenci\xf4metro \xe9 um dispositivo anal\xf3gico rotativo operado mecanicamente por meio de Um potenci\xf4metro \xe9 um dispositivo anal\xf3gico rotativo operado mecanicamente por meio de 3 terminais, ele fornece uma quantidade vari\xe1vel de resist\xeancia quando seu eixo \xe9 girado. Quando uma tens\xe3o \xe9 aplicada nos terminais do potenci\xf4metro, que est\xe1 conectado a uma entrada anal\xf3gica, conseguimos medir uma resist\xeancia produzida pelo potenci\xf4metro como um valor anal\xf3gico."}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"potenciometro",src:a(52904).c+"",width:"600",height:"600"})}),"\n",(0,n.jsx)(o.p,{children:"O Conversor Analogico-Digital \xe9 um dispositivo que converte um sinal anal\xf3gico num sinal digital. Logo, este exemplo vem com o intuito de monitorar o estado do potenci\xf4metro a partir de uma comunica\xe7\xe3o serial, assim podemos ter base para trabalharmos futuramente com sensores anal\xf3gicos."}),"\n",(0,n.jsx)(o.p,{children:"Conecte os tr\xeas fios do potenci\xf4metro \xe0 sua placa. O primeiro fio vai de um dos pinos externos do potenci\xf4metro para o GND. J\xe1 o segundo vai do outro pino externo do potenci\xf4metro para 3,3 Volts. E por \xfaltimo, o terceiro vai do pino do meio do potenci\xf4metro ao pino anal\xf3gico GPIO1."}),"\n",(0,n.jsx)(o.p,{children:"Quando se gira o potenci\xf4metro, altera-se a resist\xeancia, impactando diretamente no pino central do potenci\xf4metro, portanto, muda-se a tens\xe3o. Quando o eixo \xe9 girado no sentido direito a tens\xe3o se aproxima de 3,3V, ao contr\xe1rio se aproxima de 0. Essa tens\xe3o que voc\xea est\xe1 lendo na entrada anal\xf3gica."}),"\n",(0,n.jsx)(o.p,{children:"A Franzininho WIFI possui 20 entradas de ADC, sendo que o ADC1 possui 10 canais configurados do GPIO1 ao GPIO10, j\xe1 o ADC2 possui 10 canais configurados do GPIO11 ao GPIO20. O conversor anal\xf3gico-digital da ESP32-S2 que iremos utilizar possui 12bits de resolu\xe7\xe3o, portanto, ele l\xea a tens\xe3o e a converte em um n\xfamero entre 0 a 4095. A fun\xe7\xe3o adc1_get_raw() ir\xe1 fazer a captura da quantidade de tens\xe3o aplicada ao pino do canal configurado."}),"\n",(0,n.jsx)(o.h3,{id:"esquem\xe1tico",children:"Esquem\xe1tico"}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"esquem\xe1tico",src:a(61412).c+"",width:"1053",height:"552"})}),"\n",(0,n.jsx)(o.p,{children:"Em uma protoboard, conecte os tr\xeas fios do potenci\xf4metro na Franzininho WIFI. O primeiro vai de um dos pinos externos do potenci\xf4metro para o GND. O segundo vai do outro pino externo do potenci\xf4metro para 3,3 volts. O terceiro vai do pino do meio do potenci\xf4metro ao pino anal\xf3gico GPIO1."}),"\n",(0,n.jsx)(o.h3,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-c",children:'/*\n Autor : Kayann Soares\n Utiliza\xe7\xe3o simples da Leitura de Dados Analogicos.\n*/\n\n// Bibliotecas Necessarias\n#include \n#include "sdkconfig.h"\n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "esp_system.h"\n#include "esp_spi_flash.h"\n#include \n\n// Main\nvoid app_main(){\n\n // Configurando a resolu\xe7\xe3o do ADC para 13bits \n adc1_config_width(ADC_WIDTH_BIT_13);\n // Configurando o Channel do ADC para o Channel 0\n adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_DB_11);\n\n\n while(1){\n\n // Fun\xe7\xe3o que de leitura do valor analogico, passando o ADC1 que \xe9 o do GPIO1\n int sensorValue = adc1_get_raw(ADC1_CHANNEL_0);\n\n // Imprimindo valores lidos\n printf("%d\\n", sensorValue);\n\n // Rotina de Delay de 1 segundo\n vTaskDelay(1000 / portTICK_PERIOD_MS);\n // Descarrega os buffers de sa\xedda de dados\n fflush(stdout);\n\n }\n}\n\n'})}),"\n",(0,n.jsxs)(o.p,{children:["Voc\xea encontra o projeto completo em: ",(0,n.jsx)(o.a,{href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/EntradaAnalogica",children:"Entrada Anal\xf3gica"})]}),"\n",(0,n.jsx)(o.h3,{id:"compila\xe7\xe3o",children:"Compila\xe7\xe3o"}),"\n",(0,n.jsx)(o.p,{children:"Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o set-target para ESP 32-S2:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{children:"idf.py set-target esp32s2\n"})}),"\n",(0,n.jsx)(o.p,{children:"Ap\xf3s a compila\xe7\xe3o vamos enviar o c\xf3digo fonte para nossa placa, no editor pressione o \xedcone de raio para dar o FLASH e aguarde alguns segundos para assim dar in\xedcio ao programa"}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"compilar",src:a(96384).c+"",width:"290",height:"38"})}),"\n",(0,n.jsx)(o.p,{children:"Para vermos a sa\xedda de dados do nosso projeto clique no \xedcone no formato de monitor:"}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"upload",src:a(69652).c+"",width:"290",height:"38"})}),"\n",(0,n.jsx)(o.h3,{id:"resultados",children:"Resultados"}),"\n",(0,n.jsx)(o.p,{children:"Valores mostrados no terminal quando o potenci\xf4metro \xe9 rotacionado."}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"resultado",src:a(26564).c+"",width:"870",height:"1034"})}),"\n",(0,n.jsx)(o.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,n.jsx)(o.p,{children:"Conclu\xedmos o estudo do perif\xe9rico base para iniciar no desenvolvimento com microcontroladores da Espressif usando o Framework IDF, a partir desse artigo podemos replicar para as demais fam\xedlias do ESP32, estes conceitos podem ser levados tamb\xe9m para trabalharmos com outros microcontroladores que utilizem C e uma programa\xe7\xe3o mais abstrata. Este artigo visa no estudo do perif\xe9rico ADC, ao final deste projeto \xe9 poss\xedvel aprender a utilizar o ADC da Franzininho WiFi para leitura de dados anal\xf3gicos e lhe dar\xe1 o desafio de aplicar esse aprendizado na leitura de sensores anal\xf3gicos para voc\xea aplicar em seus projetos utilizando o ESP-IDF. Bons estudos."}),"\n",(0,n.jsxs)(o.table,{children:[(0,n.jsx)(o.thead,{children:(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.th,{children:"Autor"}),(0,n.jsx)(o.th,{children:(0,n.jsx)(o.a,{href:"https://www.linkedin.com/in/kayann-soares/",children:"Kayann Soares"})})]})}),(0,n.jsx)(o.tbody,{children:(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.td,{children:"Data:"}),(0,n.jsx)(o.td,{children:"01/06/2021"})]})})]})]})}function p(e={}){const{wrapper:o}={...(0,i.MN)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},95788:(e,o,a)=>{a.d(o,{MN:()=>c});var n=a(11504);function i(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function r(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var o=1;o=0||(i[a]=e[a]);return i}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var d=n.createContext({}),c=function(e){var o=n.useContext(d),a=o;return e&&(a="function"==typeof e?e(o):s(s({},o),e)),a},l={inlineCode:"code",wrapper:function(e){var o=e.children;return n.createElement(n.Fragment,{},o)}},p=n.forwardRef((function(e,o){var a=e.components,i=e.mdxType,r=e.originalType,d=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),m=c(a),u=i,h=m["".concat(d,".").concat(u)]||m[u]||l[u]||r;return a?n.createElement(h,s(s({ref:o},p),{},{components:a})):n.createElement(h,s({ref:o},p))}));p.displayName="MDXCreateElement"},52904:(e,o,a)=>{a.d(o,{c:()=>n});const n=a.p+"assets/images/1-0b0654e661127263f869c0c80b03bac3.png"},61412:(e,o,a)=>{a.d(o,{c:()=>n});const n=a.p+"assets/images/2-69ca8447ac89435582336566a7ce32b9.png"},96384:(e,o,a)=>{a.d(o,{c:()=>n});const n="data:image/png;base64,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"},69652:(e,o,a)=>{a.d(o,{c:()=>n});const n="data:image/png;base64,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"},26564:(e,o,a)=>{a.d(o,{c:()=>n});const n=a.p+"assets/images/5-6b4ef51aea33afc7045c96689c8d6371.png"}}]); \ No newline at end of file diff --git a/assets/js/096bfee4.c2e51b42.js b/assets/js/096bfee4.c2e51b42.js new file mode 100755 index 000000000..342b2fee0 --- /dev/null +++ b/assets/js/096bfee4.c2e51b42.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4124],{39696:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/facebook","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/09e1b884.2c4adf47.js b/assets/js/09e1b884.ba1dccda.js similarity index 65% rename from assets/js/09e1b884.2c4adf47.js rename to assets/js/09e1b884.ba1dccda.js index ea42d1bd9..89daa94d1 100755 --- a/assets/js/09e1b884.2c4adf47.js +++ b/assets/js/09e1b884.ba1dccda.js @@ -1 +1 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6250],{4469:n=>{n.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7804],{6792:n=>{n.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/17896441.5b1e31d0.js b/assets/js/17896441.5b1e31d0.js deleted file mode 100755 index 382caa128..000000000 --- a/assets/js/17896441.5b1e31d0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7918],{8945:(e,t,n)=>{n.r(t),n.d(t,{default:()=>ie});var a=n(7294),l=n(1944),o=n(902);const r=a.createContext(null);function s(e){let{children:t,content:n}=e;const l=function(e){return(0,a.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return a.createElement(r.Provider,{value:l},t)}function c(){const e=(0,a.useContext)(r);if(null===e)throw new o.i6("DocProvider");return e}function i(){const{metadata:e,frontMatter:t,assets:n}=c();return a.createElement(l.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var d=n(4334),m=n(7524),u=n(3117),v=n(5999),b=n(2244);function p(e){const{previous:t,next:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,v.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&a.createElement(b.Z,(0,u.Z)({},t,{subLabel:a.createElement(v.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&a.createElement(b.Z,(0,u.Z)({},n,{subLabel:a.createElement(v.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}function h(){const{metadata:e}=c();return a.createElement(p,{previous:e.previous,next:e.next})}var f=n(2263),E=n(9960),g=n(143),L=n(5281),C=n(373),N=n(4477);const k={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(v.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(v.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function _(e){const t=k[e.versionMetadata.banner];return a.createElement(t,e)}function Z(e){let{versionLabel:t,to:n,onClick:l}=e;return a.createElement(v.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(E.Z,{to:n,onClick:l},a.createElement(v.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function x(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:l}}=(0,f.Z)(),{pluginId:o}=(0,g.gA)({failfast:!0}),{savePreferredVersionName:r}=(0,C.J)(o),{latestDocSuggestion:s,latestVersionSuggestion:c}=(0,g.Jo)(o),i=s??(m=c).docs.find((e=>e.id===m.mainDocId));var m;return a.createElement("div",{className:(0,d.Z)(t,L.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(_,{siteTitle:l,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(Z,{versionLabel:c.label,to:i.path,onClick:()=>r(c.name)})))}function T(e){let{className:t}=e;const n=(0,N.E)();return n.banner?a.createElement(x,{className:t,versionMetadata:n}):null}function H(e){let{className:t}=e;const n=(0,N.E)();return n.badge?a.createElement("span",{className:(0,d.Z)(t,L.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(v.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}function U(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return a.createElement(v.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:a.createElement("b",null,a.createElement("time",{dateTime:new Date(1e3*t).toISOString()},n))}}," on {date}")}function y(e){let{lastUpdatedBy:t}=e;return a.createElement(v.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:a.createElement("b",null,t)}}," by {user}")}function A(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:l}=e;return a.createElement("span",{className:L.k.common.lastUpdated},a.createElement(v.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?a.createElement(U,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:l?a.createElement(y,{lastUpdatedBy:l}):""}},"Last updated{atDate}{byUser}"),!1)}var w=n(4881),M=n(1526);const I={lastUpdated:"lastUpdated_vwxv"};function B(e){return a.createElement("div",{className:(0,d.Z)(L.k.docs.docFooterTagsRow,"row margin-bottom--sm")},a.createElement("div",{className:"col"},a.createElement(M.Z,e)))}function O(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:l,formattedLastUpdatedAt:o}=e;return a.createElement("div",{className:(0,d.Z)(L.k.docs.docFooterEditMetaRow,"row")},a.createElement("div",{className:"col"},t&&a.createElement(w.Z,{editUrl:t})),a.createElement("div",{className:(0,d.Z)("col",I.lastUpdated)},(n||l)&&a.createElement(A,{lastUpdatedAt:n,formattedLastUpdatedAt:o,lastUpdatedBy:l})))}function V(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:l,lastUpdatedBy:o,tags:r}=e,s=r.length>0,i=!!(t||n||o);return s||i?a.createElement("footer",{className:(0,d.Z)(L.k.docs.docFooter,"docusaurus-mt-lg")},s&&a.createElement(B,{tags:r}),i&&a.createElement(O,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:o,formattedLastUpdatedAt:l})):null}var P=n(6043),S=n(3743);const D={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function F(e){let{collapsed:t,...n}=e;return a.createElement("button",(0,u.Z)({type:"button"},n,{className:(0,d.Z)("clean-btn",D.tocCollapsibleButton,!t&&D.tocCollapsibleButtonExpanded,n.className)}),a.createElement(v.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const R={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function z(e){let{toc:t,className:n,minHeadingLevel:l,maxHeadingLevel:o}=e;const{collapsed:r,toggleCollapsed:s}=(0,P.u)({initialState:!0});return a.createElement("div",{className:(0,d.Z)(R.tocCollapsible,!r&&R.tocCollapsibleExpanded,n)},a.createElement(F,{collapsed:r,onClick:s}),a.createElement(P.z,{lazy:!0,className:R.tocCollapsibleContent,collapsed:r},a.createElement(S.Z,{toc:t,minHeadingLevel:l,maxHeadingLevel:o})))}const q={tocMobile:"tocMobile_ITEo"};function j(){const{toc:e,frontMatter:t}=c();return a.createElement(z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,d.Z)(L.k.docs.docTocMobile,q.tocMobile)})}var $=n(9407);function G(){const{toc:e,frontMatter:t}=c();return a.createElement($.Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:L.k.docs.docTocDesktop})}var J=n(2503),Y=n(1506);function K(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return a.createElement("div",{className:(0,d.Z)(L.k.docs.docMarkdown,"markdown")},n&&a.createElement("header",null,a.createElement(J.Z,{as:"h1"},n)),a.createElement(Y.Z,null,t))}var Q=n(2802),W=n(8596),X=n(4996);function ee(e){return a.createElement("svg",(0,u.Z)({viewBox:"0 0 24 24"},e),a.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const te={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function ne(){const e=(0,X.Z)("/");return a.createElement("li",{className:"breadcrumbs__item"},a.createElement(E.Z,{"aria-label":(0,v.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e},a.createElement(ee,{className:te.breadcrumbHomeIcon})))}const ae={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function le(e){let{children:t,href:n,isLast:l}=e;const o="breadcrumbs__link";return l?a.createElement("span",{className:o,itemProp:"name"},t):n?a.createElement(E.Z,{className:o,href:n,itemProp:"item"},a.createElement("span",{itemProp:"name"},t)):a.createElement("span",{className:o},t)}function oe(e){let{children:t,active:n,index:l,addMicrodata:o}=e;return a.createElement("li",(0,u.Z)({},o&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,d.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,a.createElement("meta",{itemProp:"position",content:String(l+1)}))}function re(){const e=(0,Q.s1)(),t=(0,W.Ns)();return e?a.createElement("nav",{className:(0,d.Z)(L.k.docs.docBreadcrumbs,ae.breadcrumbsContainer),"aria-label":(0,v.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},a.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(ne,null),e.map(((t,n)=>{const l=n===e.length-1;return a.createElement(oe,{key:n,active:l,index:n,addMicrodata:!!t.href},a.createElement(le,{href:t.href,isLast:l},t.label))})))):null}const se={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function ce(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.i)(),l=e.hide_table_of_contents,o=!l&&t.length>0;return{hidden:l,mobile:o?a.createElement(j,null):void 0,desktop:!o||"desktop"!==n&&"ssr"!==n?void 0:a.createElement(G,null)}}();return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,d.Z)("col",!n.hidden&&se.docItemCol)},a.createElement(T,null),a.createElement("div",{className:se.docItemContainer},a.createElement("article",null,a.createElement(re,null),a.createElement(H,null),n.mobile,a.createElement(K,null,t),a.createElement(V,null)),a.createElement(h,null))),n.desktop&&a.createElement("div",{className:"col col--3"},n.desktop))}function ie(e){const t=`docs-doc-id-${e.content.metadata.unversionedId}`,n=e.content;return a.createElement(s,{content:e.content},a.createElement(l.FG,{className:t},a.createElement(i,null),a.createElement(ce,null,a.createElement(n,null))))}},9407:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(3117),l=n(7294),o=n(4334),r=n(3743);const s={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},c="table-of-contents__link toc-highlight",i="table-of-contents__link--active";function d(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,o.Z)(s.tableOfContents,"thin-scrollbar",t)},l.createElement(r.Z,(0,a.Z)({},n,{linkClassName:c,linkActiveClassName:i})))}},3743:(e,t,n)=>{n.d(t,{Z:()=>b});var a=n(3117),l=n(7294),o=n(6668);function r(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function s(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=s({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function c(e){const t=e.getBoundingClientRect();return t.top===t.bottom?c(e.parentNode):t}function i(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>c(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function m(e){const t=(0,l.useRef)(void 0),n=d();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:o,maxHeadingLevel:r}=e;function s(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),s=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:o,maxHeadingLevel:r}),c=i(s,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===d)}))}return document.addEventListener("scroll",s),document.addEventListener("resize",s),s(),()=>{document.removeEventListener("scroll",s),document.removeEventListener("resize",s)}}),[e,n])}function u(e){let{toc:t,className:n,linkClassName:a,isChild:o}=e;return t.length?l.createElement("ul",{className:o?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(u,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const v=l.memo(u);function b(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:i,minHeadingLevel:d,maxHeadingLevel:u,...b}=e;const p=(0,o.L)(),h=d??p.tableOfContents.minHeadingLevel,f=u??p.tableOfContents.maxHeadingLevel,E=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,l.useMemo)((()=>s({toc:r(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:h,maxHeadingLevel:f});return m((0,l.useMemo)((()=>{if(c&&i)return{linkClassName:c,linkActiveClassName:i,minHeadingLevel:h,maxHeadingLevel:f}}),[c,i,h,f])),l.createElement(v,(0,a.Z)({toc:E,className:n,linkClassName:c},b))}},4477:(e,t,n)=>{n.d(t,{E:()=>s,q:()=>r});var a=n(7294),l=n(902);const o=a.createContext(null);function r(e){let{children:t,version:n}=e;return a.createElement(o.Provider,{value:n},t)}function s(){const e=(0,a.useContext)(o);if(null===e)throw new l.i6("DocsVersionProvider");return e}}}]); \ No newline at end of file diff --git a/assets/js/17896441.62d02e28.js b/assets/js/17896441.62d02e28.js new file mode 100755 index 000000000..dd68cc58f --- /dev/null +++ b/assets/js/17896441.62d02e28.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6752],{29752:(e,n,t)=>{t.r(n),t.d(n,{default:()=>ae});var s=t(11504),a=t(68900),i=t(91100),o=t(17624);const l=s.createContext(null);function c(e){let{children:n,content:t}=e;const a=function(e){return(0,s.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(t);return(0,o.jsx)(l.Provider,{value:a,children:n})}function r(){const e=(0,s.useContext)(l);if(null===e)throw new i.AH("DocProvider");return e}function d(){const{metadata:e,frontMatter:n,assets:t}=r();return(0,o.jsx)(a.U7,{title:e.title,description:e.description,keywords:n.keywords,image:t.image??n.image})}var u=t(34064),m=t(11432),h=t(84357),v=t(70308);function b(e){const{previous:n,next:t}=e;return(0,o.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,h.G)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[n&&(0,o.jsx)(v.c,{...n,subLabel:(0,o.jsx)(h.c,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),t&&(0,o.jsx)(v.c,{...t,subLabel:(0,o.jsx)(h.c,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}function x(){const{metadata:e}=r();return(0,o.jsx)(b,{previous:e.previous,next:e.next})}var f=t(28264),p=t(10867),g=t(62840),j=t(45864),C=t(94592),L=t(69920);const N={unreleased:function(e){let{siteTitle:n,versionMetadata:t}=e;return(0,o.jsx)(h.c,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:n,versionLabel:(0,o.jsx)("b",{children:t.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:n,versionMetadata:t}=e;return(0,o.jsx)(h.c,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:n,versionLabel:(0,o.jsx)("b",{children:t.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function _(e){const n=N[e.versionMetadata.banner];return(0,o.jsx)(n,{...e})}function k(e){let{versionLabel:n,to:t,onClick:s}=e;return(0,o.jsx)(h.c,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:n,latestVersionLink:(0,o.jsx)("b",{children:(0,o.jsx)(p.c,{to:t,onClick:s,children:(0,o.jsx)(h.c,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function H(e){let{className:n,versionMetadata:t}=e;const{siteConfig:{title:s}}=(0,f.c)(),{pluginId:a}=(0,g.UF)({failfast:!0}),{savePreferredVersionName:i}=(0,C.iy)(a),{latestDocSuggestion:l,latestVersionSuggestion:c}=(0,g.i8)(a),r=l??(d=c).docs.find((e=>e.id===d.mainDocId));var d;return(0,o.jsxs)("div",{className:(0,u.c)(n,j.W.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,o.jsx)("div",{children:(0,o.jsx)(_,{siteTitle:s,versionMetadata:t})}),(0,o.jsx)("div",{className:"margin-top--md",children:(0,o.jsx)(k,{versionLabel:c.label,to:r.path,onClick:()=>i(c.name)})})]})}function T(e){let{className:n}=e;const t=(0,L.E)();return t.banner?(0,o.jsx)(H,{className:n,versionMetadata:t}):null}function M(e){let{className:n}=e;const t=(0,L.E)();return t.badge?(0,o.jsx)("span",{className:(0,u.c)(n,j.W.docs.docVersionBadge,"badge badge--secondary"),children:(0,o.jsx)(h.c,{id:"theme.docs.versionBadge.label",values:{versionLabel:t.label},children:"Version: {versionLabel}"})}):null}var y=t(1096),E=t(43092);function I(){const{metadata:e}=r(),{editUrl:n,lastUpdatedAt:t,lastUpdatedBy:s,tags:a}=e,i=a.length>0,l=!!(n||t||s);return i||l?(0,o.jsxs)("footer",{className:(0,u.c)(j.W.docs.docFooter,"docusaurus-mt-lg"),children:[i&&(0,o.jsx)("div",{className:(0,u.c)("row margin-top--sm",j.W.docs.docFooterTagsRow),children:(0,o.jsx)("div",{className:"col",children:(0,o.jsx)(y.c,{tags:a})})}),l&&(0,o.jsx)(E.c,{className:(0,u.c)("margin-top--sm",j.W.docs.docFooterEditMetaRow),editUrl:n,lastUpdatedAt:t,lastUpdatedBy:s})]}):null}var w=t(58448),A=t(43088);const B={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function O(e){let{collapsed:n,...t}=e;return(0,o.jsx)("button",{type:"button",...t,className:(0,u.c)("clean-btn",B.tocCollapsibleButton,!n&&B.tocCollapsibleButtonExpanded,t.className),children:(0,o.jsx)(h.c,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const U={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function V(e){let{toc:n,className:t,minHeadingLevel:s,maxHeadingLevel:a}=e;const{collapsed:i,toggleCollapsed:l}=(0,w.a)({initialState:!0});return(0,o.jsxs)("div",{className:(0,u.c)(U.tocCollapsible,!i&&U.tocCollapsibleExpanded,t),children:[(0,o.jsx)(O,{collapsed:i,onClick:l}),(0,o.jsx)(w.U,{lazy:!0,className:U.tocCollapsibleContent,collapsed:i,children:(0,o.jsx)(A.c,{toc:n,minHeadingLevel:s,maxHeadingLevel:a})})]})}const S={tocMobile:"tocMobile_ITEo"};function P(){const{toc:e,frontMatter:n}=r();return(0,o.jsx)(V,{toc:e,minHeadingLevel:n.toc_min_heading_level,maxHeadingLevel:n.toc_max_heading_level,className:(0,u.c)(j.W.docs.docTocMobile,S.tocMobile)})}var F=t(75124);function W(){const{toc:e,frontMatter:n}=r();return(0,o.jsx)(F.c,{toc:e,minHeadingLevel:n.toc_min_heading_level,maxHeadingLevel:n.toc_max_heading_level,className:j.W.docs.docTocDesktop})}var R=t(56448),z=t(15216);function D(e){let{children:n}=e;const t=function(){const{metadata:e,frontMatter:n,contentTitle:t}=r();return n.hide_title||void 0!==t?null:e.title}();return(0,o.jsxs)("div",{className:(0,u.c)(j.W.docs.docMarkdown,"markdown"),children:[t&&(0,o.jsx)("header",{children:(0,o.jsx)(R.c,{as:"h1",children:t})}),(0,o.jsx)(z.c,{children:n})]})}var G=t(79940),q=t(13376),$=t(70964);function Y(e){return(0,o.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,o.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const Z={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function J(){const e=(0,$.c)("/");return(0,o.jsx)("li",{className:"breadcrumbs__item",children:(0,o.jsx)(p.c,{"aria-label":(0,h.G)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,o.jsx)(Y,{className:Z.breadcrumbHomeIcon})})})}const K={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function Q(e){let{children:n,href:t,isLast:s}=e;const a="breadcrumbs__link";return s?(0,o.jsx)("span",{className:a,itemProp:"name",children:n}):t?(0,o.jsx)(p.c,{className:a,href:t,itemProp:"item",children:(0,o.jsx)("span",{itemProp:"name",children:n})}):(0,o.jsx)("span",{className:a,children:n})}function X(e){let{children:n,active:t,index:s,addMicrodata:a}=e;return(0,o.jsxs)("li",{...a&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,u.c)("breadcrumbs__item",{"breadcrumbs__item--active":t}),children:[n,(0,o.jsx)("meta",{itemProp:"position",content:String(s+1)})]})}function ee(){const e=(0,G.js)(),n=(0,q.Y5)();return e?(0,o.jsx)("nav",{className:(0,u.c)(j.W.docs.docBreadcrumbs,K.breadcrumbsContainer),"aria-label":(0,h.G)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,o.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[n&&(0,o.jsx)(J,{}),e.map(((n,t)=>{const s=t===e.length-1,a="category"===n.type&&n.linkUnlisted?void 0:n.href;return(0,o.jsx)(X,{active:s,index:t,addMicrodata:!!a,children:(0,o.jsx)(Q,{href:a,isLast:s,children:n.label})},t)}))]})}):null}var ne=t(61528);const te={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function se(e){let{children:n}=e;const t=function(){const{frontMatter:e,toc:n}=r(),t=(0,m.U)(),s=e.hide_table_of_contents,a=!s&&n.length>0;return{hidden:s,mobile:a?(0,o.jsx)(P,{}):void 0,desktop:!a||"desktop"!==t&&"ssr"!==t?void 0:(0,o.jsx)(W,{})}}(),{metadata:{unlisted:s}}=r();return(0,o.jsxs)("div",{className:"row",children:[(0,o.jsxs)("div",{className:(0,u.c)("col",!t.hidden&&te.docItemCol),children:[s&&(0,o.jsx)(ne.c,{}),(0,o.jsx)(T,{}),(0,o.jsxs)("div",{className:te.docItemContainer,children:[(0,o.jsxs)("article",{children:[(0,o.jsx)(ee,{}),(0,o.jsx)(M,{}),t.mobile,(0,o.jsx)(D,{children:n}),(0,o.jsx)(I,{})]}),(0,o.jsx)(x,{})]})]}),t.desktop&&(0,o.jsx)("div",{className:"col col--3",children:t.desktop})]})}function ae(e){const n=`docs-doc-id-${e.content.metadata.id}`,t=e.content;return(0,o.jsx)(c,{content:e.content,children:(0,o.jsxs)(a.cr,{className:n,children:[(0,o.jsx)(d,{}),(0,o.jsx)(se,{children:(0,o.jsx)(t,{})})]})})}},75124:(e,n,t)=>{t.d(n,{c:()=>r});t(11504);var s=t(34064),a=t(43088);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var o=t(17624);const l="table-of-contents__link toc-highlight",c="table-of-contents__link--active";function r(e){let{className:n,...t}=e;return(0,o.jsx)("div",{className:(0,s.c)(i.tableOfContents,"thin-scrollbar",n),children:(0,o.jsx)(a.c,{...t,linkClassName:l,linkActiveClassName:c})})}},43088:(e,n,t)=>{t.d(n,{c:()=>b});var s=t(11504),a=t(21824);function i(e){const n=e.map((e=>({...e,parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const s=t.slice(2,e.level);e.parentIndex=Math.max(...s),t[e.level]=n}));const s=[];return n.forEach((e=>{const{parentIndex:t,...a}=e;t>=0?n[t].children.push(a):s.push(a)})),s}function o(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:s}=e;return n.flatMap((e=>{const n=o({toc:e.children,minHeadingLevel:t,maxHeadingLevel:s});return function(e){return e.level>=t&&e.level<=s}(e)?[{...e,children:n}]:n}))}function l(e){const n=e.getBoundingClientRect();return n.top===n.bottom?l(e.parentNode):n}function c(e,n){let{anchorTopOffset:t}=n;const s=e.find((e=>l(e).top>=t));if(s){return function(e){return e.top>0&&e.bottom{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function d(e){const n=(0,s.useRef)(void 0),t=r();(0,s.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:a,minHeadingLevel:i,maxHeadingLevel:o}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),l=function(e){let{minHeadingLevel:n,maxHeadingLevel:t}=e;const s=[];for(let a=n;a<=t;a+=1)s.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(s.join()))}({minHeadingLevel:i,maxHeadingLevel:o}),r=c(l,{anchorTopOffset:t.current}),d=e.find((e=>r&&r.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(a),e.classList.add(a),n.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,t])}var u=t(10867),m=t(17624);function h(e){let{toc:n,className:t,linkClassName:s,isChild:a}=e;return n.length?(0,m.jsx)("ul",{className:a?void 0:t,children:n.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.c,{to:`#${e.id}`,className:s??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(h,{isChild:!0,toc:e.children,className:t,linkClassName:s})]},e.id)))}):null}const v=s.memo(h);function b(e){let{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:c,minHeadingLevel:r,maxHeadingLevel:u,...h}=e;const b=(0,a.y)(),x=r??b.tableOfContents.minHeadingLevel,f=u??b.tableOfContents.maxHeadingLevel,p=function(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return(0,s.useMemo)((()=>o({toc:i(n),minHeadingLevel:t,maxHeadingLevel:a})),[n,t,a])}({toc:n,minHeadingLevel:x,maxHeadingLevel:f});return d((0,s.useMemo)((()=>{if(l&&c)return{linkClassName:l,linkActiveClassName:c,minHeadingLevel:x,maxHeadingLevel:f}}),[l,c,x,f])),(0,m.jsx)(v,{toc:p,className:t,linkClassName:l,...h})}},61528:(e,n,t)=>{t.d(n,{c:()=>h});t(11504);var s=t(34064),a=t(84357),i=t(56952),o=t(17624);function l(){return(0,o.jsx)(a.c,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function c(){return(0,o.jsx)(a.c,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function r(){return(0,o.jsx)(i.c,{children:(0,o.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=t(45864),u=t(30304);function m(e){let{className:n}=e;return(0,o.jsx)(u.c,{type:"caution",title:(0,o.jsx)(l,{}),className:(0,s.c)(n,d.W.common.unlistedBanner),children:(0,o.jsx)(c,{})})}function h(e){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r,{}),(0,o.jsx)(m,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/1be78505.0a057c22.js b/assets/js/1be78505.0a057c22.js deleted file mode 100755 index 73a051986..000000000 --- a/assets/js/1be78505.0a057c22.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9514,4972],{9963:(e,t,n)=>{n.r(t),n.d(t,{default:()=>ge});var a=n(7294),o=n(4334),l=n(1944),r=n(5281),c=n(3320),i=n(2802),s=n(4477),d=n(1116),m=n(7961),u=n(5999),b=n(2466),p=n(5936);const h={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};function E(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),l=(0,a.useRef)(!1),{startScroll:r,cancelScroll:c}=(0,b.Ct)();return(0,b.RF)(((e,n)=>{let{scrollY:a}=e;const r=n?.scrollY;r&&(l.current?l.current=!1:a>=r?(c(),o(!1)):a{e.location.hash&&(l.current=!0,o(!1))})),{shown:n,scrollToTop:()=>r(0)}}({threshold:300});return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.Z)("clean-btn",r.k.common.backToTopButton,h.backToTopButton,e&&h.backToTopButtonShow),type:"button",onClick:t})}var f=n(1442),g=n(6550),v=n(7524),k=n(6668),_=n(1327),C=n(3117);function S(e){return a.createElement("svg",(0,C.Z)({width:"20",height:"20","aria-hidden":"true"},e),a.createElement("g",{fill:"#7a7a7a"},a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))}const I={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function N(e){let{onClick:t}=e;return a.createElement("button",{type:"button",title:(0,u.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.Z)("button button--secondary button--outline",I.collapseSidebarButton),onClick:t},a.createElement(S,{className:I.collapseSidebarButtonIcon}))}var T=n(9689),x=n(902);const Z=Symbol("EmptyContext"),B=a.createContext(Z);function w(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),l=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return a.createElement(B.Provider,{value:l},t)}var y=n(6043),L=n(8596),A=n(9960),F=n(2389);function M(e){let{categoryLabel:t,onClick:n}=e;return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel",message:"Toggle the collapsible sidebar category '{label}'",description:"The ARIA label to toggle the collapsible sidebar category"},{label:t}),type:"button",className:"clean-btn menu__caret",onClick:n})}function H(e){let{item:t,onItemClick:n,activePath:l,level:c,index:s,...d}=e;const{items:m,label:u,collapsible:b,className:p,href:h}=t,{docs:{sidebar:{autoCollapseCategories:E}}}=(0,k.L)(),f=function(e){const t=(0,F.Z)();return(0,a.useMemo)((()=>e.href?e.href:!t&&e.collapsible?(0,i.Wl)(e):void 0),[e,t])}(t),g=(0,i._F)(t,l),v=(0,L.Mg)(h,l),{collapsed:_,setCollapsed:S}=(0,y.u)({initialState:()=>!!b&&(!g&&t.collapsed)}),{expandedItem:I,setExpandedItem:N}=function(){const e=(0,a.useContext)(B);if(e===Z)throw new x.i6("DocSidebarItemsExpandedStateProvider");return e}(),T=function(e){void 0===e&&(e=!_),N(e?null:s),S(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const l=(0,x.D9)(t);(0,a.useEffect)((()=>{t&&!l&&n&&o(!1)}),[t,l,n,o])}({isActive:g,collapsed:_,updateCollapsed:T}),(0,a.useEffect)((()=>{b&&null!=I&&I!==s&&E&&S(!0)}),[b,I,s,S,E]),a.createElement("li",{className:(0,o.Z)(r.k.docs.docSidebarItemCategory,r.k.docs.docSidebarItemCategoryLevel(c),"menu__list-item",{"menu__list-item--collapsed":_},p)},a.createElement("div",{className:(0,o.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v})},a.createElement(A.Z,(0,C.Z)({className:(0,o.Z)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!h&&b,"menu__link--active":g}),onClick:b?e=>{n?.(t),h?T(!1):(e.preventDefault(),T())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":b?!_:void 0,href:b?f??"#":f},d),u),h&&b&&a.createElement(M,{categoryLabel:u,onClick:e=>{e.preventDefault(),T()}})),a.createElement(y.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:_},a.createElement(j,{items:m,tabIndex:_?-1:0,onItemClick:n,activePath:l,level:c+1})))}var P=n(3919),W=n(9471);const D={menuExternalLink:"menuExternalLink_NmtK"};function R(e){let{item:t,onItemClick:n,activePath:l,level:c,index:s,...d}=e;const{href:m,label:u,className:b,autoAddBaseUrl:p}=t,h=(0,i._F)(t,l),E=(0,P.Z)(m);return a.createElement("li",{className:(0,o.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(c),"menu__list-item",b),key:u},a.createElement(A.Z,(0,C.Z)({className:(0,o.Z)("menu__link",!E&&D.menuExternalLink,{"menu__link--active":h}),autoAddBaseUrl:p,"aria-current":h?"page":void 0,to:m},E&&{onClick:n?()=>n(t):void 0},d),u,!E&&a.createElement(W.Z,null)))}const V={menuHtmlItem:"menuHtmlItem_M9Kj"};function z(e){let{item:t,level:n,index:l}=e;const{value:c,defaultStyle:i,className:s}=t;return a.createElement("li",{className:(0,o.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(n),i&&[V.menuHtmlItem,"menu__list-item"],s),key:l,dangerouslySetInnerHTML:{__html:c}})}function U(e){let{item:t,...n}=e;switch(t.type){case"category":return a.createElement(H,(0,C.Z)({item:t},n));case"html":return a.createElement(z,(0,C.Z)({item:t},n));default:return a.createElement(R,(0,C.Z)({item:t},n))}}function K(e){let{items:t,...n}=e;return a.createElement(w,null,t.map(((e,t)=>a.createElement(U,(0,C.Z)({key:t,item:e,index:t},n)))))}const j=(0,a.memo)(K),q={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function G(e){let{path:t,sidebar:n,className:l}=e;const c=function(){const{isActive:e}=(0,T.nT)(),[t,n]=(0,a.useState)(e);return(0,b.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return a.createElement("nav",{"aria-label":(0,u.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.Z)("menu thin-scrollbar",q.menu,c&&q.menuWithAnnouncementBar,l)},a.createElement("ul",{className:(0,o.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(j,{items:n,activePath:t,level:1})))}const Y="sidebar_njMd",O="sidebarWithHideableNavbar_wUlq",X="sidebarHidden_VK0M",J="sidebarLogo_isFc";function Q(e){let{path:t,sidebar:n,onCollapse:l,isHidden:r}=e;const{navbar:{hideOnScroll:c},docs:{sidebar:{hideable:i}}}=(0,k.L)();return a.createElement("div",{className:(0,o.Z)(Y,c&&O,r&&X)},c&&a.createElement(_.Z,{tabIndex:-1,className:J}),a.createElement(G,{path:t,sidebar:n}),i&&a.createElement(N,{onClick:l}))}const $=a.memo(Q);var ee=n(3102),te=n(2961);const ne=e=>{let{sidebar:t,path:n}=e;const l=(0,te.e)();return a.createElement("ul",{className:(0,o.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(j,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&l.toggle(),"link"===e.type&&l.toggle()},level:1}))};function ae(e){return a.createElement(ee.Zo,{component:ne,props:e})}const oe=a.memo(ae);function le(e){const t=(0,v.i)(),n="desktop"===t||"ssr"===t,o="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement($,e),o&&a.createElement(oe,e))}const re={expandButton:"expandButton_m80_",expandButtonIcon:"expandButtonIcon_BlDH"};function ce(e){let{toggleSidebar:t}=e;return a.createElement("div",{className:re.expandButton,title:(0,u.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t},a.createElement(S,{className:re.expandButtonIcon}))}const ie={docSidebarContainer:"docSidebarContainer_b6E3",docSidebarContainerHidden:"docSidebarContainerHidden_b3ry",sidebarViewport:"sidebarViewport_Xe31"};function se(e){let{children:t}=e;const n=(0,d.V)();return a.createElement(a.Fragment,{key:n?.name??"noSidebar"},t)}function de(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:l}=e;const{pathname:c}=(0,g.TH)(),[i,s]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{i&&s(!1),!i&&(0,f.n)()&&s(!0),l((e=>!e))}),[l,i]);return a.createElement("aside",{className:(0,o.Z)(r.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&s(!0)}},a.createElement(se,null,a.createElement("div",{className:(0,o.Z)(ie.sidebarViewport,i&&ie.sidebarViewportHidden)},a.createElement(le,{sidebar:t,path:c,onCollapse:d,isHidden:i}),i&&a.createElement(ce,{toggleSidebar:d}))))}const me={docMainContainer:"docMainContainer_gTbr",docMainContainerEnhanced:"docMainContainerEnhanced_Uz_u",docItemWrapperEnhanced:"docItemWrapperEnhanced_czyv"};function ue(e){let{hiddenSidebarContainer:t,children:n}=e;const l=(0,d.V)();return a.createElement("main",{className:(0,o.Z)(me.docMainContainer,(t||!l)&&me.docMainContainerEnhanced)},a.createElement("div",{className:(0,o.Z)("container padding-top--md padding-bottom--lg",me.docItemWrapper,t&&me.docItemWrapperEnhanced)},n))}const be={docPage:"docPage__5DB",docsWrapper:"docsWrapper_BCFX","themedComponent--light":"themedComponent--light_NU7w"};function pe(e){let{children:t}=e;const n=(0,d.V)(),[o,l]=(0,a.useState)(!1);return a.createElement(m.Z,{wrapperClassName:be.docsWrapper},a.createElement(E,null),a.createElement("div",{className:be.docPage},n&&a.createElement(de,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:l}),a.createElement(ue,{hiddenSidebarContainer:o},t)))}var he=n(4972),Ee=n(197);function fe(e){const{versionMetadata:t}=e;return a.createElement(a.Fragment,null,a.createElement(Ee.Z,{version:t.version,tag:(0,c.os)(t.pluginId,t.version)}),a.createElement(l.d,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function ge(e){const{versionMetadata:t}=e,n=(0,i.hI)(e);if(!n)return a.createElement(he.default,null);const{docElement:c,sidebarName:m,sidebarItems:u}=n;return a.createElement(a.Fragment,null,a.createElement(fe,e),a.createElement(l.FG,{className:(0,o.Z)(r.k.wrapper.docsPages,r.k.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.q,{version:t},a.createElement(d.b,{name:m,items:u},a.createElement(pe,null,c)))))}},4972:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});var a=n(7294),o=n(5999),l=n(1944),r=n(7961);function c(){return a.createElement(a.Fragment,null,a.createElement(l.d,{title:(0,o.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}},4477:(e,t,n)=>{n.d(t,{E:()=>c,q:()=>r});var a=n(7294),o=n(902);const l=a.createContext(null);function r(e){let{children:t,version:n}=e;return a.createElement(l.Provider,{value:n},t)}function c(){const e=(0,a.useContext)(l);if(null===e)throw new o.i6("DocsVersionProvider");return e}}}]); \ No newline at end of file diff --git a/assets/js/21c04bfb.7dc29b24.js b/assets/js/21c04bfb.7dc29b24.js deleted file mode 100755 index 3e19950fb..000000000 --- a/assets/js/21c04bfb.7dc29b24.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5634],{3905:(e,a,i)=>{i.d(a,{Zo:()=>p,kt:()=>R});var o=i(7294);function n(e,a,i){return a in e?Object.defineProperty(e,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[a]=i,e}function r(e,a){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);a&&(o=o.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),i.push.apply(i,o)}return i}function t(e){for(var a=1;a=0||(n[i]=e[i]);return n}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var c=o.createContext({}),s=function(e){var a=o.useContext(c),i=a;return e&&(i="function"==typeof e?e(a):t(t({},a),e)),i},p=function(e){var a=s(e.components);return o.createElement(c.Provider,{value:a},e.children)},l="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return o.createElement(o.Fragment,{},a)}},g=o.forwardRef((function(e,a){var i=e.components,n=e.mdxType,r=e.originalType,c=e.parentName,p=d(e,["components","mdxType","originalType","parentName"]),l=s(i),g=n,R=l["".concat(c,".").concat(g)]||l[g]||u[g]||r;return i?o.createElement(R,t(t({ref:a},p),{},{components:i})):o.createElement(R,t({ref:a},p))}));function R(e,a){var i=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var r=i.length,t=new Array(r);t[0]=g;var d={};for(var c in a)hasOwnProperty.call(a,c)&&(d[c]=a[c]);d.originalType=e,d[l]="string"==typeof e?e:n,t[1]=d;for(var s=2;s{i.r(a),i.d(a,{assets:()=>c,contentTitle:()=>t,default:()=>u,frontMatter:()=>r,metadata:()=>d,toc:()=>s});var o=i(3117),n=(i(7294),i(3905));const r={id:"pacote",title:"Configura\xe7\xe3o da Arduino IDE",slug:"/franzininho-diy/pacote",description:"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho"},t=void 0,d={unversionedId:"FranzininhoDIY/exemplos-arduino/pacote",id:"FranzininhoDIY/exemplos-arduino/pacote",title:"Configura\xe7\xe3o da Arduino IDE",description:"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho",source:"@site/docs/FranzininhoDIY/exemplos-arduino/pacote.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/pacote",permalink:"/docs/franzininho-diy/pacote",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/pacote.md",tags:[],version:"current",frontMatter:{id:"pacote",title:"Configura\xe7\xe3o da Arduino IDE",slug:"/franzininho-diy/pacote",description:"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho"},sidebar:"docs",previous:{title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",permalink:"/docs/franzininho-diy/drivers-micronucleus"},next:{title:"Entradas e Sa\xeddas Digitais",permalink:"/docs/franzininho-diy/entradas-saidas-digitais"}},c={},s=[{value:"Configura\xe7\xe3o da Arduino IDE",id:"configura\xe7\xe3o-da-arduino-ide",level:2},{value:"Upload de c\xf3digo",id:"upload-de-c\xf3digo",level:2},{value:"Resolvendo problemas de configura\xe7\xe3o e upload",id:"resolvendo-problemas-de-configura\xe7\xe3o-e-upload",level:2}],p={toc:s},l="wrapper";function u(e){let{components:a,...r}=e;return(0,n.kt)(l,(0,o.Z)({},p,r,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Para programa\xe7\xe3o da Franzininho DIY recomendamos o uso do pacote ATtinyCore, mantido pelo Spence Konde, ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/SpenceKonde/ATTinyCore"},"aqui"),"."),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"Em breve teremos um pacote Franzininho que facilitar\xe1 o processo de configura\xe7\xe3o da IDE. Fique ligado(a) nas atualiza\xe7\xf5es.")),(0,n.kt)("h2",{id:"configura\xe7\xe3o-da-arduino-ide"},"Configura\xe7\xe3o da Arduino IDE"),(0,n.kt)("p",null,"Ap\xf3s instalar a Arduino IDE(",(0,n.kt)("a",{parentName:"p",href:"https://www.arduino.cc/en/software"},"baixe aqui"),"), acesse ",(0,n.kt)("strong",{parentName:"p"},"Arquivo -> Prefer\xeancias ")," e cole a URL a seguir em ",(0,n.kt)("strong",{parentName:"p"},"URL Adicionais Para Gerenciadores de Placas"),":"),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"http://drazzy.com/package_drazzy.com_index.json")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"URL ATTINY CORE",src:i(1239).Z,width:"924",height:"620"})),(0,n.kt)("p",null,"Agora, abra o Gerenciador de placas, acesse: ",(0,n.kt)("strong",{parentName:"p"},"Ferramentas -> Placa -> Gerenciador de placas")," e procure por ",(0,n.kt)("strong",{parentName:"p"},"ATTinyCore"),". Ap\xf3s encontrar o pacote clique em instalar e aguarde a instala\xe7\xe3o:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Instala\xe7\xe3o do Pacote",src:i(994).Z,width:"884",height:"511"})),(0,n.kt)("p",null,"Pronto. agora vamos configurar a placa. Selecione a placa ",(0,n.kt)("strong",{parentName:"p"},"ATTiny85 (Micronucleus/Digispark)"),":"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Selecionando a Placa",src:i(1776).Z,width:"1279",height:"1051"})),(0,n.kt)("p",null,"As demais configura\xe7\xf5es devem ficar da seguinte forma:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Configura\xe7\xf5es",src:i(7292).Z,width:"1003",height:"773"})),(0,n.kt)("p",null,"Agora vamos carregar um Sketch para verificarmos se est\xe1 tudo certo e entendermos o processo Upload para a placa."),(0,n.kt)("h2",{id:"upload-de-c\xf3digo"},"Upload de c\xf3digo"),(0,n.kt)("p",null,"Abra o exemplo Blink. Acesse ",(0,n.kt)("strong",{parentName:"p"},"Arquivo -> Exemplos -> 01.Basics -> Blink"),":"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Blink",src:i(5508).Z,width:"1298",height:"1049"})),(0,n.kt)("p",null,"Agora vamos carregar o Sketch para a placa. Clique no bot\xe3o ",(0,n.kt)("strong",{parentName:"p"},"Carregar"),":"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Bot\xe3o upload",src:i(8836).Z,width:"614",height:"137"})),(0,n.kt)("p",null,"Ap\xf3s a compila\xe7\xe3o ser\xe1 exibida a seguinte mensagem:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"MEnsagem",src:i(6957).Z,width:"1278",height:"344"})),(0,n.kt)("p",null,"Conecte a placa na porta USB. Caso a placa ja esteja conectada pressione o bot\xe3o de reset ao ver essa mensagem. O c\xf3digo ser\xe1 carregado para a placa:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Carregando o c\xf3digo",src:i(6849).Z,width:"1288",height:"508"})),(0,n.kt)("p",null,"Ap\xf3s o upload o LED amarelo da placa passar\xe1 a piscar. "),(0,n.kt)("p",null,"Se voc\xea chegou at\xe9 aqui e n\xe3o teve nenhum problema, parab\xe9ns! Voc\xea j\xe1 pode testar os exemplos aqui na documenta\xe7\xe3o ou fazer os seus pr\xf3prios projetos."),(0,n.kt)("p",null,"Caso tenha algum problema verifique se consegue resolver com as solu\xe7\xf5es a seguir."),(0,n.kt)("h2",{id:"resolvendo-problemas-de-configura\xe7\xe3o-e-upload"},"Resolvendo problemas de configura\xe7\xe3o e upload"),(0,n.kt)("admonition",{type:"warning"},(0,n.kt)("p",{parentName:"admonition"},"Em breve")))}u.isMDXComponent=!0},5508:(e,a,i)=>{i.d(a,{Z:()=>o});const o=i.p+"assets/images/blink-c2640cc259a421e9d06aa92307d788a5.png"},6849:(e,a,i)=>{i.d(a,{Z:()=>o});const o=i.p+"assets/images/carregando-c0711ebcf0c47f8fce010a68a84a1cd2.png"},7292:(e,a,i)=>{i.d(a,{Z:()=>o});const o=i.p+"assets/images/configuracoes-f556517325fcec046cac4c1f856f4d1d.png"},994:(e,a,i)=>{i.d(a,{Z:()=>o});const o=i.p+"assets/images/instalacao-3eca2c3f3a57a5d014908f365c885b15.png"},6957:(e,a,i)=>{i.d(a,{Z:()=>o});const o=i.p+"assets/images/mensagem-ba029da44dd3c0bae107dfb4cbafefb5.png"},1776:(e,a,i)=>{i.d(a,{Z:()=>o});const o=i.p+"assets/images/placa-4f7ad0a641424b79a3582cf2da447822.png"},1239:(e,a,i)=>{i.d(a,{Z:()=>o});const o=i.p+"assets/images/preferencias-9f46ca3123e37b55ac190aa0e68c18ab.png"},8836:(e,a,i)=>{i.d(a,{Z:()=>o});const o="data:image/png;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/21c04bfb.8403d90e.js b/assets/js/21c04bfb.8403d90e.js new file mode 100755 index 000000000..b6d627d11 --- /dev/null +++ b/assets/js/21c04bfb.8403d90e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8968],{93232:(e,a,i)=>{i.r(a),i.d(a,{assets:()=>d,contentTitle:()=>c,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>t});var n=i(17624),o=i(95788);const r={id:"pacote",title:"Configura\xe7\xe3o da Arduino IDE",slug:"/franzininho-diy/pacote",description:"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho"},c=void 0,s={id:"FranzininhoDIY/exemplos-arduino/pacote",title:"Configura\xe7\xe3o da Arduino IDE",description:"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho",source:"@site/docs/FranzininhoDIY/exemplos-arduino/pacote.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/pacote",permalink:"/docs/franzininho-diy/pacote",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/pacote.md",tags:[],version:"current",frontMatter:{id:"pacote",title:"Configura\xe7\xe3o da Arduino IDE",slug:"/franzininho-diy/pacote",description:"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho"},sidebar:"docs",previous:{title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",permalink:"/docs/franzininho-diy/drivers-micronucleus"},next:{title:"Entradas e Sa\xeddas Digitais",permalink:"/docs/franzininho-diy/entradas-saidas-digitais"}},d={},t=[{value:"Configura\xe7\xe3o da Arduino IDE",id:"configura\xe7\xe3o-da-arduino-ide",level:2},{value:"Upload de c\xf3digo",id:"upload-de-c\xf3digo",level:2},{value:"Resolvendo problemas de configura\xe7\xe3o e upload",id:"resolvendo-problemas-de-configura\xe7\xe3o-e-upload",level:2}];function l(e){const a={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",p:"p",strong:"strong",...(0,o.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(a.p,{children:["Para programa\xe7\xe3o da Franzininho DIY recomendamos o uso do pacote ATtinyCore, mantido pelo Spence Konde, ",(0,n.jsx)(a.a,{href:"https://github.com/SpenceKonde/ATTinyCore",children:"aqui"}),"."]}),"\n",(0,n.jsx)(a.admonition,{type:"tip",children:(0,n.jsx)(a.p,{children:"Em breve teremos um pacote Franzininho que facilitar\xe1 o processo de configura\xe7\xe3o da IDE. Fique ligado(a) nas atualiza\xe7\xf5es."})}),"\n",(0,n.jsx)(a.h2,{id:"configura\xe7\xe3o-da-arduino-ide",children:"Configura\xe7\xe3o da Arduino IDE"}),"\n",(0,n.jsxs)(a.p,{children:["Ap\xf3s instalar a Arduino IDE(",(0,n.jsx)(a.a,{href:"https://www.arduino.cc/en/software",children:"baixe aqui"}),"), acesse **Arquivo -> Prefer\xeancias ** e cole a URL a seguir em ",(0,n.jsx)(a.strong,{children:"URL Adicionais Para Gerenciadores de Placas"}),":"]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.code,{children:"http://drazzy.com/package_drazzy.com_index.json"})}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"URL ATTINY CORE",src:i(22324).c+"",width:"924",height:"620"})}),"\n",(0,n.jsxs)(a.p,{children:["Agora, abra o Gerenciador de placas, acesse: ",(0,n.jsx)(a.strong,{children:"Ferramentas -> Placa -> Gerenciador de placas"})," e procure por ",(0,n.jsx)(a.strong,{children:"ATTinyCore"}),". Ap\xf3s encontrar o pacote clique em instalar e aguarde a instala\xe7\xe3o:"]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Instala\xe7\xe3o do Pacote",src:i(4436).c+"",width:"884",height:"511"})}),"\n",(0,n.jsxs)(a.p,{children:["Pronto. agora vamos configurar a placa. Selecione a placa ",(0,n.jsx)(a.strong,{children:"ATTiny85 (Micronucleus/Digispark)"}),":"]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Selecionando a Placa",src:i(18128).c+"",width:"1279",height:"1051"})}),"\n",(0,n.jsx)(a.p,{children:"As demais configura\xe7\xf5es devem ficar da seguinte forma:"}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Configura\xe7\xf5es",src:i(89212).c+"",width:"1003",height:"773"})}),"\n",(0,n.jsx)(a.p,{children:"Agora vamos carregar um Sketch para verificarmos se est\xe1 tudo certo e entendermos o processo Upload para a placa."}),"\n",(0,n.jsx)(a.h2,{id:"upload-de-c\xf3digo",children:"Upload de c\xf3digo"}),"\n",(0,n.jsxs)(a.p,{children:["Abra o exemplo Blink. Acesse ",(0,n.jsx)(a.strong,{children:"Arquivo -> Exemplos -> 01.Basics -> Blink"}),":"]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Blink",src:i(14860).c+"",width:"1298",height:"1049"})}),"\n",(0,n.jsxs)(a.p,{children:["Agora vamos carregar o Sketch para a placa. Clique no bot\xe3o ",(0,n.jsx)(a.strong,{children:"Carregar"}),":"]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Bot\xe3o upload",src:i(82703).c+"",width:"614",height:"137"})}),"\n",(0,n.jsx)(a.p,{children:"Ap\xf3s a compila\xe7\xe3o ser\xe1 exibida a seguinte mensagem:"}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"MEnsagem",src:i(4248).c+"",width:"1278",height:"344"})}),"\n",(0,n.jsx)(a.p,{children:"Conecte a placa na porta USB. Caso a placa ja esteja conectada pressione o bot\xe3o de reset ao ver essa mensagem. O c\xf3digo ser\xe1 carregado para a placa:"}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Carregando o c\xf3digo",src:i(51448).c+"",width:"1288",height:"508"})}),"\n",(0,n.jsx)(a.p,{children:"Ap\xf3s o upload o LED amarelo da placa passar\xe1 a piscar."}),"\n",(0,n.jsx)(a.p,{children:"Se voc\xea chegou at\xe9 aqui e n\xe3o teve nenhum problema, parab\xe9ns! Voc\xea j\xe1 pode testar os exemplos aqui na documenta\xe7\xe3o ou fazer os seus pr\xf3prios projetos."}),"\n",(0,n.jsx)(a.p,{children:"Caso tenha algum problema verifique se consegue resolver com as solu\xe7\xf5es a seguir."}),"\n",(0,n.jsx)(a.h2,{id:"resolvendo-problemas-de-configura\xe7\xe3o-e-upload",children:"Resolvendo problemas de configura\xe7\xe3o e upload"}),"\n",(0,n.jsx)(a.admonition,{type:"warning",children:(0,n.jsx)(a.p,{children:"Em breve"})})]})}function p(e={}){const{wrapper:a}={...(0,o.MN)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},95788:(e,a,i)=>{i.d(a,{MN:()=>t});var n=i(11504);function o(e,a,i){return a in e?Object.defineProperty(e,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[a]=i,e}function r(e,a){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),i.push.apply(i,n)}return i}function c(e){for(var a=1;a=0||(o[i]=e[i]);return o}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(o[i]=e[i])}return o}var d=n.createContext({}),t=function(e){var a=n.useContext(d),i=a;return e&&(i="function"==typeof e?e(a):c(c({},a),e)),i},l={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},p=n.forwardRef((function(e,a){var i=e.components,o=e.mdxType,r=e.originalType,d=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),g=t(i),u=o,R=g["".concat(d,".").concat(u)]||g[u]||l[u]||r;return i?n.createElement(R,c(c({ref:a},p),{},{components:i})):n.createElement(R,c({ref:a},p))}));p.displayName="MDXCreateElement"},14860:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/blink-c2640cc259a421e9d06aa92307d788a5.png"},51448:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/carregando-c0711ebcf0c47f8fce010a68a84a1cd2.png"},89212:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/configuracoes-f556517325fcec046cac4c1f856f4d1d.png"},4436:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/instalacao-3eca2c3f3a57a5d014908f365c885b15.png"},4248:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/mensagem-ba029da44dd3c0bae107dfb4cbafefb5.png"},18128:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/placa-4f7ad0a641424b79a3582cf2da447822.png"},22324:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/preferencias-9f46ca3123e37b55ac190aa0e68c18ab.png"},82703:(e,a,i)=>{i.d(a,{c:()=>n});const n="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAmYAAACJCAYAAACGofT0AAAABHNCSVQICAgIfAhkiAAAHgZJREFUeJzt3XlYVPX+B/A3zMAMw76oCJaCmIW7aLmDay6ZG26lV1GpzLWrbdel0lt2LVO7LT9NEwWsTFs0ck1x14TEDUUxFzDxssMAM8ww8/vDmBiYYVaYId6v5+GROed7zvdzznBm3p7Voe2AKWqpaxCIiIiIyLYcGcqIiIiI7IOw8hexPBteRVcgUMltWQ8RERFRo+VY+YtXUSpDGREREZENaYKZQCWzZR1EREREjZ6j4SZEREREVB8YzIiIiIjsBIMZERERkZ1gMCMiIiKyEwxmRERERHaCwYyIiIjIAA8PD8THx2P58uV12g+DGREREZEBEokEzZs3R0hIiNXnHR4ejqNHj2LMmDF/3fmfiIiIqLFwcnLCoUOHAAAqlQpFRUVIT0/H9u3bkZycjICAAHz11VdISUnBggULkJWVhXHjxqG0tNSo+Xt4eGDPnj1IT0/HzJkzja6LwYyIiIgaLZlMho0bNyIoKAjPPPMMOnXqhKlTp+psm5+fX+f1MJgRERFRoyWXy7Fr1y4AQIsWLdClSxe0adMG6enpWu2q7wGrfH3gwAHk5ORg6NChkMlkWLlyJVJTU2v0ExISgo0bNyItLQ1z5syBSqXSWQ/PMSMiIqJGLyQkBK1bt4ZCoUBaWprR0w0ePBhPPPEEkpKSEBAQgKioqBptHB0dsWjRIqjVaqxevVpvKAO4x4yIiIgaMU9PTxw9ehQAUFZWhoULF+LBgwcICAgwavqcnBy8+uqrcHNzw5AhQ9CsWbMabUaOHInQ0FBs27YNt27dqnV+3GNGREREjVZpaSneeecdbN68GVKpFGvWrEFYWJjR0xcWFkKhUKCsrAwA4ODgoDVeKBQiOjoa5eXliI+PNzg/BjMiIiJqtBQKBQ4fPoxt27Zh48aNEIvFePbZZ602f6VSiXPnzsHZ2RkDBw402J7BjIiIiAh/7e1ydLRuPNqyZQtUKhVmzJgBsVhca1sGMyIiImq0RCIRxo8fj/nz52P27NkAgDNnziAvLw8ymQxt27ZFRESERX3cvXsX+/fvh5+fHyZMmFBrWwYzIiIiarTEYjHmzp2LYcOGITc3F+vXr0dCQgJkMhliYmIgk8kwaNAgi/uJiYmBQqHA5MmT4e3trbedQ+DIZWoACHyw3+JOiYiIiMg04eHhWLFiBdatW8fbZRARERHZUlJSEqZPn47c3FwGMyIiIiJbKikp0dzfjOeYEREREdkJBjMiIiIiO8FgRkRERGQnGMyIiIiI7ASDGREREZGdYDAjIiIishMMZkRERER2gsGMiIiIyE4wmBERERHZCQYzIiIiIjuheSRTXl6eLesgIiIiavQ0wUzk5GTLOoiIiIgaPR7KJCIiIrITDGZEREREdoLBjIiIiMhOMJgRERER2QkGMyIiIiI7wWBGREREZCcYzIiIiIjsBIMZERERkZ1gMCMiIiKyEwxmVrQ1NtbWJZisPmtuiOuHbIt/M0TU2Nh1MGvIH8oNuXYia+F2QERkGqHhJn8ZOmwYxkVGYtfOndi3d29d1aQxberUOu9DH31fKMbWVLXd1thYmyyLi4sLxowdi27du8PLywsKhQKXL13Cvn37cOP6dYvnb6vlql5DdbauqT7Yw7qvVNvngr3USETUUJgUzCL690d8XByGDx9eL8HM1hr6l8rLc+bg3r17WPH22ygoKIBQKETnzp0RGRmJVe+9Z+vyrKahv08NXWP7XCAiqktGB7MnQkMhlUqReOQI+vXrh3bt2uHKlSua8VtjYxG7bRueHTUK7u7uiJo2DUKhENNnzEDPnj1RWlqKnxMSMGnyZM0Xqa7/9VcdtjU2Fi9GR+PDjz7Cq4sWoaysTNNOLBbjgzVr8NrixVAqlXju+efRu08fAMDJEyewPT4eCoXC/DVjgK5l07UclXt0Kv+tXDZvb29MmToVHTt1gkAgwJXLl7FxwwYUFxdr2ldfn6Zq1749PlqzBmq1GgCgVCqRlJSEpKQkne0fbdkSixYtwvfff4/EI0cAAJHjx2PAwIEQiUQ49+uviNmyBTKZTO9yAcCEiRMxYMAAODg64tsdO3Do4EHNuH7h4Rg9Zgy8vLyQmZmJLzZsQEZGhsnLZix99VfWXn0d6xpmzHu1betWjHjmGXh5eSErKwtbvvwS/v7+GDVqFHx8fZGZmYkNn3+Oe/fuGV3b5k2bdK4rc/+mOnTsiEmTJsG/eXMUFBTgh++/x/Fjxyxav8Z8Lhi7vRvapgwtHxHR34HR55g9PXQojvzyCwDg4MGDeHro0BptgoOD8drixZoQMXbcOEhcXDD35Zfx2uLFaNOmjckFymQynD51ChH9+2sN7z9gAE6eOIGysjKMHTcOXl5eWDBvHhbMmwdPT0+MHTfO5L5MYeyyVX7pTJs6VetL6dXXX8fen3/GC7NmIXrmTGRkZGDi5Mla01Zfn6ZKS0vDjJkzERISAgcHh1rbtu/QAYsWLcKmTZs0oWz0mDEIDAzEa4sX44VZs1BeXo7I8eNrXa4xY8fikUceweJFizBn9mz4+Pho9RMaGorlS5diZlQUTp08iRkzZ5q1bMaorf5KutZx9WHGvFePtW2Ld956CzOjonDk8GHMX7AA7Tt0wMoVKzAzKgrHjx1DVJVlNaY2fevK3L+pF196Cdvj4zEzKgpvL1+Oli1bWrJ6ARj3uWAsQ9uUMe8DEVFDZ1Qw8/H1RcuWLXHq1CkAwJnTp9EqKAh+fn5a7bbHx2v+xw8AvXv3RlxcHMrKylBWVobt8fFmFXno4EEMHjJEa9jAgQOxf9++h/306YP4av306dvXrL6q2hobW+OnkqXL9q833kB6ejrUajUqKirw7Y4d6N69u1ab6uvTVJ98/DEKCgoQNWMGNm7ahLXr12PS5MlwdXXVatcvPBzR0dFYu3YtLl28qBkeHhGB2NhYSKVSVFRUIC42Fn3+3CupT0REBLbGxEAqlUKpVGLHN99ojd+8aROkUinUajX279uHlq1amb18lfS9R8bUr2sdVx9mzHu1ZfNmFBYWQq1W49DBg/Dw8KgxLDg42KTaTF1XhuosLy9H84AAeHl5obi4GHEWnphv7OeCsQxtU8a8D0REDZ1RhzL79+8PHx8fxGzbpjU8on9/7Pz2W81rqVSqNd7L2xt5ubma1zk5OWYV+eDBA2RmZCAsLAzJyckICwvD1atXkZ+fDwDw9PTUmndOTk6N8GGO2s5dsnTZQkJCMGHiRAQFB8PZ2RkAoFKptNpUX5+mKikpwa6dO7Fr504AgJ+fH4aNGIG58+fjP6tWadoNHzEChw8fxu1bt7Sm9/Hxwdp167SGVa+xOi9v71rXRdXDy2q1GgKBwOjl0Uff+2RM/brWcfVhxrxXVYNc5aHj6sOqLqsxtZm6rgzVuXbNGjw7ejQiIyNRUFiI+Lg4rSBuKmM/F4xlaJsy5n0gImroDAYzgUCA8IgIvLJwodaHpo+vL95ZsQK7du7UfBFVV5CfDx9fX8101f8nrVKp4ODgoJleLBbrrSPhp58QOWECkpOTMXT4cMR8+aVmXGFhYY1+SkpKDC2aRQwtmyFz5s3D1pgYXLp4ERUVFRAIBPgyJqYOKv1LTk4OYrdurdHPuytXYsmyZSgtLcXBAwc0w/Py8rB86VKTzuEpyM+Hn5+f2SHcmsypX5e6eK+sVVtVhurMyMjAp//9LwCgbdu2mDNvHubPnWtWX+Z8Lhja3g1tU7bYZoiI6pvBQ5lPPvUUbly/rvXhCwB5ubm4feuW5oR7XU6ePIkpU6ZALBZDLBbj+SlTtMbfvXMHgwYPhoODA9zd3TE9KkrvvNLS0iAWi9EvPBxyuVzrJOoTx49jypQpcHFx0fRz4vhxQ4tmEUPLVpVcLoenp6fWMJFIBEV5OSoqKuDu7o5Z0dFWr/H1N99EWFgYnJycAABubm6YOGkS0m/c0GpXXFyMd1euRP8BAzBs+HDN8EMHD2JmdDS8vb0BAM2aNcOsF16odbkSExMxbfp0uLu7QygUYsLEiVZfLmMZqt9YdfFeWVqbOX9Ts154QSvsCIUmXZStxZzPBUPbu6Ftqj62GSIiWzP4yTxw0CDs3LFD57h9e/diXGSk3hD03a5d+Me0afjs//4PMpkMe3bvRtewMM34TV98gegXX8Rzzz+P/Px8/LR7N3r26qW3loMHDmDa9OlY/f77WsO//+47TJw0CZ989hmAh+Gg8vCdJWq7R5ahZatq186d+GjdOgiFQs30n3/2GaJmzICvnx/y8/OR8NNP6NW7t8U1V/Xdrl0Y8vTTeOnllyEUClFcXIzkpCT89+OPa7QtLi7GqnffxWtvvAEnJyfs/vFHJPz0E0Y88wyWLl8OHx8fZGZmYs+PP9a6XJXvxZq1a6FWq/Gtnr+d+mCofmPVxXtlaW3m/E1dTEnBoldfRbNmzXD/jz/w+Z/biznM+VwwtL0b2qbqY5shIrI1h8CRy9QA4JVueZAxhj3dGJOI6taWrVvNvqqYiKgxMv9Yxt+YocfINIRgacyjcBrCclBNDeVpB02aNuU9xoiITFTvwUypVNZ3lyazxy85U/0dloF0ayjv7XurViE+Ls7WZRARNSj1fiiTiIiIiHQz+s7/RERERFS3GMyIiIiI7ASDGREREZGdYDAjIiIishMMZkRERER2gsGMiIiIyE4wmBERERHZCc0NZtUOtiyDiIiIiDTBLLVXuC3rICIiImr0eCiTiIiIyE4wmBERERHZCQYzIiIiIjshNNxEN2dnEUQuIjg7i6AoL4dcLodcJrNmbTX4ubnB39MDfm5uKCgtRVZREbIKi+q0TyIiIqL6YlIw8/H1g39Ac/gHBMLVzbXGeLlMhqw//kDm3Qzk5eZYpcA+ISEY1bkjRnfpjJCmTWqMzyoswg8pKYg/cw4n0tOt0icRERGRLTgEjlymBoB7zbL1NnJ1c0X7Tp3R1N/f6BnnZmfjwm/JKJGWmFVY+8AAfBA5FkPbtzN6msS063jlm2+RkpFpVp8A0Kp1MHz9agZAS+XmZOP2zd8bdZ9ERERUO4N7zIJCWuPxdu0hFJp21NO3SRNEDBqMa6mpuHn9uknTLhw0AKvGjobYycmk6SLaPoZzS9/Esh924/29+02atpK3ty8CWrQwa9raqCpUuA3dgaWx9ElERES1qzVtBYeEILRjRzg4mHf3WUeBAKEdOkCtUuF3Iw8zLh0xDCtHP2tWfwAgdHTEqrGj4SoSYdkPu82eDxEREVF903tVZlBIa4tCWVXtOnVC68ceM9hu4aABFoWyqpaOGIY3hj1tlXkRERER1Qede8xc3VzxeLv2VglllR4PDcWD+/chLS7WOT6kaROrhbJKb40cgR/OX8C1rCyL5lMiLdF7MYNapYJfs2aQSCQW9WEMhUKBKxcuILRjBzg7i+q8v/y8PPx29qzmddennoK3j0+d90tERNRY6dxj1qFLV5PPKTPYkUCAjl266B0fOzMKbiLrhg2xkxNiZ06H0NGy27Xl5ebg6uXLyM3OrvGTdjUVJ44cQVFhoVVq1kdVUYHkM2eQcecOTh87jvJyeZ32V9lnaWmp5kdVUVHnfRIRETVmNRKLj68fmjRtavYMFQqF3nG+TZrAt0nNKwH7hISgR3CQ0X1sOn7S6LbdWrVERFvDh1ENcXN3R7tOnfBIq1bo2LUrAlq0QOdu3eDo4Ai5TIZTR4+afQWqIQqFAqeOHUP2//4HACgqLKy3cEZERET1p0Yw8w9obvbMZGWlOLxvP9JSU6FWq3W2CdRxJeDE7mEm9RO9LQ4f7j9odPuJ3buZNH99ZGVluHvrdygVyhoXM1SGJ2vvOVMqlThz/Djy8/K0hjOcERER/f3UCGbNzbyFglqtRtKZsygvl+P61avIydZ9XzT/gIAawyLDuprc36s7vzN6z1lkWFeLD2cCgMTVFW0efwJOzk5o16FjjfGyslKcOnoUxVZ6GoFSqUTy2bMoyM/XOd7a4UxVUYGUpCScOnYMp44dw+ULF7TGX75wQTMuJSnJaoc2h7Zvh5TlSyD7/L+4+d5KRPXuaZX5EhERNTRaacXZWWT2SexXL1/W7NUJCmmt93CoSCyGSCzWvPb39IC/p4dZfUZvi8O/E/YabOclcYG/p6dZfVRVIpXickoKysvLkfzrw5PixS4SSCR//QgEjsjN0X+zXmM9DEnJkBYVQSKRaK0z4OF6lEgkUCoUuJD8m1VCkqNAgMdCQ1FWUoLc7Owae/+KCgsfDi8oQOs2j8FRILC4z+6tWmLztKlY8PUOiGfPQ5//fIgujz5i8XyJiIgaIq0z/EUuhk++L5GW1Hgc04P79/H7jRsAAC9vb4S271DrPEQikea5mv4etYeyzPx89P3PGr3jl/2wG3KFwuAVnX5ursjUs+fJWO6enujeqxcEjo7o278/AKBHn94QCASoUKngKBDgQlISBFa4cMJRIEC3Hk9pXudmZ+PUsWOa12FPPqnzfD1LSSQSPNWnD04mHtW5J87JyQk9+vaFu5lhurrXhz2N13Z+h6PXH/793C8sxPyvdmjGB3p5Yf3kCRjeoT2Ejo44dPUapn0Zg+xiKQBA/cXnmPfVN1gyfBiauLtB+OIcncMA4N0xozA7oh8kzs7YlXweL8bGQyp/uIzOQiE2TH0Ok5/sjsKyMnyw/yA+iBwLh+jZZtdBRERkqhp7zGqTlpqKIwf248H9+5phsrJSpCQlQ61WQygUokv37gb3pDg5O2t+9zKwh06pUuF2bq7WT3X/TtiLdYcO1zofQ/0YoyA/D8d++QUyuRz7ExIAAPv27EF5uQJHDx1CoYXBz164ubujV79+NfaeisRi9AoPh5e3t9X6GhL6BL5N/k3v+P2vzMeaA4fgNmcBJC/Px8XMe1gdOVarTfdWLdFmyXKtMFR92FsjR6BdQHO0WbIcbnMWoLS8HO+NHaVpv2LUSHi6uMBv4WK0WbK8xsUo5tZBRERkCq1gVtu5SqWlpfj9xg2o1WqcO30aD+7f1zqvDAA6dwuDm7u7wU4V5eWa33OkUnNr1/D39MDoLp1qbVNQWmpxP97ePug/eDDEYjGGjXr4pT58zBg4i5wxYMgQqwYWW3P39EDP8HBNOHNyckLPPn3hYYVDwlr9iMUoVyr1jm//1gqcvvk7VGo1lCoV/vXdDxjXVfu2K//csVOz50vfsFl9e2PeV98gV1oCpUqFBV/vwD969tCMn9azB+Zt/wZSuRxFZTIsqLLXzpI6iIiITKF1zE1epv9LRSKRoFvPnkg6fRpKpRLnTp+Gq5ub5oaxQSGt0TzQuAsH5FW+vLIMnCjv5SLBWyNHaA17Z0+C5nd/Tw/sXTAPrXx9a51PVpHlJ+QX5hfg0oUUdO/RA8ePHMagYcNx6OcEhA8ahLMnT6FTV9MvYrBnEokET/bqjXNnTqHrk09Z7fBlVcUyGZyFQr3hrGfrYLw/djS6B7WCy5/PTq1QqbTa5Oq4TUn1YS28vXHj3RWa1yKhUGs+/p4euFdQoHld9XdL6iAiIjKFVjArL5ejtLRU7wUATZo21QpnlaHMmPPKKsllMs35ZcDDPWa3c3P1BisviQvefvYZrWGVwayFtzeOv77IcCgrLDIYAI3h7umBbk89CWeRCL3CIwAAvSP6w8lZhO49noKzSFz7DCzg7eODgcOGaV6LrXwzXn3cPT3Qf8jTVn0KRFWHrl7D+LCuiD/7q87xO16chdlxX2Hf5StQqlQQOjpCseFTk/vJzM9H15Xvac4Jqy6rsAiBXl6aQPaIj/beT2vVQUREVJsa95C4n5lZ6wSV4azyyQDGnldWKeuPP2oM25mk/xwjffw9PXBk8SsGQxkA/JCSYvL8dSmRSnHl4iUoFOVIOXcOAHD+13NQKhS4fOEiSkvqbo+Jo0CgdfWnNa6INFZdhTIAWPXzPnw4fhx6h7QGADT39MTHkydoxruKRJApFFCqVGji7oYtUdPM6ueTw4nYPG0qAr28ADx8BNiWqH9oxm89fQbrJ0+Am0gEN5EIa8ZHak1vrTqIiIhqUyOYZf1xX1c7LVXDWfvOnY06r6zSPR3B78eUi0ZPDzzcU7Z3wTyENDXuqsRvziWbNH99XFwkCA4JgVDohMeeCAUAtG0XCoFAgOA2bSB2qbs9Zn9X527fQVTMNnz63CQoN3yKE68vxrnbdzTjn/viS2yY+jyUGz5F0tI3cfrm72b18599B3Ay/SZOvLEYyg2fYudLL+DnS5c149/e/RMKS8uQt34N7q5+D7/evg1FlVuQWKsOIiKi2jgEjlymBoB7zf6691aPvn2NeiyTrltn1Kb6LR+qOvjPBRj0xONGzae2Q5/VJaZdR/8P1xpdY5du3dGi5aNawzLu3MGVCxfg8efeltpIi4vxRPv2eKRlS63hmXfu4nzSOaP7zM/LQ2FBPpo09ce9jLsIat0aaVevon2nTrh4/jzadeyIG9euoWVQMO7fy4Bvk6bwrFafvfXZkAQ38cMvixYi6I2lti6FiIgaEZ033Lp0/jf0GzjI4IPMTQllqooKXDx/Xu/42XHbcX75EqMeZG5sKJMpFJgd95XRNerj4+uHdp1qv+qzentLCYVCiMUuEAgc4CKRwMHBEa6uD9e3q6srHAC4SCRwFDhC7OJilYfO26JPe7I6cixW7EmAk0CAjyZE4lszDrETERFZQuc3a4m0BNeuXEa7jp2sdn7RtdRUzcUCuqT/LxtvfvcD1k4cb5XHJwHAsh/34FpWlsXzcXVzNSmEWoO7hwfc/7z5buXet6CQEABA68cePpS9ZdDDe20FtLDOnfJt0ac9uZ2Ti5urVsJdLMY355Kw/Mc9ti6JiIgaGb27PG6l34QDHBDasaPF4ezKhQs1HvqtyyeHEyF0dMQH48dZHM5e+eZbgzedJarqs8Sj+CzxqK3LICKiRqzWY1G/p6dDDTUeb9ferMNWqooKXEtNNSqUVVp36DCUKhVWjR1t1GHN6mQKBZb9uIehjIiIiBocg2nrVvpN/C8rCx26dDXqgoBKudnZuHj+fK2HL/X55HAi9l2+gs+nPGf0BQHAwxP9Z8d9ZdHhy9ycHKjUlj8QvLr8XP2Pa2osfRIREVHtdF6VqY+Prx/8A5qjeYsWOm9CK5fJ8OB+FjIz7iI32/D8jNEnJASjOndEZLeuOk/6zyoswk8XLyH+7K9ITLtulT6JiIiIbMGkYFaVs7MIIhcRnJ1FUJSXQy6Xa93Rvy74ubnB39MDfm5uKCgtRVaRde7oT0RERGQPzL7fQXm5vNaHnteFHKnUKg89JyIiIrJH1rkvBRERERFZjMGMiIiIyE5oDmU269vXlnUQERERNXrcY0ZERERkJxjMiIiIiOwEgxkRERGRnWAwIyIiIrITDGZEREREdoLBjIiIiMhO6L3zv6ezM9b17oEBAc0hEgjqs6Y6J6+owJ47GVh0+izkFdZ/kDcRERGROfQGsy/C+6Bfc//6rKXeiAQCRAa3gryiAotOn7V1OUREREQA9BzK9BGJ/rahrKrI4Fa2LoGIiIhIQ2cwc3Uy+9nmDcrf7RAtERERNWw8+Z+IiIjITjCYEREREdkJBjMiIiIiO8FgRkRERGQnGMyIiIiI7IRNgpnDlCn1Oh0RERFRQ1An98WoGqBETk7oHhyMDTNmIDQwUGdbdVxcXZRBRERE1KDU2Q3LKsOWSq3GZ4cOIXL9eqSuXq23HREREVFjV+eHMh0dHDB38GD8np2tc3zVvWsOU6Zgc2IiWi5YAOdp09B16VJcvHtX53Qpd+4gcN48bDx8uE7qJiIiIqpvdR7MVGo1Pt6/H50efdSo9odTU/Hbu+9CFhODKb17I3rz5hptDly6hBEffojN0dF4YcAAa5dMREREZBN1diiz6p4wT4kEiUuWGDXd5uhoiJ2cAAALhw7FG19/rT0+MRHLd+3C7n/+E2FBQdYrmIiIiMjGdAazEoXS4hlXPcds6/HjmBMTg5NvvWVwuspQBjw8DKqoqNAa/0FCAl4aOJChjIiIiP52dB7KzJPLrdeBgwOi+vVD8u3bVpnf8WXLEH/yJD7ev98q8yMiIiKyF/VyjtnmxES08vOzyvyaeHjg+LJl2HjkCD5MSLDKPImIiIjsQZ2fY+YkEKBLq1b4eu5cq827iYcHjvzrXxj8/vuQK5VYMmqU1eZNREREZCsOgSOXqQFAGfm41oisfzxnk4Lqm/+27bYugYiIiAgAn5VJREREZDcYzIiIiIjsBIMZERERkZ1gMCMiIiKyEwxmRERERHaCwYyIiIjITjCYEREREdmJ/weNVLF0mg0GCgAAAABJRU5ErkJggg=="}}]); \ No newline at end of file diff --git a/assets/js/2220.7666931e.js b/assets/js/2220.7666931e.js new file mode 100755 index 000000000..52c664cba --- /dev/null +++ b/assets/js/2220.7666931e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2220],{9452:(e,t,s)=>{s.d(t,{c:()=>p});var a=s(11504),r=s(34064),n=s(99012),l=s(11432),i=s(10867),o=s(84357),c=s(55592),m=s(13376);function d(e){const{pathname:t}=(0,c.IT)();return(0,a.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,m.Sc)(e.permalink,t))}(e,t)))),[e,t])}const u={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};var h=s(17624);function g(e){let{sidebar:t}=e;const s=d(t.items);return(0,h.jsx)("aside",{className:"col col--3",children:(0,h.jsxs)("nav",{className:(0,r.c)(u.sidebar,"thin-scrollbar"),"aria-label":(0,o.G)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,h.jsx)("div",{className:(0,r.c)(u.sidebarItemTitle,"margin-bottom--md"),children:t.title}),(0,h.jsx)("ul",{className:(0,r.c)(u.sidebarItemList,"clean-list"),children:s.map((e=>(0,h.jsx)("li",{className:u.sidebarItem,children:(0,h.jsx)(i.c,{isNavLink:!0,to:e.permalink,className:u.sidebarItemLink,activeClassName:u.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var x=s(45168);function f(e){let{sidebar:t}=e;const s=d(t.items);return(0,h.jsx)("ul",{className:"menu__list",children:s.map((e=>(0,h.jsx)("li",{className:"menu__list-item",children:(0,h.jsx)(i.c,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function j(e){return(0,h.jsx)(x.Mx,{component:f,props:e})}function b(e){let{sidebar:t}=e;const s=(0,l.U)();return t?.items.length?"mobile"===s?(0,h.jsx)(j,{sidebar:t}):(0,h.jsx)(g,{sidebar:t}):null}function p(e){const{sidebar:t,toc:s,children:a,...l}=e,i=t&&t.items.length>0;return(0,h.jsx)(n.c,{...l,children:(0,h.jsx)("div",{className:"container margin-vert--lg",children:(0,h.jsxs)("div",{className:"row",children:[(0,h.jsx)(b,{sidebar:t}),(0,h.jsx)("main",{className:(0,r.c)("col",{"col--7":i,"col--9 col--offset-1":!i}),children:a}),s&&(0,h.jsx)("div",{className:"col col--2",children:s})]})})})}},47590:(e,t,s)=>{s.d(t,{c:()=>M});s(11504);var a=s(34064),r=s(83152),n=s(17624);function l(e){let{children:t,className:s}=e;return(0,n.jsx)("article",{className:s,children:t})}var i=s(10867);const o={title:"title_f1Hy"};function c(e){let{className:t}=e;const{metadata:s,isBlogPostPage:l}=(0,r.g)(),{permalink:c,title:m}=s,d=l?"h1":"h2";return(0,n.jsx)(d,{className:(0,a.c)(o.title,t),children:l?m:(0,n.jsx)(i.c,{to:c,children:m})})}var m=s(84357),d=s(95944),u=s(93852);const h={container:"container_mt6G"};function g(e){let{readingTime:t}=e;const s=function(){const{selectMessage:e}=(0,d.A)();return t=>{const s=Math.ceil(t);return e(s,(0,m.G)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:s}))}}();return(0,n.jsx)(n.Fragment,{children:s(t)})}function x(e){let{date:t,formattedDate:s}=e;return(0,n.jsx)("time",{dateTime:t,children:s})}function f(){return(0,n.jsx)(n.Fragment,{children:" \xb7 "})}function j(e){let{className:t}=e;const{metadata:s}=(0,r.g)(),{date:l,readingTime:i}=s,o=(0,u.y)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,n.jsxs)("div",{className:(0,a.c)(h.container,"margin-vert--md",t),children:[(0,n.jsx)(x,{date:l,formattedDate:(c=l,o.format(new Date(c)))}),void 0!==i&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(f,{}),(0,n.jsx)(g,{readingTime:i})]})]});var c}function b(e){return e.href?(0,n.jsx)(i.c,{...e}):(0,n.jsx)(n.Fragment,{children:e.children})}function p(e){let{author:t,className:s}=e;const{name:r,title:l,url:i,imageURL:o,email:c}=t,m=i||c&&`mailto:${c}`||void 0;return(0,n.jsxs)("div",{className:(0,a.c)("avatar margin-bottom--sm",s),children:[o&&(0,n.jsx)(b,{href:m,className:"avatar__photo-link",children:(0,n.jsx)("img",{className:"avatar__photo",src:o,alt:r})}),r&&(0,n.jsxs)("div",{className:"avatar__intro",children:[(0,n.jsx)("div",{className:"avatar__name",children:(0,n.jsx)(b,{href:m,children:(0,n.jsx)("span",{children:r})})}),l&&(0,n.jsx)("small",{className:"avatar__subtitle",children:l})]})]})}const v={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function N(e){let{className:t}=e;const{metadata:{authors:s},assets:l}=(0,r.g)();if(0===s.length)return null;const i=s.every((e=>{let{name:t}=e;return!t}));return(0,n.jsx)("div",{className:(0,a.c)("margin-top--md margin-bottom--sm",i?v.imageOnlyAuthorRow:"row",t),children:s.map(((e,t)=>(0,n.jsx)("div",{className:(0,a.c)(!i&&"col col--6",i?v.imageOnlyAuthorCol:v.authorCol),children:(0,n.jsx)(p,{author:{...e,imageURL:l.authorsImageUrls[t]??e.imageURL}})},t)))})}function _(){return(0,n.jsxs)("header",{children:[(0,n.jsx)(c,{}),(0,n.jsx)(j,{}),(0,n.jsx)(N,{})]})}var k=s(15684),P=s(15216);function w(e){let{children:t,className:s}=e;const{isBlogPostPage:l}=(0,r.g)();return(0,n.jsx)("div",{id:l?k.blogPostContainerID:void 0,className:(0,a.c)("markdown",s),children:(0,n.jsx)(P.c,{children:t})})}var I=s(45864),A=s(43092),T=s(1096);function y(){return(0,n.jsx)("b",{children:(0,n.jsx)(m.c,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read More"})})}function L(e){const{blogPostTitle:t,...s}=e;return(0,n.jsx)(i.c,{"aria-label":(0,m.G)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...s,children:(0,n.jsx)(y,{})})}function F(){const{metadata:e,isBlogPostPage:t}=(0,r.g)(),{tags:s,title:l,editUrl:i,hasTruncateMarker:o,lastUpdatedBy:c,lastUpdatedAt:m}=e,d=!t&&o,u=s.length>0;if(!(u||d||i))return null;if(t){const e=!!(i||m||c);return(0,n.jsxs)("footer",{className:"docusaurus-mt-lg",children:[u&&(0,n.jsx)("div",{className:(0,a.c)("row","margin-top--sm",I.W.blog.blogFooterEditMetaRow),children:(0,n.jsx)("div",{className:"col",children:(0,n.jsx)(T.c,{tags:s})})}),e&&(0,n.jsx)(A.c,{className:(0,a.c)("margin-top--sm",I.W.blog.blogFooterEditMetaRow),editUrl:i,lastUpdatedAt:m,lastUpdatedBy:c})]})}return(0,n.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[u&&(0,n.jsx)("div",{className:(0,a.c)("col",{"col--9":d}),children:(0,n.jsx)(T.c,{tags:s})}),d&&(0,n.jsx)("div",{className:(0,a.c)("col text--right",{"col--3":u}),children:(0,n.jsx)(L,{blogPostTitle:l,to:e.permalink})})]})}function M(e){let{children:t,className:s}=e;const i=function(){const{isBlogPostPage:e}=(0,r.g)();return e?void 0:"margin-bottom--xl"}();return(0,n.jsxs)(l,{className:(0,a.c)(i,s),children:[(0,n.jsx)(_,{}),(0,n.jsx)(w,{children:t}),(0,n.jsx)(F,{})]})}},83152:(e,t,s)=>{s.d(t,{E:()=>i,g:()=>o});var a=s(11504),r=s(91100),n=s(17624);const l=a.createContext(null);function i(e){let{children:t,content:s,isBlogPostPage:r=!1}=e;const i=function(e){let{content:t,isBlogPostPage:s}=e;return(0,a.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:s})),[t,s])}({content:s,isBlogPostPage:r});return(0,n.jsx)(l.Provider,{value:i,children:t})}function o(){const e=(0,a.useContext)(l);if(null===e)throw new r.AH("BlogPostProvider");return e}},95944:(e,t,s)=>{s.d(t,{A:()=>c});var a=s(11504),r=s(28264);const n=["zero","one","two","few","many","other"];function l(e){return n.filter((t=>e.includes(t)))}const i={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,r.c)();return(0,a.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:l(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),i}}),[e])}function c(){const e=o();return{selectMessage:(t,s)=>function(e,t,s){const a=e.split("|");if(1===a.length)return a[0];a.length>s.pluralForms.length&&console.error(`For locale=${s.locale}, a maximum of ${s.pluralForms.length} plural forms are expected (${s.pluralForms.join(",")}), but the message contains ${a.length}: ${e}`);const r=s.select(t),n=s.pluralForms.indexOf(r);return a[Math.min(n,a.length-1)]}(s,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/249d28c1.5c233693.js b/assets/js/249d28c1.5c233693.js new file mode 100755 index 000000000..a28e56313 --- /dev/null +++ b/assets/js/249d28c1.5c233693.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6332],{58960:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var a=n(17624),i=n(95788);const r={id:"franzininho-wifi-espidf-04",title:"PWM com LEDC",slug:"/franzininho-wifi/exemplos-espidf/ledc",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},s=void 0,t={id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04",title:"PWM com LEDC",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x04-LEDC.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/ledc",permalink:"/docs/franzininho-wifi/exemplos-espidf/ledc",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x04-LEDC.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-04",title:"PWM com LEDC",slug:"/franzininho-wifi/exemplos-espidf/ledc",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},sidebar:"docs",previous:{title:"Entrada Anal\xf3gica",permalink:"/docs/franzininho-wifi/exemplos-espidf/entrada-analogica"},next:{title:"Primeiros passos com a AWS",permalink:"/docs/franzininho-wifi/exemplos-espidf/aws"}},d={},c=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function l(e){const o={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(o.p,{children:["Seguindo os estudos do ESP-IDF, vamos agora estudar um novo perif\xe9rico, o LED Control (LEDC), o qual tem a fun\xe7\xe3o de controlar a intensidade luminosa do LED e tamb\xe9m servir como fonte geradora de sinal pulsado, ",(0,a.jsx)(o.strong,{children:"Pulse Width Modulation"})," (PWM), para diferentes prop\xf3sitos como: controle de velocidade em motores de corrente cont\xednua (CC), angula\xe7\xe3o em servomotores, mudan\xe7a de cores em LED RGB e outras mais aplica\xe7\xf5es."]}),"\n",(0,a.jsx)(o.p,{children:"Com isso, ao final deste artigo estaremos familiarizados com os recursos oferecidos pelo perif\xe9rico al\xe9m de dominar as configura\xe7\xf5es b\xe1sicas para implementar em projetos."}),"\n",(0,a.jsx)(o.h2,{id:"recursos-necess\xe1rios",children:(0,a.jsx)(o.strong,{children:"Recursos Necess\xe1rios"})}),"\n",(0,a.jsx)(o.p,{children:"Os materiais necess\xe1rios para realizar esse exemplo s\xe3o:"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"Placa Franzininho WiFi;"}),"\n",(0,a.jsx)(o.li,{children:"Protoboard;"}),"\n",(0,a.jsx)(o.li,{children:"LED;"}),"\n",(0,a.jsx)(o.li,{children:"Resistor de 220 Ohm;"}),"\n",(0,a.jsx)(o.li,{children:"Cabos Jumpers;"}),"\n",(0,a.jsx)(o.li,{children:"Computador com ESP-IDF instalado e configurado."}),"\n"]}),"\n",(0,a.jsx)(o.h2,{id:"desenvolvimento",children:(0,a.jsx)(o.strong,{children:"Desenvolvimento"})}),"\n",(0,a.jsxs)(o.p,{children:["Na placa Franzininho WiFi o perif\xe9rico LEDC est\xe1 disposto em dois grupos de oito canais, sendo um grupo operando no ",(0,a.jsx)(o.strong,{children:"High Speed Mode (HSM)"})," e outro em ",(0,a.jsx)(o.strong,{children:"Low Speed Mode (LSM)"})," operando independente uns dos outros ",(0,a.jsx)(o.strong,{children:"."})," O modo High Speed \xe9 implementado em hardware oferecendo mudan\xe7as autom\xe1ticas sem interferir no duty cycle do PWM, ou seja, caso haja altera\xe7\xf5es na temporiza\xe7\xe3o ser\xe3o atualizadas no pr\xf3ximo estouro do timer. Em contraste isso o modo Low Speed deve ser explicitar o via software as configura\xe7\xf5es de temporiza\xe7\xe3o."]}),"\n",(0,a.jsx)(o.p,{children:"Para utilizarmos esse perif\xe9ricos precisamos seguir algumas etapas fundamentais para nossa aplica\xe7\xe3o de estudo que s\xe3o: Configura\xe7\xe3o do Temporizador , Configura\xe7\xe3o do Canal e Altera\xe7\xe3o do PWM."}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsxs)(o.li,{children:["\n",(0,a.jsxs)(o.p,{children:["Configura\xe7\xe3o do Temporizador : nessa primeira etapa vamos especificar a frequ\xeancia e a resolu\xe7\xe3o do sinal PWM preenchendo a estrutura de dados ",(0,a.jsx)(o.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/ledc.html#_CPPv419ledc_timer_config_t",children:(0,a.jsx)(o.strong,{children:"ledc_timer_config_t"})})," e apontando-a para a fun\xe7\xe3o ",(0,a.jsx)(o.strong,{children:"led_timer_config() ."})]}),"\n"]}),"\n",(0,a.jsxs)(o.li,{children:["\n",(0,a.jsx)(o.p,{children:"Configura\xe7\xe3o do Canal: nessa segunda etapa iremos direcionar o GPIO que ser\xe1 a sa\xedda do sinal PWM, o qual \xe9 selecionado dentro da estrutura de configura\xe7\xe3o do perif\xe9rico."}),"\n"]}),"\n",(0,a.jsxs)(o.li,{children:["\n",(0,a.jsxs)(o.p,{children:["Altera\xe7\xe3o do PWM: na \xfaltima etapa vamos realizar o aumento e a redu\xe7\xe3o do duty cycle na sa\xedda da geradora de sinal criando assim o ",(0,a.jsx)(o.strong,{children:"fade"})," no LED externo, o qual ser\xe1 habilitado via hardware pela fun\xe7\xe3o ",(0,a.jsx)(o.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/ledc.html#_CPPv422ledc_fade_func_installi",children:(0,a.jsx)(o.strong,{children:"ledc_fade_func_install()"})}),(0,a.jsx)(o.strong,{children:"."})]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(o.p,{children:"Com a finaliza\xe7\xe3o das tr\xeas etapas de configura\xe7\xe3o o acionamento do perif\xe9rico LED Control estar\xe1 em funcionamento, contudo devemos agora seguir para montagem do circuito para concluir o projeto."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Configura\xe7\xe3o do Perif\xe9rico LED Control",src:n(97980).c+"",width:"768",height:"384"})}),"\n",(0,a.jsx)(o.h3,{id:"esquem\xe1tico",children:(0,a.jsx)(o.strong,{children:"Esquem\xe1tico"})}),"\n",(0,a.jsxs)(o.p,{children:["Nesta parte daremos in\xedcio a montagem do circuito em protoboard, iremos conectar um dos terminais do resistor no ",(0,a.jsx)(o.strong,{children:"GPIO 2"})," e outro no LED externo."]}),"\n",(0,a.jsx)(o.p,{children:"Abaixo segue o esquem\xe1tico proposto :"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Imagem do Circuito",src:n(88492).c+"",width:"1024",height:"367"})}),"\n",(0,a.jsx)(o.h3,{id:"c\xf3digo",children:(0,a.jsx)(o.strong,{children:"C\xf3digo"})}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-c",children:'/*\n Autor: Halysson Junior\n Data : 10/04/21 \n\n Nesse exemplo foi configurado o periferico LEDC para controlar a intensidade do LED.\n \n*/\n\n// Inclus\xe3o de arqivos de cabe\xe7alho\n#include \n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "driver/ledc.h"\n#include "esp_err.h"\n\n// Defini\xe7\xe3o para configura\xe7\xe3o do perif\xe9rico\n#define LEDC_GPIO 2\n#define LEDC_FADE_TIME 500\n#define LEDC_RESOLUTION 1024\n#define LEDC_FREQ 5000\n\n\nvoid app_main(void) // Main\n{\n\n // Estrutura de dados para receber as v\xe1riaveis de configura\xe7\xe3o de frequ\xeancia (1Hz, 100 Hz e outros), modo (HIGH ou LOW) e selecionar o TIMER (0,1,2) \n \n ledc_timer_config_t timer = { // Configura\xe7\xe3o do timer \n\n .speed_mode = LEDC_LOW_SPEED_MODE, // Modo de Velocidade -> LOW\n .duty_resolution = LEDC_TIMER_10_BIT, // Resolu\xe7\xe3o do do ciclo de trabalho (2^10 = 1024 valores)\n .timer_num = LEDC_TIMER_0, // Utilizado o TIMER 0\n .freq_hz = LEDC_FREQ, // Frequ\xeancia de opera\xe7\xe3o do sinal PWM\n .clk_cfg = LEDC_AUTO_CLK // Sele\xe7\xe3o automatica da fonte geradora do clock (interna ou externa)\n \n };\n\n \n ledc_timer_config(&timer); // Envia o endere\xe7o da estrutura timer para a fun\xe7\xe3o de configura\xe7\xe3o do canal PWM \n \n /*\n NOTA:\n A frequencia e a resolu\xe7\xe3o do ciclo de trabalho s\xe3o independentes. Para uma elevada frequ\xeancia do PWM, \n ter\xe1 uma baixa resolu\xe7\xe3o do ciclo de trabalho disponivel e vice-versa \n */\n\n // Estrutura de dados para receber as v\xe1riaveis de configura\xe7\xe3o de frequencia (1Hz, 100 Hz e outros), modo (HIGH ou LOW), selecionar o TIMER (0,1,2) \n \n ledc_channel_config_t channel_LEDC = {\n .gpio_num = LEDC_GPIO, // Seleciona o pino para atuar o PWM\n .speed_mode = LEDC_LOW_SPEED_MODE, // Modo de Velocidade -> LOW\n .channel = LEDC_CHANNEL_0, \n .timer_sel = LEDC_TIMER_0,\n .duty = 0,\n .hpoint = 0\n \n };\n \n ledc_channel_config(&channel_LEDC);\n \n \n ledc_fade_func_install(0); // Inicializa o servi\xe7o do Fade\n \n for(;;){ // Loop\n\n // Define e inicia a fun\xe7\xe3o de fade no perif\xe9rico LEDC\n ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , 0 , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);\n ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , LEDC_RESOLUTION , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);\n \n \n }// endLoop\n\n}//endMain\n\n/*\n *** Paramentriza\xe7\xe3o da fun\xe7\xe3o " ledc_set_fade_time_and_start(); " ***\n\nledc_set_fade_time_and_start(ledc_mode_tspeed_mode, ledc_channel_tchannel, uint32_t target_duty, uint32_t max_fade_time_ms, ledc_fade_mode_tfade_mode)\n\n ledc_mode_tspeed_mode -> modo do timer utilizado\n ledc_channel_tchannel -> indice do canal LEDC (0-7)\n uint32_t target_duty -> (2 ** resolu\xe7\xe3o_ciclo_de_trabalho) - 1\n uint32_t max_fade_time_ms -> tempo m\xe1ximo (ms) para o fading \n ledc_fade_mode_tfade_mode -> \n*/\n'})}),"\n",(0,a.jsx)(o.p,{children:"O programa desenvolvido possui uma estrutura bem simples e n\xe3o \xe9 necess\xe1rio acrescentar nenhuma biblioteca, apenas a manuten\xe7\xe3o dos arquivos de cabe\xe7alho j\xe1 presentes no projeto."}),"\n",(0,a.jsxs)(o.p,{children:["Ao criar um novo projeto no IDF automaticamente j\xe1 temos arquivos configurados e prontos para programa\xe7\xe3o do dispositivo, desta forma digite e comente as linhas do seguinte c\xf3digo no arquivo ",(0,a.jsx)(o.strong,{children:"main.c :"})]}),"\n",(0,a.jsxs)(o.p,{children:["Voc\xea encontra o projeto completo na documenta\xe7\xe3o da Franzininho: ",(0,a.jsx)(o.a,{href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/PWM_LEDC",children:(0,a.jsx)(o.strong,{children:"PWM_LEDC"})})]}),"\n",(0,a.jsxs)(o.p,{children:["Caso ainda n\xe3o tenha instalado e configurado o IDF no seu computador ou tenha d\xfavidas sobre as ferramentas, acesse o tutorial de instala\xe7\xe3o (",(0,a.jsx)(o.a,{href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/exemplos-espidf/primeiros-passos",children:"Clique Aqui"}),")."]}),"\n",(0,a.jsx)(o.h3,{id:"compila\xe7\xe3o",children:(0,a.jsx)(o.strong,{children:"Compila\xe7\xe3o"})}),"\n",(0,a.jsxs)(o.p,{children:["Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o ",(0,a.jsx)(o.strong,{children:(0,a.jsx)(o.em,{children:"set-target"})})," para ESP32-S2. Caso n\xe3o possua a placa Franzininho WiFi altere o target para o modelo de ESP32 utilizando em seu projeto."]}),"\n",(0,a.jsx)(o.p,{children:"idf.py set-target esp32s2"}),"\n",(0,a.jsx)(o.p,{children:"Ao final da compila\xe7\xe3o o resultado final deve ser semelhante \xe0 imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu c\xf3digo."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Imagem do Terminal Visual Code",src:n(64928).c+"",width:"1024",height:"607"})}),"\n",(0,a.jsx)(o.p,{children:"Ap\xf3s a etapa de compila\xe7\xe3o vamos enviar o c\xf3digo fonte para nossa placa, no editor pressione o \xedcone abaixo e aguarde alguns segundos para assim dar in\xedcio ao upload do programa \u201cPWM\u201d (seta preta) ."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Barra inferior do Visual Code",src:n(39668).c+"",width:"528",height:"54"})}),"\n",(0,a.jsx)(o.h3,{id:"resultados",children:(0,a.jsx)(o.strong,{children:"Resultados"})}),"\n",(0,a.jsx)(o.p,{children:"Ap\xf3s enviar seu c\xf3digo e com o circuito devidamente montado o LED externo conectado come\xe7ar\xe1 a aumentar e diminuir sua intensidade luminosa gradualmente criando o fade desejado. Na figura 5 temos a imagem do oscilosc\xf3pio mostrando a forma de onda gerada e o duty cycle atuando no momento e na figura 6 o circuito em perfeito funcionamento."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Sa\xedda do sinal PWM",src:n(52172).c+"",width:"1024",height:"1024"})}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Imagem do circuito em funcionamento",src:n(71360).c+"",width:"1024",height:"768"})}),"\n",(0,a.jsx)(o.h2,{id:"conclus\xe3o",children:(0,a.jsx)(o.strong,{children:"Conclus\xe3o"})}),"\n",(0,a.jsx)(o.p,{children:"Neste exemplo apresentamos t\xf3picos intermedi\xe1rios sobre a manipula\xe7\xe3o do perif\xe9rico LED Control, utilizamos conceitos importantes da linguagem C estrutura de dados e ponteiros implementado na configura\xe7\xe3o do sinal pulsado."}),"\n",(0,a.jsx)(o.p,{children:"Deve-se deixar claro que o artigo aborda um conte\xfado para darmos os primeiros passo com este perif\xe9rico, encorajamos que o leitor reconfigure a sa\xedda do sinal PWM como tamb\xe9m acesse a documenta\xe7\xe3o oferecida pela Espressif para compreender como o hardware do chip comporta-se com cada configura\xe7\xe3o realizada al\xe9m das fun\xe7\xf5es implementadas em software."}),"\n",(0,a.jsxs)(o.table,{children:[(0,a.jsx)(o.thead,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.th,{children:"Autor"}),(0,a.jsx)(o.th,{children:(0,a.jsx)(o.a,{href:"https://github.com/halyssonJr",children:"Halysson Junior"})})]})}),(0,a.jsx)(o.tbody,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"Data:"}),(0,a.jsx)(o.td,{children:"22/07/2021"})]})})]})]})}function m(e={}){const{wrapper:o}={...(0,i.MN)(),...e.components};return o?(0,a.jsx)(o,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},95788:(e,o,n)=>{n.d(o,{MN:()=>c});var a=n(11504);function i(e,o,n){return o in e?Object.defineProperty(e,o,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[o]=n,e}function r(e,o){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);o&&(a=a.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var o=1;o=0||(i[n]=e[n]);return i}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var d=a.createContext({}),c=function(e){var o=a.useContext(d),n=o;return e&&(n="function"==typeof e?e(o):s(s({},o),e)),n},l={inlineCode:"code",wrapper:function(e){var o=e.children;return a.createElement(a.Fragment,{},o)}},m=a.forwardRef((function(e,o){var n=e.components,i=e.mdxType,r=e.originalType,d=e.parentName,m=t(e,["components","mdxType","originalType","parentName"]),p=c(n),u=i,h=p["".concat(d,".").concat(u)]||p[u]||l[u]||r;return n?a.createElement(h,s(s({ref:o},m),{},{components:n})):a.createElement(h,s({ref:o},m))}));m.displayName="MDXCreateElement"},97980:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/1-f7885fb7827c5c17fea371b5f8452645.png"},88492:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/2-0a531df80a496fe52ef1cd273f3306a5.png"},64928:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/3-413df3a4edbd9eeef3237bc8e6bd0894.png"},39668:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/4-e64a6a5ed6db5ad1206c547c1b106046.png"},52172:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/5-921eb8572a537a8d55e8dddc33727221.jpeg"},71360:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/6-7477a50ccfa225dc8f32e7ce6cf22339.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/249d28c1.c288480d.js b/assets/js/249d28c1.c288480d.js deleted file mode 100755 index 6c3404d2f..000000000 --- a/assets/js/249d28c1.c288480d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5123],{3905:(e,a,o)=>{o.d(a,{Zo:()=>c,kt:()=>f});var n=o(7294);function t(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function r(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var a=1;a=0||(t[o]=e[o]);return t}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var d=n.createContext({}),l=function(e){var a=n.useContext(d),o=a;return e&&(o="function"==typeof e?e(a):i(i({},a),e)),o},c=function(e){var a=l(e.components);return n.createElement(d.Provider,{value:a},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var o=e.components,t=e.mdxType,r=e.originalType,d=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=l(o),u=t,f=p["".concat(d,".").concat(u)]||p[u]||m[u]||r;return o?n.createElement(f,i(i({ref:a},c),{},{components:o})):n.createElement(f,i({ref:a},c))}));function f(e,a){var o=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var r=o.length,i=new Array(r);i[0]=u;var s={};for(var d in a)hasOwnProperty.call(a,d)&&(s[d]=a[d]);s.originalType=e,s[p]="string"==typeof e?e:t,i[1]=s;for(var l=2;l{o.r(a),o.d(a,{assets:()=>d,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var n=o(3117),t=(o(7294),o(3905));const r={id:"franzininho-wifi-espidf-04",title:"PWM com LEDC",slug:"/franzininho-wifi/exemplos-espidf/ledc",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},i=void 0,s={unversionedId:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04",id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04",title:"PWM com LEDC",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x04-LEDC.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/ledc",permalink:"/docs/franzininho-wifi/exemplos-espidf/ledc",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x04-LEDC.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-04",title:"PWM com LEDC",slug:"/franzininho-wifi/exemplos-espidf/ledc",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},sidebar:"docs",previous:{title:"Entrada Anal\xf3gica",permalink:"/docs/franzininho-wifi/exemplos-espidf/entrada-analogica"},next:{title:"Primeiros passos com a AWS",permalink:"/docs/franzininho-wifi/exemplos-espidf/aws"}},d={},l=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],c={toc:l},p="wrapper";function m(e){let{components:a,...r}=e;return(0,t.kt)(p,(0,n.Z)({},c,r,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Seguindo os estudos do ESP-IDF, vamos agora estudar um novo perif\xe9rico, o LED Control (LEDC), o qual tem a fun\xe7\xe3o de controlar a intensidade luminosa do LED e tamb\xe9m servir como fonte geradora de sinal pulsado, ",(0,t.kt)("strong",{parentName:"p"},"Pulse Width Modulation")," (PWM), para diferentes prop\xf3sitos como: controle de velocidade em motores de corrente cont\xednua (CC), angula\xe7\xe3o em servomotores, mudan\xe7a de cores em LED RGB e outras mais aplica\xe7\xf5es."),(0,t.kt)("p",null,"Com isso, ao final deste artigo estaremos familiarizados com os recursos oferecidos pelo perif\xe9rico al\xe9m de dominar as configura\xe7\xf5es b\xe1sicas para implementar em projetos."),(0,t.kt)("h2",{id:"recursos-necess\xe1rios"},(0,t.kt)("strong",{parentName:"h2"},"Recursos Necess\xe1rios")),(0,t.kt)("p",null,"Os materiais necess\xe1rios para realizar esse exemplo s\xe3o:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Placa Franzininho WiFi;"),(0,t.kt)("li",{parentName:"ul"},"Protoboard;"),(0,t.kt)("li",{parentName:"ul"},"LED;"),(0,t.kt)("li",{parentName:"ul"},"Resistor de 220 Ohm;"),(0,t.kt)("li",{parentName:"ul"},"Cabos Jumpers;"),(0,t.kt)("li",{parentName:"ul"},"Computador com ESP-IDF instalado e configurado.")),(0,t.kt)("h2",{id:"desenvolvimento"},(0,t.kt)("strong",{parentName:"h2"},"Desenvolvimento")),(0,t.kt)("p",null,"Na placa Franzininho WiFi o perif\xe9rico LEDC est\xe1 disposto em dois grupos de oito canais, sendo um grupo operando no ",(0,t.kt)("strong",{parentName:"p"},"High Speed Mode (HSM)")," e outro em ",(0,t.kt)("strong",{parentName:"p"},"Low Speed Mode (LSM)")," operando independente uns dos outros ",(0,t.kt)("strong",{parentName:"p"},".")," O modo High Speed \xe9 implementado em hardware oferecendo mudan\xe7as autom\xe1ticas sem interferir no duty cycle do PWM, ou seja, caso haja altera\xe7\xf5es na temporiza\xe7\xe3o ser\xe3o atualizadas no pr\xf3ximo estouro do timer. Em contraste isso o modo Low Speed deve ser explicitar o via software as configura\xe7\xf5es de temporiza\xe7\xe3o."),(0,t.kt)("p",null,"Para utilizarmos esse perif\xe9ricos precisamos seguir algumas etapas fundamentais para nossa aplica\xe7\xe3o de estudo que s\xe3o: Configura\xe7\xe3o do Temporizador , Configura\xe7\xe3o do Canal e Altera\xe7\xe3o do PWM."),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("p",{parentName:"li"},"Configura\xe7\xe3o do Temporizador : nessa primeira etapa vamos especificar a frequ\xeancia e a resolu\xe7\xe3o do sinal PWM preenchendo a estrutura de dados ",(0,t.kt)("a",{parentName:"p",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/ledc.html#_CPPv419ledc_timer_config_t"},(0,t.kt)("strong",{parentName:"a"},"ledc_timer_config_t"))," e apontando-a para a fun\xe7\xe3o ",(0,t.kt)("strong",{parentName:"p"},"led_timer_config() ."))),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("p",{parentName:"li"},"Configura\xe7\xe3o do Canal: nessa segunda etapa iremos direcionar o GPIO que ser\xe1 a sa\xedda do sinal PWM, o qual \xe9 selecionado dentro da estrutura de configura\xe7\xe3o do perif\xe9rico.")),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("p",{parentName:"li"},"Altera\xe7\xe3o do PWM: na \xfaltima etapa vamos realizar o aumento e a redu\xe7\xe3o do duty cycle na sa\xedda da geradora de sinal criando assim o ",(0,t.kt)("strong",{parentName:"p"},"fade")," no LED externo, o qual ser\xe1 habilitado via hardware pela fun\xe7\xe3o ",(0,t.kt)("a",{parentName:"p",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/ledc.html#_CPPv422ledc_fade_func_installi"},(0,t.kt)("strong",{parentName:"a"},"ledc_fade_func_install()")),(0,t.kt)("strong",{parentName:"p"},".")))),(0,t.kt)("p",null,"Com a finaliza\xe7\xe3o das tr\xeas etapas de configura\xe7\xe3o o acionamento do perif\xe9rico LED Control estar\xe1 em funcionamento, contudo devemos agora seguir para montagem do circuito para concluir o projeto."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Configura\xe7\xe3o do Perif\xe9rico LED Control",src:o(5530).Z,width:"768",height:"384"})),(0,t.kt)("h3",{id:"esquem\xe1tico"},(0,t.kt)("strong",{parentName:"h3"},"Esquem\xe1tico")),(0,t.kt)("p",null,"Nesta parte daremos in\xedcio a montagem do circuito em protoboard, iremos conectar um dos terminais do resistor no ",(0,t.kt)("strong",{parentName:"p"},"GPIO 2")," e outro no LED externo."),(0,t.kt)("p",null,"Abaixo segue o esquem\xe1tico proposto :"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Imagem do Circuito",src:o(8223).Z,width:"1024",height:"367"})),(0,t.kt)("h3",{id:"c\xf3digo"},(0,t.kt)("strong",{parentName:"h3"},"C\xf3digo")),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},'/*\n Autor: Halysson Junior\n Data : 10/04/21 \n\n Nesse exemplo foi configurado o periferico LEDC para controlar a intensidade do LED.\n \n*/\n\n// Inclus\xe3o de arqivos de cabe\xe7alho\n#include \n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "driver/ledc.h"\n#include "esp_err.h"\n\n// Defini\xe7\xe3o para configura\xe7\xe3o do perif\xe9rico\n#define LEDC_GPIO 2\n#define LEDC_FADE_TIME 500\n#define LEDC_RESOLUTION 1024\n#define LEDC_FREQ 5000\n\n\nvoid app_main(void) // Main\n{\n\n // Estrutura de dados para receber as v\xe1riaveis de configura\xe7\xe3o de frequ\xeancia (1Hz, 100 Hz e outros), modo (HIGH ou LOW) e selecionar o TIMER (0,1,2) \n \n ledc_timer_config_t timer = { // Configura\xe7\xe3o do timer \n\n .speed_mode = LEDC_LOW_SPEED_MODE, // Modo de Velocidade -> LOW\n .duty_resolution = LEDC_TIMER_10_BIT, // Resolu\xe7\xe3o do do ciclo de trabalho (2^10 = 1024 valores)\n .timer_num = LEDC_TIMER_0, // Utilizado o TIMER 0\n .freq_hz = LEDC_FREQ, // Frequ\xeancia de opera\xe7\xe3o do sinal PWM\n .clk_cfg = LEDC_AUTO_CLK // Sele\xe7\xe3o automatica da fonte geradora do clock (interna ou externa)\n \n };\n\n \n ledc_timer_config(&timer); // Envia o endere\xe7o da estrutura timer para a fun\xe7\xe3o de configura\xe7\xe3o do canal PWM \n \n /*\n NOTA:\n A frequencia e a resolu\xe7\xe3o do ciclo de trabalho s\xe3o independentes. Para uma elevada frequ\xeancia do PWM, \n ter\xe1 uma baixa resolu\xe7\xe3o do ciclo de trabalho disponivel e vice-versa \n */\n\n // Estrutura de dados para receber as v\xe1riaveis de configura\xe7\xe3o de frequencia (1Hz, 100 Hz e outros), modo (HIGH ou LOW), selecionar o TIMER (0,1,2) \n \n ledc_channel_config_t channel_LEDC = {\n .gpio_num = LEDC_GPIO, // Seleciona o pino para atuar o PWM\n .speed_mode = LEDC_LOW_SPEED_MODE, // Modo de Velocidade -> LOW\n .channel = LEDC_CHANNEL_0, \n .timer_sel = LEDC_TIMER_0,\n .duty = 0,\n .hpoint = 0\n \n };\n \n ledc_channel_config(&channel_LEDC);\n \n \n ledc_fade_func_install(0); // Inicializa o servi\xe7o do Fade\n \n for(;;){ // Loop\n\n // Define e inicia a fun\xe7\xe3o de fade no perif\xe9rico LEDC\n ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , 0 , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);\n ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , LEDC_RESOLUTION , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);\n \n \n }// endLoop\n\n}//endMain\n\n/*\n *** Paramentriza\xe7\xe3o da fun\xe7\xe3o " ledc_set_fade_time_and_start(); " ***\n\nledc_set_fade_time_and_start(ledc_mode_tspeed_mode, ledc_channel_tchannel, uint32_t target_duty, uint32_t max_fade_time_ms, ledc_fade_mode_tfade_mode)\n\n ledc_mode_tspeed_mode -> modo do timer utilizado\n ledc_channel_tchannel -> indice do canal LEDC (0-7)\n uint32_t target_duty -> (2 ** resolu\xe7\xe3o_ciclo_de_trabalho) - 1\n uint32_t max_fade_time_ms -> tempo m\xe1ximo (ms) para o fading \n ledc_fade_mode_tfade_mode -> \n*/\n')),(0,t.kt)("p",null,"O programa desenvolvido possui uma estrutura bem simples e n\xe3o \xe9 necess\xe1rio acrescentar nenhuma biblioteca, apenas a manuten\xe7\xe3o dos arquivos de cabe\xe7alho j\xe1 presentes no projeto."),(0,t.kt)("p",null,"Ao criar um novo projeto no IDF automaticamente j\xe1 temos arquivos configurados e prontos para programa\xe7\xe3o do dispositivo, desta forma digite e comente as linhas do seguinte c\xf3digo no arquivo ",(0,t.kt)("strong",{parentName:"p"},"main.c :")),(0,t.kt)("p",null,"Voc\xea encontra o projeto completo na documenta\xe7\xe3o da Franzininho: ",(0,t.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/PWM_LEDC"},(0,t.kt)("strong",{parentName:"a"},"PWM_LEDC"))),(0,t.kt)("p",null,"Caso ainda n\xe3o tenha instalado e configurado o IDF no seu computador ou tenha d\xfavidas sobre as ferramentas, acesse o tutorial de instala\xe7\xe3o (",(0,t.kt)("a",{parentName:"p",href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/exemplos-espidf/primeiros-passos"},"Clique Aqui"),")."),(0,t.kt)("h3",{id:"compila\xe7\xe3o"},(0,t.kt)("strong",{parentName:"h3"},"Compila\xe7\xe3o")),(0,t.kt)("p",null,"Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o ",(0,t.kt)("strong",{parentName:"p"},(0,t.kt)("em",{parentName:"strong"},"set-target"))," para ESP32-S2. Caso n\xe3o possua a placa Franzininho WiFi altere o target para o modelo de ESP32 utilizando em seu projeto."),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"idf.py set-target esp32s2\n")),(0,t.kt)("p",null,"Ao final da compila\xe7\xe3o o resultado final deve ser semelhante \xe0 imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu c\xf3digo."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Imagem do Terminal Visual Code",src:o(3648).Z,width:"1024",height:"607"})),(0,t.kt)("p",null,"Ap\xf3s a etapa de compila\xe7\xe3o vamos enviar o c\xf3digo fonte para nossa placa, no editor pressione o \xedcone abaixo e aguarde alguns segundos para assim dar in\xedcio ao upload do programa \u201cPWM\u201d (seta preta) ."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Barra inferior do Visual Code",src:o(7899).Z,width:"528",height:"54"})),(0,t.kt)("h3",{id:"resultados"},(0,t.kt)("strong",{parentName:"h3"},"Resultados")),(0,t.kt)("p",null,"Ap\xf3s enviar seu c\xf3digo e com o circuito devidamente montado o LED externo conectado come\xe7ar\xe1 a aumentar e diminuir sua intensidade luminosa gradualmente criando o fade desejado. Na figura 5 temos a imagem do oscilosc\xf3pio mostrando a forma de onda gerada e o duty cycle atuando no momento e na figura 6 o circuito em perfeito funcionamento."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Sa\xedda do sinal PWM",src:o(683).Z,width:"1024",height:"1024"})),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Imagem do circuito em funcionamento",src:o(5099).Z,width:"1024",height:"768"})),(0,t.kt)("h2",{id:"conclus\xe3o"},(0,t.kt)("strong",{parentName:"h2"},"Conclus\xe3o")),(0,t.kt)("p",null,"Neste exemplo apresentamos t\xf3picos intermedi\xe1rios sobre a manipula\xe7\xe3o do perif\xe9rico LED Control, utilizamos conceitos importantes da linguagem C estrutura de dados e ponteiros implementado na configura\xe7\xe3o do sinal pulsado."),(0,t.kt)("p",null,"Deve-se deixar claro que o artigo aborda um conte\xfado para darmos os primeiros passo com este perif\xe9rico, encorajamos que o leitor reconfigure a sa\xedda do sinal PWM como tamb\xe9m acesse a documenta\xe7\xe3o oferecida pela Espressif para compreender como o hardware do chip comporta-se com cada configura\xe7\xe3o realizada al\xe9m das fun\xe7\xf5es implementadas em software."),(0,t.kt)("table",null,(0,t.kt)("thead",{parentName:"table"},(0,t.kt)("tr",{parentName:"thead"},(0,t.kt)("th",{parentName:"tr",align:null},"Autor"),(0,t.kt)("th",{parentName:"tr",align:null},(0,t.kt)("a",{parentName:"th",href:"https://github.com/halyssonJr"},"Halysson Junior")))),(0,t.kt)("tbody",{parentName:"table"},(0,t.kt)("tr",{parentName:"tbody"},(0,t.kt)("td",{parentName:"tr",align:null},"Data:"),(0,t.kt)("td",{parentName:"tr",align:null},"22/07/2021")))))}m.isMDXComponent=!0},5530:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/1-f7885fb7827c5c17fea371b5f8452645.png"},8223:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/2-0a531df80a496fe52ef1cd273f3306a5.png"},3648:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/3-413df3a4edbd9eeef3237bc8e6bd0894.png"},7899:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/4-e64a6a5ed6db5ad1206c547c1b106046.png"},683:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/5-921eb8572a537a8d55e8dddc33727221.jpeg"},5099:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/6-7477a50ccfa225dc8f32e7ce6cf22339.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/27079279.b1181c82.js b/assets/js/27079279.b1181c82.js deleted file mode 100755 index 29b4bffd6..000000000 --- a/assets/js/27079279.b1181c82.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4417],{3905:(e,a,o)=>{o.d(a,{Zo:()=>u,kt:()=>f});var n=o(7294);function t(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function r(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var a=1;a=0||(t[o]=e[o]);return t}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var c=n.createContext({}),l=function(e){var a=n.useContext(c),o=a;return e&&(o="function"==typeof e?e(a):i(i({},a),e)),o},u=function(e){var a=l(e.components);return n.createElement(c.Provider,{value:a},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},m=n.forwardRef((function(e,a){var o=e.components,t=e.mdxType,r=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),d=l(o),m=t,f=d["".concat(c,".").concat(m)]||d[m]||p[m]||r;return o?n.createElement(f,i(i({ref:a},u),{},{components:o})):n.createElement(f,i({ref:a},u))}));function f(e,a){var o=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var r=o.length,i=new Array(r);i[0]=m;var s={};for(var c in a)hasOwnProperty.call(a,c)&&(s[c]=a[c]);s.originalType=e,s[d]="string"==typeof e?e:t,i[1]=s;for(var l=2;l{o.r(a),o.d(a,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var n=o(3117),t=(o(7294),o(3905));const r={id:"franzino",title:"Placa Franzino",slug:"/Franzino/franzino",description:"Detalhes da placa Franzino"},i=void 0,s={unversionedId:"Franzino/franzino",id:"Franzino/franzino",title:"Placa Franzino",description:"Detalhes da placa Franzino",source:"@site/docs/Franzino/franzino.md",sourceDirName:"Franzino",slug:"/Franzino/franzino",permalink:"/docs/Franzino/franzino",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Franzino/franzino.md",tags:[],version:"current",frontMatter:{id:"franzino",title:"Placa Franzino",slug:"/Franzino/franzino",description:"Detalhes da placa Franzino"},sidebar:"docs",previous:{title:"Placa Franzininho Tiny",permalink:"/docs/franzininho-tiny/franzininho-tiny"},next:{title:"Upload via conversor USB/SERIAL",permalink:"/docs/Franzino/upload-conversor-serial"}},c={},l=[{value:"Caracter\xedsticas",id:"caracter\xedsticas",level:2},{value:"Limita\xe7\xf5es da Franzino",id:"limita\xe7\xf5es-da-franzino",level:2},{value:"Alimenta\xe7\xe3o",id:"alimenta\xe7\xe3o",level:2},{value:"Aten\xe7\xe3o",id:"aten\xe7\xe3o",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:2},{value:"Layout",id:"layout",level:2},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Refer\xeancias",id:"refer\xeancias",level:2}],u={toc:l},d="wrapper";function p(e){let{components:a,...r}=e;return(0,t.kt)(d,(0,n.Z)({},u,r,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Placa Franzino",src:o(1932).Z,width:"1999",height:"1125"})),(0,t.kt)("p",null,"A placa Franzino \xe9 um Arduino standalone de baixo custo. Como seu pr\xf3prio nome sugere, \xe9 uma placa enxuta que possui os componentes b\xe1sicos para que voc\xea possa usar o microcontrolador ATmega328, tanto para estudo quanto para a aplica\xe7\xf5es em projetos."),(0,t.kt)("p",null,"Diferente dos standalones dispon\xedveis no mercado, a placa Franzino possui pinagem Arduino UNO Rev 3 e conector para f\xe1cil liga\xe7\xe3o da interface serial. A facilidade de acesso aos pinos da interface serial, possibilita que voc\xea ligue m\xf3dulos de comunica\xe7\xe3o conforme a necessidade do projeto. Voc\xea conseguir\xe1 facilmente ligar conversores de n\xedveis seriais como: USB, RS232, RS485 e at\xe9 mesmo um m\xf3dulo Bluetooth, sem a necessidade do uso de shields."),(0,t.kt)("p",null,"A Franzino vem com o bootloader do Arduino UNO facilitando o processo de upload do seu scketch. Voc\xea poder\xe1 facilmente fazer o upload do seu sketch para placa usando um conversor USB/Serial, seguindo os mesmos passos que j\xe1 est\xe1 acostumado a fazer com a placa Arduino UNO."),(0,t.kt)("h2",{id:"caracter\xedsticas"},"Caracter\xedsticas"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Pinagem Padr\xe3o UNO R3;"),(0,t.kt)("li",{parentName:"ul"},"Microcontrolador ATmega328 pu ATmega328P;"),(0,t.kt)("li",{parentName:"ul"},"Alimenta\xe7\xe3o: 7,5 V \xe0 20 V DC;"),(0,t.kt)("li",{parentName:"ul"},"Prote\xe7\xe3o contra invers\xe3o de polaridade da fonte;"),(0,t.kt)("li",{parentName:"ul"},"Conector para liga\xe7\xe3o de interface serial;"),(0,t.kt)("li",{parentName:"ul"},"LED para indica\xe7\xe3o de alimenta\xe7\xe3o;"),(0,t.kt)("li",{parentName:"ul"},"LED conectado ao pino 13 para uso geral")),(0,t.kt)("p",null,"A seguir \xe9 apresentada a pinagem para interface serial:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"pinagem",src:o(4864).Z,width:"960",height:"720"})),(0,t.kt)("p",null,"Os pino D2 e D4 podem ser utilizados para uma comunica\xe7\xe3o soft serial, como pino de controle da comunica\xe7\xe3o RS485 ou outras aplica\xe7\xf5es de entrada ou sa\xedda."),(0,t.kt)("p",null,"Outra vantagem interessante \xe9 que as linhas de alimenta\xe7\xe3o(VCC e GND) tamb\xe9m est\xe3o dispon\xedveis nesse conector."),(0,t.kt)("p",null,"Assim, com esse conector voc\xea pode facilmente ligar um conversor USB/Serial para comunica\xe7\xe3o com um computador, seja para upload dos sketchs quanto para troca de informa\xe7\xf5es."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"ligacao_conversor USB Serial",src:o(3798).Z,width:"1133",height:"528"})),(0,t.kt)("p",null,"Se o seu projeto n\xe3o necessitar da comunica\xe7\xe3o USB/Serial durante o seu funcionamento, voc\xea poder\xe1 usar o mesmo conversor para fazer upload em outra Franzinos."),(0,t.kt)("p",null,"Algumas aplica\xe7\xf5es necessitam de comunica\xe7\xe3o serial no padr\xe3o RS232. Dessa forma voc\xea pode ligar facilmente um conversor TTL/RS232."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"conversor_ttl_rs232.png",src:o(1522).Z,width:"700",height:"525"})),(0,t.kt)("p",null,"Tamb\xe9m \xe9 comum aplica\xe7\xf5es que necessitem da comunica\xe7\xe3o RS485. Para isso voc\xea pode facilmente ligar um m\xf3dulo conversor TTL/RS485:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"HC-05",src:o(9351).Z,width:"800",height:"600"})),(0,t.kt)("p",null,"Outra aplica\xe7\xe3o interessante para comunica\xe7\xe3o e o uso de m\xf3dulos Bluetooth. Esse tipo de m\xf3dulo pode ser facilmente ligado a Franzino tanto para uso dos pinos padr\xf5es de comunica\xe7\xe3o TX e RX quanto para comunica\xe7\xe3o soft serial:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Conversor RS485",src:o(7851).Z,width:"800",height:"277"})),(0,t.kt)("p",null,"Como observado acima, h\xe1 muitas possibilidades de comunica\xe7\xf5es e voc\xea pode facilmente ligar outros m\xf3dulos para diversas aplica\xe7\xf5es conforme sua necessidade."),(0,t.kt)("h2",{id:"limita\xe7\xf5es-da-franzino"},"Limita\xe7\xf5es da Franzino"),(0,t.kt)("p",null,"A Franzino \xe9 uma placa standalone que possui diversas vantagens. Por\xe9m como foi desenvolvida em face simples e com o m\xednimo de componente necess\xe1rios para o uso do microcontrolador, possui algumas limita\xe7\xf5es em rela\xe7\xe3o ao Arduino UNO, que s\xe3o:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"N\xe3o h\xe1 regulador 3,3 V, dessa forma o pino 3.3V n\xe3o est\xe1 conectado;"),(0,t.kt)("li",{parentName:"ul"},"O pino Vin n\xe3o est\xe1 conectado a alimenta\xe7\xe3o;"),(0,t.kt)("li",{parentName:"ul"},"Os pinos SCL e SDA n\xe3o est\xe3o conectados as pinos A4 e A5;"),(0,t.kt)("li",{parentName:"ul"},"N\xe3o possui conversor USB/Serial"),(0,t.kt)("li",{parentName:"ul"},"Precisa de um conversor USB/Serial para upload dos sketchs")),(0,t.kt)("h2",{id:"alimenta\xe7\xe3o"},"Alimenta\xe7\xe3o"),(0,t.kt)("p",null,"A Franzino pode ser alimentada das seguintes formas:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Conector P4 com tens\xe3o de 7,5 V a 20 V como positivo no centro;"),(0,t.kt)("li",{parentName:"ul"},"Pino 5V e GND - tens\xe3o de alimenta\xe7\xe3o fixa em 5 VDC"),(0,t.kt)("li",{parentName:"ul"},"Atrav\xe9s nos pinos VCC e GND dispon\xedveis conector de expans\xe3o serial;")),(0,t.kt)("h2",{id:"aten\xe7\xe3o"},"Aten\xe7\xe3o"),(0,t.kt)("p",null,"N\xe3o LIGAR o VCC do conversor USB/SERIAL a placa se a fonte externa estiver ligada. Nesse caso ligar apenas os pinos DTR, RXI, TXO e GND."),(0,t.kt)("h2",{id:"esquem\xe1tico"},"Esquem\xe1tico"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Esquem\xe1tico",src:o(2020).Z,width:"1664",height:"1109"})),(0,t.kt)("h2",{id:"layout"},"Layout"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Layout",src:o(1247).Z,width:"430",height:"403"})),(0,t.kt)("h2",{id:"licen\xe7a"},"Licen\xe7a"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"CC SA 4.0",src:o(8797).Z,width:"88",height:"31"}),"\nEsta obra est\xe1 licenciada com uma Licen\xe7a Creative Commons Atribui\xe7\xe3o-CompartilhaIgual 4.0 Internacional."),(0,t.kt)("p",null,"Todos os arquivos de projeto est\xe3o dispon\xedveis no Github: ",(0,t.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/Franzino"},"https://github.com/Franzininho/Franzino")),(0,t.kt)("h2",{id:"refer\xeancias"},"Refer\xeancias"),(0,t.kt)("p",null,"Artigo no Embarcados: ",(0,t.kt)("a",{parentName:"p",href:"https://www.embarcados.com.br/franzino-open-hardware-de-baixo-custo/"},"https://www.embarcados.com.br/franzino-open-hardware-de-baixo-custo/")))}p.isMDXComponent=!0},8797:(e,a,o)=>{o.d(a,{Z:()=>n});const n="data:image/png;base64,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"},1522:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/conversor_ttl_rs232-5c8a9cecd3ae56c9e8cbf534d350bfba.png"},2020:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/esquematico-f80fb98cd1e79255d7cf909cdb8d636e.png"},1932:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/franzino-eb728ef66abfa87176f4bb5661f2a703.jpg"},9351:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/hc-05-15f3ef2c9539c2a12410dd16c727a007.png"},1247:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/layout-6c5a4766199ec41bc01e5717b83feb2b.png"},3798:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/ligacao_conversor-29c3b68ee0e2d48f071f37ed5149e5ef.jpg"},4864:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/pinout-c655298a464993df025640894e5bba5e.png"},7851:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/rs485-12a066d6983174f1cfbb1d931b2ef091.png"}}]); \ No newline at end of file diff --git a/assets/js/27079279.ead950af.js b/assets/js/27079279.ead950af.js new file mode 100755 index 000000000..57f8bc0c5 --- /dev/null +++ b/assets/js/27079279.ead950af.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[468],{5372:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>t,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var o=a(17624),i=a(95788);const r={id:"franzino",title:"Placa Franzino",slug:"/Franzino/franzino",description:"Detalhes da placa Franzino"},s=void 0,c={id:"Franzino/franzino",title:"Placa Franzino",description:"Detalhes da placa Franzino",source:"@site/docs/Franzino/franzino.md",sourceDirName:"Franzino",slug:"/Franzino/franzino",permalink:"/docs/Franzino/franzino",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Franzino/franzino.md",tags:[],version:"current",frontMatter:{id:"franzino",title:"Placa Franzino",slug:"/Franzino/franzino",description:"Detalhes da placa Franzino"},sidebar:"docs",previous:{title:"Placa Franzininho Tiny",permalink:"/docs/franzininho-tiny/franzininho-tiny"},next:{title:"Upload via conversor USB/SERIAL",permalink:"/docs/Franzino/upload-conversor-serial"}},t={},d=[{value:"Caracter\xedsticas",id:"caracter\xedsticas",level:2},{value:"Limita\xe7\xf5es da Franzino",id:"limita\xe7\xf5es-da-franzino",level:2},{value:"Alimenta\xe7\xe3o",id:"alimenta\xe7\xe3o",level:2},{value:"Aten\xe7\xe3o",id:"aten\xe7\xe3o",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:2},{value:"Layout",id:"layout",level:2},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Refer\xeancias",id:"refer\xeancias",level:2}];function l(e){const n={a:"a",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,i.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Placa Franzino",src:a(66048).c+"",width:"1999",height:"1125"})}),"\n",(0,o.jsx)(n.p,{children:"A placa Franzino \xe9 um Arduino standalone de baixo custo. Como seu pr\xf3prio nome sugere, \xe9 uma placa enxuta que possui os componentes b\xe1sicos para que voc\xea possa usar o microcontrolador ATmega328, tanto para estudo quanto para a aplica\xe7\xf5es em projetos."}),"\n",(0,o.jsx)(n.p,{children:"Diferente dos standalones dispon\xedveis no mercado, a placa Franzino possui pinagem Arduino UNO Rev 3 e conector para f\xe1cil liga\xe7\xe3o da interface serial. A facilidade de acesso aos pinos da interface serial, possibilita que voc\xea ligue m\xf3dulos de comunica\xe7\xe3o conforme a necessidade do projeto. Voc\xea conseguir\xe1 facilmente ligar conversores de n\xedveis seriais como: USB, RS232, RS485 e at\xe9 mesmo um m\xf3dulo Bluetooth, sem a necessidade do uso de shields."}),"\n",(0,o.jsx)(n.p,{children:"A Franzino vem com o bootloader do Arduino UNO facilitando o processo de upload do seu scketch. Voc\xea poder\xe1 facilmente fazer o upload do seu sketch para placa usando um conversor USB/Serial, seguindo os mesmos passos que j\xe1 est\xe1 acostumado a fazer com a placa Arduino UNO."}),"\n",(0,o.jsx)(n.h2,{id:"caracter\xedsticas",children:"Caracter\xedsticas"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Pinagem Padr\xe3o UNO R3;"}),"\n",(0,o.jsx)(n.li,{children:"Microcontrolador ATmega328 pu ATmega328P;"}),"\n",(0,o.jsx)(n.li,{children:"Alimenta\xe7\xe3o: 7,5 V \xe0 20 V DC;"}),"\n",(0,o.jsx)(n.li,{children:"Prote\xe7\xe3o contra invers\xe3o de polaridade da fonte;"}),"\n",(0,o.jsx)(n.li,{children:"Conector para liga\xe7\xe3o de interface serial;"}),"\n",(0,o.jsx)(n.li,{children:"LED para indica\xe7\xe3o de alimenta\xe7\xe3o;"}),"\n",(0,o.jsx)(n.li,{children:"LED conectado ao pino 13 para uso geral"}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"A seguir \xe9 apresentada a pinagem para interface serial:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"pinagem",src:a(59212).c+"",width:"960",height:"720"})}),"\n",(0,o.jsx)(n.p,{children:"Os pino D2 e D4 podem ser utilizados para uma comunica\xe7\xe3o soft serial, como pino de controle da comunica\xe7\xe3o RS485 ou outras aplica\xe7\xf5es de entrada ou sa\xedda."}),"\n",(0,o.jsx)(n.p,{children:"Outra vantagem interessante \xe9 que as linhas de alimenta\xe7\xe3o(VCC e GND) tamb\xe9m est\xe3o dispon\xedveis nesse conector."}),"\n",(0,o.jsx)(n.p,{children:"Assim, com esse conector voc\xea pode facilmente ligar um conversor USB/Serial para comunica\xe7\xe3o com um computador, seja para upload dos sketchs quanto para troca de informa\xe7\xf5es."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"ligacao_conversor USB Serial",src:a(40624).c+"",width:"1133",height:"528"})}),"\n",(0,o.jsx)(n.p,{children:"Se o seu projeto n\xe3o necessitar da comunica\xe7\xe3o USB/Serial durante o seu funcionamento, voc\xea poder\xe1 usar o mesmo conversor para fazer upload em outra Franzinos."}),"\n",(0,o.jsx)(n.p,{children:"Algumas aplica\xe7\xf5es necessitam de comunica\xe7\xe3o serial no padr\xe3o RS232. Dessa forma voc\xea pode ligar facilmente um conversor TTL/RS232."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"conversor_ttl_rs232.png",src:a(79744).c+"",width:"700",height:"525"})}),"\n",(0,o.jsx)(n.p,{children:"Tamb\xe9m \xe9 comum aplica\xe7\xf5es que necessitem da comunica\xe7\xe3o RS485. Para isso voc\xea pode facilmente ligar um m\xf3dulo conversor TTL/RS485:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"HC-05",src:a(97108).c+"",width:"800",height:"600"})}),"\n",(0,o.jsx)(n.p,{children:"Outra aplica\xe7\xe3o interessante para comunica\xe7\xe3o e o uso de m\xf3dulos Bluetooth. Esse tipo de m\xf3dulo pode ser facilmente ligado a Franzino tanto para uso dos pinos padr\xf5es de comunica\xe7\xe3o TX e RX quanto para comunica\xe7\xe3o soft serial:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Conversor RS485",src:a(56596).c+"",width:"800",height:"277"})}),"\n",(0,o.jsx)(n.p,{children:"Como observado acima, h\xe1 muitas possibilidades de comunica\xe7\xf5es e voc\xea pode facilmente ligar outros m\xf3dulos para diversas aplica\xe7\xf5es conforme sua necessidade."}),"\n",(0,o.jsx)(n.h2,{id:"limita\xe7\xf5es-da-franzino",children:"Limita\xe7\xf5es da Franzino"}),"\n",(0,o.jsx)(n.p,{children:"A Franzino \xe9 uma placa standalone que possui diversas vantagens. Por\xe9m como foi desenvolvida em face simples e com o m\xednimo de componente necess\xe1rios para o uso do microcontrolador, possui algumas limita\xe7\xf5es em rela\xe7\xe3o ao Arduino UNO, que s\xe3o:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"N\xe3o h\xe1 regulador 3,3 V, dessa forma o pino 3.3V n\xe3o est\xe1 conectado;"}),"\n",(0,o.jsx)(n.li,{children:"O pino Vin n\xe3o est\xe1 conectado a alimenta\xe7\xe3o;"}),"\n",(0,o.jsx)(n.li,{children:"Os pinos SCL e SDA n\xe3o est\xe3o conectados as pinos A4 e A5;"}),"\n",(0,o.jsx)(n.li,{children:"N\xe3o possui conversor USB/Serial"}),"\n",(0,o.jsx)(n.li,{children:"Precisa de um conversor USB/Serial para upload dos sketchs"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"alimenta\xe7\xe3o",children:"Alimenta\xe7\xe3o"}),"\n",(0,o.jsx)(n.p,{children:"A Franzino pode ser alimentada das seguintes formas:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Conector P4 com tens\xe3o de 7,5 V a 20 V como positivo no centro;"}),"\n",(0,o.jsx)(n.li,{children:"Pino 5V e GND - tens\xe3o de alimenta\xe7\xe3o fixa em 5 VDC"}),"\n",(0,o.jsx)(n.li,{children:"Atrav\xe9s nos pinos VCC e GND dispon\xedveis conector de expans\xe3o serial;"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"aten\xe7\xe3o",children:"Aten\xe7\xe3o"}),"\n",(0,o.jsx)(n.p,{children:"N\xe3o LIGAR o VCC do conversor USB/SERIAL a placa se a fonte externa estiver ligada. Nesse caso ligar apenas os pinos DTR, RXI, TXO e GND."}),"\n",(0,o.jsx)(n.h2,{id:"esquem\xe1tico",children:"Esquem\xe1tico"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Esquem\xe1tico",src:a(13036).c+"",width:"1664",height:"1109"})}),"\n",(0,o.jsx)(n.h2,{id:"layout",children:"Layout"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Layout",src:a(94133).c+"",width:"430",height:"403"})}),"\n",(0,o.jsx)(n.h2,{id:"licen\xe7a",children:"Licen\xe7a"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.img,{alt:"CC SA 4.0",src:a(3976).c+"",width:"88",height:"31"}),"\nEsta obra est\xe1 licenciada com uma Licen\xe7a Creative Commons Atribui\xe7\xe3o-CompartilhaIgual 4.0 Internacional."]}),"\n",(0,o.jsxs)(n.p,{children:["Todos os arquivos de projeto est\xe3o dispon\xedveis no Github: ",(0,o.jsx)(n.a,{href:"https://github.com/Franzininho/Franzino",children:"https://github.com/Franzininho/Franzino"})]}),"\n",(0,o.jsx)(n.h2,{id:"refer\xeancias",children:"Refer\xeancias"}),"\n",(0,o.jsxs)(n.p,{children:["Artigo no Embarcados: ",(0,o.jsx)(n.a,{href:"https://www.embarcados.com.br/franzino-open-hardware-de-baixo-custo",children:"https://www.embarcados.com.br/franzino-open-hardware-de-baixo-custo"})]})]})}function p(e={}){const{wrapper:n}={...(0,i.MN)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},95788:(e,n,a)=>{a.d(n,{MN:()=>d});var o=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,o)}return a}function s(e){for(var n=1;n=0||(i[a]=e[a]);return i}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var t=o.createContext({}),d=function(e){var n=o.useContext(t),a=n;return e&&(a="function"==typeof e?e(n):s(s({},n),e)),a},l={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},p=o.forwardRef((function(e,n){var a=e.components,i=e.mdxType,r=e.originalType,t=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=d(a),m=i,h=u["".concat(t,".").concat(m)]||u[m]||l[m]||r;return a?o.createElement(h,s(s({ref:n},p),{},{components:a})):o.createElement(h,s({ref:n},p))}));p.displayName="MDXCreateElement"},3976:(e,n,a)=>{a.d(n,{c:()=>o});const o="data:image/png;base64,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"},79744:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/conversor_ttl_rs232-5c8a9cecd3ae56c9e8cbf534d350bfba.png"},13036:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/esquematico-f80fb98cd1e79255d7cf909cdb8d636e.png"},66048:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/franzino-eb728ef66abfa87176f4bb5661f2a703.jpg"},97108:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/hc-05-15f3ef2c9539c2a12410dd16c727a007.png"},94133:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/layout-6c5a4766199ec41bc01e5717b83feb2b.png"},40624:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/ligacao_conversor-29c3b68ee0e2d48f071f37ed5149e5ef.jpg"},59212:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/pinout-c655298a464993df025640894e5bba5e.png"},56596:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/rs485-12a066d6983174f1cfbb1d931b2ef091.png"}}]); \ No newline at end of file diff --git a/assets/js/2868cdab.e1e8fb8c.js b/assets/js/2868cdab.e1e8fb8c.js deleted file mode 100755 index c42e370ae..000000000 --- a/assets/js/2868cdab.e1e8fb8c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4061],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),c=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=c(e.components);return n.createElement(i.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=c(r),m=o,f=p["".concat(i,".").concat(m)]||p[m]||g[m]||a;return r?n.createElement(f,l(l({ref:t},s),{},{components:r})):n.createElement(f,l({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var u={};for(var i in t)hasOwnProperty.call(t,i)&&(u[i]=t[i]);u.originalType=e,u[p]="string"==typeof e?e:o,l[1]=u;for(var c=2;c{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>g,frontMatter:()=>a,metadata:()=>u,toc:()=>c});var n=r(3117),o=(r(7294),r(3905));const a={slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},l=void 0,u={permalink:"/blog/welcome",source:"@site/blog/2019-05-30-welcome.md",title:"Welcome",description:"Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!",date:"2019-05-30T00:00:00.000Z",formattedDate:"30 de maio de 2019",tags:[{label:"facebook",permalink:"/blog/tags/facebook"},{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.175,hasTruncateMarker:!1,authors:[{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4"}],frontMatter:{slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},nextItem:{title:"Hello",permalink:"/blog/hello-world"}},i={authorsImageUrls:[void 0]},c=[],s={toc:c},p="wrapper";function g(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Blog features are powered by the blog plugin. Simply add files to the ",(0,o.kt)("inlineCode",{parentName:"p"},"blog")," directory. It supports tags as well!"),(0,o.kt)("p",null,"Delete the whole directory if you don't want the blog features. As simple as that!"))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2868cdab.f44856ad.js b/assets/js/2868cdab.f44856ad.js new file mode 100755 index 000000000..74d776b2b --- /dev/null +++ b/assets/js/2868cdab.f44856ad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1784],{49116:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>u});var n=r(17624),o=r(95788);const a={slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},l=void 0,c={permalink:"/blog/welcome",source:"@site/blog/2019-05-30-welcome.md",title:"Welcome",description:"Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!",date:"2019-05-30T00:00:00.000Z",tags:[{label:"facebook",permalink:"/blog/tags/facebook"},{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.175,hasTruncateMarker:!1,authors:[{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4"}],frontMatter:{slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},unlisted:!1,nextItem:{title:"Hello",permalink:"/blog/hello-world"}},s={authorsImageUrls:[void 0]},u=[];function i(e){const t={code:"code",p:"p",...(0,o.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["Blog features are powered by the blog plugin. Simply add files to the ",(0,n.jsx)(t.code,{children:"blog"})," directory. It supports tags as well!"]}),"\n",(0,n.jsx)(t.p,{children:"Delete the whole directory if you don't want the blog features. As simple as that!"})]})}function p(e={}){const{wrapper:t}={...(0,o.MN)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(i,{...e})}):i(e)}},95788:(e,t,r)=>{r.d(t,{MN:()=>u});var n=r(11504);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},i={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),g=u(r),h=o,b=g["".concat(s,".").concat(h)]||g[h]||i[h]||a;return r?n.createElement(b,l(l({ref:t},p),{},{components:r})):n.createElement(b,l({ref:t},p))}));p.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/2e8bb407.49ab8395.js b/assets/js/2e8bb407.49ab8395.js deleted file mode 100755 index dd557793e..000000000 --- a/assets/js/2e8bb407.49ab8395.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2687],{3905:(e,a,o)=>{o.d(a,{Zo:()=>m,kt:()=>f});var n=o(7294);function s(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function t(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var a=1;a=0||(s[o]=e[o]);return s}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(s[o]=e[o])}return s}var l=n.createContext({}),p=function(e){var a=n.useContext(l),o=a;return e&&(o="function"==typeof e?e(a):r(r({},a),e)),o},m=function(e){var a=p(e.components);return n.createElement(l.Provider,{value:a},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},c=n.forwardRef((function(e,a){var o=e.components,s=e.mdxType,t=e.originalType,l=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),d=p(o),c=s,f=d["".concat(l,".").concat(c)]||d[c]||u[c]||t;return o?n.createElement(f,r(r({ref:a},m),{},{components:o})):n.createElement(f,r({ref:a},m))}));function f(e,a){var o=arguments,s=a&&a.mdxType;if("string"==typeof e||s){var t=o.length,r=new Array(t);r[0]=c;var i={};for(var l in a)hasOwnProperty.call(a,l)&&(i[l]=a[l]);i.originalType=e,i[d]="string"==typeof e?e:s,r[1]=i;for(var p=2;p{o.r(a),o.d(a,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>t,metadata:()=>i,toc:()=>p});var n=o(3117),s=(o(7294),o(3905));const t={id:"franzininho-wifi-espidf-00",title:"Primeiros Passos com ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/primeiros-passos",description:"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF",author:"F\xe1bio Souza"},r=void 0,i={unversionedId:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00",id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00",title:"Primeiros Passos com ESP-IDF",description:"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x00-Primeiros-passos.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/primeiros-passos",permalink:"/docs/franzininho-wifi/exemplos-espidf/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x00-Primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-00",title:"Primeiros Passos com ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/primeiros-passos",description:"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF",author:"F\xe1bio Souza"},sidebar:"docs",previous:{title:"Como simular a Franzininho WiFi no Wokwi",permalink:"/docs/franzininho-wifi/wokwi/primeiros-passos"},next:{title:"Hello World! ESP-IDF",permalink:"/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf"}},l={},p=[{value:"Introdu\xe7\xe3o",id:"introdu\xe7\xe3o",level:2},{value:"Passo 1 - Instala\xe7\xe3o dos pr\xe9-requisitos",id:"passo-1---instala\xe7\xe3o-dos-pr\xe9-requisitos",level:2},{value:"Passo 2 - Instala\xe7\xe3o do ESP-IDF",id:"passo-2---instala\xe7\xe3o-do-esp-idf",level:2},{value:"Linux e macOS",id:"linux-e-macos",level:3},{value:"Windows",id:"windows",level:3},{value:"Instalando O ESP-IDF e ferramentas",id:"instalando-o-esp-idf-e-ferramentas",level:3},{value:"Windows",id:"windows-1",level:4},{value:"Linux e macOS",id:"linux-e-macos-1",level:4},{value:"Configurando as vari\xe1veis de ambientes",id:"configurando-as-vari\xe1veis-de-ambientes",level:3},{value:"Windows",id:"windows-2",level:4},{value:"Linux e macOS",id:"linux-e-macos-2",level:4},{value:"Passo 3 - Criando um novo projeto",id:"passo-3---criando-um-novo-projeto",level:2},{value:"Copiando um projeto exemplo",id:"copiando-um-projeto-exemplo",level:3},{value:"Windows",id:"windows-3",level:4},{value:"Linux e macOS",id:"linux-e-macos-3",level:4},{value:"Configura\xe7\xe3o",id:"configura\xe7\xe3o",level:3},{value:"Windows",id:"windows-4",level:4},{value:"Linux e macOS",id:"linux-e-macos-4",level:4},{value:"Compilando o projeto em modo DFU",id:"compilando-o-projeto-em-modo-dfu",level:3},{value:"Compila\xe7\xe3o, grava\xe7\xe3o e monitor em modo normal",id:"compila\xe7\xe3o-grava\xe7\xe3o-e-monitor-em-modo-normal",level:3}],m={toc:p},d="wrapper";function u(e){let{components:a,...t}=e;return(0,s.kt)(d,(0,n.Z)({},m,t,{components:a,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF (Espressif IoT Development Framework) para trabalhar com a Franzininho WiFi que usa o ESP32-S2 da Espressif."),(0,s.kt)("p",null,"Ao final, faremos um exemplo simples para compilar, gravar e monitorar usando o ESP-IDF, assim, garantiremos que tudo estar\xe1 funcionando."),(0,s.kt)("h2",{id:"introdu\xe7\xe3o"},"Introdu\xe7\xe3o"),(0,s.kt)("p",null,"Para essa configura\xe7\xe3o, vamos instalar o ESP-IDF e us\xe1-lo atrav\xe9s de linha de comando. Caso voc\xea queira usar o IDF integrado a ambientes de desenvolvimento integrado (IDE) como VScode e Eclipse, confira os seguintes links:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"https://github.com/espressif/idf-eclipse-plugin"},"Eclipse Plugin")),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"https://github.com/espressif/vscode-esp-idf-extension"},"VS Code Extension"))),(0,s.kt)("p",null,"Voc\xea poder\xe1 instalar o ESP-IDF no seu sistema operacional preferido (Linux, Windows, macOS)."),(0,s.kt)("p",null,"Para a experi\xeancia completa, voc\xea precisar\xe1 de uma placa Franzininho WiFi, Computador: com Windows, Linux ou macOS"),(0,s.kt)("h2",{id:"passo-1---instala\xe7\xe3o-dos-pr\xe9-requisitos"},"Passo 1 - Instala\xe7\xe3o dos pr\xe9-requisitos"),(0,s.kt)("p",null,"Algumas ferramentas precisam ser instaladas no computador antes de prosseguir para as pr\xf3ximas etapas. Siga os links abaixo para obter as instru\xe7\xf5es para o seu sistema operacional:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/windows-setup.html"},"Windows")),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/linux-setup.html"},"Linux")),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/macos-setup.html"},"Mac OS"))),(0,s.kt)("p",null,"\xc9 muito importante a instala\xe7\xe3o de todos os pr\xe9-requisitos."),(0,s.kt)("h2",{id:"passo-2---instala\xe7\xe3o-do-esp-idf"},"Passo 2 - Instala\xe7\xe3o do ESP-IDF"),(0,s.kt)("p",null,"Nessa etapa vamos instalar o ESP-IDF e conjunto de ferramentas e bibliotecas. Vamos usar o c\xf3digo mantido pela Espressif no reposit\xf3rio do ",(0,s.kt)("a",{parentName:"p",href:"https://github.com/espressif/esp-idf"},"ESP-IDF")),(0,s.kt)("p",null,"O ESP-IDF \xe9 o framework oficial da Espressif para o desenvolvimento de aplica\xe7\xf5es parar toda a fam\xedlia ESP32. O procedimento apresentado aqui servir\xe1 para trabalhar com toda a fam\xedlia ESP32. Por\xe9m, vamos dar foco ao ESP32-S2 que \xe9 usado na Franzininho WiFi."),(0,s.kt)("h3",{id:"linux-e-macos"},"Linux e macOS"),(0,s.kt)("p",null,"Abra o terminal e execute:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir -p ~/esp\ncd ~/esp\ngit clone --recursive https://github.com/espressif/esp-idf.git\n")),(0,s.kt)("p",null,"O ESP-IDF ser\xe1 baixado no seguinte reposit\xf3rio ",(0,s.kt)("inlineCode",{parentName:"p"},"~/esp/esp-idf"),"."),(0,s.kt)("h3",{id:"windows"},"Windows"),(0,s.kt)("p",null,"Al\xe9m de instalar as ferramentas, o ",(0,s.kt)("a",{parentName:"p",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/windows-setup.html#get-started-windows-tools-installer"},"ESP-IDF Tools Installer para Windows")," apresentado no passo 1 ele tamb\xe9m baixa uma c\xf3pia do ESP-IDF. Dessa forma voc\xea n\xe3o precisar\xe1 baixar o ESP-IDF agora, se j\xe1 tiver baixado anteriormente junto aos pr\xe9-requisitos."),(0,s.kt)("p",null,"Se desejar fazer o download do ESP-IDF sem a ajuda do ESP-IDF Tools Installer, consulte ",(0,s.kt)("a",{parentName:"p",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/windows-setup-scratch.html#get-esp-idf-windows-command-line"},"estas instru\xe7\xf5es"),"."),(0,s.kt)("h3",{id:"instalando-o-esp-idf-e-ferramentas"},"Instalando O ESP-IDF e ferramentas"),(0,s.kt)("p",null,"Al\xe9m do ESP-IDF, voc\xea tamb\xe9m precisa instalar as ferramentas usadas pelo ESP-IDF, como compilador, depurador, pacotes Python, etc."),(0,s.kt)("h4",{id:"windows-1"},"Windows"),(0,s.kt)("p",null,"O ESP-IDF Tools Installer para Windows apresentado no passo 1 instala todas as ferramentas necess\xe1rias."),(0,s.kt)("p",null,"Se voc\xea deseja instalar as ferramentas sem a ajuda do ESP-IDF Tools Installer, abra o Prompt de Comando e siga estas etapas:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd %userprofile%\\esp\\esp-idf\ninstall.bat\n")),(0,s.kt)("p",null,"Ou no Windows PowerShell"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/esp/esp-idf\n./install.ps1\n")),(0,s.kt)("h4",{id:"linux-e-macos-1"},"Linux e macOS"),(0,s.kt)("p",null,"No Linux ou macOS h\xe1 um script para instala\xe7\xe3o.Abra o terminal e execute:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/esp/esp-idf\n./install.sh\n")),(0,s.kt)("p",null,"Ou se tiver usando o Fish:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/esp/esp-idf\n./install.fish\n")),(0,s.kt)("h3",{id:"configurando-as-vari\xe1veis-de-ambientes"},"Configurando as vari\xe1veis de ambientes"),(0,s.kt)("p",null,"As ferramentas instaladas ainda n\xe3o foram adicionadas \xe0 vari\xe1vel de ambiente PATH. Para tornar as ferramentas utiliz\xe1veis na linha de comando, algumas vari\xe1veis de ambiente devem ser definidas. ESP-IDF fornece alguns scripts que ajudam nesse processo."),(0,s.kt)("h4",{id:"windows-2"},"Windows"),(0,s.kt)("p",null,"O ESP-IDF Tools Installer para Windows cria um atalho \u201cESP-IDF Command Prompt\u201d no menu Iniciar. Este atalho abre o Prompt de Comando e configura todas as vari\xe1veis de ambiente necess\xe1rias. Voc\xea pode abrir este atalho e prosseguir para a pr\xf3xima etapa."),(0,s.kt)("p",null,"Caso n\xe3o funcione e voc\xea precise configurar manualmente, execute os seguintes comandos:"),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"Prompt de Comando"),":"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"%userprofile%\\esp\\esp-idf\\export.bat\n")),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"Windows PowerShell"),":"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},".$HOME/esp/esp-idf/export.ps1\n")),(0,s.kt)("h4",{id:"linux-e-macos-2"},"Linux e macOS"),(0,s.kt)("p",null,"No terminal execute:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},". $HOME/esp/esp-idf/export.sh\n")),(0,s.kt)("p",null,"Ou no Fish(suportado apenas em vers\xf5es a partir da 3.0.0):"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},". $HOME/esp/esp-idf/export.fish\n")),(0,s.kt)("admonition",{title:"Importante",type:"important"},(0,s.kt)("p",{parentName:"admonition"},"Voc\xea precisa fazer isso toda vez que iniciar o terminal para usar o ESP-IDF.")),(0,s.kt)("h2",{id:"passo-3---criando-um-novo-projeto"},"Passo 3 - Criando um novo projeto"),(0,s.kt)("p",null,"Agora que j\xe1 temos as ferramentas instaladas, vamos fazer um exemplo para validar o funcionamento das mesmas. Vamos executar o exemplo blink que j\xe1 vem no IDF."),(0,s.kt)("h3",{id:"copiando-um-projeto-exemplo"},"Copiando um projeto exemplo"),(0,s.kt)("p",null,"Vamos copiar o projeto blink para preservarmos o exemplo presente na pasta do IDF:"),(0,s.kt)("h4",{id:"windows-3"},"Windows"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd %userprofile%\\esp\nxcopy /e /i %IDF_PATH%\\examples\\get-started\\blink blink\n")),(0,s.kt)("h4",{id:"linux-e-macos-3"},"Linux e macOS"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/esp\ncp -r $IDF_PATH/examples/get-started/blink .\n")),(0,s.kt)("p",null,"Fique a vontade para testar os outros exemplos tamb\xe9m."),(0,s.kt)("p",null,"O sistema de compila\xe7\xe3o ESP-IDF n\xe3o oferece suporte a espa\xe7os nos caminhos para o ESP-IDF ou para projetos."),(0,s.kt)("h3",{id:"configura\xe7\xe3o"},"Configura\xe7\xe3o"),(0,s.kt)("p",null,"Agora vamos configurar o target para qual ser\xe1 compilado e j\xe1 fazer uma configura\xe7\xe3o no menuconfig. No nosso caso vamos trabalhar com o ESP32-S2:"),(0,s.kt)("h4",{id:"windows-4"},"Windows"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd %userprofile%\\esp\\blink\nidf.py set-target esp32s2\nidf.py menuconfig\n")),(0,s.kt)("h4",{id:"linux-e-macos-4"},"Linux e macOS"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/esp/blink\nidf.py set-target esp32s2\nidf.py menuconfig\n")),(0,s.kt)("p",null,"Ser\xe1 aberto o menuconfig:\n",(0,s.kt)("img",{alt:"menuconfig",src:o(2315).Z,width:"866",height:"562"})),(0,s.kt)("p",null,"Acesse a op\xe7\xe3o Component config ---\x3e\n",(0,s.kt)("img",{alt:"menuconfig",src:o(9165).Z,width:"866",height:"562"})),(0,s.kt)("p",null,"Em seguida ESP System Settings ---\x3e\n",(0,s.kt)("img",{alt:"menuconfig",src:o(9630).Z,width:"866",height:"562"})),(0,s.kt)("p",null,"Agora selecione Channel for console output (Default: UART0) ---\x3e\n",(0,s.kt)("img",{alt:"menuconfig",src:o(7666).Z,width:"866",height:"562"})),(0,s.kt)("p",null,"E por fim, selecione (X) USB CDC:\n",(0,s.kt)("img",{alt:"menuconfig",src:o(7642).Z,width:"866",height:"562"})),(0,s.kt)("p",null,"Salve(S), Enter, enter, Saia do menu(ESC)"),(0,s.kt)("p",null,"Essa configura\xe7\xe3o permitir\xe1 que usemos a USB no pr\xf3ximo upload."),(0,s.kt)("admonition",{title:"Importante",type:"important"},(0,s.kt)("p",{parentName:"admonition"},"Sempre que iniciar um projeto novo fa\xe7a essas configura\xe7\xe3o para que continue usando a USB como interface de programa\xe7\xe3o.")),(0,s.kt)("p",null,"Para mais detalhes acesse:"),(0,s.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/zg9IMDaoImA",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,s.kt)("h3",{id:"compilando-o-projeto-em-modo-dfu"},"Compilando o projeto em modo DFU"),(0,s.kt)("p",null,"A primeira compila\xe7\xe3o n\xf3s vamos fazer usando o modo DFU, que j\xe1 vem por padr\xe3o no ESP32-S2 permitindo o upload atrav\xe9s da USB:"),(0,s.kt)("p",null,"Para crie a imagem DFU:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"idf.py dfu\n")),(0,s.kt)("p",null,"A primeira compila\xe7\xe3o pode demorar um pouco. Da at\xe9 pra ir pegar um caf\xe9 ;)"),(0,s.kt)("p",null,"Ap\xf3s a compila\xe7\xe3o, conecte a Franzininho WiFi no computador. Antes de fazermos o upload \xe9 necess\xe1rio entrar no modo DFU. Para entrar no modo DFU pressione as teclas na seguinte sequencia:"),(0,s.kt)("ol",null,(0,s.kt)("li",{parentName:"ol"},"pressione e segure a tecla BOOT"),(0,s.kt)("li",{parentName:"ol"},"pressione rapidamente e solte a tecla RESET"),(0,s.kt)("li",{parentName:"ol"},"solte a tecla BOOT")),(0,s.kt)("p",null,"Dessa forma a placa entrar\xe1 no modo DFU e poder\xe1 receber o firmware atrav\xe9s da USB."),(0,s.kt)("p",null,"Para fazer a grava\xe7\xe3o, digite:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"idf.py dfu-flash\n")),(0,s.kt)("admonition",{title:"Dica",type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"Caso a grava\xe7\xe3o atrav\xe9s da USB n\xe3o funcione, veja esse ",(0,s.kt)("a",{parentName:"p",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-guides/dfu.html#udev-rule-linux-only"},"link com as instru\xe7\xf5es de configura\xe7\xf5es da USB"))),(0,s.kt)("p",null,"Ap\xf3s alguns segundos a placa estar\xe1 gravada."),(0,s.kt)("p",null,"Pressione novamente o bot\xe3o RESET."),(0,s.kt)("h3",{id:"compila\xe7\xe3o-grava\xe7\xe3o-e-monitor-em-modo-normal"},"Compila\xe7\xe3o, grava\xe7\xe3o e monitor em modo normal"),(0,s.kt)("p",null,"Agora voc\xea poder\xe1 compilar, gravar e monitorar usando a porta USB. Esse processo \xe9 id\xeantico ao que fazemos para desenvolver com o ESP32:"),(0,s.kt)("p",null,"Compilar:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"idf.py build\n")),(0,s.kt)("p",null,"Gravar:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"idf.py -p PORT [-b BAUD] flash\n")),(0,s.kt)("p",null,"Monitorar:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"idf.py -p /dev/ttyUSB0 monitor\n")),(0,s.kt)("p",null,"Maravilha, voc\xea configurou o ambiente para trabalhar com o ESP-IDF."),(0,s.kt)("p",null,"Caso queira trabalhar com a extens\xe3o para VSCODE, confira o video:"),(0,s.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/rxMg_zxO0q0",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}u.isMDXComponent=!0},2315:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/1-cf224b69c503620285cee56dc7457999.png"},9165:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/2-4806954a1b4006bb78b6e50a23eba7b5.png"},9630:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/3-c0afeaa310f4501913ccaf8190c00334.png"},7642:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/4-c250e820888c2d31288214e41376a1dd.png"},7666:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/5-0821b04d00bb4ccc716759540cf7954a.png"}}]); \ No newline at end of file diff --git a/assets/js/2e8bb407.db969ad2.js b/assets/js/2e8bb407.db969ad2.js new file mode 100755 index 000000000..98d84bcb9 --- /dev/null +++ b/assets/js/2e8bb407.db969ad2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5240],{28388:(e,s,a)=>{a.r(s),a.d(s,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>t,toc:()=>l});var o=a(17624),n=a(95788);const i={id:"franzininho-wifi-espidf-00",title:"Primeiros Passos com ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/primeiros-passos",description:"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF",author:"F\xe1bio Souza"},r=void 0,t={id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00",title:"Primeiros Passos com ESP-IDF",description:"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x00-Primeiros-passos.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/primeiros-passos",permalink:"/docs/franzininho-wifi/exemplos-espidf/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x00-Primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-00",title:"Primeiros Passos com ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/primeiros-passos",description:"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF",author:"F\xe1bio Souza"},sidebar:"docs",previous:{title:"Como simular a Franzininho WiFi no Wokwi",permalink:"/docs/franzininho-wifi/wokwi/primeiros-passos"},next:{title:"Hello World! ESP-IDF",permalink:"/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf"}},d={},l=[{value:"Introdu\xe7\xe3o",id:"introdu\xe7\xe3o",level:2},{value:"Passo 1 - Instala\xe7\xe3o dos pr\xe9-requisitos",id:"passo-1---instala\xe7\xe3o-dos-pr\xe9-requisitos",level:2},{value:"Passo 2 - Instala\xe7\xe3o do ESP-IDF",id:"passo-2---instala\xe7\xe3o-do-esp-idf",level:2},{value:"Linux e macOS",id:"linux-e-macos",level:3},{value:"Windows",id:"windows",level:3},{value:"Instalando O ESP-IDF e ferramentas",id:"instalando-o-esp-idf-e-ferramentas",level:3},{value:"Windows",id:"windows-1",level:4},{value:"Linux e macOS",id:"linux-e-macos-1",level:4},{value:"Configurando as vari\xe1veis de ambientes",id:"configurando-as-vari\xe1veis-de-ambientes",level:3},{value:"Windows",id:"windows-2",level:4},{value:"Linux e macOS",id:"linux-e-macos-2",level:4},{value:"Passo 3 - Criando um novo projeto",id:"passo-3---criando-um-novo-projeto",level:2},{value:"Copiando um projeto exemplo",id:"copiando-um-projeto-exemplo",level:3},{value:"Windows",id:"windows-3",level:4},{value:"Linux e macOS",id:"linux-e-macos-3",level:4},{value:"Configura\xe7\xe3o",id:"configura\xe7\xe3o",level:3},{value:"Windows",id:"windows-4",level:4},{value:"Linux e macOS",id:"linux-e-macos-4",level:4},{value:"Compilando o projeto em modo DFU",id:"compilando-o-projeto-em-modo-dfu",level:3},{value:"Compila\xe7\xe3o, grava\xe7\xe3o e monitor em modo normal",id:"compila\xe7\xe3o-grava\xe7\xe3o-e-monitor-em-modo-normal",level:3}];function c(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,n.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.p,{children:"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF (Espressif IoT Development Framework) para trabalhar com a Franzininho WiFi que usa o ESP32-S2 da Espressif."}),"\n",(0,o.jsx)(s.p,{children:"Ao final, faremos um exemplo simples para compilar, gravar e monitorar usando o ESP-IDF, assim, garantiremos que tudo estar\xe1 funcionando."}),"\n",(0,o.jsx)(s.h2,{id:"introdu\xe7\xe3o",children:"Introdu\xe7\xe3o"}),"\n",(0,o.jsx)(s.p,{children:"Para essa configura\xe7\xe3o, vamos instalar o ESP-IDF e us\xe1-lo atrav\xe9s de linha de comando. Caso voc\xea queira usar o IDF integrado a ambientes de desenvolvimento integrado (IDE) como VScode e Eclipse, confira os seguintes links:"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"https://github.com/espressif/idf-eclipse-plugin",children:"Eclipse Plugin"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"https://github.com/espressif/vscode-esp-idf-extension",children:"VS Code Extension"})}),"\n"]}),"\n",(0,o.jsx)(s.p,{children:"Voc\xea poder\xe1 instalar o ESP-IDF no seu sistema operacional preferido (Linux, Windows, macOS)."}),"\n",(0,o.jsx)(s.p,{children:"Para a experi\xeancia completa, voc\xea precisar\xe1 de uma placa Franzininho WiFi, Computador: com Windows, Linux ou macOS"}),"\n",(0,o.jsx)(s.h2,{id:"passo-1---instala\xe7\xe3o-dos-pr\xe9-requisitos",children:"Passo 1 - Instala\xe7\xe3o dos pr\xe9-requisitos"}),"\n",(0,o.jsx)(s.p,{children:"Algumas ferramentas precisam ser instaladas no computador antes de prosseguir para as pr\xf3ximas etapas. Siga os links abaixo para obter as instru\xe7\xf5es para o seu sistema operacional:"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/windows-setup.html",children:"Windows"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/linux-setup.html",children:"Linux"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/macos-setup.html",children:"Mac OS"})}),"\n"]}),"\n",(0,o.jsx)(s.p,{children:"\xc9 muito importante a instala\xe7\xe3o de todos os pr\xe9-requisitos."}),"\n",(0,o.jsx)(s.h2,{id:"passo-2---instala\xe7\xe3o-do-esp-idf",children:"Passo 2 - Instala\xe7\xe3o do ESP-IDF"}),"\n",(0,o.jsxs)(s.p,{children:["Nessa etapa vamos instalar o ESP-IDF e conjunto de ferramentas e bibliotecas. Vamos usar o c\xf3digo mantido pela Espressif no reposit\xf3rio do ",(0,o.jsx)(s.a,{href:"https://github.com/espressif/esp-idf",children:"ESP-IDF"})]}),"\n",(0,o.jsx)(s.p,{children:"O ESP-IDF \xe9 o framework oficial da Espressif para o desenvolvimento de aplica\xe7\xf5es parar toda a fam\xedlia ESP32. O procedimento apresentado aqui servir\xe1 para trabalhar com toda a fam\xedlia ESP32. Por\xe9m, vamos dar foco ao ESP32-S2 que \xe9 usado na Franzininho WiFi."}),"\n",(0,o.jsx)(s.h3,{id:"linux-e-macos",children:"Linux e macOS"}),"\n",(0,o.jsx)(s.p,{children:"Abra o terminal e execute:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"mkdir -p ~/esp\ncd ~/esp\ngit clone --recursive https://github.com/espressif/esp-idf.git\n"})}),"\n",(0,o.jsxs)(s.p,{children:["O ESP-IDF ser\xe1 baixado no seguinte reposit\xf3rio ",(0,o.jsx)(s.code,{children:"~/esp/esp-idf"}),"."]}),"\n",(0,o.jsx)(s.h3,{id:"windows",children:"Windows"}),"\n",(0,o.jsxs)(s.p,{children:["Al\xe9m de instalar as ferramentas, o ",(0,o.jsx)(s.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/windows-setup.html#get-started-windows-tools-installer",children:"ESP-IDF Tools Installer para Windows"})," apresentado no passo 1 ele tamb\xe9m baixa uma c\xf3pia do ESP-IDF. Dessa forma voc\xea n\xe3o precisar\xe1 baixar o ESP-IDF agora, se j\xe1 tiver baixado anteriormente junto aos pr\xe9-requisitos."]}),"\n",(0,o.jsxs)(s.p,{children:["Se desejar fazer o download do ESP-IDF sem a ajuda do ESP-IDF Tools Installer, consulte ",(0,o.jsx)(s.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/windows-setup-scratch.html#get-esp-idf-windows-command-line",children:"estas instru\xe7\xf5es"}),"."]}),"\n",(0,o.jsx)(s.h3,{id:"instalando-o-esp-idf-e-ferramentas",children:"Instalando O ESP-IDF e ferramentas"}),"\n",(0,o.jsx)(s.p,{children:"Al\xe9m do ESP-IDF, voc\xea tamb\xe9m precisa instalar as ferramentas usadas pelo ESP-IDF, como compilador, depurador, pacotes Python, etc."}),"\n",(0,o.jsx)(s.h4,{id:"windows-1",children:"Windows"}),"\n",(0,o.jsx)(s.p,{children:"O ESP-IDF Tools Installer para Windows apresentado no passo 1 instala todas as ferramentas necess\xe1rias."}),"\n",(0,o.jsx)(s.p,{children:"Se voc\xea deseja instalar as ferramentas sem a ajuda do ESP-IDF Tools Installer, abra o Prompt de Comando e siga estas etapas:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd %userprofile%\\esp\\esp-idf\ninstall.bat\n"})}),"\n",(0,o.jsx)(s.p,{children:"Ou no Windows PowerShell"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd ~/esp/esp-idf\n./install.ps1\n"})}),"\n",(0,o.jsx)(s.h4,{id:"linux-e-macos-1",children:"Linux e macOS"}),"\n",(0,o.jsx)(s.p,{children:"No Linux ou macOS h\xe1 um script para instala\xe7\xe3o.Abra o terminal e execute:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd ~/esp/esp-idf\n./install.sh\n"})}),"\n",(0,o.jsx)(s.p,{children:"Ou se tiver usando o Fish:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd ~/esp/esp-idf\n./install.fish\n"})}),"\n",(0,o.jsx)(s.h3,{id:"configurando-as-vari\xe1veis-de-ambientes",children:"Configurando as vari\xe1veis de ambientes"}),"\n",(0,o.jsx)(s.p,{children:"As ferramentas instaladas ainda n\xe3o foram adicionadas \xe0 vari\xe1vel de ambiente PATH. Para tornar as ferramentas utiliz\xe1veis na linha de comando, algumas vari\xe1veis de ambiente devem ser definidas. ESP-IDF fornece alguns scripts que ajudam nesse processo."}),"\n",(0,o.jsx)(s.h4,{id:"windows-2",children:"Windows"}),"\n",(0,o.jsx)(s.p,{children:"O ESP-IDF Tools Installer para Windows cria um atalho \u201cESP-IDF Command Prompt\u201d no menu Iniciar. Este atalho abre o Prompt de Comando e configura todas as vari\xe1veis de ambiente necess\xe1rias. Voc\xea pode abrir este atalho e prosseguir para a pr\xf3xima etapa."}),"\n",(0,o.jsx)(s.p,{children:"Caso n\xe3o funcione e voc\xea precise configurar manualmente, execute os seguintes comandos:"}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Prompt de Comando"}),":"]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"%userprofile%\\esp\\esp-idf\\export.bat\n"})}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Windows PowerShell"}),":"]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:".$HOME/esp/esp-idf/export.ps1\n"})}),"\n",(0,o.jsx)(s.h4,{id:"linux-e-macos-2",children:"Linux e macOS"}),"\n",(0,o.jsx)(s.p,{children:"No terminal execute:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:". $HOME/esp/esp-idf/export.sh\n"})}),"\n",(0,o.jsx)(s.p,{children:"Ou no Fish(suportado apenas em vers\xf5es a partir da 3.0.0):"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:". $HOME/esp/esp-idf/export.fish\n"})}),"\n",(0,o.jsx)(s.admonition,{title:"Importante",type:"important",children:(0,o.jsx)(s.p,{children:"Voc\xea precisa fazer isso toda vez que iniciar o terminal para usar o ESP-IDF."})}),"\n",(0,o.jsx)(s.h2,{id:"passo-3---criando-um-novo-projeto",children:"Passo 3 - Criando um novo projeto"}),"\n",(0,o.jsx)(s.p,{children:"Agora que j\xe1 temos as ferramentas instaladas, vamos fazer um exemplo para validar o funcionamento das mesmas. Vamos executar o exemplo blink que j\xe1 vem no IDF."}),"\n",(0,o.jsx)(s.h3,{id:"copiando-um-projeto-exemplo",children:"Copiando um projeto exemplo"}),"\n",(0,o.jsx)(s.p,{children:"Vamos copiar o projeto blink para preservarmos o exemplo presente na pasta do IDF:"}),"\n",(0,o.jsx)(s.h4,{id:"windows-3",children:"Windows"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd %userprofile%\\esp\nxcopy /e /i %IDF_PATH%\\examples\\get-started\\blink blink\n"})}),"\n",(0,o.jsx)(s.h4,{id:"linux-e-macos-3",children:"Linux e macOS"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd ~/esp\ncp -r $IDF_PATH/examples/get-started/blink .\n"})}),"\n",(0,o.jsx)(s.p,{children:"Fique a vontade para testar os outros exemplos tamb\xe9m."}),"\n",(0,o.jsx)(s.p,{children:"O sistema de compila\xe7\xe3o ESP-IDF n\xe3o oferece suporte a espa\xe7os nos caminhos para o ESP-IDF ou para projetos."}),"\n",(0,o.jsx)(s.h3,{id:"configura\xe7\xe3o",children:"Configura\xe7\xe3o"}),"\n",(0,o.jsx)(s.p,{children:"Agora vamos configurar o target para qual ser\xe1 compilado e j\xe1 fazer uma configura\xe7\xe3o no menuconfig. No nosso caso vamos trabalhar com o ESP32-S2:"}),"\n",(0,o.jsx)(s.h4,{id:"windows-4",children:"Windows"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd %userprofile%\\esp\\blink\nidf.py set-target esp32s2\nidf.py menuconfig\n"})}),"\n",(0,o.jsx)(s.h4,{id:"linux-e-macos-4",children:"Linux e macOS"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd ~/esp/blink\nidf.py set-target esp32s2\nidf.py menuconfig\n"})}),"\n",(0,o.jsxs)(s.p,{children:["Ser\xe1 aberto o menuconfig:\n",(0,o.jsx)(s.img,{alt:"menuconfig",src:a(30872).c+"",width:"866",height:"562"})]}),"\n",(0,o.jsxs)(s.p,{children:["Acesse a op\xe7\xe3o Component config ---\x3e\n",(0,o.jsx)(s.img,{alt:"menuconfig",src:a(15548).c+"",width:"866",height:"562"})]}),"\n",(0,o.jsxs)(s.p,{children:["Em seguida ESP System Settings ---\x3e\n",(0,o.jsx)(s.img,{alt:"menuconfig",src:a(86856).c+"",width:"866",height:"562"})]}),"\n",(0,o.jsxs)(s.p,{children:["Agora selecione Channel for console output (Default: UART0) ---\x3e\n",(0,o.jsx)(s.img,{alt:"menuconfig",src:a(36076).c+"",width:"866",height:"562"})]}),"\n",(0,o.jsxs)(s.p,{children:["E por fim, selecione (X) USB CDC:\n",(0,o.jsx)(s.img,{alt:"menuconfig",src:a(93120).c+"",width:"866",height:"562"})]}),"\n",(0,o.jsx)(s.p,{children:"Salve(S), Enter, enter, Saia do menu(ESC)"}),"\n",(0,o.jsx)(s.p,{children:"Essa configura\xe7\xe3o permitir\xe1 que usemos a USB no pr\xf3ximo upload."}),"\n",(0,o.jsx)(s.admonition,{title:"Importante",type:"important",children:(0,o.jsx)(s.p,{children:"Sempre que iniciar um projeto novo fa\xe7a essas configura\xe7\xe3o para que continue usando a USB como interface de programa\xe7\xe3o."})}),"\n",(0,o.jsx)(s.p,{children:"Para mais detalhes acesse:"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/zg9IMDaoImA",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,o.jsx)(s.h3,{id:"compilando-o-projeto-em-modo-dfu",children:"Compilando o projeto em modo DFU"}),"\n",(0,o.jsx)(s.p,{children:"A primeira compila\xe7\xe3o n\xf3s vamos fazer usando o modo DFU, que j\xe1 vem por padr\xe3o no ESP32-S2 permitindo o upload atrav\xe9s da USB:"}),"\n",(0,o.jsx)(s.p,{children:"Para crie a imagem DFU:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"idf.py dfu\n"})}),"\n",(0,o.jsx)(s.p,{children:"A primeira compila\xe7\xe3o pode demorar um pouco. Da at\xe9 pra ir pegar um caf\xe9 ;)"}),"\n",(0,o.jsx)(s.p,{children:"Ap\xf3s a compila\xe7\xe3o, conecte a Franzininho WiFi no computador. Antes de fazermos o upload \xe9 necess\xe1rio entrar no modo DFU. Para entrar no modo DFU pressione as teclas na seguinte sequencia:"}),"\n",(0,o.jsxs)(s.ol,{children:["\n",(0,o.jsx)(s.li,{children:"pressione e segure a tecla BOOT"}),"\n",(0,o.jsx)(s.li,{children:"pressione rapidamente e solte a tecla RESET"}),"\n",(0,o.jsx)(s.li,{children:"solte a tecla BOOT"}),"\n"]}),"\n",(0,o.jsx)(s.p,{children:"Dessa forma a placa entrar\xe1 no modo DFU e poder\xe1 receber o firmware atrav\xe9s da USB."}),"\n",(0,o.jsx)(s.p,{children:"Para fazer a grava\xe7\xe3o, digite:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"idf.py dfu-flash\n"})}),"\n",(0,o.jsx)(s.admonition,{title:"Dica",type:"tip",children:(0,o.jsxs)(s.p,{children:["Caso a grava\xe7\xe3o atrav\xe9s da USB n\xe3o funcione, veja esse ",(0,o.jsx)(s.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-guides/dfu.html#udev-rule-linux-only",children:"link com as instru\xe7\xf5es de configura\xe7\xf5es da USB"})]})}),"\n",(0,o.jsx)(s.p,{children:"Ap\xf3s alguns segundos a placa estar\xe1 gravada."}),"\n",(0,o.jsx)(s.p,{children:"Pressione novamente o bot\xe3o RESET."}),"\n",(0,o.jsx)(s.h3,{id:"compila\xe7\xe3o-grava\xe7\xe3o-e-monitor-em-modo-normal",children:"Compila\xe7\xe3o, grava\xe7\xe3o e monitor em modo normal"}),"\n",(0,o.jsx)(s.p,{children:"Agora voc\xea poder\xe1 compilar, gravar e monitorar usando a porta USB. Esse processo \xe9 id\xeantico ao que fazemos para desenvolver com o ESP32:"}),"\n",(0,o.jsx)(s.p,{children:"Compilar:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"idf.py build\n"})}),"\n",(0,o.jsx)(s.p,{children:"Gravar:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"idf.py -p PORT [-b BAUD] flash\n"})}),"\n",(0,o.jsx)(s.p,{children:"Monitorar:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"idf.py -p /dev/ttyUSB0 monitor\n"})}),"\n",(0,o.jsx)(s.p,{children:"Maravilha, voc\xea configurou o ambiente para trabalhar com o ESP-IDF."}),"\n",(0,o.jsx)(s.p,{children:"Caso queira trabalhar com a extens\xe3o para VSCODE, confira o video:"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/rxMg_zxO0q0",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function p(e={}){const{wrapper:s}={...(0,n.MN)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},95788:(e,s,a)=>{a.d(s,{MN:()=>l});var o=a(11504);function n(e,s,a){return s in e?Object.defineProperty(e,s,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[s]=a,e}function i(e,s){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);s&&(o=o.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),a.push.apply(a,o)}return a}function r(e){for(var s=1;s=0||(n[a]=e[a]);return n}(e,s);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var d=o.createContext({}),l=function(e){var s=o.useContext(d),a=s;return e&&(a="function"==typeof e?e(s):r(r({},s),e)),a},c={inlineCode:"code",wrapper:function(e){var s=e.children;return o.createElement(o.Fragment,{},s)}},p=o.forwardRef((function(e,s){var a=e.components,n=e.mdxType,i=e.originalType,d=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),m=l(a),u=n,h=m["".concat(d,".").concat(u)]||m[u]||c[u]||i;return a?o.createElement(h,r(r({ref:s},p),{},{components:a})):o.createElement(h,r({ref:s},p))}));p.displayName="MDXCreateElement"},30872:(e,s,a)=>{a.d(s,{c:()=>o});const o=a.p+"assets/images/1-cf224b69c503620285cee56dc7457999.png"},15548:(e,s,a)=>{a.d(s,{c:()=>o});const o=a.p+"assets/images/2-4806954a1b4006bb78b6e50a23eba7b5.png"},86856:(e,s,a)=>{a.d(s,{c:()=>o});const o=a.p+"assets/images/3-c0afeaa310f4501913ccaf8190c00334.png"},93120:(e,s,a)=>{a.d(s,{c:()=>o});const o=a.p+"assets/images/4-c250e820888c2d31288214e41376a1dd.png"},36076:(e,s,a)=>{a.d(s,{c:()=>o});const o=a.p+"assets/images/5-0821b04d00bb4ccc716759540cf7954a.png"}}]); \ No newline at end of file diff --git a/assets/js/30a24c52.43dd1097.js b/assets/js/30a24c52.43dd1097.js deleted file mode 100755 index 79d48b378..000000000 --- a/assets/js/30a24c52.43dd1097.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[453],{8605:l=>{l.exports=JSON.parse('{"label":"hello","permalink":"/blog/tags/hello","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/assets/js/30a24c52.bec8461c.js b/assets/js/30a24c52.bec8461c.js new file mode 100755 index 000000000..27b399a41 --- /dev/null +++ b/assets/js/30a24c52.bec8461c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4608],{4244:l=>{l.exports=JSON.parse('{"label":"hello","permalink":"/blog/tags/hello","allTagsPath":"/blog/tags","count":2,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/3570154c.56a5dcac.js b/assets/js/3570154c.56a5dcac.js deleted file mode 100755 index 288e7dbef..000000000 --- a/assets/js/3570154c.56a5dcac.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3707],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var u=o.createContext({}),c=function(e){var t=o.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=c(e.components);return o.createElement(u.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,u=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),p=c(r),h=n,f=p["".concat(u,".").concat(h)]||p[h]||m[h]||a;return r?o.createElement(f,l(l({ref:t},s),{},{components:r})):o.createElement(f,l({ref:t},s))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,l=new Array(a);l[0]=h;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i[p]="string"==typeof e?e:n,l[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var o=r(3117),n=(r(7294),r(3905));const a={slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},l=void 0,i={permalink:"/blog/hello-world",source:"@site/blog/2019-05-29-hello-world.md",title:"Hello",description:"Welcome to this blog. This blog is created with Docusaurus 2 alpha.",date:"2019-05-29T00:00:00.000Z",formattedDate:"29 de maio de 2019",tags:[{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4"}],frontMatter:{slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},prevItem:{title:"Welcome",permalink:"/blog/welcome"},nextItem:{title:"Hola",permalink:"/blog/hola"}},u={authorsImageUrls:[void 0]},c=[],s={toc:c},p="wrapper";function m(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,o.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Welcome to this blog. This blog is created with ",(0,n.kt)("a",{parentName:"p",href:"https://v2.docusaurus.io/"},(0,n.kt)("strong",{parentName:"a"},"Docusaurus 2 alpha")),"."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3570154c.a0901fc1.js b/assets/js/3570154c.a0901fc1.js new file mode 100755 index 000000000..a9db8daca --- /dev/null +++ b/assets/js/3570154c.a0901fc1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1052],{86444:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var o=r(17624),n=r(95788);const a={slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},l=void 0,i={permalink:"/blog/hello-world",source:"@site/blog/2019-05-29-hello-world.md",title:"Hello",description:"Welcome to this blog. This blog is created with Docusaurus 2 alpha.",date:"2019-05-29T00:00:00.000Z",tags:[{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4"}],frontMatter:{slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},unlisted:!1,prevItem:{title:"Welcome",permalink:"/blog/welcome"},nextItem:{title:"Hola",permalink:"/blog/hola"}},u={authorsImageUrls:[void 0]},c=[];function s(e){const t={a:"a",p:"p",strong:"strong",...(0,n.MN)(),...e.components};return(0,o.jsxs)(t.p,{children:["Welcome to this blog. This blog is created with ",(0,o.jsx)(t.a,{href:"https://v2.docusaurus.io/",children:(0,o.jsx)(t.strong,{children:"Docusaurus 2 alpha"})}),"."]})}function p(e={}){const{wrapper:t}={...(0,n.MN)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(s,{...e})}):s(e)}},95788:(e,t,r)=>{r.d(t,{MN:()=>c});var o=r(11504);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var u=o.createContext({}),c=function(e){var t=o.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},p=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,u=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),h=c(r),m=n,g=h["".concat(u,".").concat(m)]||h[m]||s[m]||a;return r?o.createElement(g,l(l({ref:t},p),{},{components:r})):o.createElement(g,l({ref:t},p))}));p.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/3ab35d9f.6eea7e7d.js b/assets/js/3ab35d9f.6eea7e7d.js deleted file mode 100755 index 0122de998..000000000 --- a/assets/js/3ab35d9f.6eea7e7d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2517],{3905:(e,a,o)=>{o.d(a,{Zo:()=>d,kt:()=>m});var i=o(7294);function t(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function r(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,i)}return o}function n(e){for(var a=1;a=0||(t[o]=e[o]);return t}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var A=i.createContext({}),l=function(e){var a=i.useContext(A),o=a;return e&&(o="function"==typeof e?e(a):n(n({},a),e)),o},d=function(e){var a=l(e.components);return i.createElement(A.Provider,{value:a},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return i.createElement(i.Fragment,{},a)}},p=i.forwardRef((function(e,a){var o=e.components,t=e.mdxType,r=e.originalType,A=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=l(o),p=t,m=c["".concat(A,".").concat(p)]||c[p]||u[p]||r;return o?i.createElement(m,n(n({ref:a},d),{},{components:o})):i.createElement(m,n({ref:a},d))}));function m(e,a){var o=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var r=o.length,n=new Array(r);n[0]=p;var s={};for(var A in a)hasOwnProperty.call(a,A)&&(s[A]=a[A]);s.originalType=e,s[c]="string"==typeof e?e:t,n[1]=s;for(var l=2;l{o.r(a),o.d(a,{assets:()=>A,contentTitle:()=>n,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var i=o(3117),t=(o(7294),o(3905));const r={id:"entrada-digital",title:"Entrada Digital",slug:"/franzininho-diy/exemplos-avr-libc/entrada-digital",description:"Vamos entender como trabalhar com as Entradas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},n=void 0,s={unversionedId:"FranzininhoDIY/exemplos-avr-libc/entrada-digital",id:"FranzininhoDIY/exemplos-avr-libc/entrada-digital",title:"Entrada Digital",description:"Vamos entender como trabalhar com as Entradas Digitais",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/entrada-digital.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/entrada-digital",permalink:"/docs/franzininho-diy/exemplos-avr-libc/entrada-digital",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/entrada-digital.md",tags:[],version:"current",frontMatter:{id:"entrada-digital",title:"Entrada Digital",slug:"/franzininho-diy/exemplos-avr-libc/entrada-digital",description:"Vamos entender como trabalhar com as Entradas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Sa\xedda Digital",permalink:"/docs/franzininho-diy/exemplos-avr-libc/saida-digital"},next:{title:"Timer 0",permalink:"/docs/franzininho-diy/exemplos-avr-libc/timer0"}},A={},l=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Entrada Digital",id:"entrada-digital",level:2},{value:"Algumas Particularidades do circuito da Franzininho DIY",id:"algumas-particularidades-do-circuito-da-franzininho-diy",level:3},{value:"Registradores respons\xe1veis pelos pinos de I/O",id:"registradores-respons\xe1veis-pelos-pinos-de-io",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Desafio",id:"desafio",level:2}],d={toc:l},c="wrapper";function u(e){let{components:a,...r}=e;return(0,t.kt)(c,(0,i.Z)({},d,r,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"No exemplo anterior conhecemos os registradores respons\xe1veis pela configura\xe7\xe3o e manipula\xe7\xe3o dos pinos de I/O. Nesse exemplo vamos concentrar no uso dos pinos como entradas digitais."),(0,t.kt)("p",null,"Ao final, voc\xea saber\xe1 como ler sinais digitais externos a Franzininho DIY."),(0,t.kt)("h2",{id:"recursos-necess\xe1rios"},"Recursos Necess\xe1rios"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Placa Franzininho DIY(com Micronucleus)"),(0,t.kt)("li",{parentName:"ul"},"Chave Tactil"),(0,t.kt)("li",{parentName:"ul"},"Jumpers"),(0,t.kt)("li",{parentName:"ul"},"Computador com as ferramentas de software instaladas")),(0,t.kt)("h2",{id:"entrada-digital"},"Entrada Digital"),(0,t.kt)("p",null,"Uma entrada digital \xe9 capaz de ler n\xedvel alto (5V) e n\xedvel baixo(0V) em sua entrada. Essa funcionalidade \xe9 usada para ler estado de bot\xf5es, sensores, e dispositivos que em suas sa\xeddas apresentam 2 estados."),(0,t.kt)("p",null,"Quando o pino \xe9 configurado como entrada digital ele \xe9 colocado em um estado de alta imped\xe2ncia, equivalente a um resistor de 100 MegaOhms em s\xe9rie com o circuito a ser monitorado. Dessa forma, o pino absorve uma corrente muito baixa do circuito que est\xe1 monitorando. Devido a essa caracter\xedstica de alta imped\xe2ncia, quando um pino colocado como entrada digital ele fica flutuando (sem liga\xe7\xe3o definida), o n\xedvel de tens\xe3o presente nesse pino fica variando n\xe3o podendo ser determinado um valor est\xe1vel devido ao ru\xeddo el\xe9trico e at\xe9 mesmo capacit\xe2ncia de entrada do pino. Para resolver esse problema \xe9 necess\xe1rio colocar um resistor de pull up (ligado a +5V) ou um resistor de pull down (ligado a GND) conforme a necessidade. Esses resistores garantem n\xedvel l\xf3gico est\xe1vel quando, por exemplo uma tecla n\xe3o est\xe1 pressionada. Geralmente utiliza-se um resistor de 10K para esse prop\xf3sito. A seguir \xe9 exibida a liga\xe7\xe3o desses resistores no circuito para leitura de tecla:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"circuito",src:o(163).Z,width:"353",height:"210"})),(0,t.kt)("p",null,"\xc9 poss\xedvel habilitar o resistor de pull up interno, isso mesmo, o Attiny85 possui resistores de pull-up internos (20 Kilohms) que facilitam a liga\xe7\xe3o de teclas, sensores sem a necessidade de conectar externamente um resistor de pull-up. A habilita\xe7\xe3o desses resistores \xe9 feita de maneira simples via software. Vamos ver isso mais adiante."),(0,t.kt)("h3",{id:"algumas-particularidades-do-circuito-da-franzininho-diy"},"Algumas Particularidades do circuito da Franzininho DIY"),(0,t.kt)("p",null,"Os pinos de I/O s\xe3o marcados em Amarelo no Pinout da Franzininho DIY"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"pinout Franzininho DIY",src:o(8706).Z,width:"1630",height:"1122"})),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"O pino PB5 \xe9 configurado como RESET na Franzininho DIY, sendo assim n\xe3o poderemos us\xe1-lo como I/O."),(0,t.kt)("li",{parentName:"ul"},"Os pinos PB3 e PB4 s\xe3o usados para o circuito da USB, sendo assim temos que us\xe1-los com cautela. Geralmente esses pinos s\xe3o usados apenas como sa\xeddas digitais."),(0,t.kt)("li",{parentName:"ul"},"O LED amarelo da placa est\xe1 ligado ao pino PB1."),(0,t.kt)("li",{parentName:"ul"},"Os pinos PB0 E PB2 n\xe3o possuem circuito ligados a eles.")),(0,t.kt)("h2",{id:"registradores-respons\xe1veis-pelos-pinos-de-io"},"Registradores respons\xe1veis pelos pinos de I/O"),(0,t.kt)("p",null,"Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"PORTB: Registrador de dados. Respons\xe1vel pela escrita nos pinos;"),(0,t.kt)("li",{parentName:"ul"},"DDRB: Registrador de dire\xe7\xe3o do pino. Respons\xe1vel pela configura\xe7\xe3o dos pinos para definir se ser\xe1 entrada ou sa\xedda;"),(0,t.kt)("li",{parentName:"ul"},"PINB: Registrador de entrada da porta. Respons\xe1vel pela leitura do estado do pino.")),(0,t.kt)("p",null,"Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos ter\xedamos os finais A, B,C, etc. Cada porta s\xf3 possui no m\xe1ximo 8 pinos."),(0,t.kt)("p",null,"Na se\xe7\xe3o 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configura\xe7\xf5es poss\xedveis para os pinos:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"configura\xe7\xe3o GPIO",src:o(5368).Z,width:"1194",height:"339"})),(0,t.kt)("p",null,"A figura abaixo exibe os registradores respons\xe1veis pelos pino de I/O do PORTB:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"configura\xe7\xe3o GPIO",src:o(9192).Z,width:"1448",height:"696"})),(0,t.kt)("p",null,"Conforme exibido acima, para configurar um pino como entrada digital deve-se configurar o bit DDRBx correspondente ao pino em 0. Se quiser habilitar o pull up para esse deve-se escrever 1 no bit PORTBx correspondente ao pino. A leitura do estado do pino \xe9 feita atrav\xe9s do registrador PINBx."),(0,t.kt)("p",null,"Vamos verificar um exemplo para fazer a leitura de um bot\xe3o externo e ligar o LED da Franzininho DIY."),(0,t.kt)("h2",{id:"circuito"},"Circuito"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"circuito",src:o(8804).Z,width:"1737",height:"633"})),(0,t.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},"#include \n#include \n\n#define F_CPU 16500000L\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\nint main(void)\n{\n setBit(DDRB, PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n clearBit(DDRB, PB0); // Configura pino PB0 como entrada (pino do Bot\xe3o)\n setBit(PORTB, PB0); // Habilita pull up para a entrada PB0\n // L\xf3gico 1 quando bot\xe3o n\xe3o estiver pressionado\n while (1)\n {\n if (!testBit(PINB, PB0)) // Faz a leitura do bot\xe3o - Se pressionado\n {\n setBit(PORTB, PB1); // Liga o LED 1\n }\n else\n {\n clearBit(PORTB, PB1); // Desliga o LED 1\n }\n }\n\n return (0);\n}\n")),(0,t.kt)("p",null,"O exemplo exibiu como configurar os pinos, note que tivemos que configurar um pino como sa\xedda, para o LED e outro como entrada, para o bot\xe3o. Note que foi usado o pull up interno."),(0,t.kt)("p",null,"O uso de macros facilitou a manipula\xe7\xe3o dos bits nos registradores. Recomendo que se voc\xea leia esse artigo para entender sobre as macros e as opera\xe7\xf5es efetuadas: ",(0,t.kt)("a",{parentName:"p",href:"https://www.embarcados.com.br/bits-em-linguagem-c/"},"https://www.embarcados.com.br/bits-em-linguagem-c/")),(0,t.kt)("p",null,"Para leitura do estado do pino, ou seja, se o bot\xe3o est\xe1 solto ou pressionado, fazemos um teste a cada itera\xe7\xe3o no loop infinto. Quando o bot\xe3o \xe9 pressionado o n\xedvel logico no pino vai para 0 e quando solto permanece em 1. Conforme o teste 0 liga o LED e 1 apaga o LED."),(0,t.kt)("p",null,"Assim, o funcionamento ser\xe1:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Bot\xe3o Solto = LED apagado"),(0,t.kt)("li",{parentName:"ul"},"Bot\xe3o Pressionado = LED Aceso")),(0,t.kt)("p",null,"Bacana, n\xe3o?"),(0,t.kt)("h2",{id:"desafio"},"Desafio"),(0,t.kt)("p",null,"Fa\xe7a com com que o LED mude estado e permane\xe7a ao soltar o bot\xe3o, funcionando como uma tecla liga/desliga."),(0,t.kt)("table",null,(0,t.kt)("thead",{parentName:"table"},(0,t.kt)("tr",{parentName:"thead"},(0,t.kt)("th",{parentName:"tr",align:null},"Autor"),(0,t.kt)("th",{parentName:"tr",align:null},(0,t.kt)("a",{parentName:"th",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza")))),(0,t.kt)("tbody",{parentName:"table"},(0,t.kt)("tr",{parentName:"tbody"},(0,t.kt)("td",{parentName:"tr",align:null},"Data:"),(0,t.kt)("td",{parentName:"tr",align:null},"24/04/2021")))))}u.isMDXComponent=!0},8706:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/Pinagem-Franzininho-DIY-V2RV2-42a18903012c4dc223f9d4c774730625.png"},5368:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/config-gpio-5448c58ddfc3c042b28c64b3cedb300e.png"},9192:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/registradores-port-B-f8a36498e9dd1043ec81211a0fb7103c.png"},8804:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/circuito-e0bc37aa32b52d0c36041dc33c4e82ff.png"},163:(e,a,o)=>{o.d(a,{Z:()=>i});const i="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/3ab35d9f.e0ff8bac.js b/assets/js/3ab35d9f.e0ff8bac.js new file mode 100755 index 000000000..0bfed4006 --- /dev/null +++ b/assets/js/3ab35d9f.e0ff8bac.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6550],{57632:(e,i,o)=>{o.r(i),o.d(i,{assets:()=>A,contentTitle:()=>r,default:()=>l,frontMatter:()=>n,metadata:()=>t,toc:()=>d});var a=o(17624),s=o(95788);const n={id:"entrada-digital",title:"Entrada Digital",slug:"/franzininho-diy/exemplos-avr-libc/entrada-digital",description:"Vamos entender como trabalhar com as Entradas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},r=void 0,t={id:"FranzininhoDIY/exemplos-avr-libc/entrada-digital",title:"Entrada Digital",description:"Vamos entender como trabalhar com as Entradas Digitais",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/entrada-digital.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/entrada-digital",permalink:"/docs/franzininho-diy/exemplos-avr-libc/entrada-digital",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/entrada-digital.md",tags:[],version:"current",frontMatter:{id:"entrada-digital",title:"Entrada Digital",slug:"/franzininho-diy/exemplos-avr-libc/entrada-digital",description:"Vamos entender como trabalhar com as Entradas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Sa\xedda Digital",permalink:"/docs/franzininho-diy/exemplos-avr-libc/saida-digital"},next:{title:"Timer 0",permalink:"/docs/franzininho-diy/exemplos-avr-libc/timer0"}},A={},d=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Entrada Digital",id:"entrada-digital",level:2},{value:"Algumas Particularidades do circuito da Franzininho DIY",id:"algumas-particularidades-do-circuito-da-franzininho-diy",level:3},{value:"Registradores respons\xe1veis pelos pinos de I/O",id:"registradores-respons\xe1veis-pelos-pinos-de-io",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Desafio",id:"desafio",level:2}];function c(e){const i={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.p,{children:"No exemplo anterior conhecemos os registradores respons\xe1veis pela configura\xe7\xe3o e manipula\xe7\xe3o dos pinos de I/O. Nesse exemplo vamos concentrar no uso dos pinos como entradas digitais."}),"\n",(0,a.jsx)(i.p,{children:"Ao final, voc\xea saber\xe1 como ler sinais digitais externos a Franzininho DIY."}),"\n",(0,a.jsx)(i.h2,{id:"recursos-necess\xe1rios",children:"Recursos Necess\xe1rios"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Placa Franzininho DIY(com Micronucleus)"}),"\n",(0,a.jsx)(i.li,{children:"Chave Tactil"}),"\n",(0,a.jsx)(i.li,{children:"Jumpers"}),"\n",(0,a.jsx)(i.li,{children:"Computador com as ferramentas de software instaladas"}),"\n"]}),"\n",(0,a.jsx)(i.h2,{id:"entrada-digital",children:"Entrada Digital"}),"\n",(0,a.jsx)(i.p,{children:"Uma entrada digital \xe9 capaz de ler n\xedvel alto (5V) e n\xedvel baixo(0V) em sua entrada. Essa funcionalidade \xe9 usada para ler estado de bot\xf5es, sensores, e dispositivos que em suas sa\xeddas apresentam 2 estados."}),"\n",(0,a.jsx)(i.p,{children:"Quando o pino \xe9 configurado como entrada digital ele \xe9 colocado em um estado de alta imped\xe2ncia, equivalente a um resistor de 100 MegaOhms em s\xe9rie com o circuito a ser monitorado. Dessa forma, o pino absorve uma corrente muito baixa do circuito que est\xe1 monitorando. Devido a essa caracter\xedstica de alta imped\xe2ncia, quando um pino colocado como entrada digital ele fica flutuando (sem liga\xe7\xe3o definida), o n\xedvel de tens\xe3o presente nesse pino fica variando n\xe3o podendo ser determinado um valor est\xe1vel devido ao ru\xeddo el\xe9trico e at\xe9 mesmo capacit\xe2ncia de entrada do pino. Para resolver esse problema \xe9 necess\xe1rio colocar um resistor de pull up (ligado a +5V) ou um resistor de pull down (ligado a GND) conforme a necessidade. Esses resistores garantem n\xedvel l\xf3gico est\xe1vel quando, por exemplo uma tecla n\xe3o est\xe1 pressionada. Geralmente utiliza-se um resistor de 10K para esse prop\xf3sito. A seguir \xe9 exibida a liga\xe7\xe3o desses resistores no circuito para leitura de tecla:"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"circuito",src:o(50496).c+"",width:"353",height:"210"})}),"\n",(0,a.jsx)(i.p,{children:"\xc9 poss\xedvel habilitar o resistor de pull up interno, isso mesmo, o Attiny85 possui resistores de pull-up internos (20 Kilohms) que facilitam a liga\xe7\xe3o de teclas, sensores sem a necessidade de conectar externamente um resistor de pull-up. A habilita\xe7\xe3o desses resistores \xe9 feita de maneira simples via software. Vamos ver isso mais adiante."}),"\n",(0,a.jsx)(i.h3,{id:"algumas-particularidades-do-circuito-da-franzininho-diy",children:"Algumas Particularidades do circuito da Franzininho DIY"}),"\n",(0,a.jsx)(i.p,{children:"Os pinos de I/O s\xe3o marcados em Amarelo no Pinout da Franzininho DIY"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"pinout Franzininho DIY",src:o(12296).c+"",width:"1630",height:"1122"})}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"O pino PB5 \xe9 configurado como RESET na Franzininho DIY, sendo assim n\xe3o poderemos us\xe1-lo como I/O."}),"\n",(0,a.jsx)(i.li,{children:"Os pinos PB3 e PB4 s\xe3o usados para o circuito da USB, sendo assim temos que us\xe1-los com cautela. Geralmente esses pinos s\xe3o usados apenas como sa\xeddas digitais."}),"\n",(0,a.jsx)(i.li,{children:"O LED amarelo da placa est\xe1 ligado ao pino PB1."}),"\n",(0,a.jsx)(i.li,{children:"Os pinos PB0 E PB2 n\xe3o possuem circuito ligados a eles."}),"\n"]}),"\n",(0,a.jsx)(i.h2,{id:"registradores-respons\xe1veis-pelos-pinos-de-io",children:"Registradores respons\xe1veis pelos pinos de I/O"}),"\n",(0,a.jsx)(i.p,{children:"Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"PORTB: Registrador de dados. Respons\xe1vel pela escrita nos pinos;"}),"\n",(0,a.jsx)(i.li,{children:"DDRB: Registrador de dire\xe7\xe3o do pino. Respons\xe1vel pela configura\xe7\xe3o dos pinos para definir se ser\xe1 entrada ou sa\xedda;"}),"\n",(0,a.jsx)(i.li,{children:"PINB: Registrador de entrada da porta. Respons\xe1vel pela leitura do estado do pino."}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:"Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos ter\xedamos os finais A, B,C, etc. Cada porta s\xf3 possui no m\xe1ximo 8 pinos."}),"\n",(0,a.jsx)(i.p,{children:"Na se\xe7\xe3o 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configura\xe7\xf5es poss\xedveis para os pinos:"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"configura\xe7\xe3o GPIO",src:o(64516).c+"",width:"1194",height:"339"})}),"\n",(0,a.jsx)(i.p,{children:"A figura abaixo exibe os registradores respons\xe1veis pelos pino de I/O do PORTB:"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"configura\xe7\xe3o GPIO",src:o(59336).c+"",width:"1448",height:"696"})}),"\n",(0,a.jsx)(i.p,{children:"Conforme exibido acima, para configurar um pino como entrada digital deve-se configurar o bit DDRBx correspondente ao pino em 0. Se quiser habilitar o pull up para esse deve-se escrever 1 no bit PORTBx correspondente ao pino. A leitura do estado do pino \xe9 feita atrav\xe9s do registrador PINBx."}),"\n",(0,a.jsx)(i.p,{children:"Vamos verificar um exemplo para fazer a leitura de um bot\xe3o externo e ligar o LED da Franzininho DIY."}),"\n",(0,a.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"circuito",src:o(36845).c+"",width:"1737",height:"633"})}),"\n",(0,a.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-c",children:"#include \n#include \n\n#define F_CPU 16500000L\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\nint main(void)\n{\n setBit(DDRB, PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n clearBit(DDRB, PB0); // Configura pino PB0 como entrada (pino do Bot\xe3o)\n setBit(PORTB, PB0); // Habilita pull up para a entrada PB0\n // L\xf3gico 1 quando bot\xe3o n\xe3o estiver pressionado\n while (1)\n {\n if (!testBit(PINB, PB0)) // Faz a leitura do bot\xe3o - Se pressionado\n {\n setBit(PORTB, PB1); // Liga o LED 1\n }\n else\n {\n clearBit(PORTB, PB1); // Desliga o LED 1\n }\n }\n\n return (0);\n}\n"})}),"\n",(0,a.jsx)(i.p,{children:"O exemplo exibiu como configurar os pinos, note que tivemos que configurar um pino como sa\xedda, para o LED e outro como entrada, para o bot\xe3o. Note que foi usado o pull up interno."}),"\n",(0,a.jsxs)(i.p,{children:["O uso de macros facilitou a manipula\xe7\xe3o dos bits nos registradores. Recomendo que se voc\xea leia esse artigo para entender sobre as macros e as opera\xe7\xf5es efetuadas: ",(0,a.jsx)(i.a,{href:"https://www.embarcados.com.br/bits-em-linguagem-c/",children:"https://www.embarcados.com.br/bits-em-linguagem-c/"})]}),"\n",(0,a.jsx)(i.p,{children:"Para leitura do estado do pino, ou seja, se o bot\xe3o est\xe1 solto ou pressionado, fazemos um teste a cada itera\xe7\xe3o no loop infinto. Quando o bot\xe3o \xe9 pressionado o n\xedvel logico no pino vai para 0 e quando solto permanece em 1. Conforme o teste 0 liga o LED e 1 apaga o LED."}),"\n",(0,a.jsx)(i.p,{children:"Assim, o funcionamento ser\xe1:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Bot\xe3o Solto = LED apagado"}),"\n",(0,a.jsx)(i.li,{children:"Bot\xe3o Pressionado = LED Aceso"}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:"Bacana, n\xe3o?"}),"\n",(0,a.jsx)(i.h2,{id:"desafio",children:"Desafio"}),"\n",(0,a.jsx)(i.p,{children:"Fa\xe7a com com que o LED mude estado e permane\xe7a ao soltar o bot\xe3o, funcionando como uma tecla liga/desliga."}),"\n",(0,a.jsxs)(i.table,{children:[(0,a.jsx)(i.thead,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.th,{children:"Autor"}),(0,a.jsx)(i.th,{children:(0,a.jsx)(i.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]})}),(0,a.jsx)(i.tbody,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:"Data:"}),(0,a.jsx)(i.td,{children:"24/04/2021"})]})})]})]})}function l(e={}){const{wrapper:i}={...(0,s.MN)(),...e.components};return i?(0,a.jsx)(i,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},95788:(e,i,o)=>{o.d(i,{MN:()=>d});var a=o(11504);function s(e,i,o){return i in e?Object.defineProperty(e,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[i]=o,e}function n(e,i){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);i&&(a=a.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),o.push.apply(o,a)}return o}function r(e){for(var i=1;i=0||(s[o]=e[o]);return s}(e,i);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(s[o]=e[o])}return s}var A=a.createContext({}),d=function(e){var i=a.useContext(A),o=i;return e&&(o="function"==typeof e?e(i):r(r({},i),e)),o},c={inlineCode:"code",wrapper:function(e){var i=e.children;return a.createElement(a.Fragment,{},i)}},l=a.forwardRef((function(e,i){var o=e.components,s=e.mdxType,n=e.originalType,A=e.parentName,l=t(e,["components","mdxType","originalType","parentName"]),p=d(o),u=s,m=p["".concat(A,".").concat(u)]||p[u]||c[u]||n;return o?a.createElement(m,r(r({ref:i},l),{},{components:o})):a.createElement(m,r({ref:i},l))}));l.displayName="MDXCreateElement"},12296:(e,i,o)=>{o.d(i,{c:()=>a});const a=o.p+"assets/images/Pinagem-Franzininho-DIY-V2RV2-42a18903012c4dc223f9d4c774730625.png"},64516:(e,i,o)=>{o.d(i,{c:()=>a});const a=o.p+"assets/images/config-gpio-5448c58ddfc3c042b28c64b3cedb300e.png"},59336:(e,i,o)=>{o.d(i,{c:()=>a});const a=o.p+"assets/images/registradores-port-B-f8a36498e9dd1043ec81211a0fb7103c.png"},36845:(e,i,o)=>{o.d(i,{c:()=>a});const a=o.p+"assets/images/circuito-e0bc37aa32b52d0c36041dc33c4e82ff.png"},50496:(e,i,o)=>{o.d(i,{c:()=>a});const a="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/3ab9b561.b5687b85.js b/assets/js/3ab9b561.b5687b85.js deleted file mode 100755 index 6a8739371..000000000 --- a/assets/js/3ab9b561.b5687b85.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1013],{3905:(a,o,e)=>{e.d(o,{Zo:()=>c,kt:()=>h});var r=e(7294);function n(a,o,e){return o in a?Object.defineProperty(a,o,{value:e,enumerable:!0,configurable:!0,writable:!0}):a[o]=e,a}function t(a,o){var e=Object.keys(a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(a);o&&(r=r.filter((function(o){return Object.getOwnPropertyDescriptor(a,o).enumerable}))),e.push.apply(e,r)}return e}function i(a){for(var o=1;o=0||(n[e]=a[e]);return n}(a,o);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(a);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(a,e)&&(n[e]=a[e])}return n}var d=r.createContext({}),l=function(a){var o=r.useContext(d),e=o;return a&&(e="function"==typeof a?a(o):i(i({},o),a)),e},c=function(a){var o=l(a.components);return r.createElement(d.Provider,{value:o},a.children)},p="mdxType",u={inlineCode:"code",wrapper:function(a){var o=a.children;return r.createElement(r.Fragment,{},o)}},m=r.forwardRef((function(a,o){var e=a.components,n=a.mdxType,t=a.originalType,d=a.parentName,c=s(a,["components","mdxType","originalType","parentName"]),p=l(e),m=n,h=p["".concat(d,".").concat(m)]||p[m]||u[m]||t;return e?r.createElement(h,i(i({ref:o},c),{},{components:e})):r.createElement(h,i({ref:o},c))}));function h(a,o){var e=arguments,n=o&&o.mdxType;if("string"==typeof a||n){var t=e.length,i=new Array(t);i[0]=m;var s={};for(var d in o)hasOwnProperty.call(o,d)&&(s[d]=o[d]);s.originalType=a,s[p]="string"==typeof a?a:n,i[1]=s;for(var l=2;l{e.r(o),e.d(o,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>t,metadata:()=>s,toc:()=>l});var r=e(3117),n=(e(7294),e(3905));const t={id:"bootloader",title:"Bootloader",slug:"/franzininho-diy/bootloader",description:"Grava\xe7\xe3o do Bootloader na Franzininho DIY"},i=void 0,s={unversionedId:"FranzininhoDIY/bootloader/bootloader",id:"FranzininhoDIY/bootloader/bootloader",title:"Bootloader",description:"Grava\xe7\xe3o do Bootloader na Franzininho DIY",source:"@site/docs/FranzininhoDIY/bootloader/bootloader.md",sourceDirName:"FranzininhoDIY/bootloader",slug:"/franzininho-diy/bootloader",permalink:"/docs/franzininho-diy/bootloader",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/bootloader/bootloader.md",tags:[],version:"current",frontMatter:{id:"bootloader",title:"Bootloader",slug:"/franzininho-diy/bootloader",description:"Grava\xe7\xe3o do Bootloader na Franzininho DIY"},sidebar:"docs",previous:{title:"Montagem da Franzininho DIY",permalink:"/docs/franzininho-diy/montagem"},next:{title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",permalink:"/docs/franzininho-diy/drivers-micronucleus"}},d={},l=[{value:"Materiais Necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Gravando o FranzBoot no Arduino UNO",id:"gravando-o-franzboot-no-arduino-uno",level:2},{value:"Pr\xf3ximos passos",id:"pr\xf3ximos-passos",level:2},{value:"Gravar muitos chips",id:"gravar-muitos-chips",level:2}],c={toc:l},p="wrapper";function u(a){let{components:o,...t}=a;return(0,n.kt)(p,(0,r.Z)({},c,t,{components:o,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Para que a placa Franzininho possa ser gravada atrav\xe9s da USB \xe9 necess\xe1rio gravar o bootloader. O bootloader \xe9 um pequeno programa que roda toda vez que a placa \xe9 iniciada e verifica se tem um comando de atualiza\xe7\xe3o de firmware. Caso tenha esse comando, ele recebe o bin\xe1rio atrav\xe9s da USB (no caso da Franzininho DIY) e grava na mem\xf3ria flash."),(0,n.kt)("p",null,"Na Franzininho DIY usamos o ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/micronucleus/micronucleus/blob/master/Devices_with_Micronucleus.md"},"Micronucleus")," que \xe9 um bootloader pequeno e bem flex\xedvel desenvolvido para a fam\xedlia ATtiny usando o projeto ",(0,n.kt)("a",{parentName:"p",href:"https://www.obdev.at/products/vusb/index.html"},"VUSB")," como base."),(0,n.kt)("p",null,"A seguir vamos exibir como voc\xea pode gravar o ATtiny85 para usar o Micronucleus."),(0,n.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais Necess\xe1rios"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Arduino UNO ou similar"),(0,n.kt)("li",{parentName:"ul"},"Fios ","(","Jumpers",")"),(0,n.kt)("li",{parentName:"ul"},"Protoboard")),(0,n.kt)("h2",{id:"circuito"},"Circuito"),(0,n.kt)("p",null,"Voc\xea precisar\xe1 montar o seguinte circuito:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito para Grava\xe7\xe3o",src:e(5487).Z,width:"431",height:"408"})),(0,n.kt)("admonition",{title:"Fa\xe7a uma dupla checagem antes de ligar o Arduino Uno no computador.",type:"warning"}),(0,n.kt)("p",null,"Com o circuito Montado, vamos para a grava\xe7\xe3o do bootloader."),(0,n.kt)("h2",{id:"gravando-o-franzboot-no-arduino-uno"},"Gravando o FranzBoot no Arduino UNO"),(0,n.kt)("p",null,"Para facilitar a grava\xe7\xe3o do bootloader vamos usar o ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/FranzBoot"},"FranzBoot"),", um programa para grava\xe7\xe3o do bootloader micronucleus para Franzininho DIY usando Arduino UNO."),(0,n.kt)("p",null,"Baixe o projeto no seu computador: ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/FranzBoot/archive/refs/heads/main.zip"},"Download"),"."),(0,n.kt)("p",null,"Descompacte a pasta e abra o arquivo FranzBoot.ino"),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"Se ainda n\xe3o tem a IDE Arduino no seu computador, baixe-a no site do ",(0,n.kt)("a",{parentName:"mdxAdmonitionTitle",href:"https://www.arduino.cc/en/software"},"Arduino")," ")),(0,n.kt)("p",null,"Ser\xe1 aberta a IDE do Arduino:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito para Grava\xe7\xe3o",src:e(6861).Z,width:"1300",height:"1071"})),(0,n.kt)("p",null,"Antes de gravar na placa precisamos configurar a IDE para a placa Arduino UNO. Em Placa selecione Arduino UNO e em porta a porta Serial criada para o seu Arduino UNO:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito para Grava\xe7\xe3o",src:e(8525).Z,width:"879",height:"706"})),(0,n.kt)("p",null,"Pronto, agora pressione Upload(Carregar) e aguarde a grava\xe7\xe3o no Arduino UNO:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito para Grava\xe7\xe3o",src:e(446).Z,width:"1300",height:"1071"})),(0,n.kt)("p",null,"Agora abra o terminal serial:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito para Grava\xe7\xe3o",src:e(6164).Z,width:"1185",height:"569"})),(0,n.kt)("admonition",{title:"Verifique se a velocidade est\xe1 configurada em 9600. ",type:"tip"}),(0,n.kt)("p",null,"Agora digite G e pressione enviar. Ap\xf3s a grava\xe7\xe3o deve ser apresentada a seguinte mensagem no terminal:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito para Grava\xe7\xe3o",src:e(7287).Z,width:"1185",height:"569"})),(0,n.kt)("admonition",{title:"ERRO",type:"warning"},(0,n.kt)("p",{parentName:"admonition"},"Se receber uma mensagem de erro, verifique as conex\xf5es el\xe9tricas e envie novamente o comando G.")),(0,n.kt)("p",null,"Pronto, o ATtiny85 est\xe1 pronto para ser encaixado na sua Franzininho DIY. Retire-o com cuidado da matriz de contatos e encaixe-o corretamente na Franzininho DIY, conforme imagem abaixo"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Placa Franzininho DIY",src:e(4936).Z,width:"500",height:"233"})),(0,n.kt)("h2",{id:"pr\xf3ximos-passos"},"Pr\xf3ximos passos"),(0,n.kt)("p",null,"Agora que j\xe1 tem a sua placa Franzininho DIY preparada voc\xea pode partir para a programa\xe7\xe3o."),(0,n.kt)("h2",{id:"gravar-muitos-chips"},"Gravar muitos chips"),(0,n.kt)("p",null,"Caso voc\xea necessite gravar muitos chips voc\xea pode gravar sem usar o PC. Verifique a ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/FranzBoot#readme"},"documenta\xe7\xe3o do FranzBoot")," para mais detalhes."))}u.isMDXComponent=!0},8525:(a,o,e)=>{e.d(o,{Z:()=>r});const r=e.p+"assets/images/IDE-Arduino-Configuracao-dde65494e76bfd5fe726b61692f4707c.png"},7287:(a,o,e)=>{e.d(o,{Z:()=>r});const r=e.p+"assets/images/IDE-Arduino-Gravando-a69ad020e2520590375ce6a7c601429f.png"},6164:(a,o,e)=>{e.d(o,{Z:()=>r});const r=e.p+"assets/images/IDE-Arduino-Terminal-serial-248aa58aa3f811c7df29648366143242.png"},446:(a,o,e)=>{e.d(o,{Z:()=>r});const r=e.p+"assets/images/IDE-Arduino-Upload-802877937fd66a36829d4c86bf1097c3.png"},6861:(a,o,e)=>{e.d(o,{Z:()=>r});const r=e.p+"assets/images/IDE-Arduino-cabe65705eb2af6ca4940b4dada79e45.png"},5487:(a,o,e)=>{e.d(o,{Z:()=>r});const r=e.p+"assets/images/circuito-58c7cff2dc28fe98b6f923e076cdb2d4.png"},4936:(a,o,e)=>{e.d(o,{Z:()=>r});const r=e.p+"assets/images/placa-franzininho-diy-d8459c4e0e0d4c724d1c4d619ffc0350.png"}}]); \ No newline at end of file diff --git a/assets/js/3ab9b561.d70a193a.js b/assets/js/3ab9b561.d70a193a.js new file mode 100755 index 000000000..427179626 --- /dev/null +++ b/assets/js/3ab9b561.d70a193a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8817],{75080:(a,e,o)=>{o.r(e),o.d(e,{assets:()=>c,contentTitle:()=>t,default:()=>p,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var r=o(17624),n=o(95788);const i={id:"bootloader",title:"Bootloader",slug:"/franzininho-diy/bootloader",description:"Grava\xe7\xe3o do Bootloader na Franzininho DIY"},t=void 0,s={id:"FranzininhoDIY/bootloader/bootloader",title:"Bootloader",description:"Grava\xe7\xe3o do Bootloader na Franzininho DIY",source:"@site/docs/FranzininhoDIY/bootloader/bootloader.md",sourceDirName:"FranzininhoDIY/bootloader",slug:"/franzininho-diy/bootloader",permalink:"/docs/franzininho-diy/bootloader",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/bootloader/bootloader.md",tags:[],version:"current",frontMatter:{id:"bootloader",title:"Bootloader",slug:"/franzininho-diy/bootloader",description:"Grava\xe7\xe3o do Bootloader na Franzininho DIY"},sidebar:"docs",previous:{title:"Montagem da Franzininho DIY",permalink:"/docs/franzininho-diy/montagem"},next:{title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",permalink:"/docs/franzininho-diy/drivers-micronucleus"}},c={},d=[{value:"Materiais Necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Gravando o FranzBoot no Arduino UNO",id:"gravando-o-franzboot-no-arduino-uno",level:2},{value:"Pr\xf3ximos passos",id:"pr\xf3ximos-passos",level:2},{value:"Gravar muitos chips",id:"gravar-muitos-chips",level:2}];function l(a){const e={a:"a",admonition:"admonition",h2:"h2",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",ul:"ul",...(0,n.MN)(),...a.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.p,{children:"Para que a placa Franzininho possa ser gravada atrav\xe9s da USB \xe9 necess\xe1rio gravar o bootloader. O bootloader \xe9 um pequeno programa que roda toda vez que a placa \xe9 iniciada e verifica se tem um comando de atualiza\xe7\xe3o de firmware. Caso tenha esse comando, ele recebe o bin\xe1rio atrav\xe9s da USB (no caso da Franzininho DIY) e grava na mem\xf3ria flash."}),"\n",(0,r.jsxs)(e.p,{children:["Na Franzininho DIY usamos o ",(0,r.jsx)(e.a,{href:"https://github.com/micronucleus/micronucleus/blob/master/Devices_with_Micronucleus.md",children:"Micronucleus"})," que \xe9 um bootloader pequeno e bem flex\xedvel desenvolvido para a fam\xedlia ATtiny usando o projeto ",(0,r.jsx)(e.a,{href:"https://www.obdev.at/products/vusb/index.html",children:"VUSB"})," como base."]}),"\n",(0,r.jsx)(e.p,{children:"A seguir vamos exibir como voc\xea pode gravar o ATtiny85 para usar o Micronucleus."}),"\n",(0,r.jsx)(e.h2,{id:"materiais-necess\xe1rios",children:"Materiais Necess\xe1rios"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"Arduino UNO ou similar"}),"\n",(0,r.jsx)(e.li,{children:"Fios (Jumpers)"}),"\n",(0,r.jsx)(e.li,{children:"Protoboard"}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"circuito",children:"Circuito"}),"\n",(0,r.jsx)(e.p,{children:"Voc\xea precisar\xe1 montar o seguinte circuito:"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Circuito para Grava\xe7\xe3o",src:o(13788).c+"",width:"431",height:"408"})}),"\n",(0,r.jsx)(e.admonition,{title:"Fa\xe7a uma dupla checagem antes de ligar o Arduino Uno no computador.",type:"warning"}),"\n",(0,r.jsx)(e.p,{children:"Com o circuito Montado, vamos para a grava\xe7\xe3o do bootloader."}),"\n",(0,r.jsx)(e.h2,{id:"gravando-o-franzboot-no-arduino-uno",children:"Gravando o FranzBoot no Arduino UNO"}),"\n",(0,r.jsxs)(e.p,{children:["Para facilitar a grava\xe7\xe3o do bootloader vamos usar o ",(0,r.jsx)(e.a,{href:"https://github.com/Franzininho/FranzBoot",children:"FranzBoot"}),", um programa para grava\xe7\xe3o do bootloader micronucleus para Franzininho DIY usando Arduino UNO."]}),"\n",(0,r.jsxs)(e.p,{children:["Baixe o projeto no seu computador: ",(0,r.jsx)(e.a,{href:"https://github.com/Franzininho/FranzBoot/archive/refs/heads/main.zip",children:"Download"}),"."]}),"\n",(0,r.jsx)(e.p,{children:"Descompacte a pasta e abra o arquivo FranzBoot.ino"}),"\n",(0,r.jsx)(e.admonition,{type:"tip",children:(0,r.jsxs)(e.mdxAdmonitionTitle,{children:["Se ainda n\xe3o tem a IDE Arduino no seu computador, baixe-a no site do ",(0,r.jsx)(e.a,{href:"https://www.arduino.cc/en/software",children:"Arduino"})]})}),"\n",(0,r.jsx)(e.p,{children:"Ser\xe1 aberta a IDE do Arduino:"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Circuito para Grava\xe7\xe3o",src:o(93364).c+"",width:"1300",height:"1071"})}),"\n",(0,r.jsx)(e.p,{children:"Antes de gravar na placa precisamos configurar a IDE para a placa Arduino UNO. Em Placa selecione Arduino UNO e em porta a porta Serial criada para o seu Arduino UNO:"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Circuito para Grava\xe7\xe3o",src:o(93580).c+"",width:"879",height:"706"})}),"\n",(0,r.jsx)(e.p,{children:"Pronto, agora pressione Upload(Carregar) e aguarde a grava\xe7\xe3o no Arduino UNO:"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Circuito para Grava\xe7\xe3o",src:o(38316).c+"",width:"1300",height:"1071"})}),"\n",(0,r.jsx)(e.p,{children:"Agora abra o terminal serial:"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Circuito para Grava\xe7\xe3o",src:o(75184).c+"",width:"1185",height:"569"})}),"\n",(0,r.jsx)(e.admonition,{title:"Verifique se a velocidade est\xe1 configurada em 9600.",type:"tip"}),"\n",(0,r.jsx)(e.p,{children:"Agora digite G e pressione enviar. Ap\xf3s a grava\xe7\xe3o deve ser apresentada a seguinte mensagem no terminal:"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Circuito para Grava\xe7\xe3o",src:o(64272).c+"",width:"1185",height:"569"})}),"\n",(0,r.jsx)(e.admonition,{title:"ERRO",type:"warning",children:(0,r.jsx)(e.p,{children:"Se receber uma mensagem de erro, verifique as conex\xf5es el\xe9tricas e envie novamente o comando G."})}),"\n",(0,r.jsx)(e.p,{children:"Pronto, o ATtiny85 est\xe1 pronto para ser encaixado na sua Franzininho DIY. Retire-o com cuidado da matriz de contatos e encaixe-o corretamente na Franzininho DIY, conforme imagem abaixo"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Placa Franzininho DIY",src:o(53144).c+"",width:"500",height:"233"})}),"\n",(0,r.jsx)(e.h2,{id:"pr\xf3ximos-passos",children:"Pr\xf3ximos passos"}),"\n",(0,r.jsx)(e.p,{children:"Agora que j\xe1 tem a sua placa Franzininho DIY preparada voc\xea pode partir para a programa\xe7\xe3o."}),"\n",(0,r.jsx)(e.h2,{id:"gravar-muitos-chips",children:"Gravar muitos chips"}),"\n",(0,r.jsxs)(e.p,{children:["Caso voc\xea necessite gravar muitos chips voc\xea pode gravar sem usar o PC. Verifique a ",(0,r.jsx)(e.a,{href:"https://github.com/Franzininho/FranzBoot#readme",children:"documenta\xe7\xe3o do FranzBoot"})," para mais detalhes."]})]})}function p(a={}){const{wrapper:e}={...(0,n.MN)(),...a.components};return e?(0,r.jsx)(e,{...a,children:(0,r.jsx)(l,{...a})}):l(a)}},95788:(a,e,o)=>{o.d(e,{MN:()=>d});var r=o(11504);function n(a,e,o){return e in a?Object.defineProperty(a,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):a[e]=o,a}function i(a,e){var o=Object.keys(a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(a);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable}))),o.push.apply(o,r)}return o}function t(a){for(var e=1;e=0||(n[o]=a[o]);return n}(a,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(a);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(a,o)&&(n[o]=a[o])}return n}var c=r.createContext({}),d=function(a){var e=r.useContext(c),o=e;return a&&(o="function"==typeof a?a(e):t(t({},e),a)),o},l={inlineCode:"code",wrapper:function(a){var e=a.children;return r.createElement(r.Fragment,{},e)}},p=r.forwardRef((function(a,e){var o=a.components,n=a.mdxType,i=a.originalType,c=a.parentName,p=s(a,["components","mdxType","originalType","parentName"]),u=d(o),h=n,m=u["".concat(c,".").concat(h)]||u[h]||l[h]||i;return o?r.createElement(m,t(t({ref:e},p),{},{components:o})):r.createElement(m,t({ref:e},p))}));p.displayName="MDXCreateElement"},93580:(a,e,o)=>{o.d(e,{c:()=>r});const r=o.p+"assets/images/IDE-Arduino-Configuracao-dde65494e76bfd5fe726b61692f4707c.png"},64272:(a,e,o)=>{o.d(e,{c:()=>r});const r=o.p+"assets/images/IDE-Arduino-Gravando-a69ad020e2520590375ce6a7c601429f.png"},75184:(a,e,o)=>{o.d(e,{c:()=>r});const r=o.p+"assets/images/IDE-Arduino-Terminal-serial-248aa58aa3f811c7df29648366143242.png"},38316:(a,e,o)=>{o.d(e,{c:()=>r});const r=o.p+"assets/images/IDE-Arduino-Upload-802877937fd66a36829d4c86bf1097c3.png"},93364:(a,e,o)=>{o.d(e,{c:()=>r});const r=o.p+"assets/images/IDE-Arduino-cabe65705eb2af6ca4940b4dada79e45.png"},13788:(a,e,o)=>{o.d(e,{c:()=>r});const r=o.p+"assets/images/circuito-58c7cff2dc28fe98b6f923e076cdb2d4.png"},53144:(a,e,o)=>{o.d(e,{c:()=>r});const r=o.p+"assets/images/placa-franzininho-diy-d8459c4e0e0d4c724d1c4d619ffc0350.png"}}]); \ No newline at end of file diff --git a/assets/js/3cf26f2f.92a64359.js b/assets/js/3cf26f2f.92a64359.js new file mode 100755 index 000000000..4e7fce7b2 --- /dev/null +++ b/assets/js/3cf26f2f.92a64359.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1680],{38988:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>t,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var o=n(17624),r=n(95788);const a={id:"circuitpython-serial-console",title:"Serial Console",slug:"/franzininho-wifi/exemplos-circuitpython/serial-console",description:"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.",author:"Ewerton Leandro"},t=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console",title:"Serial Console",description:"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/serial-console.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/serial-console",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/serial-console",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/serial-console.md",tags:[],version:"current",frontMatter:{id:"circuitpython-serial-console",title:"Serial Console",slug:"/franzininho-wifi/exemplos-circuitpython/serial-console",description:"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.",author:"Ewerton Leandro"},sidebar:"docs",previous:{title:"Hello World!",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/hello-world"},next:{title:"Entradas e Sa\xeddas Digitais",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais"}},c={},l=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Execu\xe7\xe3o",id:"execu\xe7\xe3o",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function d(e){const i={admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.p,{children:"Neste exemplo iremos utilizar o console serial para controlar a cor do LED da Franzininho WiFi com CircuitPython."}),"\n",(0,o.jsx)(i.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsx)(i.li,{children:"1 Placa Franzininho Wifi com CircuitPython;"}),"\n"]}),"\n",(0,o.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,o.jsx)(i.p,{children:"Para este exemplo n\xe3o ser\xe1 necess\xe1rio nenhum componente extra, apenas a placa Franzininho WiFi:"}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"franzininho-wifi-serial-console",src:n(11823).c+"",width:"758",height:"419"})}),"\n",(0,o.jsx)(i.p,{children:"Obs. Neste exemplo vamos utilizar o Mu Editor, mas qualquer editor com suporte a comunica\xe7\xe3o serial pode ser utilizado."}),"\n",(0,o.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,o.jsx)(i.p,{children:"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 no diret\xf3rio CIRCUITPY e salve o arquivo:"}),"\n",(0,o.jsx)(i.admonition,{title:"Observa\xe7\xe3o",type:"note",children:(0,o.jsx)(i.p,{children:"Provavelmente voc\xea encontrar\xe1 outro c\xf3digo no arquivo code.py.\nApague-o e insira o c\xf3digo novo."})}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:'# code.py\n\n""" Controle da cor do LED RGB atrav\xe9s da serial console """\nimport board\nimport digitalio\nimport neopixel_write\n\npin = digitalio.DigitalInOut(board.NEOPIXEL)\npin.direction = digitalio.Direction.OUTPUT\n\nwhile True:\n print("Digite a intesidade da cor vermelho:")\n r = int(input())\n print("Digite a intesidade da cor verde:")\n g = int(input())\n print("Digite a intesidade da cor azul:")\n b = int(input())\n cor = bytearray([r, g, b])\n neopixel_write.neopixel_write(pin, cor)\n print("Cor: {} {} {}".format(r,g,b) )\n print("[ENTER] - para mudar a cor.")\n input()\n'})}),"\n",(0,o.jsx)(i.p,{children:"Finalizando a edi\xe7\xe3o do arquivo, salve-o.\nAp\xf3s salvar o arquivo, abra o console serial do Mu Editor."}),"\n",(0,o.jsx)(i.h2,{id:"an\xe1lise-do-c\xf3digo",children:"An\xe1lise do c\xf3digo"}),"\n",(0,o.jsx)(i.p,{children:"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"import board\n"})}),"\n",(0,o.jsx)(i.p,{children:"Utilizaremos o LED Neopixel existente na pr\xf3pria placa da Franzininho WiFi, este LED est\xe1 conectado a GPIO 18 do ESP32-S2 da Franzininho WiFi."}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"franzininho-wifi-serial-console",src:n(89480).c+"",width:"760",height:"466"})}),"\n",(0,o.jsx)(i.p,{children:"Como o LED \xe9 um atuador, precisamos configurar o pino como uma sa\xedda digital. Para isso, precisamos importar o m\xf3dulo:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{children:"import digitalio\n"})}),"\n",(0,o.jsx)(i.p,{children:"O LED RGB Neopixel utiliza um protocolo de comunica\xe7\xe3o espec\xedfico j\xe1 que dentro do LED existe um chip de controle integrado que controla os tr\xeas LED dentro do encapsulamento.\nPara facilitar a implementa\xe7\xe3o de nosso programa, optamos por utilizar um biblioteca dispon\xedvel dentro do pr\xf3prio circuitpython que \xe9 a neopixel_write:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"import neopixel_write\n"})}),"\n",(0,o.jsx)(i.p,{children:"Com todos os m\xf3dulos importados, podemos acessar as fun\xe7\xf5es de configura\xe7\xe3o do pino digital:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"pin = digitalio.DigitalInOut(board.NEOPIXEL)\npin.direction = digitalio.Direction.OUTPUT\n"})}),"\n",(0,o.jsx)(i.p,{children:"Note que primeiro mapeamos o pino e depois configuramos a dire\xe7\xe3o."}),"\n",(0,o.jsx)(i.p,{children:"Diferentemente de outros framework como Arduino, ESP-IDF e a maioria dos framework escrito em C/C++, o interpretador do Python j\xe1 habilitar UART para a comunica\xe7\xe3o serial por padr\xe3o, dispensado a inicializa\xe7\xe3o da serial como seria no Arduino por exemplo."}),"\n",(0,o.jsx)(i.p,{children:"Fragmento de c\xf3digo necess\xe1rio para configurar a comunica\xe7\xe3o serial no Arduino:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-c++",children:"Serial.begin(115200);\n"})}),"\n",(0,o.jsx)(i.admonition,{title:"Dica",type:"note",children:(0,o.jsxs)(i.p,{children:["Nunca mais voc\xea vai esquecer de habilitar a serial antes de tentar imprimir. ","\ud83d\ude09"]})}),"\n",(0,o.jsx)(i.p,{children:"Neste exemplo duas fun\xe7\xf5es s\xe3o importante destacar. S\xe3o as fun\xe7\xf5es que permite escrever e ler dados do console."}),"\n",(0,o.jsx)(i.p,{children:'A fun\xe7\xe3o "print" para imprimir mensagem no console serial.'}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:'print("Algum coisa para ser impresso na serial")\n'})}),"\n",(0,o.jsx)(i.p,{children:'E a fun\xe7\xe3o "input" para ler valores do console serial.'}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"uma_variavel = input()\n"})}),"\n",(0,o.jsx)(i.p,{children:"Agora vamos criar nosso loop principal:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"while True:\n print('Digite a intensidade da cor vermelho:')\n r = int(input())\n print('Digite a intensidade da cor verde:')\n g = int(input())\n print('Digite a intensidade da cor azul:')\n b = int(input())\n cor = bytearray([r, g, b])\n neopixel_write.neopixel_write(pin, cor)\n print('Cor: {} {} {}'.format(r,g,b) )\n print('[ENTER] - para mudar a cor.')\n input()\n"})}),"\n",(0,o.jsx)(i.p,{children:"No loop principal iremos utilizar as fun\xe7\xf5es print/input para ler o valor das cores dos tr\xeas LED."}),"\n",(0,o.jsx)(i.p,{children:"Iremos montar um bytearray e chamar a fun\xe7\xe3o neopixel_write para atualizar a cor do LED Neopixel."}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"cor = bytearray([r, g, b])\n"})}),"\n",(0,o.jsx)(i.p,{children:"A fun\xe7\xe3o neopixel_write precisa apenas de dois par\xe2metros, o pino onde est\xe1 conectado o LED e um bytearray contendo um byte para cada uma das cores do LED."}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"neopixel_write.neopixel_write(pin, cor)\n"})}),"\n",(0,o.jsx)(i.p,{children:"O bytearray segue o seguinte formato: primeiro byte representa a intensidade do LED vermelho (Red), o segundo byte representa a intensidade do LED verde (Green) e o terceiro byte representa a intensidade do LED azul (Blue)."}),"\n",(0,o.jsx)(i.h2,{id:"execu\xe7\xe3o",children:"Execu\xe7\xe3o"}),"\n",(0,o.jsx)(i.p,{children:'Para abrir o console serial no Mu Editor, click no bot\xe3o "Serial" e depois pressione "Ctrl + D" para reiniciar a execu\xe7\xe3o do script na placa. Logo em seguida voc\xea poder\xe1 ver a primeira mensagem do script, solicitado o valor da primeira cor no console, a cor vermelha.'}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"franzininho-wifi-serial-console",src:n(42440).c+"",width:"1360",height:"726"})}),"\n",(0,o.jsx)(i.p,{children:"Aqui temos um exemplo de execu\xe7\xe3o no console serial do Mu Editor."}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"franzininho-wifi-serial-console",src:n(33572).c+"",width:"1030",height:"325"})}),"\n",(0,o.jsx)(i.p,{children:"Resultado da execu\xe7\xe3o na placa Franzininho WiFi."}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"franzininho-wifi-serial-console",src:n(17556).c+"",width:"1600",height:"1166"})}),"\n",(0,o.jsx)(i.p,{children:"Outro exemplo de execu\xe7\xe3o."}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"franzininho-wifi-serial-console",src:n(70596).c+"",width:"1280",height:"891"})}),"\n",(0,o.jsx)(i.admonition,{title:"Sugest\xe3o de experimento",type:"tip",children:(0,o.jsx)(i.p,{children:"Execute uma informando os valores [10,10,10], execute novamente agora informando os valores [100,100,100] e observe a diferen\xe7a entre as duas execu\xe7\xf5es."})}),"\n",(0,o.jsx)(i.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,o.jsx)(i.p,{children:"Neste exemplo exploramos duas importante ferramentas no desenvolvimento de qualquer projeto, a comunica\xe7\xe3o serial do console e o LED Builtin da placa Franzininho WiFi que tamb\xe9m \xe9 um LED Neopixel que pode dar um charme a mais a seus projetos!!!"}),"\n",(0,o.jsxs)(i.table,{children:[(0,o.jsx)(i.thead,{children:(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.th,{children:"Autor"}),(0,o.jsx)(i.th,{children:"Ewerton Leandro de Sousa"})]})}),(0,o.jsx)(i.tbody,{children:(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.td,{children:"Data:"}),(0,o.jsx)(i.td,{children:"07/10/2021"})]})})]})]})}function p(e={}){const{wrapper:i}={...(0,r.MN)(),...e.components};return i?(0,o.jsx)(i,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},95788:(e,i,n)=>{n.d(i,{MN:()=>l});var o=n(11504);function r(e,i,n){return i in e?Object.defineProperty(e,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[i]=n,e}function a(e,i){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);i&&(o=o.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),n.push.apply(n,o)}return n}function t(e){for(var i=1;i=0||(r[n]=e[n]);return r}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=o.createContext({}),l=function(e){var i=o.useContext(c),n=i;return e&&(n="function"==typeof e?e(i):t(t({},i),e)),n},d={inlineCode:"code",wrapper:function(e){var i=e.children;return o.createElement(o.Fragment,{},i)}},p=o.forwardRef((function(e,i){var n=e.components,r=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(n),m=r,h=u["".concat(c,".").concat(m)]||u[m]||d[m]||a;return n?o.createElement(h,t(t({ref:i},p),{},{components:n})):o.createElement(h,t({ref:i},p))}));p.displayName="MDXCreateElement"},17556:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/exemplo2-21fdde314416eddf012a6910081a7e2e.jpeg"},70596:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/exemplo3-be8b96c2fcf53cdaa581d2996e897d4d.jpeg"},11823:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/franzininho-wifi-3b55bb6358735fdb9708737760477e5b.png"},42440:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/mu1-d9e439fb33fd6469d96b580d0c518400.png"},33572:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/mu2-22111a44455aac8485e7acee915aa990.png"},89480:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/neopixel-6aba6a8ee3594d17ac2240dff080b576.png"}}]); \ No newline at end of file diff --git a/assets/js/3cf26f2f.930105a4.js b/assets/js/3cf26f2f.930105a4.js deleted file mode 100755 index 1a63fa8fc..000000000 --- a/assets/js/3cf26f2f.930105a4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6803],{3905:(e,o,i)=>{i.d(o,{Zo:()=>c,kt:()=>g});var n=i(7294);function a(e,o,i){return o in e?Object.defineProperty(e,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[o]=i,e}function r(e,o){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),i.push.apply(i,n)}return i}function t(e){for(var o=1;o=0||(a[i]=e[i]);return a}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}var s=n.createContext({}),p=function(e){var o=n.useContext(s),i=o;return e&&(i="function"==typeof e?e(o):t(t({},o),e)),i},c=function(e){var o=p(e.components);return n.createElement(s.Provider,{value:o},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var o=e.children;return n.createElement(n.Fragment,{},o)}},m=n.forwardRef((function(e,o){var i=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(i),m=a,g=d["".concat(s,".").concat(m)]||d[m]||u[m]||r;return i?n.createElement(g,t(t({ref:o},c),{},{components:i})):n.createElement(g,t({ref:o},c))}));function g(e,o){var i=arguments,a=o&&o.mdxType;if("string"==typeof e||a){var r=i.length,t=new Array(r);t[0]=m;var l={};for(var s in o)hasOwnProperty.call(o,s)&&(l[s]=o[s]);l.originalType=e,l[d]="string"==typeof e?e:a,t[1]=l;for(var p=2;p{i.r(o),i.d(o,{assets:()=>s,contentTitle:()=>t,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var n=i(3117),a=(i(7294),i(3905));const r={id:"circuitpython-serial-console",title:"Serial Console",slug:"/franzininho-wifi/exemplos-circuitpython/serial-console",description:"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.",author:"Ewerton Leandro"},t=void 0,l={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console",title:"Serial Console",description:"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/serial-console.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/serial-console",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/serial-console",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/serial-console.md",tags:[],version:"current",frontMatter:{id:"circuitpython-serial-console",title:"Serial Console",slug:"/franzininho-wifi/exemplos-circuitpython/serial-console",description:"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.",author:"Ewerton Leandro"},sidebar:"docs",previous:{title:"Hello World!",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/hello-world"},next:{title:"Entradas e Sa\xeddas Digitais",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais"}},s={},p=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Execu\xe7\xe3o",id:"execu\xe7\xe3o",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],c={toc:p},d="wrapper";function u(e){let{components:o,...r}=e;return(0,a.kt)(d,(0,n.Z)({},c,r,{components:o,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Neste exemplo iremos utilizar o console serial para controlar a cor do LED da Franzininho WiFi com CircuitPython. "),(0,a.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"1 Placa Franzininho Wifi com CircuitPython;")),(0,a.kt)("h2",{id:"circuito"},"Circuito"),(0,a.kt)("p",null,"Para este exemplo n\xe3o ser\xe1 necess\xe1rio nenhum componente extra, apenas a placa Franzininho WiFi:"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"franzininho-wifi-serial-console",src:i(2217).Z,width:"758",height:"419"})),(0,a.kt)("p",null,"Obs. Neste exemplo vamos utilizar o Mu Editor, mas qualquer editor com suporte a comunica\xe7\xe3o serial pode ser utilizado."),(0,a.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,a.kt)("p",null,"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 no diret\xf3rio CIRCUITPY e salve o arquivo:"),(0,a.kt)("admonition",{title:"Observa\xe7\xe3o",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Provavelmente voc\xea encontrar\xe1 outro c\xf3digo no arquivo code.py.\nApague-o e insira o c\xf3digo novo.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},'# code.py\n\n""" Controle da cor do LED RGB atrav\xe9s da serial console """\nimport board\nimport digitalio\nimport neopixel_write\n\npin = digitalio.DigitalInOut(board.NEOPIXEL)\npin.direction = digitalio.Direction.OUTPUT\n\nwhile True:\n print("Digite a intesidade da cor vermelho:")\n r = int(input())\n print("Digite a intesidade da cor verde:")\n g = int(input())\n print("Digite a intesidade da cor azul:")\n b = int(input())\n cor = bytearray([r, g, b])\n neopixel_write.neopixel_write(pin, cor)\n print("Cor: {} {} {}".format(r,g,b) )\n print("[ENTER] - para mudar a cor.")\n input()\n')),(0,a.kt)("p",null,"Finalizando a edi\xe7\xe3o do arquivo, salve-o.\nAp\xf3s salvar o arquivo, abra o console serial do Mu Editor."),(0,a.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},"An\xe1lise do c\xf3digo"),(0,a.kt)("p",null,"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,a.kt)("p",null,"Utilizaremos o LED Neopixel existente na pr\xf3pria placa da Franzininho WiFi, este LED est\xe1 conectado a GPIO 18 do ESP32-S2 da Franzininho WiFi."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"franzininho-wifi-serial-console",src:i(7352).Z,width:"760",height:"466"})),(0,a.kt)("p",null,"Como o LED \xe9 um atuador, precisamos configurar o pino como uma sa\xedda digital. Para isso, precisamos importar o m\xf3dulo:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"import digitalio\n")),(0,a.kt)("p",null,"O LED RGB Neopixel utiliza um protocolo de comunica\xe7\xe3o espec\xedfico j\xe1 que dentro do LED existe um chip de controle integrado que controla os tr\xeas LED dentro do encapsulamento.\nPara facilitar a implementa\xe7\xe3o de nosso programa, optamos por utilizar um biblioteca dispon\xedvel dentro do pr\xf3prio circuitpython que \xe9 a neopixel_write:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"import neopixel_write\n")),(0,a.kt)("p",null,"Com todos os m\xf3dulos importados, podemos acessar as fun\xe7\xf5es de configura\xe7\xe3o do pino digital:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"pin = digitalio.DigitalInOut(board.NEOPIXEL)\npin.direction = digitalio.Direction.OUTPUT\n")),(0,a.kt)("p",null,"Note que primeiro mapeamos o pino e depois configuramos a dire\xe7\xe3o."),(0,a.kt)("p",null,"Diferentemente de outros framework como Arduino, ESP-IDF e a maioria dos framework escrito em C/C++, o interpretador do Python j\xe1 habilitar UART para a comunica\xe7\xe3o serial por padr\xe3o, dispensado a inicializa\xe7\xe3o da serial como seria no Arduino por exemplo."),(0,a.kt)("p",null,"Fragmento de c\xf3digo necess\xe1rio para configurar a comunica\xe7\xe3o serial no Arduino:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-c++"},"Serial.begin(115200);\n")),(0,a.kt)("admonition",{title:"Dica",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Nunca mais voc\xea vai esquecer de habilitar a serial antes de tentar imprimir. \ud83d\ude09")),(0,a.kt)("p",null,"Neste exemplo duas fun\xe7\xf5es s\xe3o importante destacar. S\xe3o as fun\xe7\xf5es que permite escrever e ler dados do console."),(0,a.kt)("p",null,'A fun\xe7\xe3o "print" para imprimir mensagem no console serial.'),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},'print("Algum coisa para ser impresso na serial")\n')),(0,a.kt)("p",null,'E a fun\xe7\xe3o "input" para ler valores do console serial.'),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"uma_variavel = input()\n")),(0,a.kt)("p",null,"Agora vamos criar nosso loop principal:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"while True:\n print('Digite a intensidade da cor vermelho:')\n r = int(input())\n print('Digite a intensidade da cor verde:')\n g = int(input())\n print('Digite a intensidade da cor azul:')\n b = int(input())\n cor = bytearray([r, g, b])\n neopixel_write.neopixel_write(pin, cor)\n print('Cor: {} {} {}'.format(r,g,b) )\n print('[ENTER] - para mudar a cor.')\n input()\n")),(0,a.kt)("p",null,"No loop principal iremos utilizar as fun\xe7\xf5es print/input para ler o valor das cores dos tr\xeas LED."),(0,a.kt)("p",null,"Iremos montar um bytearray e chamar a fun\xe7\xe3o neopixel_write para atualizar a cor do LED Neopixel."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"cor = bytearray([r, g, b])\n")),(0,a.kt)("p",null,"A fun\xe7\xe3o neopixel_write precisa apenas de dois par\xe2metros, o pino onde est\xe1 conectado o LED e um bytearray contendo um byte para cada uma das cores do LED."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"neopixel_write.neopixel_write(pin, cor)\n")),(0,a.kt)("p",null,"O bytearray segue o seguinte formato: primeiro byte representa a intensidade do LED vermelho (Red), o segundo byte representa a intensidade do LED verde (Green) e o terceiro byte representa a intensidade do LED azul (Blue)."),(0,a.kt)("h2",{id:"execu\xe7\xe3o"},"Execu\xe7\xe3o"),(0,a.kt)("p",null,'Para abrir o console serial no Mu Editor, click no bot\xe3o "Serial" e depois pressione "Ctrl + D" para reiniciar a execu\xe7\xe3o do script na placa. Logo em seguida voc\xea poder\xe1 ver a primeira mensagem do script, solicitado o valor da primeira cor no console, a cor vermelha.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"franzininho-wifi-serial-console",src:i(3630).Z,width:"1360",height:"726"})),(0,a.kt)("p",null,"Aqui temos um exemplo de execu\xe7\xe3o no console serial do Mu Editor."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"franzininho-wifi-serial-console",src:i(1848).Z,width:"1030",height:"325"})),(0,a.kt)("p",null,"Resultado da execu\xe7\xe3o na placa Franzininho WiFi."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"franzininho-wifi-serial-console",src:i(3644).Z,width:"1600",height:"1166"})),(0,a.kt)("p",null,"Outro exemplo de execu\xe7\xe3o."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"franzininho-wifi-serial-console",src:i(4281).Z,width:"1280",height:"891"})),(0,a.kt)("admonition",{title:"Sugest\xe3o de experimento",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"Execute uma informando os valores ","[10,10,10]",", execute novamente agora informando os valores ","[100,100,100]"," e observe a diferen\xe7a entre as duas execu\xe7\xf5es.")),(0,a.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,a.kt)("p",null,"Neste exemplo exploramos duas importante ferramentas no desenvolvimento de qualquer projeto, a comunica\xe7\xe3o serial do console e o LED Builtin da placa Franzininho WiFi que tamb\xe9m \xe9 um LED Neopixel que pode dar um charme a mais a seus projetos!!!"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Autor"),(0,a.kt)("th",{parentName:"tr",align:null},"Ewerton Leandro de Sousa"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Data:"),(0,a.kt)("td",{parentName:"tr",align:null},"07/10/2021")))))}u.isMDXComponent=!0},3644:(e,o,i)=>{i.d(o,{Z:()=>n});const n=i.p+"assets/images/exemplo2-21fdde314416eddf012a6910081a7e2e.jpeg"},4281:(e,o,i)=>{i.d(o,{Z:()=>n});const n=i.p+"assets/images/exemplo3-be8b96c2fcf53cdaa581d2996e897d4d.jpeg"},2217:(e,o,i)=>{i.d(o,{Z:()=>n});const n=i.p+"assets/images/franzininho-wifi-3b55bb6358735fdb9708737760477e5b.png"},3630:(e,o,i)=>{i.d(o,{Z:()=>n});const n=i.p+"assets/images/mu1-d9e439fb33fd6469d96b580d0c518400.png"},1848:(e,o,i)=>{i.d(o,{Z:()=>n});const n=i.p+"assets/images/mu2-22111a44455aac8485e7acee915aa990.png"},7352:(e,o,i)=>{i.d(o,{Z:()=>n});const n=i.p+"assets/images/neopixel-6aba6a8ee3594d17ac2240dff080b576.png"}}]); \ No newline at end of file diff --git a/assets/js/43004a8a.51ba281e.js b/assets/js/43004a8a.28060fa5.js similarity index 65% rename from assets/js/43004a8a.51ba281e.js rename to assets/js/43004a8a.28060fa5.js index 5971b1e1f..061f7a0e8 100755 --- a/assets/js/43004a8a.51ba281e.js +++ b/assets/js/43004a8a.28060fa5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[270],{3769:n=>{n.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[400],{2080:n=>{n.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/445992cb.0c43af20.js b/assets/js/445992cb.0c43af20.js deleted file mode 100755 index 41557d21a..000000000 --- a/assets/js/445992cb.0c43af20.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8407],{3905:(a,o,e)=>{e.d(o,{Zo:()=>c,kt:()=>b});var t=e(7294);function r(a,o,e){return o in a?Object.defineProperty(a,o,{value:e,enumerable:!0,configurable:!0,writable:!0}):a[o]=e,a}function n(a,o){var e=Object.keys(a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(a);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(a,o).enumerable}))),e.push.apply(e,t)}return e}function i(a){for(var o=1;o=0||(r[e]=a[e]);return r}(a,o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(a);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(a,e)&&(r[e]=a[e])}return r}var p=t.createContext({}),s=function(a){var o=t.useContext(p),e=o;return a&&(e="function"==typeof a?a(o):i(i({},o),a)),e},c=function(a){var o=s(a.components);return t.createElement(p.Provider,{value:o},a.children)},l="mdxType",u={inlineCode:"code",wrapper:function(a){var o=a.children;return t.createElement(t.Fragment,{},o)}},m=t.forwardRef((function(a,o){var e=a.components,r=a.mdxType,n=a.originalType,p=a.parentName,c=d(a,["components","mdxType","originalType","parentName"]),l=s(e),m=r,b=l["".concat(p,".").concat(m)]||l[m]||u[m]||n;return e?t.createElement(b,i(i({ref:o},c),{},{components:e})):t.createElement(b,i({ref:o},c))}));function b(a,o){var e=arguments,r=o&&o.mdxType;if("string"==typeof a||r){var n=e.length,i=new Array(n);i[0]=m;var d={};for(var p in o)hasOwnProperty.call(o,p)&&(d[p]=o[p]);d.originalType=a,d[l]="string"==typeof a?a:r,i[1]=d;for(var s=2;s{e.r(o),e.d(o,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>n,metadata:()=>d,toc:()=>s});var t=e(3117),r=(e(7294),e(3905));const n={id:"adaptador-arduino",title:"Adaptador Arduino Uno",slug:"arduino-uno",description:"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},i=void 0,d={unversionedId:"LaboratorioSistemasIot/adaptadores/adaptador-arduino",id:"LaboratorioSistemasIot/adaptadores/adaptador-arduino",title:"Adaptador Arduino Uno",description:"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT",source:"@site/docs/LaboratorioSistemasIot/adaptadores/adaptador-arduino.md",sourceDirName:"LaboratorioSistemasIot/adaptadores",slug:"/LaboratorioSistemasIot/adaptadores/arduino-uno",permalink:"/docs/LaboratorioSistemasIot/adaptadores/arduino-uno",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/adaptadores/adaptador-arduino.md",tags:[],version:"current",frontMatter:{id:"adaptador-arduino",title:"Adaptador Arduino Uno",slug:"arduino-uno",description:"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},sidebar:"docs",previous:{title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",permalink:"/docs/LaboratorioSistemasIot/LaboratorioSistemasIot"},next:{title:"laboratorioFW",permalink:"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW"}},p={},s=[{value:"Pinos de ativa\xe7\xe3o",id:"pinos-de-ativa\xe7\xe3o",level:2}],c={toc:s},l="wrapper";function u(a){let{components:o,...n}=a;return(0,r.kt)(l,(0,t.Z)({},c,n,{components:o,mdxType:"MDXLayout"}),(0,r.kt)("p",null,(0,r.kt)("img",{src:e(9419).Z,width:"776",height:"829"})),(0,r.kt)("p",null,"Este adaptador permite a utiliza\xe7\xe3o da placa Arduino Uno em conjunto com a placa ",(0,r.kt)("em",{parentName:"p"},"Laborat\xf3rio de Sistemas Embarcados e IoT")," atrav\xe9s de um remapeamento da pinagem do Arduino Uno e para a pinagem da Franzininho Wifi (utilizada no projeto da placa de laborat\xf3rio). Para utilizar o adaptador basta conect\xe1-lo ao Arduino como um shield e ent\xe3o conectar o adaptador na placa."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/laboratorio-SEIoT-adaptador-arduino"},"Clique aqui")," para acessar o projeto da placa de circuito impresso no Github."),(0,r.kt)("h2",{id:"pinos-de-ativa\xe7\xe3o"},"Pinos de ativa\xe7\xe3o"),(0,r.kt)("p",null,"Este adaptador utiliza o mesmo sistema de codifica\xe7\xe3o de pinos de ativa\xe7\xe3o definido para a placa ",(0,r.kt)("em",{parentName:"p"},"Laborat\xf3rio de Sistemas Embarcados e IoT")," sendo que a correspond\xeancia entre o pino do Arduino e o pino de ativa\xe7\xe3o na placa laborat\xf3rio foi impresso no adaptdor e tamb\xe9m pode ser verificada no reposit\xf3rio do projeto no Github."),(0,r.kt)("p",null,"Para facilitar o uso deste adaptador foi desenvolvida a biblioteca laboratorioFW_ARDUNO para uso em conjunto com o placa que permite o uso dos c\xf3digos dos pinos de ativa\xe7\xe3o dentro da programa\xe7\xe3o."),(0,r.kt)("admonition",{title:"Obs.",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Este projeto foi desenvolvido como parte do Trabalho de Conclus\xe3o de Curso de ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/LelePG"},"Let\xedcia Pegoraro Garcez"),".")))}u.isMDXComponent=!0},9419:(a,o,e)=>{e.d(o,{Z:()=>t});const t=e.p+"assets/images/3d-adaptador-6193045400d2b1d24b3917bd2763c20b.png"}}]); \ No newline at end of file diff --git a/assets/js/445992cb.999dd738.js b/assets/js/445992cb.999dd738.js new file mode 100755 index 000000000..e8cbdf752 --- /dev/null +++ b/assets/js/445992cb.999dd738.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6980],{87004:(a,o,e)=>{e.r(o),e.d(o,{assets:()=>s,contentTitle:()=>n,default:()=>l,frontMatter:()=>i,metadata:()=>d,toc:()=>c});var r=e(17624),t=e(95788);const i={id:"adaptador-arduino",title:"Adaptador Arduino Uno",slug:"arduino-uno",description:"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},n=void 0,d={id:"LaboratorioSistemasIot/adaptadores/adaptador-arduino",title:"Adaptador Arduino Uno",description:"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT",source:"@site/docs/LaboratorioSistemasIot/adaptadores/adaptador-arduino.md",sourceDirName:"LaboratorioSistemasIot/adaptadores",slug:"/LaboratorioSistemasIot/adaptadores/arduino-uno",permalink:"/docs/LaboratorioSistemasIot/adaptadores/arduino-uno",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/adaptadores/adaptador-arduino.md",tags:[],version:"current",frontMatter:{id:"adaptador-arduino",title:"Adaptador Arduino Uno",slug:"arduino-uno",description:"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},sidebar:"docs",previous:{title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",permalink:"/docs/LaboratorioSistemasIot/LaboratorioSistemasIot"},next:{title:"laboratorioFW",permalink:"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW"}},s={},c=[{value:"Pinos de ativa\xe7\xe3o",id:"pinos-de-ativa\xe7\xe3o",level:2}];function p(a){const o={a:"a",admonition:"admonition",em:"em",h2:"h2",img:"img",p:"p",...(0,t.MN)(),...a.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.p,{children:(0,r.jsx)(o.img,{src:e(44912).c+"",width:"776",height:"829"})}),"\n",(0,r.jsxs)(o.p,{children:["Este adaptador permite a utiliza\xe7\xe3o da placa Arduino Uno em conjunto com a placa ",(0,r.jsx)(o.em,{children:"Laborat\xf3rio de Sistemas Embarcados e IoT"})," atrav\xe9s de um remapeamento da pinagem do Arduino Uno e para a pinagem da Franzininho Wifi (utilizada no projeto da placa de laborat\xf3rio). Para utilizar o adaptador basta conect\xe1-lo ao Arduino como um shield e ent\xe3o conectar o adaptador na placa."]}),"\n",(0,r.jsxs)(o.p,{children:[(0,r.jsx)(o.a,{href:"https://github.com/Franzininho/laboratorio-SEIoT-adaptador-arduino",children:"Clique aqui"})," para acessar o projeto da placa de circuito impresso no Github."]}),"\n",(0,r.jsx)(o.h2,{id:"pinos-de-ativa\xe7\xe3o",children:"Pinos de ativa\xe7\xe3o"}),"\n",(0,r.jsxs)(o.p,{children:["Este adaptador utiliza o mesmo sistema de codifica\xe7\xe3o de pinos de ativa\xe7\xe3o definido para a placa ",(0,r.jsx)(o.em,{children:"Laborat\xf3rio de Sistemas Embarcados e IoT"})," sendo que a correspond\xeancia entre o pino do Arduino e o pino de ativa\xe7\xe3o na placa laborat\xf3rio foi impresso no adaptdor e tamb\xe9m pode ser verificada no reposit\xf3rio do projeto no Github."]}),"\n",(0,r.jsx)(o.p,{children:"Para facilitar o uso deste adaptador foi desenvolvida a biblioteca laboratorioFW_ARDUNO para uso em conjunto com o placa que permite o uso dos c\xf3digos dos pinos de ativa\xe7\xe3o dentro da programa\xe7\xe3o."}),"\n",(0,r.jsx)(o.admonition,{title:"Obs.",type:"info",children:(0,r.jsxs)(o.p,{children:["Este projeto foi desenvolvido como parte do Trabalho de Conclus\xe3o de Curso de ",(0,r.jsx)(o.a,{href:"https://github.com/LelePG",children:"Let\xedcia Pegoraro Garcez"}),"."]})})]})}function l(a={}){const{wrapper:o}={...(0,t.MN)(),...a.components};return o?(0,r.jsx)(o,{...a,children:(0,r.jsx)(p,{...a})}):p(a)}},95788:(a,o,e)=>{e.d(o,{MN:()=>c});var r=e(11504);function t(a,o,e){return o in a?Object.defineProperty(a,o,{value:e,enumerable:!0,configurable:!0,writable:!0}):a[o]=e,a}function i(a,o){var e=Object.keys(a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(a);o&&(r=r.filter((function(o){return Object.getOwnPropertyDescriptor(a,o).enumerable}))),e.push.apply(e,r)}return e}function n(a){for(var o=1;o=0||(t[e]=a[e]);return t}(a,o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(a);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(a,e)&&(t[e]=a[e])}return t}var s=r.createContext({}),c=function(a){var o=r.useContext(s),e=o;return a&&(e="function"==typeof a?a(o):n(n({},o),a)),e},p={inlineCode:"code",wrapper:function(a){var o=a.children;return r.createElement(r.Fragment,{},o)}},l=r.forwardRef((function(a,o){var e=a.components,t=a.mdxType,i=a.originalType,s=a.parentName,l=d(a,["components","mdxType","originalType","parentName"]),u=c(e),m=t,b=u["".concat(s,".").concat(m)]||u[m]||p[m]||i;return e?r.createElement(b,n(n({ref:o},l),{},{components:e})):r.createElement(b,n({ref:o},l))}));l.displayName="MDXCreateElement"},44912:(a,o,e)=>{e.d(o,{c:()=>r});const r=e.p+"assets/images/3d-adaptador-6193045400d2b1d24b3917bd2763c20b.png"}}]); \ No newline at end of file diff --git a/assets/js/449acc1f.2964252b.js b/assets/js/449acc1f.2964252b.js deleted file mode 100755 index 28d5cdf61..000000000 --- a/assets/js/449acc1f.2964252b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9019],{3905:(A,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>u});var t=a(7294);function r(A,e,a){return e in A?Object.defineProperty(A,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):A[e]=a,A}function o(A,e){var a=Object.keys(A);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(A);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(A,e).enumerable}))),a.push.apply(a,t)}return a}function n(A){for(var e=1;e=0||(r[a]=A[a]);return r}(A,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(A);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(A,a)&&(r[a]=A[a])}return r}var s=t.createContext({}),l=function(A){var e=t.useContext(s),a=e;return A&&(a="function"==typeof A?A(e):n(n({},e),A)),a},p=function(A){var e=l(A.components);return t.createElement(s.Provider,{value:e},A.children)},d="mdxType",c={inlineCode:"code",wrapper:function(A){var e=A.children;return t.createElement(t.Fragment,{},e)}},m=t.forwardRef((function(A,e){var a=A.components,r=A.mdxType,o=A.originalType,s=A.parentName,p=i(A,["components","mdxType","originalType","parentName"]),d=l(a),m=r,u=d["".concat(s,".").concat(m)]||d[m]||c[m]||o;return a?t.createElement(u,n(n({ref:e},p),{},{components:a})):t.createElement(u,n({ref:e},p))}));function u(A,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof A||r){var o=a.length,n=new Array(o);n[0]=m;var i={};for(var s in e)hasOwnProperty.call(e,s)&&(i[s]=e[s]);i.originalType=A,i[d]="string"==typeof A?A:r,n[1]=i;for(var l=2;l{a.r(e),a.d(e,{assets:()=>s,contentTitle:()=>n,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var t=a(3117),r=(a(7294),a(3905));const o={id:"franzininhoc0-arduino-primeiros-passos",title:"Primeiros passos com Arduino",slug:"/franzininho-c0/arduino-primeiros-passos",description:"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0"},n=void 0,i={unversionedId:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos",id:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos",title:"Primeiros passos com Arduino",description:"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0",source:"@site/docs/franzininhoSTM32C0/exemplos-arduino/primeiros-passos.md",sourceDirName:"franzininhoSTM32C0/exemplos-arduino",slug:"/franzininho-c0/arduino-primeiros-passos",permalink:"/docs/franzininho-c0/arduino-primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-arduino/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"franzininhoc0-arduino-primeiros-passos",title:"Primeiros passos com Arduino",slug:"/franzininho-c0/arduino-primeiros-passos",description:"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0"},sidebar:"docs",previous:{title:"Arduino IDE TODO List",permalink:"/docs/franzininho-c0/arduino-todolist"},next:{title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",permalink:"/docs/franzininho-c0/arduino-identificacao-pinos"}},s={},l=[{value:"Grava\xe7\xe3o de Programas pela USB",id:"grava\xe7\xe3o-de-programas-pela-usb",level:2},{value:"Identifica\xe7\xe3o da Porta Serial",id:"identifica\xe7\xe3o-da-porta-serial",level:2},{value:"Windows",id:"windows",level:3},{value:"Linux",id:"linux",level:3}],p={toc:l},d="wrapper";function c(A){let{components:e,...o}=A;return(0,r.kt)(d,(0,t.Z)({},p,o,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("p",null,'Os passos a seguir mostram a instala\xe7\xe3o e configura\xe7\xe3o da IDE Arduino para usar a op\xe7\xe3o de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma op\xe7\xe3o de placa espec\xedfica para a Franzininho C0, eliminando a necessidade de algumas configura\xe7\xf5es e usando op\xe7\xf5es default mais adequadas para os pinos. '),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Instale a ",(0,r.kt)("strong",{parentName:"p"},"IDE do Arduino")," (se voc\xea n\xe3o tiver instalada) de ",(0,r.kt)("a",{parentName:"p",href:"https://www.arduino.cc/en/software"},"https://www.arduino.cc/en/software"),". As telas apresentadas foram capturadas com a vers\xe3o 2.2.1 para Windows.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Instale o ",(0,r.kt)("strong",{parentName:"p"},"STM32CubeProgrammer")," de ",(0,r.kt)("a",{parentName:"p",href:"https://www.st.com/en/development-tools/stm32cubeprog.html"},"https://www.st.com/en/development-tools/stm32cubeprog.html"),". Pode ser necess\xe1ro fazer um pequeno cadastro para baixar o instalador.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Execute a IDE do Arduino. Entre em ",(0,r.kt)("strong",{parentName:"p"},"File"),", ",(0,r.kt)("strong",{parentName:"p"},"Preferences"),", Additional Boards Manager URLs e acrescente ",(0,r.kt)("inlineCode",{parentName:"p"},"https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json"),":"))),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Aditional Boards Manager URLs",src:a(3435).Z,width:"797",height:"531"})),(0,r.kt)("ol",{start:4},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Conecte a Franzininho C0 ao micro atrav\xe9s de um cabo USB. A placa ser\xe1 reconhecida como uma serial pelo sistema operacional.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},'Selecione "Select other board and port..." no ',(0,r.kt)("em",{parentName:"p"},"dropbox")," na tarja superior da IDE."))),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Sele\xe7\xe3o da placa, parte 1",src:a(1434).Z,width:"364",height:"246"})),(0,r.kt)("ol",{start:6},(0,r.kt)("li",{parentName:"ol"},"Selecione a placa ",(0,r.kt)("strong",{parentName:"li"},'"Generic STM32C0 series"')," e a porta correspondente \xe0 placa (se tiver d\xfavida, veja adiante como identificar a serial).")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Sele\xe7\xe3o da placa, parte 2",src:a(8351).Z,width:"696",height:"499"})),(0,r.kt)("ol",{start:7},(0,r.kt)("li",{parentName:"ol"},"Use o menu ",(0,r.kt)("strong",{parentName:"li"},"Tools")," para acertar a configura\xe7\xe3o da placa:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},'Board part number: "Generic C011F6Px"'),(0,r.kt)("li",{parentName:"ul"},'Upload method: "STM32CubeProgrammer (Serial)"'),(0,r.kt)("li",{parentName:"ul"},"U(S)ART support: \"Enabled (generic 'Serial')\"")))),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Configura\xe7\xe3o da placa",src:a(8678).Z,width:"532",height:"521"})),(0,r.kt)("h2",{id:"grava\xe7\xe3o-de-programas-pela-usb"},"Grava\xe7\xe3o de Programas pela USB"),(0,r.kt)("p",null,"A configura\xe7\xe3o acima far\xe1 a carga de programas atrav\xe9s da USB. Para isto a placa precisa estar com o bootloader em execu\xe7\xe3o, o que \xe9 feito atrav\xe9s destes passos:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Aperte o bot\xe3o ",(0,r.kt)("strong",{parentName:"li"},"BOOT")," e o mantenha apertado"),(0,r.kt)("li",{parentName:"ol"},"Aperte e solte o bot\xe3o ",(0,r.kt)("strong",{parentName:"li"},"RST")),(0,r.kt)("li",{parentName:"ol"},"Solte o bot\xe3o ",(0,r.kt)("strong",{parentName:"li"},"BOOT"))),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"A placa precisa estar executando o bootloader antes da IDE tentar carregar o programa, caso contr\xe1rio ser\xe1 apresentado um erro. O ideal \xe9 fazer o procedimento acima ",(0,r.kt)("strong",{parentName:"em"},"antes")," de apertar o bot\xe3o da IDE para compilar e carregar o programa.")),(0,r.kt)("h2",{id:"identifica\xe7\xe3o-da-porta-serial"},"Identifica\xe7\xe3o da Porta Serial"),(0,r.kt)("p",null,"A Franzininho C0 utiliza um integrado CH340E para emular uma porta serial atrav\xe9s de uma conex\xe3o USB. As vers\xf5es mais recentes de Windows e Linux reconhecem esta serial sem a necessidade de instala\xe7\xe3o de um driver espec\xedfico."),(0,r.kt)("h3",{id:"windows"},"Windows"),(0,r.kt)("p",null,"O Windows associa um nome do tipo COMnn para os dispositivos seriais. De um modo geral, o Windows tenta usar sempre o mesmo nome para cada dispositivo (identificando o dispositivo pelo VendorID, ProductID e Serial Number informados pela USB)."),(0,r.kt)("p",null,'O Gerenciador de Dispositivos mostra os dispositivos seriais embaixo de "Portas (COM e LPT)"'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Portas Seriais no Windows",src:a(8806).Z,width:"311",height:"114"})),(0,r.kt)("p",null,'A Franzininho C0 se apresenta como "USB-SERIAL CH340". Na d\xfavida, desconecte a placa e verifique quem sai da lista. Na figura acima, a Franzininho C0 est\xe1 em COM24.'),(0,r.kt)("h3",{id:"linux"},"Linux"),(0,r.kt)("p",null,"TBD"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Autor"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Daniel Quadros"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Data:"),(0,r.kt)("td",{parentName:"tr",align:"left"},"15/10/2023")))))}c.isMDXComponent=!0},3435:(A,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/Arduino_BoardsManagerURLs-e9c0daf50910d122497173992f15453d.png"},8678:(A,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/Arduino_ConfigBoard-1f6098e22f84dc7e7e951ca126cbf3f2.png"},1434:(A,e,a)=>{a.d(e,{Z:()=>t});const t="data:image/png;base64,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"},8351:(A,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/Arduino_SelectBoard_2-f9e271acb320f31ea713adf8a70205ca.png"},8806:(A,e,a)=>{a.d(e,{Z:()=>t});const t="data:image/png;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/449acc1f.bbccb8c0.js b/assets/js/449acc1f.bbccb8c0.js new file mode 100755 index 000000000..35994d0ea --- /dev/null +++ b/assets/js/449acc1f.bbccb8c0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1208],{90752:(A,e,r)=>{r.r(e),r.d(e,{assets:()=>t,contentTitle:()=>i,default:()=>l,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var a=r(17624),n=r(95788);const s={id:"franzininhoc0-arduino-primeiros-passos",title:"Primeiros passos com Arduino",slug:"/franzininho-c0/arduino-primeiros-passos",description:"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0"},i=void 0,o={id:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos",title:"Primeiros passos com Arduino",description:"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0",source:"@site/docs/franzininhoSTM32C0/exemplos-arduino/primeiros-passos.md",sourceDirName:"franzininhoSTM32C0/exemplos-arduino",slug:"/franzininho-c0/arduino-primeiros-passos",permalink:"/docs/franzininho-c0/arduino-primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-arduino/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"franzininhoc0-arduino-primeiros-passos",title:"Primeiros passos com Arduino",slug:"/franzininho-c0/arduino-primeiros-passos",description:"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0"},sidebar:"docs",previous:{title:"Arduino IDE TODO List",permalink:"/docs/franzininho-c0/arduino-todolist"},next:{title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",permalink:"/docs/franzininho-c0/arduino-identificacao-pinos"}},t={},d=[{value:"Grava\xe7\xe3o de Programas pela USB",id:"grava\xe7\xe3o-de-programas-pela-usb",level:2},{value:"Identifica\xe7\xe3o da Porta Serial",id:"identifica\xe7\xe3o-da-porta-serial",level:2},{value:"Windows",id:"windows",level:3},{value:"Linux",id:"linux",level:3}];function c(A){const e={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.MN)(),...A.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(e.p,{children:'Os passos a seguir mostram a instala\xe7\xe3o e configura\xe7\xe3o da IDE Arduino para usar a op\xe7\xe3o de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma op\xe7\xe3o de placa espec\xedfica para a Franzininho C0, eliminando a necessidade de algumas configura\xe7\xf5es e usando op\xe7\xf5es default mais adequadas para os pinos.'}),"\n",(0,a.jsxs)(e.ol,{children:["\n",(0,a.jsxs)(e.li,{children:["\n",(0,a.jsxs)(e.p,{children:["Instale a ",(0,a.jsx)(e.strong,{children:"IDE do Arduino"})," (se voc\xea n\xe3o tiver instalada) de ",(0,a.jsx)(e.a,{href:"https://www.arduino.cc/en/software",children:"https://www.arduino.cc/en/software"}),". As telas apresentadas foram capturadas com a vers\xe3o 2.2.1 para Windows."]}),"\n"]}),"\n",(0,a.jsxs)(e.li,{children:["\n",(0,a.jsxs)(e.p,{children:["Instale o ",(0,a.jsx)(e.strong,{children:"STM32CubeProgrammer"})," de ",(0,a.jsx)(e.a,{href:"https://www.st.com/en/development-tools/stm32cubeprog.html",children:"https://www.st.com/en/development-tools/stm32cubeprog.html"}),". Pode ser necess\xe1ro fazer um pequeno cadastro para baixar o instalador."]}),"\n"]}),"\n",(0,a.jsxs)(e.li,{children:["\n",(0,a.jsxs)(e.p,{children:["Execute a IDE do Arduino. Entre em ",(0,a.jsx)(e.strong,{children:"File"}),", ",(0,a.jsx)(e.strong,{children:"Preferences"}),", Additional Boards Manager URLs e acrescente ",(0,a.jsx)(e.code,{children:"https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json"}),":"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"Aditional Boards Manager URLs",src:r(12528).c+"",width:"797",height:"531"})}),"\n",(0,a.jsxs)(e.ol,{start:"4",children:["\n",(0,a.jsxs)(e.li,{children:["\n",(0,a.jsx)(e.p,{children:"Conecte a Franzininho C0 ao micro atrav\xe9s de um cabo USB. A placa ser\xe1 reconhecida como uma serial pelo sistema operacional."}),"\n"]}),"\n",(0,a.jsxs)(e.li,{children:["\n",(0,a.jsxs)(e.p,{children:['Selecione "Select other board and port..." no ',(0,a.jsx)(e.em,{children:"dropbox"})," na tarja superior da IDE."]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"Sele\xe7\xe3o da placa, parte 1",src:r(70876).c+"",width:"364",height:"246"})}),"\n",(0,a.jsxs)(e.ol,{start:"6",children:["\n",(0,a.jsxs)(e.li,{children:["Selecione a placa ",(0,a.jsx)(e.strong,{children:'"Generic STM32C0 series"'})," e a porta correspondente \xe0 placa (se tiver d\xfavida, veja adiante como identificar a serial)."]}),"\n"]}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"Sele\xe7\xe3o da placa, parte 2",src:r(80512).c+"",width:"696",height:"499"})}),"\n",(0,a.jsxs)(e.ol,{start:"7",children:["\n",(0,a.jsxs)(e.li,{children:["Use o menu ",(0,a.jsx)(e.strong,{children:"Tools"})," para acertar a configura\xe7\xe3o da placa:","\n",(0,a.jsxs)(e.ul,{children:["\n",(0,a.jsx)(e.li,{children:'Board part number: "Generic C011F6Px"'}),"\n",(0,a.jsx)(e.li,{children:'Upload method: "STM32CubeProgrammer (Serial)"'}),"\n",(0,a.jsx)(e.li,{children:"U(S)ART support: \"Enabled (generic 'Serial')\""}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"Configura\xe7\xe3o da placa",src:r(77568).c+"",width:"532",height:"521"})}),"\n",(0,a.jsx)(e.h2,{id:"grava\xe7\xe3o-de-programas-pela-usb",children:"Grava\xe7\xe3o de Programas pela USB"}),"\n",(0,a.jsx)(e.p,{children:"A configura\xe7\xe3o acima far\xe1 a carga de programas atrav\xe9s da USB. Para isto a placa precisa estar com o bootloader em execu\xe7\xe3o, o que \xe9 feito atrav\xe9s destes passos:"}),"\n",(0,a.jsxs)(e.ol,{children:["\n",(0,a.jsxs)(e.li,{children:["Aperte o bot\xe3o ",(0,a.jsx)(e.strong,{children:"BOOT"})," e o mantenha apertado"]}),"\n",(0,a.jsxs)(e.li,{children:["Aperte e solte o bot\xe3o ",(0,a.jsx)(e.strong,{children:"RST"})]}),"\n",(0,a.jsxs)(e.li,{children:["Solte o bot\xe3o ",(0,a.jsx)(e.strong,{children:"BOOT"})]}),"\n"]}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsxs)(e.em,{children:["A placa precisa estar executando o bootloader antes da IDE tentar carregar o programa, caso contr\xe1rio ser\xe1 apresentado um erro. O ideal \xe9 fazer o procedimento acima ",(0,a.jsx)(e.strong,{children:"antes"})," de apertar o bot\xe3o da IDE para compilar e carregar o programa."]})}),"\n",(0,a.jsx)(e.h2,{id:"identifica\xe7\xe3o-da-porta-serial",children:"Identifica\xe7\xe3o da Porta Serial"}),"\n",(0,a.jsx)(e.p,{children:"A Franzininho C0 utiliza um integrado CH340E para emular uma porta serial atrav\xe9s de uma conex\xe3o USB. As vers\xf5es mais recentes de Windows e Linux reconhecem esta serial sem a necessidade de instala\xe7\xe3o de um driver espec\xedfico."}),"\n",(0,a.jsx)(e.h3,{id:"windows",children:"Windows"}),"\n",(0,a.jsx)(e.p,{children:"O Windows associa um nome do tipo COMnn para os dispositivos seriais. De um modo geral, o Windows tenta usar sempre o mesmo nome para cada dispositivo (identificando o dispositivo pelo VendorID, ProductID e Serial Number informados pela USB)."}),"\n",(0,a.jsx)(e.p,{children:'O Gerenciador de Dispositivos mostra os dispositivos seriais embaixo de "Portas (COM e LPT)"'}),"\n",(0,a.jsx)(e.p,{children:(0,a.jsx)(e.img,{alt:"Portas Seriais no Windows",src:r(8736).c+"",width:"311",height:"114"})}),"\n",(0,a.jsx)(e.p,{children:'A Franzininho C0 se apresenta como "USB-SERIAL CH340". Na d\xfavida, desconecte a placa e verifique quem sai da lista. Na figura acima, a Franzininho C0 est\xe1 em COM24.'}),"\n",(0,a.jsx)(e.h3,{id:"linux",children:"Linux"}),"\n",(0,a.jsx)(e.p,{children:"TBD"}),"\n",(0,a.jsxs)(e.table,{children:[(0,a.jsx)(e.thead,{children:(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.th,{style:{textAlign:"left"},children:"Autor"}),(0,a.jsx)(e.th,{style:{textAlign:"left"},children:"Daniel Quadros"})]})}),(0,a.jsx)(e.tbody,{children:(0,a.jsxs)(e.tr,{children:[(0,a.jsx)(e.td,{style:{textAlign:"left"},children:"Data:"}),(0,a.jsx)(e.td,{style:{textAlign:"left"},children:"15/10/2023"})]})})]})]})}function l(A={}){const{wrapper:e}={...(0,n.MN)(),...A.components};return e?(0,a.jsx)(e,{...A,children:(0,a.jsx)(c,{...A})}):c(A)}},95788:(A,e,r)=>{r.d(e,{MN:()=>d});var a=r(11504);function n(A,e,r){return e in A?Object.defineProperty(A,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):A[e]=r,A}function s(A,e){var r=Object.keys(A);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(A);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(A,e).enumerable}))),r.push.apply(r,a)}return r}function i(A){for(var e=1;e=0||(n[r]=A[r]);return n}(A,e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(A);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(A,r)&&(n[r]=A[r])}return n}var t=a.createContext({}),d=function(A){var e=a.useContext(t),r=e;return A&&(r="function"==typeof A?A(e):i(i({},e),A)),r},c={inlineCode:"code",wrapper:function(A){var e=A.children;return a.createElement(a.Fragment,{},e)}},l=a.forwardRef((function(A,e){var r=A.components,n=A.mdxType,s=A.originalType,t=A.parentName,l=o(A,["components","mdxType","originalType","parentName"]),p=d(r),u=n,m=p["".concat(t,".").concat(u)]||p[u]||c[u]||s;return r?a.createElement(m,i(i({ref:e},l),{},{components:r})):a.createElement(m,i({ref:e},l))}));l.displayName="MDXCreateElement"},12528:(A,e,r)=>{r.d(e,{c:()=>a});const a=r.p+"assets/images/Arduino_BoardsManagerURLs-e9c0daf50910d122497173992f15453d.png"},77568:(A,e,r)=>{r.d(e,{c:()=>a});const a=r.p+"assets/images/Arduino_ConfigBoard-1f6098e22f84dc7e7e951ca126cbf3f2.png"},70876:(A,e,r)=>{r.d(e,{c:()=>a});const a="data:image/png;base64,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"},80512:(A,e,r)=>{r.d(e,{c:()=>a});const a=r.p+"assets/images/Arduino_SelectBoard_2-f9e271acb320f31ea713adf8a70205ca.png"},8736:(A,e,r)=>{r.d(e,{c:()=>a});const a="data:image/png;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/4552.cc3bd259.js b/assets/js/4552.cc3bd259.js new file mode 100755 index 000000000..a86b9d1ab --- /dev/null +++ b/assets/js/4552.cc3bd259.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4552],{96592:(e,t,n)=>{n.d(t,{c:()=>a});n(11504);var i=n(34064),o=n(84357),s=n(56448),r=n(17624);function a(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,i.c)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(s.c,{as:"h1",className:"hero__title",children:(0,r.jsx)(o.c,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.c,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.c,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},54552:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});n(11504);var i=n(84357),o=n(68900),s=n(99012),r=n(96592),a=n(17624);function c(){const e=(0,i.G)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.U7,{title:e}),(0,a.jsx)(s.c,{children:(0,a.jsx)(r.c,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/45a448cc.7df9342c.js b/assets/js/45a448cc.7df9342c.js deleted file mode 100755 index 6d713b069..000000000 --- a/assets/js/45a448cc.7df9342c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8442],{3905:(e,a,i)=>{i.d(a,{Zo:()=>u,kt:()=>f});var n=i(7294);function r(e,a,i){return a in e?Object.defineProperty(e,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[a]=i,e}function t(e,a){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),i.push.apply(i,n)}return i}function o(e){for(var a=1;a=0||(r[i]=e[i]);return r}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var s=n.createContext({}),d=function(e){var a=n.useContext(s),i=a;return e&&(i="function"==typeof e?e(a):o(o({},a),e)),i},u=function(e){var a=d(e.components);return n.createElement(s.Provider,{value:a},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},c=n.forwardRef((function(e,a){var i=e.components,r=e.mdxType,t=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=d(i),c=r,f=p["".concat(s,".").concat(c)]||p[c]||m[c]||t;return i?n.createElement(f,o(o({ref:a},u),{},{components:i})):n.createElement(f,o({ref:a},u))}));function f(e,a){var i=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var t=i.length,o=new Array(t);o[0]=c;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[p]="string"==typeof e?e:r,o[1]=l;for(var d=2;d{i.r(a),i.d(a,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var n=i(3117),r=(i(7294),i(3905));const t={id:"arduino-dht11",title:"Leitura DHT11",slug:"/franzininho-wifi/exemplos-arduino/dht11",description:"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;",author:"Fabio Souza"},o=void 0,l={unversionedId:"FranzininhoWifi/exemplos-arduino/arduino-dht11",id:"FranzininhoWifi/exemplos-arduino/arduino-dht11",title:"Leitura DHT11",description:"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;",source:"@site/docs/FranzininhoWifi/exemplos-arduino/dht11.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/dht11",permalink:"/docs/franzininho-wifi/exemplos-arduino/dht11",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/dht11.md",tags:[],version:"current",frontMatter:{id:"arduino-dht11",title:"Leitura DHT11",slug:"/franzininho-wifi/exemplos-arduino/dht11",description:"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;",author:"Fabio Souza"},sidebar:"docs",previous:{title:"Neopixel RGB LED Onboard",permalink:"/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard"},next:{title:"Primeiros Passos com MicroPython",permalink:"/docs/franzininho-wifi/exemplos-micropython/primeiros-passos"}},s={},d=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Resultado",id:"resultado",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],u={toc:d},p="wrapper";function m(e){let{components:a,...t}=e;return(0,r.kt)(p,(0,n.Z)({},u,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores no terminal serial."),(0,r.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,r.kt)("p",null,"Identifique os seguintes materiais necess\xe1rios para este projeto:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"1 Franzininho WiFi."),(0,r.kt)("li",{parentName:"ul"},"1 Sensor DHT11"),(0,r.kt)("li",{parentName:"ul"},"1 Resistor de 10k"),(0,r.kt)("li",{parentName:"ul"},"1 Protoboard."),(0,r.kt)("li",{parentName:"ul"},"Cabos de liga\xe7\xe3o.")),(0,r.kt)("h2",{id:"circuito"},"Circuito"),(0,r.kt)("p",null,"Realize a montagem do circuito da maneira indicada pela figura a seguir:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Circuito DHT11",src:i(6189).Z,width:"876",height:"1041"})),(0,r.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,r.kt)("p",null,"Para usar o sensor DHT com a Franzininho WiFi no Arduino, precisamos instalar uma bibloteca. Vamos usar a biblioteca mantida pela Adafruit."),(0,r.kt)("p",null,"Vamos instalar a biblioteca usando o gerenciador de biblitecas do Arduino. Acesso Ferramentas -> Gerenciar Bibliotecas. Procure por DHT e instale a bibloteca DHT sensor library da Adafruit:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Instala\xe7\xe3o da Biblioteca",src:i(3877).Z,width:"894",height:"514"})),(0,r.kt)("p",null,"Agora vamos fazer a leitura do sensor e imprimir os valores de temperatura e umidade no terminal serial."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},'/*************************************************************************************\n * Exemplo para leitura de sensor DHT11\n * \n * \n * Bibliotecas necessarias\n * DHT da Adafruit - Instalar pelo gerenciador de bibliotecas\n * \n * por: F\xe1bio Souza\n *************************************************************************************/\n\n#include "DHT.h"\n \n#define DHTPIN 2 \n#define DHTTYPE DHT11\n \nDHT dht(DHTPIN, DHTTYPE);\n\n\n/*********************************************************************************\n * Fun\xe7\xe3o Setup\n * Configura\xe7\xf5es iniciais da aplica\xe7\xe3o\n *********************************************************************************/\nvoid setup() \n{\nSerial.begin(19200);\nSerial.println("Teste de leitura do sensor DHT11");\ndht.begin();\n}\n\n/*********************************************************************************\n * Fun\xe7\xe3o loop\n *********************************************************************************/\nvoid loop() \n{\n\n float umidade = dht.readHumidity();\n float temperatura = dht.readTemperature();\n\n delay(500);\n \n\n // Se as vari\xe1veis temperatura e umidade n\xe3o forem valores v\xe1lidos, acusar\xe1 falha de leitura.\n if (isnan(temperatura) || isnan(umidade)) \n {\n Serial.println("Falha na leitura do dht11...");\n } \n else //se n\xe3o, exibir\xe1 os valores lidos \n {\n //Imprime os dados no monitor serial\n Serial.print("Umidade: ");\n Serial.print(umidade);\n Serial.print(" %\\t"); //tab\n Serial.print("Temperatura: ");\n Serial.print(temperatura);\n Serial.println(" \xb0C");\n }\n}\n')),(0,r.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},"An\xe1lise do c\xf3digo"),(0,r.kt)("p",null,"Na primeira parte do c\xf3digo adicionamo as bibliotecas a serem usadas na aplica\xe7\xe3o e a instancia do DHT11:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"#define DHTPIN 2 \n#define DHTTYPE DHT11\n \nDHT dht(DHTPIN, DHTTYPE);\n")),(0,r.kt)("p",null,"Na fun\xe7\xe3o ",(0,r.kt)("inlineCode",{parentName:"p"},"setup()")," fizemos a inicializa\xe7\xe3o do DHT11 e da comunica\xe7\xe3o Serial:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},'void setup() \n{\nSerial.begin(19200);\nSerial.println("Teste de leitura do sensor DHT11");\ndht.begin();\n}\n')),(0,r.kt)("p",null,"No ",(0,r.kt)("inlineCode",{parentName:"p"},"loop()")," infinito fazemos a leitura da temperatura e umidade a cada 500 ms e imprimimos na serial. Caso ocorra falha na leitura do DHT11 \xe9 exibido uma mensagem de erro:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},'void loop() \n{\n\n float umidade = dht.readHumidity();\n float temperatura = dht.readTemperature();\n\n delay(500);\n \n\n // Se as vari\xe1veis temperatura e umidade n\xe3o forem valores v\xe1lidos, acusar\xe1 falha de leitura.\n if (isnan(temperatura) || isnan(umidade)) \n {\n Serial.println("Falha na leitura do dht11...");\n } \n else //se n\xe3o, exibir\xe1 os valores lidos \n {\n //Imprime os dados no monitor serial\n Serial.print("Umidade: ");\n Serial.print(umidade);\n Serial.print(" %\\t"); //tab\n Serial.print("Temperatura: ");\n Serial.print(temperatura);\n Serial.println(" \xb0C");\n }\n}\n')),(0,r.kt)("h2",{id:"resultado"},"Resultado"),(0,r.kt)("p",null,"A figura a seguir exibe os valores lidos no monitor serial:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Terminal Serial",src:i(8586).Z,width:"1065",height:"536"})),(0,r.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,r.kt)("p",null,"O sensor DHT11( e similares) possibilita que fa\xe7amos leitura de temperatura e umidade de uma forma simples e eficiente. Atrav\xe9s de 1 fio de comunica\xe7\xe3o conseguimos fazer a leitura das duas grandezas. Como a comunica\xe7\xe3o \xe9 um pouco complexa, o uso de uma biblioteca facilita a comunica\xe7\xe3o com o dispositivo. A biblioteca mantida pela Adafruit \xe9 muito eficiente e est\xe1vel."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,r.kt)("a",{parentName:"p",href:"https://discord.gg/H5kENmWGaz"},"Discord"))),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Autor"),(0,r.kt)("th",{parentName:"tr",align:null},"F\xe1bio Souza"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data:"),(0,r.kt)("td",{parentName:"tr",align:null},"23/10/2021")))))}m.isMDXComponent=!0},6189:(e,a,i)=>{i.d(a,{Z:()=>n});const n=i.p+"assets/images/circuito-43a970745d9aaeec4fad97f720fd8811.png"},3877:(e,a,i)=>{i.d(a,{Z:()=>n});const n=i.p+"assets/images/dht-lib-09d2b21ecd6956960598384892b76762.png"},8586:(e,a,i)=>{i.d(a,{Z:()=>n});const n=i.p+"assets/images/valores-lidos-3a3d40d3f6f2a3488305949443f884a9.png"}}]); \ No newline at end of file diff --git a/assets/js/45a448cc.8c75c70f.js b/assets/js/45a448cc.8c75c70f.js new file mode 100755 index 000000000..7d3d848e0 --- /dev/null +++ b/assets/js/45a448cc.8c75c70f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1456],{48832:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>t,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var a=n(17624),r=n(95788);const o={id:"arduino-dht11",title:"Leitura DHT11",slug:"/franzininho-wifi/exemplos-arduino/dht11",description:"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;",author:"Fabio Souza"},t=void 0,s={id:"FranzininhoWifi/exemplos-arduino/arduino-dht11",title:"Leitura DHT11",description:"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;",source:"@site/docs/FranzininhoWifi/exemplos-arduino/dht11.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/dht11",permalink:"/docs/franzininho-wifi/exemplos-arduino/dht11",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/dht11.md",tags:[],version:"current",frontMatter:{id:"arduino-dht11",title:"Leitura DHT11",slug:"/franzininho-wifi/exemplos-arduino/dht11",description:"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;",author:"Fabio Souza"},sidebar:"docs",previous:{title:"Neopixel RGB LED Onboard",permalink:"/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard"},next:{title:"Primeiros Passos com MicroPython",permalink:"/docs/franzininho-wifi/exemplos-micropython/primeiros-passos"}},d={},l=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Resultado",id:"resultado",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function c(e){const i={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.p,{children:"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores no terminal serial."}),"\n",(0,a.jsx)(i.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,a.jsx)(i.p,{children:"Identifique os seguintes materiais necess\xe1rios para este projeto:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"1 Franzininho WiFi."}),"\n",(0,a.jsx)(i.li,{children:"1 Sensor DHT11"}),"\n",(0,a.jsx)(i.li,{children:"1 Resistor de 10k"}),"\n",(0,a.jsx)(i.li,{children:"1 Protoboard."}),"\n",(0,a.jsx)(i.li,{children:"Cabos de liga\xe7\xe3o."}),"\n"]}),"\n",(0,a.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,a.jsx)(i.p,{children:"Realize a montagem do circuito da maneira indicada pela figura a seguir:"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"Circuito DHT11",src:n(31748).c+"",width:"876",height:"1041"})}),"\n",(0,a.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,a.jsx)(i.p,{children:"Para usar o sensor DHT com a Franzininho WiFi no Arduino, precisamos instalar uma bibloteca. Vamos usar a biblioteca mantida pela Adafruit."}),"\n",(0,a.jsx)(i.p,{children:"Vamos instalar a biblioteca usando o gerenciador de biblitecas do Arduino. Acesso Ferramentas -> Gerenciar Bibliotecas. Procure por DHT e instale a bibloteca DHT sensor library da Adafruit:"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"Instala\xe7\xe3o da Biblioteca",src:n(27976).c+"",width:"894",height:"514"})}),"\n",(0,a.jsx)(i.p,{children:"Agora vamos fazer a leitura do sensor e imprimir os valores de temperatura e umidade no terminal serial."}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-cpp",children:'/*************************************************************************************\n * Exemplo para leitura de sensor DHT11\n * \n * \n * Bibliotecas necessarias\n * DHT da Adafruit - Instalar pelo gerenciador de bibliotecas\n * \n * por: F\xe1bio Souza\n *************************************************************************************/\n\n#include "DHT.h"\n \n#define DHTPIN 2 \n#define DHTTYPE DHT11\n \nDHT dht(DHTPIN, DHTTYPE);\n\n\n/*********************************************************************************\n * Fun\xe7\xe3o Setup\n * Configura\xe7\xf5es iniciais da aplica\xe7\xe3o\n *********************************************************************************/\nvoid setup() \n{\nSerial.begin(19200);\nSerial.println("Teste de leitura do sensor DHT11");\ndht.begin();\n}\n\n/*********************************************************************************\n * Fun\xe7\xe3o loop\n *********************************************************************************/\nvoid loop() \n{\n\n float umidade = dht.readHumidity();\n float temperatura = dht.readTemperature();\n\n delay(500);\n \n\n // Se as vari\xe1veis temperatura e umidade n\xe3o forem valores v\xe1lidos, acusar\xe1 falha de leitura.\n if (isnan(temperatura) || isnan(umidade)) \n {\n Serial.println("Falha na leitura do dht11...");\n } \n else //se n\xe3o, exibir\xe1 os valores lidos \n {\n //Imprime os dados no monitor serial\n Serial.print("Umidade: ");\n Serial.print(umidade);\n Serial.print(" %\\t"); //tab\n Serial.print("Temperatura: ");\n Serial.print(temperatura);\n Serial.println(" \xb0C");\n }\n}\n'})}),"\n",(0,a.jsx)(i.h2,{id:"an\xe1lise-do-c\xf3digo",children:"An\xe1lise do c\xf3digo"}),"\n",(0,a.jsx)(i.p,{children:"Na primeira parte do c\xf3digo adicionamo as bibliotecas a serem usadas na aplica\xe7\xe3o e a instancia do DHT11:"}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-cpp",children:"#define DHTPIN 2 \n#define DHTTYPE DHT11\n \nDHT dht(DHTPIN, DHTTYPE);\n"})}),"\n",(0,a.jsxs)(i.p,{children:["Na fun\xe7\xe3o ",(0,a.jsx)(i.code,{children:"setup()"})," fizemos a inicializa\xe7\xe3o do DHT11 e da comunica\xe7\xe3o Serial:"]}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-cpp",children:'void setup() \n{\nSerial.begin(19200);\nSerial.println("Teste de leitura do sensor DHT11");\ndht.begin();\n}\n'})}),"\n",(0,a.jsxs)(i.p,{children:["No ",(0,a.jsx)(i.code,{children:"loop()"})," infinito fazemos a leitura da temperatura e umidade a cada 500 ms e imprimimos na serial. Caso ocorra falha na leitura do DHT11 \xe9 exibido uma mensagem de erro:"]}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-cpp",children:'void loop() \n{\n\n float umidade = dht.readHumidity();\n float temperatura = dht.readTemperature();\n\n delay(500);\n \n\n // Se as vari\xe1veis temperatura e umidade n\xe3o forem valores v\xe1lidos, acusar\xe1 falha de leitura.\n if (isnan(temperatura) || isnan(umidade)) \n {\n Serial.println("Falha na leitura do dht11...");\n } \n else //se n\xe3o, exibir\xe1 os valores lidos \n {\n //Imprime os dados no monitor serial\n Serial.print("Umidade: ");\n Serial.print(umidade);\n Serial.print(" %\\t"); //tab\n Serial.print("Temperatura: ");\n Serial.print(temperatura);\n Serial.println(" \xb0C");\n }\n}\n'})}),"\n",(0,a.jsx)(i.h2,{id:"resultado",children:"Resultado"}),"\n",(0,a.jsx)(i.p,{children:"A figura a seguir exibe os valores lidos no monitor serial:"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"Terminal Serial",src:n(47077).c+"",width:"1065",height:"536"})}),"\n",(0,a.jsx)(i.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,a.jsx)(i.p,{children:"O sensor DHT11( e similares) possibilita que fa\xe7amos leitura de temperatura e umidade de uma forma simples e eficiente. Atrav\xe9s de 1 fio de comunica\xe7\xe3o conseguimos fazer a leitura das duas grandezas. Como a comunica\xe7\xe3o \xe9 um pouco complexa, o uso de uma biblioteca facilita a comunica\xe7\xe3o com o dispositivo. A biblioteca mantida pela Adafruit \xe9 muito eficiente e est\xe1vel."}),"\n",(0,a.jsx)(i.admonition,{type:"info",children:(0,a.jsxs)(i.p,{children:["Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,a.jsx)(i.a,{href:"https://discord.gg/H5kENmWGaz",children:"Discord"})]})}),"\n",(0,a.jsxs)(i.table,{children:[(0,a.jsx)(i.thead,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.th,{children:"Autor"}),(0,a.jsx)(i.th,{children:"F\xe1bio Souza"})]})}),(0,a.jsx)(i.tbody,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:"Data:"}),(0,a.jsx)(i.td,{children:"23/10/2021"})]})})]})]})}function u(e={}){const{wrapper:i}={...(0,r.MN)(),...e.components};return i?(0,a.jsx)(i,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},95788:(e,i,n)=>{n.d(i,{MN:()=>l});var a=n(11504);function r(e,i,n){return i in e?Object.defineProperty(e,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[i]=n,e}function o(e,i){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);i&&(a=a.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),n.push.apply(n,a)}return n}function t(e){for(var i=1;i=0||(r[n]=e[n]);return r}(e,i);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var d=a.createContext({}),l=function(e){var i=a.useContext(d),n=i;return e&&(n="function"==typeof e?e(i):t(t({},i),e)),n},c={inlineCode:"code",wrapper:function(e){var i=e.children;return a.createElement(a.Fragment,{},i)}},u=a.forwardRef((function(e,i){var n=e.components,r=e.mdxType,o=e.originalType,d=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(n),m=r,h=p["".concat(d,".").concat(m)]||p[m]||c[m]||o;return n?a.createElement(h,t(t({ref:i},u),{},{components:n})):a.createElement(h,t({ref:i},u))}));u.displayName="MDXCreateElement"},31748:(e,i,n)=>{n.d(i,{c:()=>a});const a=n.p+"assets/images/circuito-43a970745d9aaeec4fad97f720fd8811.png"},27976:(e,i,n)=>{n.d(i,{c:()=>a});const a=n.p+"assets/images/dht-lib-09d2b21ecd6956960598384892b76762.png"},47077:(e,i,n)=>{n.d(i,{c:()=>a});const a=n.p+"assets/images/valores-lidos-3a3d40d3f6f2a3488305949443f884a9.png"}}]); \ No newline at end of file diff --git a/assets/js/4972.54ab1ffc.js b/assets/js/4972.54ab1ffc.js deleted file mode 100755 index d79d53ea2..000000000 --- a/assets/js/4972.54ab1ffc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4972],{4972:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(7294),l=n(5999),o=n(1944),r=n(7961);function i(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/4c503f6c.83dadac7.js b/assets/js/4c503f6c.83dadac7.js new file mode 100755 index 000000000..d9f1c0b77 --- /dev/null +++ b/assets/js/4c503f6c.83dadac7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6472],{20188:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>t,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>d,toc:()=>l});var a=i(17624),o=i(95788);const r={id:"entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-diy/entradas-saidas-digitais",description:"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY"},s=void 0,d={id:"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",description:"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/entradas-saidas-digitais",permalink:"/docs/franzininho-diy/entradas-saidas-digitais",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais.md",tags:[],version:"current",frontMatter:{id:"entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-diy/entradas-saidas-digitais",description:"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY"},sidebar:"docs",previous:{title:"Configura\xe7\xe3o da Arduino IDE",permalink:"/docs/franzininho-diy/pacote"},next:{title:"Entradas Anal\xf3gicas",permalink:"/docs/franzininho-diy/entradas-analogicas"}},t={},l=[{value:"Configura\xe7\xe3o do modo de funcionamento do pino",id:"configura\xe7\xe3o-do-modo-de-funcionamento-do-pino",level:2},{value:"Sintaxe:",id:"sintaxe",level:3},{value:"Par\xe2metros:",id:"par\xe2metros",level:3},{value:"Exemplo de uso",id:"exemplo-de-uso",level:3},{value:"Escrita em um pino digital",id:"escrita-em-um-pino-digital",level:2},{value:"Sintaxe",id:"sintaxe-1",level:3},{value:"Par\xe2metros",id:"par\xe2metros-1",level:3},{value:"Exemplo de uso",id:"exemplo-de-uso-1",level:3},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:3},{value:"Leitura de um pino digital",id:"leitura-de-um-pino-digital",level:2},{value:"Sintaxe",id:"sintaxe-2",level:3},{value:"Par\xe2metros:",id:"par\xe2metros-2",level:3},{value:"Retorno",id:"retorno",level:3},{value:"Exemplo de uso",id:"exemplo-de-uso-2",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o-1",level:3}];function c(e){const n={admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(n.p,{children:["Na Franzininho DIY temos ",(0,a.jsx)(n.strong,{children:"6 pinos"})," que podem ser usados como entradas ou sa\xeddas digitais( P0 a P5), conforme pinout:"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Pinagem Franzininho DIY",src:i(4428).c+"",width:"1209",height:"869"})}),"\n",(0,a.jsx)(n.admonition,{type:"warning",children:(0,a.jsx)(n.p,{children:"Verificar limita\xe7\xf5es de uso dos pinos"})}),"\n",(0,a.jsx)(n.h2,{id:"configura\xe7\xe3o-do-modo-de-funcionamento-do-pino",children:"Configura\xe7\xe3o do modo de funcionamento do pino"}),"\n",(0,a.jsx)(n.p,{children:"Os pinos do ATtiny85 podem ser configurados como entradas ou sa\xeddas, al\xe9m de outras fun\xe7\xf5es. Para configura\xe7\xe3o como entrada ou sa\xedda digital vamos usar a seguinte fun\xe7\xe3o:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"pinMode()"})}),"\n",(0,a.jsx)(n.p,{children:"Configura um pino espec\xedfico para ser entrada ou sa\xedda digital."}),"\n",(0,a.jsx)(n.h3,{id:"sintaxe",children:"Sintaxe:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"pinMode(pino, modo);"})}),"\n",(0,a.jsx)(n.h3,{id:"par\xe2metros",children:"Par\xe2metros:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"pino:"})," corresponde ao pino que voc\xea ir\xe1 usar, no caso da Franzininho podemos usar pinos de 0 a 5."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"modo:"})," deve-se colocar o modo no qual se deseja configurar o pino:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"INPUT = Entrada: Esse pino receber\xe1 sinais vindos de um circuito externo"}),"\n",(0,a.jsx)(n.li,{children:"OUTPUT = Sa\xedda: Esse pino enviar\xe1 sinais para ativar um circuito externo"}),"\n",(0,a.jsx)(n.li,{children:"INPUT_PULLUP = Entrada digital com resistor de pull-up (ligado ao VCC) interno habilitado"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"exemplo-de-uso",children:"Exemplo de uso"}),"\n",(0,a.jsx)(n.p,{children:"Vamos configurar o pino P0 para leitura de uma tecla, portanto ser\xe1 uma entrada digital. Tamb\xe9m vamos configurar o pino P1 para acionamento do LED, ou seja, uma sa\xedda digital:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cpp",children:"int tecla = 0; //pino da tecla\nint LED = 1; //pino do LED\n\nvoid setup() {\n pinMode(tecla, INPUT); //configura pino da tecla como entrada\n pinMode(LED, OUTPUT); //configura pino do LED como sa\xedda\n}\n\nvoid loop() {\n\n\n}\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Geralmente as configura\xe7\xf5es s\xe3o realizadas dentro da fun\xe7\xe3o ",(0,a.jsx)(n.code,{children:"setup()"}),". Na fun\xe7\xe3o ",(0,a.jsx)(n.code,{children:"loop()"})," s\xe3o realizadas as tarefas durante o funcionamento da placa, como veremos mais \xe0 frente."]}),"\n",(0,a.jsx)(n.h2,{id:"escrita-em-um-pino-digital",children:"Escrita em um pino digital"}),"\n",(0,a.jsx)(n.p,{children:"Os pinos digitais configurados como sa\xeddas digitais podem assumir dois valores, conforme a escrita no c\xf3digo. Os valores podem ser HIGH ou LOW, que se traduzem em 5V ou 0V no pino da Franzininho. Para escrita digital vamos usar a seguinte fun\xe7\xe3o:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"digitalWrite()"})}),"\n",(0,a.jsx)(n.p,{children:"Coloca um n\xedvel l\xf3gico alto (HIGH, 5V) ou baixo (LOW, 0V) em um pino configurado como sa\xedda digital."}),"\n",(0,a.jsx)(n.h3,{id:"sintaxe-1",children:"Sintaxe"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"digitalWrite(pino, valor)"})}),"\n",(0,a.jsx)(n.h3,{id:"par\xe2metros-1",children:"Par\xe2metros"}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.strong,{children:"pino:"})," N\xfamero correspondente ao pino."]}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.strong,{children:"valor:"})," HIGH ou LOW."]}),"\n",(0,a.jsx)(n.h3,{id:"exemplo-de-uso-1",children:"Exemplo de uso"}),"\n",(0,a.jsx)(n.p,{children:"Inverte o estado do LED (P1) em intervalos de 1 segundo:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cpp",children:"const int LED = 1; //pino digital conectado ao LED\n\nvoid setup(){\n pinMode(LED,OUTPUT); //pino digital de sa\xedda\n}\n\nvoid loop(){\n digitalWrite(LED,HIGH); //acende o led da placa\n delay(1000); //aguarda um segundo\n digitalWrite(LED,LOW); //apaga o led da placa\n delay(1000); //aguarda um segundo\n}\n"})}),"\n",(0,a.jsx)(n.h3,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,a.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310738934055305794?view=diagram"}),"\n",(0,a.jsxs)(n.p,{children:["A fun\xe7\xe3o ",(0,a.jsx)(n.code,{children:"delay(ms)"})," espera um tempo em milissegundos. No caso do exemplo acima, 1000 ms = 1 segundo;"]}),"\n",(0,a.jsx)(n.h2,{id:"leitura-de-um-pino-digital",children:"Leitura de um pino digital"}),"\n",(0,a.jsx)(n.p,{children:"Um pino digital pode assumir dois valores, HIGH e LOW, conforme o n\xedvel de tens\xe3o presente no mesmo: 5V ou 0V. Podemos usar o pino configurado como entrada digital para ler estados de sensores, que por sua vez representam estados de situa\xe7\xf5es, por exemplo:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"bot\xe3o solto ou pressionado;"}),"\n",(0,a.jsx)(n.li,{children:"porta aberta ou fechada"}),"\n",(0,a.jsx)(n.li,{children:"presen\xe7a de objeto ou n\xe3o presen\xe7a de objeto"}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"Para leitura de uma entrada digital usamos a seguinte fun\xe7\xe3o:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"digitalRead()"})}),"\n",(0,a.jsx)(n.p,{children:"L\xea o valor presente em um pino digital. Este valor pode ser HIGH ou LOW."}),"\n",(0,a.jsx)(n.h3,{id:"sintaxe-2",children:"Sintaxe"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"digitalRead(pino);"})}),"\n",(0,a.jsx)(n.h3,{id:"par\xe2metros-2",children:"Par\xe2metros:"}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.strong,{children:"pino:"})," n\xfamero do pino que se deseja ler."]}),"\n",(0,a.jsx)(n.h3,{id:"retorno",children:"Retorno"}),"\n",(0,a.jsx)(n.p,{children:"HIGH ou LOW."}),"\n",(0,a.jsx)(n.h3,{id:"exemplo-de-uso-2",children:"Exemplo de uso"}),"\n",(0,a.jsx)(n.p,{children:"Vamos ler o estado da tecla ligada ao pino P2 e acionar o LED ligado a pino P1 conforme o seu estado:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Circuito",src:i(41664).c+"",width:"1563",height:"702"})}),"\n",(0,a.jsx)(n.h3,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cpp",children:"const int LED = 1; //pino para o LED\nconst int BOTAO = 2; //pino para o bot\xe3o\n\nint val = 0; // val ser\xe1 utilizado para armazenar o estado do pino\n\nvoid setup(){\n pinMode(LED,OUTPUT); //o LED \xe9 uma sa\xedda\n pinMode(BOTAO,INPUT); //o BOTAO \xe9 uma entrada\n}\n\nvoid loop (){\n val = digitalRead(BOTAO); // l\xea e armazena o valor de entrada\n digitalWrite(LED, val); //aciona LED conforme valor lido do bot\xe3o\n}\n"})}),"\n",(0,a.jsx)(n.h3,{id:"simula\xe7\xe3o-1",children:"Simula\xe7\xe3o"}),"\n",(0,a.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310739108383162946?view=diagram"})]})}function p(e={}){const{wrapper:n}={...(0,o.MN)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},95788:(e,n,i)=>{i.d(n,{MN:()=>l});var a=i(11504);function o(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function r(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,a)}return i}function s(e){for(var n=1;n=0||(o[i]=e[i]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(o[i]=e[i])}return o}var t=a.createContext({}),l=function(e){var n=a.useContext(t),i=n;return e&&(i="function"==typeof e?e(n):s(s({},n),e)),i},c={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},p=a.forwardRef((function(e,n){var i=e.components,o=e.mdxType,r=e.originalType,t=e.parentName,p=d(e,["components","mdxType","originalType","parentName"]),u=l(i),m=o,h=u["".concat(t,".").concat(m)]||u[m]||c[m]||r;return i?a.createElement(h,s(s({ref:n},p),{},{components:i})):a.createElement(h,s({ref:n},p))}));p.displayName="MDXCreateElement"},41664:(e,n,i)=>{i.d(n,{c:()=>a});const a=i.p+"assets/images/circuito-13e542231a501db4a7e2f774eee017e5.png"},4428:(e,n,i)=>{i.d(n,{c:()=>a});const a=i.p+"assets/images/pinagem-V2-7047a8d5930175670acc131497791fcc.png"}}]); \ No newline at end of file diff --git a/assets/js/4c503f6c.aeeda656.js b/assets/js/4c503f6c.aeeda656.js deleted file mode 100755 index 00cd3e9f0..000000000 --- a/assets/js/4c503f6c.aeeda656.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2536],{3905:(e,a,o)=>{o.d(a,{Zo:()=>p,kt:()=>g});var n=o(7294);function i(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function t(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var a=1;a=0||(i[o]=e[o]);return i}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var s=n.createContext({}),l=function(e){var a=n.useContext(s),o=a;return e&&(o="function"==typeof e?e(a):r(r({},a),e)),o},p=function(e){var a=l(e.components);return n.createElement(s.Provider,{value:a},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},c=n.forwardRef((function(e,a){var o=e.components,i=e.mdxType,t=e.originalType,s=e.parentName,p=d(e,["components","mdxType","originalType","parentName"]),u=l(o),c=i,g=u["".concat(s,".").concat(c)]||u[c]||m[c]||t;return o?n.createElement(g,r(r({ref:a},p),{},{components:o})):n.createElement(g,r({ref:a},p))}));function g(e,a){var o=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var t=o.length,r=new Array(t);r[0]=c;var d={};for(var s in a)hasOwnProperty.call(a,s)&&(d[s]=a[s]);d.originalType=e,d[u]="string"==typeof e?e:i,r[1]=d;for(var l=2;l{o.r(a),o.d(a,{assets:()=>s,contentTitle:()=>r,default:()=>m,frontMatter:()=>t,metadata:()=>d,toc:()=>l});var n=o(3117),i=(o(7294),o(3905));const t={id:"entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-diy/entradas-saidas-digitais",description:"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY"},r=void 0,d={unversionedId:"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais",id:"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",description:"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/entradas-saidas-digitais",permalink:"/docs/franzininho-diy/entradas-saidas-digitais",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais.md",tags:[],version:"current",frontMatter:{id:"entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-diy/entradas-saidas-digitais",description:"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY"},sidebar:"docs",previous:{title:"Configura\xe7\xe3o da Arduino IDE",permalink:"/docs/franzininho-diy/pacote"},next:{title:"Entradas Anal\xf3gicas",permalink:"/docs/franzininho-diy/entradas-analogicas"}},s={},l=[{value:"Configura\xe7\xe3o do modo de funcionamento do pino",id:"configura\xe7\xe3o-do-modo-de-funcionamento-do-pino",level:2},{value:"Sintaxe:",id:"sintaxe",level:3},{value:"Par\xe2metros:",id:"par\xe2metros",level:3},{value:"Exemplo de uso",id:"exemplo-de-uso",level:3},{value:"Escrita em um pino digital",id:"escrita-em-um-pino-digital",level:2},{value:"Sintaxe",id:"sintaxe-1",level:3},{value:"Par\xe2metros",id:"par\xe2metros-1",level:3},{value:"Exemplo de uso",id:"exemplo-de-uso-1",level:3},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:3},{value:"Leitura de um pino digital",id:"leitura-de-um-pino-digital",level:2},{value:"Sintaxe",id:"sintaxe-2",level:3},{value:"Par\xe2metros:",id:"par\xe2metros-2",level:3},{value:"Retorno",id:"retorno",level:3},{value:"Exemplo de uso",id:"exemplo-de-uso-2",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o-1",level:3}],p={toc:l},u="wrapper";function m(e){let{components:a,...t}=e;return(0,i.kt)(u,(0,n.Z)({},p,t,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Na Franzininho DIY temos ",(0,i.kt)("strong",{parentName:"p"},"6 pinos")," que podem ser usados como entradas ou sa\xeddas digitais","("," P0 a P5",")",", conforme pinout:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Pinagem Franzininho DIY",src:o(4648).Z,width:"1209",height:"869"})),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"Verificar limita\xe7\xf5es de uso dos pinos")),(0,i.kt)("h2",{id:"configura\xe7\xe3o-do-modo-de-funcionamento-do-pino"},"Configura\xe7\xe3o do modo de funcionamento do pino"),(0,i.kt)("p",null,"Os pinos do ATtiny85 podem ser configurados como entradas ou sa\xeddas, al\xe9m de outras fun\xe7\xf5es. Para configura\xe7\xe3o como entrada ou sa\xedda digital vamos usar a seguinte fun\xe7\xe3o:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"pinMode()")),(0,i.kt)("p",null,"Configura um pino espec\xedfico para ser entrada ou sa\xedda digital."),(0,i.kt)("h3",{id:"sintaxe"},"Sintaxe:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"pinMode(pino, modo);")),(0,i.kt)("h3",{id:"par\xe2metros"},"Par\xe2metros:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"pino:")," corresponde ao pino que voc\xea ir\xe1 usar, no caso da Franzininho podemos usar pinos de 0 a 5."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"modo:")," deve-se colocar o modo no qual se deseja configurar o pino:",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"INPUT = Entrada: Esse pino receber\xe1 sinais vindos de um circuito externo"),(0,i.kt)("li",{parentName:"ul"},"OUTPUT = Sa\xedda: Esse pino enviar\xe1 sinais para ativar um circuito externo"),(0,i.kt)("li",{parentName:"ul"},"INPUT","_","PULLUP = Entrada digital com resistor de pull-up ","(","ligado ao VCC",")"," interno habilitado")))),(0,i.kt)("h3",{id:"exemplo-de-uso"},"Exemplo de uso"),(0,i.kt)("p",null,"Vamos configurar o pino P0 para leitura de uma tecla, portanto ser\xe1 uma entrada digital. Tamb\xe9m vamos configurar o pino P1 para acionamento do LED, ou seja, uma sa\xedda digital:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"int tecla = 0; //pino da tecla\nint LED = 1; //pino do LED\n\nvoid setup() {\n pinMode(tecla, INPUT); //configura pino da tecla como entrada\n pinMode(LED, OUTPUT); //configura pino do LED como sa\xedda\n}\n\nvoid loop() {\n\n\n}\n")),(0,i.kt)("p",null,"Geralmente as configura\xe7\xf5es s\xe3o realizadas dentro da fun\xe7\xe3o ",(0,i.kt)("inlineCode",{parentName:"p"},"setup()"),". Na fun\xe7\xe3o ",(0,i.kt)("inlineCode",{parentName:"p"},"loop()")," s\xe3o realizadas as tarefas durante o funcionamento da placa, como veremos mais \xe0 frente."),(0,i.kt)("h2",{id:"escrita-em-um-pino-digital"},"Escrita em um pino digital"),(0,i.kt)("p",null,"Os pinos digitais configurados como sa\xeddas digitais podem assumir dois valores, conforme a escrita no c\xf3digo. Os valores podem ser HIGH ou LOW, que se traduzem em 5V ou 0V no pino da Franzininho. Para escrita digital vamos usar a seguinte fun\xe7\xe3o:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"digitalWrite()")),(0,i.kt)("p",null,"Coloca um n\xedvel l\xf3gico alto ","(","HIGH, 5V",")"," ou baixo ","(","LOW, 0V",")"," em um pino configurado como sa\xedda digital."),(0,i.kt)("h3",{id:"sintaxe-1"},"Sintaxe"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"digitalWrite(pino, valor)")),(0,i.kt)("h3",{id:"par\xe2metros-1"},"Par\xe2metros"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"pino:")," N\xfamero correspondente ao pino."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"valor:")," HIGH ou LOW."),(0,i.kt)("h3",{id:"exemplo-de-uso-1"},"Exemplo de uso"),(0,i.kt)("p",null,"Inverte o estado do LED ","(","P1",")"," em intervalos de 1 segundo:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"const int LED = 1; //pino digital conectado ao LED\n\nvoid setup(){\n pinMode(LED,OUTPUT); //pino digital de sa\xedda\n}\n\nvoid loop(){\n digitalWrite(LED,HIGH); //acende o led da placa\n delay(1000); //aguarda um segundo\n digitalWrite(LED,LOW); //apaga o led da placa\n delay(1000); //aguarda um segundo\n}\n")),(0,i.kt)("h3",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,i.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310738934055305794?view=diagram"}),(0,i.kt)("p",null,"A fun\xe7\xe3o ",(0,i.kt)("inlineCode",{parentName:"p"},"delay(ms)")," espera um tempo em milissegundos. No caso do exemplo acima, 1000 ms = 1 segundo;"),(0,i.kt)("h2",{id:"leitura-de-um-pino-digital"},"Leitura de um pino digital"),(0,i.kt)("p",null,"Um pino digital pode assumir dois valores, HIGH e LOW, conforme o n\xedvel de tens\xe3o presente no mesmo: 5V ou 0V. Podemos usar o pino configurado como entrada digital para ler estados de sensores, que por sua vez representam estados de situa\xe7\xf5es, por exemplo:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"bot\xe3o solto ou pressionado;"),(0,i.kt)("li",{parentName:"ul"},"porta aberta ou fechada"),(0,i.kt)("li",{parentName:"ul"},"presen\xe7a de objeto ou n\xe3o presen\xe7a de objeto")),(0,i.kt)("p",null,"Para leitura de uma entrada digital usamos a seguinte fun\xe7\xe3o:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"digitalRead()")),(0,i.kt)("p",null,"L\xea o valor presente em um pino digital. Este valor pode ser HIGH ou LOW."),(0,i.kt)("h3",{id:"sintaxe-2"},"Sintaxe"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"digitalRead(pino);")),(0,i.kt)("h3",{id:"par\xe2metros-2"},"Par\xe2metros:"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"pino:")," n\xfamero do pino que se deseja ler."),(0,i.kt)("h3",{id:"retorno"},"Retorno"),(0,i.kt)("p",null,"HIGH ou LOW."),(0,i.kt)("h3",{id:"exemplo-de-uso-2"},"Exemplo de uso"),(0,i.kt)("p",null,"Vamos ler o estado da tecla ligada ao pino P2 e acionar o LED ligado a pino P1 conforme o seu estado:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Circuito",src:o(7750).Z,width:"1563",height:"702"})),(0,i.kt)("h3",{id:"c\xf3digo"},"C\xf3digo"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"const int LED = 1; //pino para o LED\nconst int BOTAO = 2; //pino para o bot\xe3o\n\nint val = 0; // val ser\xe1 utilizado para armazenar o estado do pino\n\nvoid setup(){\n pinMode(LED,OUTPUT); //o LED \xe9 uma sa\xedda\n pinMode(BOTAO,INPUT); //o BOTAO \xe9 uma entrada\n}\n\nvoid loop (){\n val = digitalRead(BOTAO); // l\xea e armazena o valor de entrada\n digitalWrite(LED, val); //aciona LED conforme valor lido do bot\xe3o\n}\n")),(0,i.kt)("h3",{id:"simula\xe7\xe3o-1"},"Simula\xe7\xe3o"),(0,i.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310739108383162946?view=diagram"}))}m.isMDXComponent=!0},7750:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/circuito-13e542231a501db4a7e2f774eee017e5.png"},4648:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/pinagem-V2-7047a8d5930175670acc131497791fcc.png"}}]); \ No newline at end of file diff --git a/assets/js/4c9e35b1.114711f0.js b/assets/js/4c9e35b1.114711f0.js new file mode 100755 index 000000000..31379a2c3 --- /dev/null +++ b/assets/js/4c9e35b1.114711f0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2512],{60632:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/hola","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/4c9e35b1.fde05e88.js b/assets/js/4c9e35b1.fde05e88.js deleted file mode 100755 index 1f1e29650..000000000 --- a/assets/js/4c9e35b1.fde05e88.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9035],{499:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/hola","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/4cb2f106.752b1570.js b/assets/js/4cb2f106.752b1570.js deleted file mode 100755 index 35f96e822..000000000 --- a/assets/js/4cb2f106.752b1570.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1829],{3905:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>f});var o=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var c=o.createContext({}),p=function(e){var n=o.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},l=function(e){var n=p(e.components);return o.createElement(c.Provider,{value:n},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},d=o.forwardRef((function(e,n){var t=e.components,a=e.mdxType,r=e.originalType,c=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=p(t),d=a,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||r;return t?o.createElement(f,i(i({ref:n},l),{},{components:t})):o.createElement(f,i({ref:n},l))}));function f(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var r=t.length,i=new Array(r);i[0]=d;var s={};for(var c in n)hasOwnProperty.call(n,c)&&(s[c]=n[c]);s.originalType=e,s[u]="string"==typeof e?e:a,i[1]=s;for(var p=2;p{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var o=t(3117),a=(t(7294),t(3905));const r={id:"config-franzininho-c0-stm32cubeide",title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",slug:"/franzininho-c0/config-franzininho-c0-stm32cubeide",description:"7 passos para voc\xea configurar um novo projeto para a Franzininho C0"},i=void 0,s={unversionedId:"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide",id:"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide",title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",description:"7 passos para voc\xea configurar um novo projeto para a Franzininho C0",source:"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/configurando-projeto-stmcubeide.md",sourceDirName:"franzininhoSTM32C0/exemplos-stm32cube-IDE",slug:"/franzininho-c0/config-franzininho-c0-stm32cubeide",permalink:"/docs/franzininho-c0/config-franzininho-c0-stm32cubeide",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/configurando-projeto-stmcubeide.md",tags:[],version:"current",frontMatter:{id:"config-franzininho-c0-stm32cubeide",title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",slug:"/franzininho-c0/config-franzininho-c0-stm32cubeide",description:"7 passos para voc\xea configurar um novo projeto para a Franzininho C0"},sidebar:"docs",previous:{title:"STM32Cube IDE TODO List",permalink:"/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist"},next:{title:"Arduino IDE TODO List",permalink:"/docs/franzininho-c0/arduino-todolist"}},c={},p=[],l={toc:p},u="wrapper";function m(e){let{components:n,...r}=e;return(0,a.kt)(u,(0,o.Z)({},l,r,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Confira abaixo os passos para voc\xea configurar um novo projeto para a Franzininho C0 para o STM32CubeIDE:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Clonar o reposit\xf3rio (",(0,a.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide.git"},"https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide.git"),") em uma pasta local e chegar at\xe9 o caminho que cont\xe9m os exemplos:")),(0,a.kt)("p",null,(0,a.kt)("img",{src:t(77).Z,width:"1004",height:"892"})),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},'Iniciar o STM32CubeIDE e selecionar a pasta do passo 1. como local do workspace, ent\xe3o selecionar "Launch":')),(0,a.kt)("p",null,(0,a.kt)("img",{src:t(6790).Z,width:"988",height:"738"})),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},'Note que ser\xe1 criada a pasta "/.metadata/" no local, que cont\xe9m as configura\xe7\xf5es do workspace:')),(0,a.kt)("p",null,(0,a.kt)("img",{src:t(7345).Z,width:"1004",height:"892"})),(0,a.kt)("ol",{start:4},(0,a.kt)("li",{parentName:"ol"},'Ap\xf3s inicializa\xe7\xe3o do CubeIDE, selecionar "Import project":')),(0,a.kt)("p",null,(0,a.kt)("img",{src:t(7894).Z,width:"1288",height:"1024"})),(0,a.kt)("ol",{start:5},(0,a.kt)("li",{parentName:"ol"},"Selecionar o mesmo caminho do passo 1.:")),(0,a.kt)("p",null,(0,a.kt)("img",{src:t(3812).Z,width:"1004",height:"712"})),(0,a.kt)("ol",{start:6},(0,a.kt)("li",{parentName:"ol"},'Note que os exemplos ser\xe3o listados e pode-se selecionar quais ser\xe3o importados. Para avan\xe7ar, selecionar "Finish"')),(0,a.kt)("p",null,(0,a.kt)("img",{src:t(2075).Z,width:"885",height:"628"})),(0,a.kt)("ol",{start:7},(0,a.kt)("li",{parentName:"ol"},"Finalmente, todos os exemplos est\xe3o carregados na IDE e prontos para compila\xe7\xe3o/execu\xe7\xe3o:")),(0,a.kt)("p",null,(0,a.kt)("img",{src:t(4308).Z,width:"1288",height:"1024"})),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Autor"),(0,a.kt)("th",{parentName:"tr",align:null},"Andr\xe9 Ara\xfajo"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Data:"),(0,a.kt)("td",{parentName:"tr",align:null},"17/07/2023")))))}m.isMDXComponent=!0},77:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/1-7a1711f7f55ff4c1dffc3027c811cb8d.png"},6790:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/2-e11b0ce60129cd7d555ff062a3bef316.png"},7345:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/3-a772861f9136fad70481c5ab562e092e.png"},7894:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/4-607c08e55514887cd67354e3082c9122.png"},3812:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/5-17f3e548f0574af83239aa5df691063f.png"},2075:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/6-b10718ca63f45f7d982b8953131fe825.png"},4308:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/7-16441995800196ee5e9696d7af91d098.png"}}]); \ No newline at end of file diff --git a/assets/js/4cb2f106.81e4439a.js b/assets/js/4cb2f106.81e4439a.js new file mode 100755 index 000000000..f87ab781c --- /dev/null +++ b/assets/js/4cb2f106.81e4439a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3280],{28020:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>t,metadata:()=>a,toc:()=>d});var i=o(17624),r=o(95788);const t={id:"config-franzininho-c0-stm32cubeide",title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",slug:"/franzininho-c0/config-franzininho-c0-stm32cubeide",description:"7 passos para voc\xea configurar um novo projeto para a Franzininho C0"},s=void 0,a={id:"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide",title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",description:"7 passos para voc\xea configurar um novo projeto para a Franzininho C0",source:"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/configurando-projeto-stmcubeide.md",sourceDirName:"franzininhoSTM32C0/exemplos-stm32cube-IDE",slug:"/franzininho-c0/config-franzininho-c0-stm32cubeide",permalink:"/docs/franzininho-c0/config-franzininho-c0-stm32cubeide",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/configurando-projeto-stmcubeide.md",tags:[],version:"current",frontMatter:{id:"config-franzininho-c0-stm32cubeide",title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",slug:"/franzininho-c0/config-franzininho-c0-stm32cubeide",description:"7 passos para voc\xea configurar um novo projeto para a Franzininho C0"},sidebar:"docs",previous:{title:"STM32Cube IDE TODO List",permalink:"/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist"},next:{title:"Arduino IDE TODO List",permalink:"/docs/franzininho-c0/arduino-todolist"}},c={},d=[];function l(e){const n={a:"a",img:"img",li:"li",ol:"ol",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"Confira abaixo os passos para voc\xea configurar um novo projeto para a Franzininho C0 para o STM32CubeIDE:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Clonar o reposit\xf3rio (",(0,i.jsx)(n.a,{href:"https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide.git",children:"https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide.git"}),") em uma pasta local e chegar at\xe9 o caminho que cont\xe9m os exemplos:"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:o(7584).c+"",width:"1004",height:"892"})}),"\n",(0,i.jsxs)(n.ol,{start:"2",children:["\n",(0,i.jsx)(n.li,{children:'Iniciar o STM32CubeIDE e selecionar a pasta do passo 1. como local do workspace, ent\xe3o selecionar "Launch":'}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:o(53916).c+"",width:"988",height:"738"})}),"\n",(0,i.jsxs)(n.ol,{start:"3",children:["\n",(0,i.jsx)(n.li,{children:'Note que ser\xe1 criada a pasta "/.metadata/" no local, que cont\xe9m as configura\xe7\xf5es do workspace:'}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:o(74544).c+"",width:"1004",height:"892"})}),"\n",(0,i.jsxs)(n.ol,{start:"4",children:["\n",(0,i.jsx)(n.li,{children:'Ap\xf3s inicializa\xe7\xe3o do CubeIDE, selecionar "Import project":'}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:o(94328).c+"",width:"1288",height:"1024"})}),"\n",(0,i.jsxs)(n.ol,{start:"5",children:["\n",(0,i.jsx)(n.li,{children:"Selecionar o mesmo caminho do passo 1.:"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:o(42852).c+"",width:"1004",height:"712"})}),"\n",(0,i.jsxs)(n.ol,{start:"6",children:["\n",(0,i.jsx)(n.li,{children:'Note que os exemplos ser\xe3o listados e pode-se selecionar quais ser\xe3o importados. Para avan\xe7ar, selecionar "Finish"'}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:o(66728).c+"",width:"885",height:"628"})}),"\n",(0,i.jsxs)(n.ol,{start:"7",children:["\n",(0,i.jsx)(n.li,{children:"Finalmente, todos os exemplos est\xe3o carregados na IDE e prontos para compila\xe7\xe3o/execu\xe7\xe3o:"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:o(80388).c+"",width:"1288",height:"1024"})}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Autor"}),(0,i.jsx)(n.th,{children:"Andr\xe9 Ara\xfajo"})]})}),(0,i.jsx)(n.tbody,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Data:"}),(0,i.jsx)(n.td,{children:"17/07/2023"})]})})]})]})}function p(e={}){const{wrapper:n}={...(0,r.MN)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},95788:(e,n,o)=>{o.d(n,{MN:()=>d});var i=o(11504);function r(e,n,o){return n in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o,e}function t(e,n){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),o.push.apply(o,i)}return o}function s(e){for(var n=1;n=0||(r[o]=e[o]);return r}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var c=i.createContext({}),d=function(e){var n=i.useContext(c),o=n;return e&&(o="function"==typeof e?e(n):s(s({},n),e)),o},l={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},p=i.forwardRef((function(e,n){var o=e.components,r=e.mdxType,t=e.originalType,c=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),h=d(o),f=r,u=h["".concat(c,".").concat(f)]||h[f]||l[f]||t;return o?i.createElement(u,s(s({ref:n},p),{},{components:o})):i.createElement(u,s({ref:n},p))}));p.displayName="MDXCreateElement"},7584:(e,n,o)=>{o.d(n,{c:()=>i});const i=o.p+"assets/images/1-7a1711f7f55ff4c1dffc3027c811cb8d.png"},53916:(e,n,o)=>{o.d(n,{c:()=>i});const i=o.p+"assets/images/2-e11b0ce60129cd7d555ff062a3bef316.png"},74544:(e,n,o)=>{o.d(n,{c:()=>i});const i=o.p+"assets/images/3-a772861f9136fad70481c5ab562e092e.png"},94328:(e,n,o)=>{o.d(n,{c:()=>i});const i=o.p+"assets/images/4-607c08e55514887cd67354e3082c9122.png"},42852:(e,n,o)=>{o.d(n,{c:()=>i});const i=o.p+"assets/images/5-17f3e548f0574af83239aa5df691063f.png"},66728:(e,n,o)=>{o.d(n,{c:()=>i});const i=o.p+"assets/images/6-b10718ca63f45f7d982b8953131fe825.png"},80388:(e,n,o)=>{o.d(n,{c:()=>i});const i=o.p+"assets/images/7-16441995800196ee5e9696d7af91d098.png"}}]); \ No newline at end of file diff --git a/assets/js/4e4cd8a0.1f30fa5a.js b/assets/js/4e4cd8a0.1f30fa5a.js new file mode 100755 index 000000000..e58967e53 --- /dev/null +++ b/assets/js/4e4cd8a0.1f30fa5a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2160],{24888:(e,o,r)=>{r.r(o),r.d(o,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>s,metadata:()=>t,toc:()=>c});var n=r(17624),i=r(95788);const s={id:"circuitpython-servo-motor",title:"Servo motor",slug:"/franzininho-wifi/exemplos-circuitpython/servo-motor",description:"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!",author:"Mateus Adriano Ventura Vieira"},a=void 0,t={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor",title:"Servo motor",description:"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/servo-motor.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/servo-motor",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/servo-motor",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/servo-motor.md",tags:[],version:"current",frontMatter:{id:"circuitpython-servo-motor",title:"Servo motor",slug:"/franzininho-wifi/exemplos-circuitpython/servo-motor",description:"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!",author:"Mateus Adriano Ventura Vieira"},sidebar:"docs",previous:{title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04"},next:{title:"Sistema de irriga\xe7\xe3o autom\xe1tico",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/irrigacao"}},l={},c=[{value:"Materiais Necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digos",id:"c\xf3digos",level:2},{value:"Exemplo 1",id:"exemplo-1",level:3},{value:"Exemplo 2",id:"exemplo-2",level:3},{value:"An\xe1lise dos C\xf3digos",id:"an\xe1lise-dos-c\xf3digos",level:2},{value:"Exemplo 1",id:"exemplo-1-1",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function d(e){const o={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.p,{children:"Um servo motor \xe9 um pequeno motor de corrente cont\xednua. Diferentemente dos demais motores DC, onde apenas controlamos a velocidade de giro, conseguimos controlar a posi\xe7\xe3o de um servo, atrav\xe9s do PWM."}),"\n",(0,n.jsx)(o.p,{children:"O servo que vamos utilizar nesse exemplo, tem a resolu\xe7\xe3o de meia volta, ou seja, de 0\xb0 a 180\xb0."}),"\n",(0,n.jsx)(o.h2,{id:"materiais-necess\xe1rios",children:(0,n.jsx)(o.strong,{children:"Materiais Necess\xe1rios"})}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:"1 Placa Franzininho WiFi com CircuitPython;"}),"\n",(0,n.jsx)(o.li,{children:"1 Micro servo 9g;"}),"\n",(0,n.jsx)(o.li,{children:"1 Protoboard;"}),"\n",(0,n.jsx)(o.li,{children:"1 potenci\xf4metro de 10 k\u03a9;"}),"\n",(0,n.jsx)(o.li,{children:"Jumpers."}),"\n"]}),"\n",(0,n.jsx)(o.h2,{id:"circuito",children:(0,n.jsx)(o.strong,{children:"Circuito"})}),"\n",(0,n.jsx)(o.p,{children:"Para os exemplos que vamos ver a seguir, realize a seguinte montagem:"}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"Circuito Servo Motor",src:r(40960).c+"",width:"1755",height:"681"})}),"\n",(0,n.jsxs)(o.p,{children:[(0,n.jsx)(o.strong,{children:"Observa\xe7\xe3o:"})," o servo deve ser conectado ao 5V da placa. E, caso deseje usar mais de dois servos, uma fonte externa deve ser usada."]}),"\n",(0,n.jsx)(o.h2,{id:"c\xf3digos",children:(0,n.jsx)(o.strong,{children:"C\xf3digos"})}),"\n",(0,n.jsx)(o.p,{children:"Assim como quando aprendemos a usar PWM, vamos importar o m\xf3dulo simpleio. Tamb\xe9m, vamos importar um novo m\xf3dulo para trabalharmos com o servo motor."}),"\n",(0,n.jsxs)(o.p,{children:["Para ter acesso a esses m\xf3dulos, acesse o endere\xe7o: ",(0,n.jsx)(o.a,{href:"https://circuitpython.org/libraries",children:"https://circuitpython.org/libraries"}),". Fa\xe7a o download, de acordo com a vers\xe3o do CircuitPython instalada na sua Franzininho WiFi."]}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"Circuito Servo Motor",src:r(69932).c+"",width:"1543",height:"328"})}),"\n",(0,n.jsx)(o.p,{children:"Ap\xf3s finalizar o download, importe os dois m\xf3dulos para a pasta de arquivos da Franzininho WiFi:"}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsxs)(o.li,{children:[(0,n.jsx)(o.strong,{children:"simpleio.mpy"}),";"]}),"\n",(0,n.jsxs)(o.li,{children:[(0,n.jsx)(o.strong,{children:"adafruit_motor"}),"."]}),"\n"]}),"\n",(0,n.jsx)(o.h3,{id:"exemplo-1",children:(0,n.jsx)(o.strong,{children:"Exemplo 1"})}),"\n",(0,n.jsx)(o.p,{children:"No primeiro exemplo, vamos aprender a como programar um servo motor usando CircuitPython. Para isso, copie o c\xf3digo abaixo:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import board\nimport pwmio\nfrom adafruit_motor import servo \nfrom time import sleep\n\npin = board.IO1\npwm = pwmio.PWMOut(pin, frequency = 50)\n\nmy_servo = servo.Servo(pwm)\n\nwhile True:\n for angle in range(0, 180, 10): \n my_servo.angle = angle\n sleep(0.1)\n for angle in range(180, 0, -10): \n my_servo.angle = angle\n sleep(0.1)\n"})}),"\n",(0,n.jsx)(o.p,{children:"Salve e execute o c\xf3digo."}),"\n",(0,n.jsx)(o.h3,{id:"exemplo-2",children:(0,n.jsx)(o.strong,{children:"Exemplo 2"})}),"\n",(0,n.jsx)(o.p,{children:"J\xe1 nesse exemplo, vamos controlar o posicionamento do servo atrav\xe9s de um potenci\xf4metro. E para isso, vamos usar alguns recursos que aprendemos anteriormente. Escreva o c\xf3digo abaixo:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import board\nimport pwmio\nfrom adafruit_motor import servo\nimport simpleio\nimport math\nfrom analogio import AnalogIn\nfrom time import sleep\n\npin = board.IO1\npwm = pwmio.PWMOut(pin, frequency = 50)\nmy_servo = servo.Servo(pwm)\n\npotPin = board.IO2\npot = AnalogIn(potPin)\n\ndef converter(pin):\n pinValue = pin.value\n mapValue = math.trunc(simpleio.map_range\n (pinValue, 536, 51355, 0, 180))\n return mapValue\n\nwhile True:\n angle = converter(pot)\n my_servo.angle = angle\n sleep(0.1)\n"})}),"\n",(0,n.jsx)(o.p,{children:"Ap\xf3s terminar de escrever, salve o c\xf3digo e teste-o."}),"\n",(0,n.jsx)(o.h2,{id:"an\xe1lise-dos-c\xf3digos",children:(0,n.jsx)(o.strong,{children:"An\xe1lise dos C\xf3digos"})}),"\n",(0,n.jsx)(o.h3,{id:"exemplo-1-1",children:(0,n.jsx)(o.strong,{children:"Exemplo 1"})}),"\n",(0,n.jsxs)(o.p,{children:["O primeiro m\xf3dulo que vamos importar, \xe9 o ",(0,n.jsx)(o.strong,{children:"board"}),". Ele possibilita o acesso aos pinos da placa:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import board\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Para conseguirmos usar os pinos PWM, precisamos do m\xf3dulo ",(0,n.jsx)(o.strong,{children:"pwmio"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import pwmio\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Tamb\xe9m, ser\xe1 necess\xe1rio a biblioteca auxiliar ",(0,n.jsx)(o.strong,{children:"adafruit_motor.servo"}),". Ela ser\xe1 \xfatil para controlar o servo com base na sa\xedda PWM:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"from adafruit_motor import servo\n"})}),"\n",(0,n.jsxs)(o.p,{children:["E, por \xfaltimo, precisaremos da fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"sleep"})," do m\xf3dulo ",(0,n.jsx)(o.strong,{children:"time"}),", para intervalos de temporiza\xe7\xe3o:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"from time import sleep\n"})}),"\n",(0,n.jsx)(o.p,{children:"Agora, vamos atribuir o GPIO1 da placa a vari\xe1vel pin:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"pin = board.IO1\n"})}),"\n",(0,n.jsx)(o.p,{children:"Tamb\xe9m, configuraremos esse pino como uma sa\xedda PWM. Repare, que diferente do LED, precisamos informar a frequ\xeancia, pois, por padr\xe3o ela est\xe1 configurada com 500Hz e o padr\xe3o do servo motor \xe9 50Hz:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"pwm = pwmio.PWMOut(pin, frequency = 50)\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Al\xe9m disso, vamos criar o objeto ",(0,n.jsx)(o.strong,{children:"my_servo"})," e atribuir o pino ",(0,n.jsx)(o.strong,{children:"pwm"})," a ele:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"my_servo = servo.Servo(pwm)\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Por fim, dentro do ",(0,n.jsx)(o.strong,{children:"while True"}),", o nosso loop, faremos com que o servo se mova continuamente. Para isso, usaremos a estrutura de repeti\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"for"})," e o comando ",(0,n.jsx)(o.strong,{children:"range( )"}),", que gera uma lista."]}),"\n",(0,n.jsx)(o.p,{children:"Como par\xe2metros do primeiro la\xe7o, vamos informar o valor inicial (0), valor final(180) e o intervalo de contagem, ou seja, de 10 em 10. Dentro do la\xe7o, esse valor ser\xe1 enviado para o servo a cada 0.1 segundos:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"while True:\n for angle in range(0, 180, 10): \n my_servo.angle = angle\n sleep(0.1)\n"})}),"\n",(0,n.jsx)(o.p,{children:"J\xe1 no segundo la\xe7o, faremos o mesmo. Por\xe9m, inv\xe9s de incrementar de 10 em 10, a contagem ser\xe1 decrescente:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"for angle in range(180, 0, -10): \n my_servo.angle = angle\n sleep(0.1)\n"})}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.strong,{children:"Exemplo 2"})}),"\n",(0,n.jsxs)(o.p,{children:["Al\xe9m dos m\xf3dulos que j\xe1 usamos no primeiro exemplo, precisaremos importar ",(0,n.jsx)(o.strong,{children:"simpleio"}),", para usarmos a fun\xe7\xe3o de mapeamento:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import simpleio\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Vamos precisar tamb\xe9m da biblioteca ",(0,n.jsx)(o.strong,{children:"math"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import math\n"})}),"\n",(0,n.jsxs)(o.p,{children:["E, da fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"AnalogIn"})," da biblioteca ",(0,n.jsx)(o.strong,{children:"analogio"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"from analogio import AnalogIn\n"})}),"\n",(0,n.jsx)(o.p,{children:"Al\xe9m de configurarmos o servo, tamb\xe9m vamos configurar o potenci\xf4metro. Para isso, primeiro vamos atribuir o GPIO2 a vari\xe1vel potPin:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"potPin = board.IO2\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Por fim, vamos atribuir esse pino ao objeto ",(0,n.jsx)(o.strong,{children:"pot"})," como uma entrada anal\xf3gica:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"pot = AnalogIn(potPin)\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Agora, vamos criar uma fun\xe7\xe3o chamada ",(0,n.jsx)(o.strong,{children:"converte"}),". Essa fun\xe7\xe3o receber\xe1 como par\xe2metro o pino que estamos lendo:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"def converter(pin):\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Dentro da fun\xe7\xe3o, faremos a leitura do valor enviado pelo potenci\xf4metro e armazen\xe1-la na vari\xe1vel ",(0,n.jsx)(o.strong,{children:"pinValue"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"pinValue = pin.value\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Ademais, converteremos o valor da leitura para graus. Para tal, usaremos a fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"simpleio.map_range"}),". Os par\xe2metros dessa fun\xe7\xe3o s\xe3o: valor bruto (valor da leitura naquele instante), valor m\xednimo de entrada, valor m\xe1ximo de entrada, valor m\xednimo de sa\xedda e valor m\xe1ximo de sa\xedda. Tamb\xe9m, precisaremos da fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"math.trunc"}),", que eliminar\xe1 as casas decimais. Todas essas informa\xe7\xf5es ficar\xe3o armazenadas na vari\xe1vel ",(0,n.jsx)(o.strong,{children:"mapValue"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"mapValue = math.trunc(simpleio.map_range(pinValue, 536, 51355, 0, 180))\n"})}),"\n",(0,n.jsxs)(o.p,{children:["E, a fun\xe7\xe3o nos retornar\xe1 o valor de ",(0,n.jsx)(o.strong,{children:"mapValue"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"return mapValue\n"})}),"\n",(0,n.jsxs)(o.p,{children:["No la\xe7o de repeti\xe7\xe3o infinita, ",(0,n.jsx)(o.strong,{children:"while True"}),", atribuiremos o valor retornado pela fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"converte"})," a vari\xe1vel ",(0,n.jsx)(o.strong,{children:"angle"}),". Esse valor ser\xe1 enviado para o servo motor a cada 0.1 segundos:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"while True:\n angle = converter(pot)\n my_servo.angle = angle\n sleep(0.1)\n"})}),"\n",(0,n.jsx)(o.h2,{id:"conclus\xe3o",children:(0,n.jsx)(o.strong,{children:"Conclus\xe3o"})}),"\n",(0,n.jsx)(o.p,{children:"No decorrer da explica\xe7\xe3o, aprendemos a como usar um servo motor de uma maneira simples utilizando CircuitPython. Tamb\xe9m, pudemos ver como usar um potenci\xf4metro para controlar a movimenta\xe7\xe3o dos nossos servos."}),"\n",(0,n.jsxs)(o.table,{children:[(0,n.jsx)(o.thead,{children:(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.th,{children:"Autor"}),(0,n.jsx)(o.th,{children:"Mateus Adriano Ventura Vieira"})]})}),(0,n.jsx)(o.tbody,{children:(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.td,{children:"Data:"}),(0,n.jsx)(o.td,{children:"17/05/2022"})]})})]})]})}function m(e={}){const{wrapper:o}={...(0,i.MN)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},95788:(e,o,r)=>{r.d(o,{MN:()=>c});var n=r(11504);function i(e,o,r){return o in e?Object.defineProperty(e,o,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[o]=r,e}function s(e,o){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var o=1;o=0||(i[r]=e[r]);return i}(e,o);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=n.createContext({}),c=function(e){var o=n.useContext(l),r=o;return e&&(r="function"==typeof e?e(o):a(a({},o),e)),r},d={inlineCode:"code",wrapper:function(e){var o=e.children;return n.createElement(n.Fragment,{},o)}},m=n.forwardRef((function(e,o){var r=e.components,i=e.mdxType,s=e.originalType,l=e.parentName,m=t(e,["components","mdxType","originalType","parentName"]),p=c(r),h=i,u=p["".concat(l,".").concat(h)]||p[h]||d[h]||s;return r?n.createElement(u,a(a({ref:o},m),{},{components:r})):n.createElement(u,a({ref:o},m))}));m.displayName="MDXCreateElement"},69932:(e,o,r)=>{r.d(o,{c:()=>n});const n=r.p+"assets/images/biblioteca-servo-58357a122b96bde035495e9835cb75e7.png"},40960:(e,o,r)=>{r.d(o,{c:()=>n});const n=r.p+"assets/images/circuito-servo-cdd775c22e65131a61c0d1db61c05fe1.webp"}}]); \ No newline at end of file diff --git a/assets/js/4e4cd8a0.d58634dc.js b/assets/js/4e4cd8a0.d58634dc.js deleted file mode 100755 index 44e80df8a..000000000 --- a/assets/js/4e4cd8a0.d58634dc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6657],{3905:(e,o,a)=>{a.d(o,{Zo:()=>m,kt:()=>g});var r=a(7294);function n(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function t(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);o&&(r=r.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var o=1;o=0||(n[a]=e[a]);return n}(e,o);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=r.createContext({}),p=function(e){var o=r.useContext(l),a=o;return e&&(a="function"==typeof e?e(o):i(i({},o),e)),a},m=function(e){var o=p(e.components);return r.createElement(l.Provider,{value:o},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var o=e.children;return r.createElement(r.Fragment,{},o)}},d=r.forwardRef((function(e,o){var a=e.components,n=e.mdxType,t=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=p(a),d=n,g=u["".concat(l,".").concat(d)]||u[d]||c[d]||t;return a?r.createElement(g,i(i({ref:o},m),{},{components:a})):r.createElement(g,i({ref:o},m))}));function g(e,o){var a=arguments,n=o&&o.mdxType;if("string"==typeof e||n){var t=a.length,i=new Array(t);i[0]=d;var s={};for(var l in o)hasOwnProperty.call(o,l)&&(s[l]=o[l]);s.originalType=e,s[u]="string"==typeof e?e:n,i[1]=s;for(var p=2;p{a.r(o),a.d(o,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>t,metadata:()=>s,toc:()=>p});var r=a(3117),n=(a(7294),a(3905));const t={id:"circuitpython-servo-motor",title:"Servo motor",slug:"/franzininho-wifi/exemplos-circuitpython/servo-motor",description:"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!",author:"Mateus Adriano Ventura Vieira"},i=void 0,s={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor",title:"Servo motor",description:"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/servo-motor.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/servo-motor",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/servo-motor",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/servo-motor.md",tags:[],version:"current",frontMatter:{id:"circuitpython-servo-motor",title:"Servo motor",slug:"/franzininho-wifi/exemplos-circuitpython/servo-motor",description:"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!",author:"Mateus Adriano Ventura Vieira"},sidebar:"docs",previous:{title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04"},next:{title:"Sistema de irriga\xe7\xe3o autom\xe1tico",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/irrigacao"}},l={},p=[{value:"Materiais Necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digos",id:"c\xf3digos",level:2},{value:"Exemplo 1",id:"exemplo-1",level:3},{value:"Exemplo 2",id:"exemplo-2",level:3},{value:"An\xe1lise dos C\xf3digos",id:"an\xe1lise-dos-c\xf3digos",level:2},{value:"Exemplo 1",id:"exemplo-1-1",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],m={toc:p},u="wrapper";function c(e){let{components:o,...t}=e;return(0,n.kt)(u,(0,r.Z)({},m,t,{components:o,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Um servo motor \xe9 um pequeno motor de corrente cont\xednua. Diferentemente dos demais motores DC, onde apenas controlamos a velocidade de giro, conseguimos controlar a posi\xe7\xe3o de um servo, atrav\xe9s do PWM."),(0,n.kt)("p",null,"O servo que vamos utilizar nesse exemplo, tem a resolu\xe7\xe3o de meia volta, ou seja, de 0\xb0 a 180\xb0."),(0,n.kt)("h2",{id:"materiais-necess\xe1rios"},(0,n.kt)("strong",{parentName:"h2"},"Materiais Necess\xe1rios")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"1 Placa Franzininho WiFi com CircuitPython;"),(0,n.kt)("li",{parentName:"ul"},"1 Micro servo 9g;"),(0,n.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,n.kt)("li",{parentName:"ul"},"1 potenci\xf4metro de 10 k\u03a9;"),(0,n.kt)("li",{parentName:"ul"},"Jumpers.")),(0,n.kt)("h2",{id:"circuito"},(0,n.kt)("strong",{parentName:"h2"},"Circuito")),(0,n.kt)("p",null,"Para os exemplos que vamos ver a seguir, realize a seguinte montagem:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito Servo Motor",src:a(8230).Z,width:"1755",height:"681"})),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Observa\xe7\xe3o:")," o servo deve ser conectado ao 5V da placa. E, caso deseje usar mais de dois servos, uma fonte externa deve ser usada."),(0,n.kt)("h2",{id:"c\xf3digos"},(0,n.kt)("strong",{parentName:"h2"},"C\xf3digos")),(0,n.kt)("p",null,"Assim como quando aprendemos a usar PWM, vamos importar o m\xf3dulo simpleio. Tamb\xe9m, vamos importar um novo m\xf3dulo para trabalharmos com o servo motor."),(0,n.kt)("p",null,"Para ter acesso a esses m\xf3dulos, acesse o endere\xe7o: ",(0,n.kt)("a",{parentName:"p",href:"https://circuitpython.org/libraries"},"https://circuitpython.org/libraries"),". Fa\xe7a o download, de acordo com a vers\xe3o do CircuitPython instalada na sua Franzininho WiFi."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito Servo Motor",src:a(3058).Z,width:"1543",height:"328"})),(0,n.kt)("p",null,"Ap\xf3s finalizar o download, importe os dois m\xf3dulos para a pasta de arquivos da Franzininho WiFi:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"simpleio.mpy"),";"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"adafruit_motor"),".")),(0,n.kt)("h3",{id:"exemplo-1"},(0,n.kt)("strong",{parentName:"h3"},"Exemplo 1")),(0,n.kt)("p",null,"No primeiro exemplo, vamos aprender a como programar um servo motor usando CircuitPython. Para isso, copie o c\xf3digo abaixo:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"import board\nimport pwmio\nfrom adafruit_motor import servo \nfrom time import sleep\n\npin = board.IO1\npwm = pwmio.PWMOut(pin, frequency = 50)\n\nmy_servo = servo.Servo(pwm)\n\nwhile True:\n for angle in range(0, 180, 10): \n my_servo.angle = angle\n sleep(0.1)\n for angle in range(180, 0, -10): \n my_servo.angle = angle\n sleep(0.1)\n")),(0,n.kt)("p",null,"Salve e execute o c\xf3digo."),(0,n.kt)("h3",{id:"exemplo-2"},(0,n.kt)("strong",{parentName:"h3"},"Exemplo 2")),(0,n.kt)("p",null,"J\xe1 nesse exemplo, vamos controlar o posicionamento do servo atrav\xe9s de um potenci\xf4metro. E para isso, vamos usar alguns recursos que aprendemos anteriormente. Escreva o c\xf3digo abaixo:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"import board\nimport pwmio\nfrom adafruit_motor import servo\nimport simpleio\nimport math\nfrom analogio import AnalogIn\nfrom time import sleep\n\npin = board.IO1\npwm = pwmio.PWMOut(pin, frequency = 50)\nmy_servo = servo.Servo(pwm)\n\npotPin = board.IO2\npot = AnalogIn(potPin)\n\ndef converter(pin):\n pinValue = pin.value\n mapValue = math.trunc(simpleio.map_range\n (pinValue, 536, 51355, 0, 180))\n return mapValue\n\nwhile True:\n angle = converter(pot)\n my_servo.angle = angle\n sleep(0.1)\n")),(0,n.kt)("p",null,"Ap\xf3s terminar de escrever, salve o c\xf3digo e teste-o."),(0,n.kt)("h2",{id:"an\xe1lise-dos-c\xf3digos"},(0,n.kt)("strong",{parentName:"h2"},"An\xe1lise dos C\xf3digos")),(0,n.kt)("h3",{id:"exemplo-1-1"},(0,n.kt)("strong",{parentName:"h3"},"Exemplo 1")),(0,n.kt)("p",null,"O primeiro m\xf3dulo que vamos importar, \xe9 o ",(0,n.kt)("strong",{parentName:"p"},"board"),". Ele possibilita o acesso aos pinos da placa:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,n.kt)("p",null,"Para conseguirmos usar os pinos PWM, precisamos do m\xf3dulo ",(0,n.kt)("strong",{parentName:"p"},"pwmio"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"import pwmio\n")),(0,n.kt)("p",null,"Tamb\xe9m, ser\xe1 necess\xe1rio a biblioteca auxiliar ",(0,n.kt)("strong",{parentName:"p"},"adafruit_motor.servo"),". Ela ser\xe1 \xfatil para controlar o servo com base na sa\xedda PWM:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"from adafruit_motor import servo\n")),(0,n.kt)("p",null,"E, por \xfaltimo, precisaremos da fun\xe7\xe3o ",(0,n.kt)("strong",{parentName:"p"},"sleep")," do m\xf3dulo ",(0,n.kt)("strong",{parentName:"p"},"time"),", para intervalos de temporiza\xe7\xe3o:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"from time import sleep\n")),(0,n.kt)("p",null,"Agora, vamos atribuir o GPIO1 da placa a vari\xe1vel pin:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"pin = board.IO1\n")),(0,n.kt)("p",null,"Tamb\xe9m, configuraremos esse pino como uma sa\xedda PWM. Repare, que diferente do LED, precisamos informar a frequ\xeancia, pois, por padr\xe3o ela est\xe1 configurada com 500Hz e o padr\xe3o do servo motor \xe9 50Hz:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"pwm = pwmio.PWMOut(pin, frequency = 50)\n")),(0,n.kt)("p",null,"Al\xe9m disso, vamos criar o objeto ",(0,n.kt)("strong",{parentName:"p"},"my_servo")," e atribuir o pino ",(0,n.kt)("strong",{parentName:"p"},"pwm")," a ele:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"my_servo = servo.Servo(pwm)\n")),(0,n.kt)("p",null,"Por fim, dentro do ",(0,n.kt)("strong",{parentName:"p"},"while True"),", o nosso loop, faremos com que o servo se mova continuamente. Para isso, usaremos a estrutura de repeti\xe7\xe3o ",(0,n.kt)("strong",{parentName:"p"},"for")," e o comando ",(0,n.kt)("strong",{parentName:"p"},"range( )"),", que gera uma lista."),(0,n.kt)("p",null,"Como par\xe2metros do primeiro la\xe7o, vamos informar o valor inicial (0), valor final(180) e o intervalo de contagem, ou seja, de 10 em 10. Dentro do la\xe7o, esse valor ser\xe1 enviado para o servo a cada 0.1 segundos:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"while True:\n for angle in range(0, 180, 10): \n my_servo.angle = angle\n sleep(0.1)\n")),(0,n.kt)("p",null,"J\xe1 no segundo la\xe7o, faremos o mesmo. Por\xe9m, inv\xe9s de incrementar de 10 em 10, a contagem ser\xe1 decrescente:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"for angle in range(180, 0, -10): \n my_servo.angle = angle\n sleep(0.1)\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Exemplo 2")),(0,n.kt)("p",null,"Al\xe9m dos m\xf3dulos que j\xe1 usamos no primeiro exemplo, precisaremos importar ",(0,n.kt)("strong",{parentName:"p"},"simpleio"),", para usarmos a fun\xe7\xe3o de mapeamento:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"import simpleio\n")),(0,n.kt)("p",null,"Vamos precisar tamb\xe9m da biblioteca ",(0,n.kt)("strong",{parentName:"p"},"math"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"import math\n")),(0,n.kt)("p",null,"E, da fun\xe7\xe3o ",(0,n.kt)("strong",{parentName:"p"},"AnalogIn")," da biblioteca ",(0,n.kt)("strong",{parentName:"p"},"analogio"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"from analogio import AnalogIn\n")),(0,n.kt)("p",null,"Al\xe9m de configurarmos o servo, tamb\xe9m vamos configurar o potenci\xf4metro. Para isso, primeiro vamos atribuir o GPIO2 a vari\xe1vel potPin:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"potPin = board.IO2\n")),(0,n.kt)("p",null,"Por fim, vamos atribuir esse pino ao objeto ",(0,n.kt)("strong",{parentName:"p"},"pot")," como uma entrada anal\xf3gica:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"pot = AnalogIn(potPin)\n")),(0,n.kt)("p",null,"Agora, vamos criar uma fun\xe7\xe3o chamada ",(0,n.kt)("strong",{parentName:"p"},"converte"),". Essa fun\xe7\xe3o receber\xe1 como par\xe2metro o pino que estamos lendo:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"def converter(pin):\n")),(0,n.kt)("p",null,"Dentro da fun\xe7\xe3o, faremos a leitura do valor enviado pelo potenci\xf4metro e armazen\xe1-la na vari\xe1vel ",(0,n.kt)("strong",{parentName:"p"},"pinValue"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"pinValue = pin.value\n")),(0,n.kt)("p",null,"Ademais, converteremos o valor da leitura para graus. Para tal, usaremos a fun\xe7\xe3o ",(0,n.kt)("strong",{parentName:"p"},"simpleio.map_range"),". Os par\xe2metros dessa fun\xe7\xe3o s\xe3o: valor bruto (valor da leitura naquele instante), valor m\xednimo de entrada, valor m\xe1ximo de entrada, valor m\xednimo de sa\xedda e valor m\xe1ximo de sa\xedda. Tamb\xe9m, precisaremos da fun\xe7\xe3o ",(0,n.kt)("strong",{parentName:"p"},"math.trunc"),", que eliminar\xe1 as casas decimais. Todas essas informa\xe7\xf5es ficar\xe3o armazenadas na vari\xe1vel ",(0,n.kt)("strong",{parentName:"p"},"mapValue"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"mapValue = math.trunc(simpleio.map_range(pinValue, 536, 51355, 0, 180))\n")),(0,n.kt)("p",null,"E, a fun\xe7\xe3o nos retornar\xe1 o valor de ",(0,n.kt)("strong",{parentName:"p"},"mapValue"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"return mapValue\n")),(0,n.kt)("p",null,"No la\xe7o de repeti\xe7\xe3o infinita, ",(0,n.kt)("strong",{parentName:"p"},"while True"),", atribuiremos o valor retornado pela fun\xe7\xe3o ",(0,n.kt)("strong",{parentName:"p"},"converte")," a vari\xe1vel ",(0,n.kt)("strong",{parentName:"p"},"angle"),". Esse valor ser\xe1 enviado para o servo motor a cada 0.1 segundos:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"while True:\n angle = converter(pot)\n my_servo.angle = angle\n sleep(0.1)\n")),(0,n.kt)("h2",{id:"conclus\xe3o"},(0,n.kt)("strong",{parentName:"h2"},"Conclus\xe3o")),(0,n.kt)("p",null,"No decorrer da explica\xe7\xe3o, aprendemos a como usar um servo motor de uma maneira simples utilizando CircuitPython. Tamb\xe9m, pudemos ver como usar um potenci\xf4metro para controlar a movimenta\xe7\xe3o dos nossos servos."),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Autor"),(0,n.kt)("th",{parentName:"tr",align:null},"Mateus Adriano Ventura Vieira"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Data:"),(0,n.kt)("td",{parentName:"tr",align:null},"17/05/2022")))))}c.isMDXComponent=!0},3058:(e,o,a)=>{a.d(o,{Z:()=>r});const r=a.p+"assets/images/biblioteca-servo-58357a122b96bde035495e9835cb75e7.png"},8230:(e,o,a)=>{a.d(o,{Z:()=>r});const r=a.p+"assets/images/circuito-servo-cdd775c22e65131a61c0d1db61c05fe1.webp"}}]); \ No newline at end of file diff --git a/assets/js/4f3ccf13.1f3face7.js b/assets/js/4f3ccf13.1f3face7.js new file mode 100755 index 000000000..56d27fc21 --- /dev/null +++ b/assets/js/4f3ccf13.1f3face7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9508],{50590:n=>{n.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/4f3ccf13.339cdbe4.js b/assets/js/4f3ccf13.339cdbe4.js deleted file mode 100755 index baecd4a96..000000000 --- a/assets/js/4f3ccf13.339cdbe4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7269],{5745:n=>{n.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/5115f6b0.7b0cf468.js b/assets/js/5115f6b0.7b0cf468.js deleted file mode 100755 index 88587560f..000000000 --- a/assets/js/5115f6b0.7b0cf468.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1777],{3905:(e,a,o)=>{o.d(a,{Zo:()=>c,kt:()=>f});var r=o(7294);function i(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function n(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,r)}return o}function t(e){for(var a=1;a=0||(i[o]=e[o]);return i}(e,a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var p=r.createContext({}),l=function(e){var a=r.useContext(p),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},c=function(e){var a=l(e.components);return r.createElement(p.Provider,{value:a},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},m=r.forwardRef((function(e,a){var o=e.components,i=e.mdxType,n=e.originalType,p=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=l(o),m=i,f=d["".concat(p,".").concat(m)]||d[m]||u[m]||n;return o?r.createElement(f,t(t({ref:a},c),{},{components:o})):r.createElement(f,t({ref:a},c))}));function f(e,a){var o=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var n=o.length,t=new Array(n);t[0]=m;var s={};for(var p in a)hasOwnProperty.call(a,p)&&(s[p]=a[p]);s.originalType=e,s[d]="string"==typeof e?e:i,t[1]=s;for(var l=2;l{o.r(a),o.d(a,{assets:()=>p,contentTitle:()=>t,default:()=>u,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var r=o(3117),i=(o(7294),o(3905));const n={id:"arduino",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-arduino/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi",author:"F\xe1bio Souza"},t=void 0,s={unversionedId:"FranzininhoWifi/exemplos-arduino/arduino",id:"FranzininhoWifi/exemplos-arduino/arduino",title:"Primeiros Passos",description:"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-arduino/arduino.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/primeiros-passos",permalink:"/docs/franzininho-wifi/exemplos-arduino/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/arduino.md",tags:[],version:"current",frontMatter:{id:"arduino",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-arduino/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi",author:"F\xe1bio Souza"},sidebar:"docs",previous:{title:"Sistema de irriga\xe7\xe3o autom\xe1tico",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/irrigacao"},next:{title:"Blink",permalink:"/docs/franzininho-wifi/exemplos-arduino/blink"}},p={},l=[{value:"Video com a configura\xe7\xe3o",id:"video-com-a-configura\xe7\xe3o",level:2},{value:"Arduino IDE",id:"arduino-ide",level:2},{value:"Instala\xe7\xe3o do pacote ESP32 para Arduino",id:"instala\xe7\xe3o-do-pacote-esp32-para-arduino",level:2}],c={toc:l},d="wrapper";function u(e){let{components:a,...n}=e;return(0,i.kt)(d,(0,r.Z)({},c,n,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"A Franzininho WiFi foi adicionada recentemente a plataforma Arduino atrav\xe9s do pacote para ESP32 da Espressif. Essa foi uma contribui\xe7\xe3o do Pedro Minatel para o projeto Franzininho. Pedro enviou um PR com a adi\xe7\xe3o da Franzininho WiFi no modo CDC e tamb\xe9m como MSC. "),(0,i.kt)("p",null,"Nesse tutorial aprenderemos configurar a Arduino IDE e fazer o upload de c\xf3digo para a placa Franzininho WiFi. "),(0,i.kt)("p",null,"Usamos como base para esse tutorial a documenta\xe7\xe3o da Espressif para Arduino: ",(0,i.kt)("a",{parentName:"p",href:"https://docs.espressif.com/projects/arduino-esp32/en/latest/"},"https://docs.espressif.com/projects/arduino-esp32/en/latest/")," "),(0,i.kt)("h2",{id:"video-com-a-configura\xe7\xe3o"},"Video com a configura\xe7\xe3o"),(0,i.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/Ka6nfYmEaXI",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,i.kt)("h2",{id:"arduino-ide"},"Arduino IDE"),(0,i.kt)("p",null,"Arduino \xe9 uma plataforma de prototipa\xe7\xe3o de projetos eletr\xf4nicos composta por placas e uma interface de programa\xe7\xe3o chamada Arduino. "),(0,i.kt)("p",null,"Antes de come\xe7armos as configura\xe7\xf5es \xe9 importante que voc\xea instale a Arduino IDE em seu sistema operacional. Acesse: ",(0,i.kt)("a",{parentName:"p",href:"https://www.arduino.cc/en/software"},"https://www.arduino.cc/en/software")," e baixe a vers\xe3o adequada para o seu sistema operacional. "),(0,i.kt)("p",null,"Estamos usando para esse tutorial a Arduino IDE 1.8.15, recomendamos essa vers\xe3o ou superior. "),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Download IDE",src:o(2107).Z,width:"843",height:"396"})),(0,i.kt)("h2",{id:"instala\xe7\xe3o-do-pacote-esp32-para-arduino"},"Instala\xe7\xe3o do pacote ESP32 para Arduino"),(0,i.kt)("p",null,"Para instala\xe7\xe3o do pacote ESP32 para Arduino usaremos a ferramenta Gerenciador de placas na pr\xf3pria IDE. "),(0,i.kt)("p",null,"Siga os seguintes passos:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Abra a Arduino IDe e acesse Arquivos -> Prefer\xeancias;"),(0,i.kt)("li",{parentName:"ol"},"Cole em \u201cURLs adicionais para Gerenciadores de Placas\u201d a seguinte URL:\n",(0,i.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json")),(0,i.kt)("li",{parentName:"ol"},"Clique em OK;"),(0,i.kt)("li",{parentName:"ol"},"V\xe1 em Ferramentas > Placa > Gerenciador de Placas;"),(0,i.kt)("li",{parentName:"ol"},"Ao abrir, procure por ESP32-S2, e clique em instalar;")),(0,i.kt)("p",null,"Veja como o passo a passo na imagem abaixo:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"pacote passo a passo",src:o(5755).Z,width:"1083",height:"781"})),(0,i.kt)("p",null,"Pronto, agora \xe9 s\xf3 ir em placa e procurar pela Franzininho WiFi:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Selecionando a placa",src:o(2879).Z,width:"1083",height:"781"})),(0,i.kt)("p",null,"Fa\xe7a a seguinte configura\xe7\xe3o:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Configura\xe7\xe3o",src:o(3567).Z,width:"1365",height:"740"})),(0,i.kt)("p",null,"Agora faremos um exemplo para verificar o processo de upload."),(0,i.kt)("p",null,"Abra o exemplo GetChipID:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Exemplo",src:o(8544).Z,width:"1365",height:"739"})),(0,i.kt)("p",null,"Agora faremos o upload para a placa. Se for a primeira vez que voc\xea usar\xe1 a Arduino IDE para programar a Franzininho WiFi voc\xea dever\xe1 colocar a placa em modo DFU para carregar o c\xf3digo. Ap\xf3s isso n\xe3o precisar\xe1 mais fazer esse procedimento."),(0,i.kt)("admonition",{title:"Dica",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Isso dever\xe1 sempre ser feito se voc\xea programar a placa com outras plataformas como ESP-IDF, CircuitPython, etc. Apos esse procedimento \xe9 s\xf3 programar a placa pressionando upload, como estamos acostumado a fazer com outras placas.")),(0,i.kt)("p",null,"Colocando a placa em modo DFU"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Plugue a placa na USB;")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Pressione o bot\xe3o Boot e segure;")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Pressione o bot\xe3o Reset e solte em seguida;")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Solte o bot\xe3o Boot."))),(0,i.kt)("p",null,"Para fazer carregar o c\xf3digo na placa clique em Upload:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Uoload",src:o(2199).Z,width:"520",height:"618"})),(0,i.kt)("p",null,"Abra o monitor serial e configure a velocidade para 115200 bps:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Monitor Serial",src:o(9639).Z,width:"1321",height:"509"})),(0,i.kt)("p",null,"Ser\xe1 exibido o modelo e chip ID."),(0,i.kt)("p",null,"Agora voc\xea pode carregar qualquer c\xf3digo para a placa sem precisar coloc\xe1-la em modo DFU."),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"A Franzininho WiFi MSC funciona da mesma forma para upload via Arduino IDE. A diferen\xe7a \xe9 que nesse modo podemos carregar bin\xe1rios sem uso da IDE, apenas carregando o bin\xe1rio para o dispositivo de armazenamento criado no computador.")))}u.isMDXComponent=!0},2107:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/00-download-428b272c195061c55de27a5770c95e1e.png"},5755:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/01-pacote-275e24ec407da429f03fe456dd16253a.gif"},2879:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/02-placa-d724ea164399f9f31002b8b205ea7e35.gif"},3567:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/03-configura-b2256d3303f3ebd6303f795543ec6332.png"},8544:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/04-exemplo-55dcd031bd5489559f4b7f790e734ac6.png"},2199:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/05-upload-2c7649aa9e74e252995b995d3f4a4fce.png"},9639:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/06-terminal-serial-d76f0eb9610be895efec7943b91c1e11.png"}}]); \ No newline at end of file diff --git a/assets/js/5115f6b0.c70666b4.js b/assets/js/5115f6b0.c70666b4.js new file mode 100755 index 000000000..99ed73bb7 --- /dev/null +++ b/assets/js/5115f6b0.c70666b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5336],{63816:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>n,metadata:()=>t,toc:()=>d});var i=a(17624),r=a(95788);const n={id:"arduino",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-arduino/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi",author:"F\xe1bio Souza"},s=void 0,t={id:"FranzininhoWifi/exemplos-arduino/arduino",title:"Primeiros Passos",description:"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-arduino/arduino.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/primeiros-passos",permalink:"/docs/franzininho-wifi/exemplos-arduino/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/arduino.md",tags:[],version:"current",frontMatter:{id:"arduino",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-arduino/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi",author:"F\xe1bio Souza"},sidebar:"docs",previous:{title:"Sistema de irriga\xe7\xe3o autom\xe1tico",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/irrigacao"},next:{title:"Blink",permalink:"/docs/franzininho-wifi/exemplos-arduino/blink"}},c={},d=[{value:"Video com a configura\xe7\xe3o",id:"video-com-a-configura\xe7\xe3o",level:2},{value:"Arduino IDE",id:"arduino-ide",level:2},{value:"Instala\xe7\xe3o do pacote ESP32 para Arduino",id:"instala\xe7\xe3o-do-pacote-esp32-para-arduino",level:2}];function p(e){const o={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",ol:"ol",p:"p",...(0,r.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.p,{children:"A Franzininho WiFi foi adicionada recentemente a plataforma Arduino atrav\xe9s do pacote para ESP32 da Espressif. Essa foi uma contribui\xe7\xe3o do Pedro Minatel para o projeto Franzininho. Pedro enviou um PR com a adi\xe7\xe3o da Franzininho WiFi no modo CDC e tamb\xe9m como MSC."}),"\n",(0,i.jsx)(o.p,{children:"Nesse tutorial aprenderemos configurar a Arduino IDE e fazer o upload de c\xf3digo para a placa Franzininho WiFi."}),"\n",(0,i.jsxs)(o.p,{children:["Usamos como base para esse tutorial a documenta\xe7\xe3o da Espressif para Arduino: ",(0,i.jsx)(o.a,{href:"https://docs.espressif.com/projects/arduino-esp32/en/latest/",children:"https://docs.espressif.com/projects/arduino-esp32/en/latest/"})]}),"\n",(0,i.jsx)(o.h2,{id:"video-com-a-configura\xe7\xe3o",children:"Video com a configura\xe7\xe3o"}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/Ka6nfYmEaXI",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,i.jsx)(o.h2,{id:"arduino-ide",children:"Arduino IDE"}),"\n",(0,i.jsx)(o.p,{children:"Arduino \xe9 uma plataforma de prototipa\xe7\xe3o de projetos eletr\xf4nicos composta por placas e uma interface de programa\xe7\xe3o chamada Arduino."}),"\n",(0,i.jsxs)(o.p,{children:["Antes de come\xe7armos as configura\xe7\xf5es \xe9 importante que voc\xea instale a Arduino IDE em seu sistema operacional. Acesse: ",(0,i.jsx)(o.a,{href:"https://www.arduino.cc/en/software",children:"https://www.arduino.cc/en/software"})," e baixe a vers\xe3o adequada para o seu sistema operacional."]}),"\n",(0,i.jsx)(o.p,{children:"Estamos usando para esse tutorial a Arduino IDE 1.8.15, recomendamos essa vers\xe3o ou superior."}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{alt:"Download IDE",src:a(39916).c+"",width:"843",height:"396"})}),"\n",(0,i.jsx)(o.h2,{id:"instala\xe7\xe3o-do-pacote-esp32-para-arduino",children:"Instala\xe7\xe3o do pacote ESP32 para Arduino"}),"\n",(0,i.jsx)(o.p,{children:"Para instala\xe7\xe3o do pacote ESP32 para Arduino usaremos a ferramenta Gerenciador de placas na pr\xf3pria IDE."}),"\n",(0,i.jsx)(o.p,{children:"Siga os seguintes passos:"}),"\n",(0,i.jsxs)(o.ol,{children:["\n",(0,i.jsx)(o.li,{children:"Abra a Arduino IDe e acesse Arquivos -> Prefer\xeancias;"}),"\n",(0,i.jsxs)(o.li,{children:["Cole em \u201cURLs adicionais para Gerenciadores de Placas\u201d a seguinte URL:\n",(0,i.jsx)(o.code,{children:"https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json"})]}),"\n",(0,i.jsx)(o.li,{children:"Clique em OK;"}),"\n",(0,i.jsx)(o.li,{children:"V\xe1 em Ferramentas > Placa > Gerenciador de Placas;"}),"\n",(0,i.jsx)(o.li,{children:"Ao abrir, procure por ESP32-S2, e clique em instalar;"}),"\n"]}),"\n",(0,i.jsx)(o.p,{children:"Veja como o passo a passo na imagem abaixo:"}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{alt:"pacote passo a passo",src:a(83374).c+"",width:"1083",height:"781"})}),"\n",(0,i.jsx)(o.p,{children:"Pronto, agora \xe9 s\xf3 ir em placa e procurar pela Franzininho WiFi:"}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{alt:"Selecionando a placa",src:a(4536).c+"",width:"1083",height:"781"})}),"\n",(0,i.jsx)(o.p,{children:"Fa\xe7a a seguinte configura\xe7\xe3o:"}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{alt:"Configura\xe7\xe3o",src:a(4540).c+"",width:"1365",height:"740"})}),"\n",(0,i.jsx)(o.p,{children:"Agora faremos um exemplo para verificar o processo de upload."}),"\n",(0,i.jsx)(o.p,{children:"Abra o exemplo GetChipID:"}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{alt:"Exemplo",src:a(63572).c+"",width:"1365",height:"739"})}),"\n",(0,i.jsx)(o.p,{children:"Agora faremos o upload para a placa. Se for a primeira vez que voc\xea usar\xe1 a Arduino IDE para programar a Franzininho WiFi voc\xea dever\xe1 colocar a placa em modo DFU para carregar o c\xf3digo. Ap\xf3s isso n\xe3o precisar\xe1 mais fazer esse procedimento."}),"\n",(0,i.jsx)(o.admonition,{title:"Dica",type:"tip",children:(0,i.jsx)(o.p,{children:"Isso dever\xe1 sempre ser feito se voc\xea programar a placa com outras plataformas como ESP-IDF, CircuitPython, etc. Apos esse procedimento \xe9 s\xf3 programar a placa pressionando upload, como estamos acostumado a fazer com outras placas."})}),"\n",(0,i.jsx)(o.p,{children:"Colocando a placa em modo DFU"}),"\n",(0,i.jsxs)(o.ol,{children:["\n",(0,i.jsxs)(o.li,{children:["\n",(0,i.jsx)(o.p,{children:"Plugue a placa na USB;"}),"\n"]}),"\n",(0,i.jsxs)(o.li,{children:["\n",(0,i.jsx)(o.p,{children:"Pressione o bot\xe3o Boot e segure;"}),"\n"]}),"\n",(0,i.jsxs)(o.li,{children:["\n",(0,i.jsx)(o.p,{children:"Pressione o bot\xe3o Reset e solte em seguida;"}),"\n"]}),"\n",(0,i.jsxs)(o.li,{children:["\n",(0,i.jsx)(o.p,{children:"Solte o bot\xe3o Boot."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(o.p,{children:"Para fazer carregar o c\xf3digo na placa clique em Upload:"}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{alt:"Uoload",src:a(39176).c+"",width:"520",height:"618"})}),"\n",(0,i.jsx)(o.p,{children:"Abra o monitor serial e configure a velocidade para 115200 bps:"}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{alt:"Monitor Serial",src:a(10080).c+"",width:"1321",height:"509"})}),"\n",(0,i.jsx)(o.p,{children:"Ser\xe1 exibido o modelo e chip ID."}),"\n",(0,i.jsx)(o.p,{children:"Agora voc\xea pode carregar qualquer c\xf3digo para a placa sem precisar coloc\xe1-la em modo DFU."}),"\n",(0,i.jsxs)(o.admonition,{type:"tip",children:[(0,i.jsx)(o.mdxAdmonitionTitle,{}),(0,i.jsx)(o.p,{children:"A Franzininho WiFi MSC funciona da mesma forma para upload via Arduino IDE. A diferen\xe7a \xe9 que nesse modo podemos carregar bin\xe1rios sem uso da IDE, apenas carregando o bin\xe1rio para o dispositivo de armazenamento criado no computador."})]})]})}function l(e={}){const{wrapper:o}={...(0,r.MN)(),...e.components};return o?(0,i.jsx)(o,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},95788:(e,o,a)=>{a.d(o,{MN:()=>d});var i=a(11504);function r(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function n(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);o&&(i=i.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,i)}return a}function s(e){for(var o=1;o=0||(r[a]=e[a]);return r}(e,o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var c=i.createContext({}),d=function(e){var o=i.useContext(c),a=o;return e&&(a="function"==typeof e?e(o):s(s({},o),e)),a},p={inlineCode:"code",wrapper:function(e){var o=e.children;return i.createElement(i.Fragment,{},o)}},l=i.forwardRef((function(e,o){var a=e.components,r=e.mdxType,n=e.originalType,c=e.parentName,l=t(e,["components","mdxType","originalType","parentName"]),m=d(a),u=r,h=m["".concat(c,".").concat(u)]||m[u]||p[u]||n;return a?i.createElement(h,s(s({ref:o},l),{},{components:a})):i.createElement(h,s({ref:o},l))}));l.displayName="MDXCreateElement"},39916:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/00-download-428b272c195061c55de27a5770c95e1e.png"},83374:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/01-pacote-275e24ec407da429f03fe456dd16253a.gif"},4536:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/02-placa-d724ea164399f9f31002b8b205ea7e35.gif"},4540:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/03-configura-b2256d3303f3ebd6303f795543ec6332.png"},63572:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/04-exemplo-55dcd031bd5489559f4b7f790e734ac6.png"},39176:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/05-upload-2c7649aa9e74e252995b995d3f4a4fce.png"},10080:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/06-terminal-serial-d76f0eb9610be895efec7943b91c1e11.png"}}]); \ No newline at end of file diff --git a/assets/js/52090148.36dda4c6.js b/assets/js/52090148.36dda4c6.js deleted file mode 100755 index 41422ab4e..000000000 --- a/assets/js/52090148.36dda4c6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9948],{3905:(e,n,r)=>{r.d(n,{Zo:()=>s,kt:()=>g});var t=r(7294);function i(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function o(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function a(e){for(var n=1;n=0||(i[r]=e[r]);return i}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var c=t.createContext({}),d=function(e){var n=t.useContext(c),r=n;return e&&(r="function"==typeof e?e(n):a(a({},n),e)),r},s=function(e){var n=d(e.components);return t.createElement(c.Provider,{value:n},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},m=t.forwardRef((function(e,n){var r=e.components,i=e.mdxType,o=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=d(r),m=i,g=u["".concat(c,".").concat(m)]||u[m]||p[m]||o;return r?t.createElement(g,a(a({ref:n},s),{},{components:r})):t.createElement(g,a({ref:n},s))}));function g(e,n){var r=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=m;var l={};for(var c in n)hasOwnProperty.call(n,c)&&(l[c]=n[c]);l.originalType=e,l[u]="string"==typeof e?e:i,a[1]=l;for(var d=2;d{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var t=r(3117),i=(r(7294),r(3905));const o={id:"led-rgb",title:"LED RGB",slug:"/franzininho-diy/led-rgb",description:"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores"},a=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/led-rgb",id:"FranzininhoDIY/exemplos-arduino/led-rgb",title:"LED RGB",description:"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores",source:"@site/docs/FranzininhoDIY/exemplos-arduino/led-rgb.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/led-rgb",permalink:"/docs/franzininho-diy/led-rgb",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/led-rgb.md",tags:[],version:"current",frontMatter:{id:"led-rgb",title:"LED RGB",slug:"/franzininho-diy/led-rgb",description:"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores"},sidebar:"docs",previous:{title:"Tecla Liga/Desliga",permalink:"/docs/franzininho-diy/tecla-liga-desliga"},next:{title:"Elefante Colorido! Que cor?",permalink:"/docs/franzininho-diy/elefante-colorido"}},c={},d=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],s={toc:d},u="wrapper";function p(e){let{components:n,...o}=e;return(0,i.kt)(u,(0,t.Z)({},s,o,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores."),(0,i.kt)("p",null,"Voc\xea pode controlar da forma que voc\xea quiser, confira o c\xf3digo simples que est\xe1 na documenta\xe7\xe3o."),(0,i.kt)("p",null,"Modifique, crie e compartilhe!"),(0,i.kt)("h2",{id:"materiais"},"Materiais"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"1 Placa Franzininho DIY;"),(0,i.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,i.kt)("li",{parentName:"ul"},"1 LED RGB catodo comum;"),(0,i.kt)("li",{parentName:"ul"},"3 Resistor 1k"),(0,i.kt)("li",{parentName:"ul"},"3 Jumpers macho/f\xeamea;")),(0,i.kt)("h2",{id:"circuito"},"Circuito"),(0,i.kt)("p",null,"Na protoboard voc\xea pode montar da seguinte forma:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Circuito",src:r(9198).Z,width:"1858",height:"755"})),(0,i.kt)("h2",{id:"sketch"},"Sketch"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"//RGB com a Franzininho DIY\n\nconst int red = 0; \nconst int green = 1; \nconst int blue = 2; \n\nvoid setup() {\n // configura os pinos de cada cor como sa\xedda:\n pinMode(red, OUTPUT);\n pinMode(green, OUTPUT);\n pinMode(blue, OUTPUT);\n}\n\nvoid loop() {\n // aciona o LED na cor vermelha:\n digitalWrite(red, HIGH);\n digitalWrite(green, LOW);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n \n // aciona o LED na cor verde:\n digitalWrite(red, LOW);\n digitalWrite(green, HIGH);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n\n // aciona o LED na cor azul:\n digitalWrite(red, LOW);\n digitalWrite(green, LOW);\n digitalWrite(blue, HIGH);\n delay(5000); // aguarda 5000ms \n}\n")),(0,i.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,i.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311375002746225216?view=diagram"}),(0,i.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,i.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/qdJ21Qu36S0",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}p.isMDXComponent=!0},9198:(e,n,r)=>{r.d(n,{Z:()=>t});const t=r.p+"assets/images/rbg-485967653c4d59e1df2b2fe622001ab6.png"}}]); \ No newline at end of file diff --git a/assets/js/52090148.83b31edf.js b/assets/js/52090148.83b31edf.js new file mode 100755 index 000000000..0a8cab77c --- /dev/null +++ b/assets/js/52090148.83b31edf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8324],{26936:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var i=r(17624),o=r(95788);const t={id:"led-rgb",title:"LED RGB",slug:"/franzininho-diy/led-rgb",description:"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores"},a=void 0,c={id:"FranzininhoDIY/exemplos-arduino/led-rgb",title:"LED RGB",description:"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores",source:"@site/docs/FranzininhoDIY/exemplos-arduino/led-rgb.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/led-rgb",permalink:"/docs/franzininho-diy/led-rgb",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/led-rgb.md",tags:[],version:"current",frontMatter:{id:"led-rgb",title:"LED RGB",slug:"/franzininho-diy/led-rgb",description:"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores"},sidebar:"docs",previous:{title:"Tecla Liga/Desliga",permalink:"/docs/franzininho-diy/tecla-liga-desliga"},next:{title:"Elefante Colorido! Que cor?",permalink:"/docs/franzininho-diy/elefante-colorido"}},l={},d=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function s(e){const n={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores."}),"\n",(0,i.jsx)(n.p,{children:"Voc\xea pode controlar da forma que voc\xea quiser, confira o c\xf3digo simples que est\xe1 na documenta\xe7\xe3o."}),"\n",(0,i.jsx)(n.p,{children:"Modifique, crie e compartilhe!"}),"\n",(0,i.jsx)(n.h2,{id:"materiais",children:"Materiais"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"1 Placa Franzininho DIY;"}),"\n",(0,i.jsx)(n.li,{children:"1 Protoboard;"}),"\n",(0,i.jsx)(n.li,{children:"1 LED RGB catodo comum;"}),"\n",(0,i.jsx)(n.li,{children:"3 Resistor 1k"}),"\n",(0,i.jsx)(n.li,{children:"3 Jumpers macho/f\xeamea;"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,i.jsx)(n.p,{children:"Na protoboard voc\xea pode montar da seguinte forma:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Circuito",src:r(85276).c+"",width:"1858",height:"755"})}),"\n",(0,i.jsx)(n.h2,{id:"sketch",children:"Sketch"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-cpp",children:"//RGB com a Franzininho DIY\n\nconst int red = 0; \nconst int green = 1; \nconst int blue = 2; \n\nvoid setup() {\n // configura os pinos de cada cor como sa\xedda:\n pinMode(red, OUTPUT);\n pinMode(green, OUTPUT);\n pinMode(blue, OUTPUT);\n}\n\nvoid loop() {\n // aciona o LED na cor vermelha:\n digitalWrite(red, HIGH);\n digitalWrite(green, LOW);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n \n // aciona o LED na cor verde:\n digitalWrite(red, LOW);\n digitalWrite(green, HIGH);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n\n // aciona o LED na cor azul:\n digitalWrite(red, LOW);\n digitalWrite(green, LOW);\n digitalWrite(blue, HIGH);\n delay(5000); // aguarda 5000ms \n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311375002746225216?view=diagram"}),"\n",(0,i.jsx)(n.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/qdJ21Qu36S0",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function u(e={}){const{wrapper:n}={...(0,o.MN)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(s,{...e})}):s(e)}},95788:(e,n,r)=>{r.d(n,{MN:()=>d});var i=r(11504);function o(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function t(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,i)}return r}function a(e){for(var n=1;n=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=i.createContext({}),d=function(e){var n=i.useContext(l),r=n;return e&&(r="function"==typeof e?e(n):a(a({},n),e)),r},s={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},u=i.forwardRef((function(e,n){var r=e.components,o=e.mdxType,t=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),p=d(r),m=o,h=p["".concat(l,".").concat(m)]||p[m]||s[m]||t;return r?i.createElement(h,a(a({ref:n},u),{},{components:r})):i.createElement(h,a({ref:n},u))}));u.displayName="MDXCreateElement"},85276:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/rbg-485967653c4d59e1df2b2fe622001ab6.png"}}]); \ No newline at end of file diff --git a/assets/js/52fc124a.b1aa0e25.js b/assets/js/52fc124a.b1aa0e25.js new file mode 100755 index 000000000..80b85a185 --- /dev/null +++ b/assets/js/52fc124a.b1aa0e25.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3744],{4060:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=i(17624),o=i(95788);const a={id:"franzininho-tiny",title:"Placa Franzininho Tiny",slug:"/franzininho-tiny/franzininho-tiny",description:"Detalhes da Franzininho Tiny"},t=void 0,s={id:"FranzininhoTiny/franzininho-tiny",title:"Placa Franzininho Tiny",description:"Detalhes da Franzininho Tiny",source:"@site/docs/FranzininhoTiny/franzininho-tiny.md",sourceDirName:"FranzininhoTiny",slug:"/franzininho-tiny/franzininho-tiny",permalink:"/docs/franzininho-tiny/franzininho-tiny",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoTiny/franzininho-tiny.md",tags:[],version:"current",frontMatter:{id:"franzininho-tiny",title:"Placa Franzininho Tiny",slug:"/franzininho-tiny/franzininho-tiny",description:"Detalhes da Franzininho Tiny"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/docs/FranzMakey/primeiros-passos"},next:{title:"Placa Franzino",permalink:"/docs/Franzino/franzino"}},c={},l=[{value:"Resumo de recursos",id:"resumo-de-recursos",level:2},{value:"Documenta\xe7\xe3o",id:"documenta\xe7\xe3o",level:2},{value:"Projeto Open Hardware",id:"projeto-open-hardware",level:2},{value:"Onde comprar",id:"onde-comprar",level:2}];function d(n){const e={a:"a",admonition:"admonition",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,o.MN)(),...n.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.p,{children:"A Franzininho Tiny veio para dar squencia ao excelente trabalho feito pela Franzininho DIY. Em muitas aplica\xe7\xf5es a soldagem n\xe3o \xe9 vi\xe1vel, assim, muitas vezes foram solicitadas placas Franzininho DIY soldadas, o que n\xe3o era a proposta da placa no formato DIY."}),"\n",(0,r.jsx)(e.p,{children:"Para facilitar, escolhemos um microcontrolador que mantenha a compatibilidade com a Franzininho DIY, por\xe9m com mais op\xe7\xf5es de pinos e no formato SMD."}),"\n",(0,r.jsx)(e.p,{children:"A Franzininho Tiny tem um form factor compat\xedvel com protoboard e j\xe1 vem montada e pronta para programar:"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Franzininho Tiny",src:i(10592).c+"",width:"557",height:"418"})}),"\n",(0,r.jsx)(e.h2,{id:"resumo-de-recursos",children:"Resumo de recursos"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"Microcontrolador: ATtiny841"}),"\n",(0,r.jsx)(e.li,{children:"Pinos de I/O: at\xe9 11 (alguns est\xe3o ligados a USB)"}),"\n",(0,r.jsx)(e.li,{children:"Entradas Anal\xf3gicas: at\xe9 9"}),"\n",(0,r.jsx)(e.li,{children:"PWM: 4"}),"\n",(0,r.jsx)(e.li,{children:"I2C: 1"}),"\n",(0,r.jsx)(e.li,{children:"SPI: 1"}),"\n",(0,r.jsx)(e.li,{children:"UART: 1"}),"\n",(0,r.jsx)(e.li,{children:"Tens\xe3o de funcionamento: 5V"}),"\n",(0,r.jsx)(e.li,{children:"Alimenta\xe7\xe3o: USB(5V) ou externa (de 7,5V \xe0 9V)"}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"documenta\xe7\xe3o",children:"Documenta\xe7\xe3o"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://github.com/Franzininho/Franzininho-Tiny",children:"Reposit\xf3rio do Hardware"})}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"projeto-open-hardware",children:"Projeto Open Hardware"}),"\n",(0,r.jsx)(e.p,{children:"Assim como a Franzininho DIY, a placa Franzininho tiny tamb\xe9m foi publicada como projeto de hardware aberto. Para essa placa foi escolhida a CERN Open Hardware Licence, uma licen\xe7as mais adequada para projetos de hardware."}),"\n",(0,r.jsx)(e.p,{children:"Conforme definido no \u201chow to\u201d da licen\xe7a, no reposit\xf3rio do projeto est\xe3o inclu\xeddos os seguintes arquivos:"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"LICENSE.TXT"}),"\n",(0,r.jsx)(e.li,{children:"cern_ohl_v_1_2_howto.pdf"}),"\n",(0,r.jsx)(e.li,{children:"CHANGES.TXT"}),"\n",(0,r.jsx)(e.li,{children:"COPYRIGHT.TXT"}),"\n",(0,r.jsx)(e.li,{children:"PRODUCT.TXT"}),"\n"]}),"\n",(0,r.jsx)(e.admonition,{title:"Importante",type:"important",children:(0,r.jsx)(e.p,{children:"Para reprodu\xe7\xe3o do projeto ou deriva\xe7\xf5es, \xe9 importante verificar os requisitos da licen\xe7a , copyright e boas pr\xe1ticas."})}),"\n",(0,r.jsx)(e.h2,{id:"onde-comprar",children:"Onde comprar"}),"\n",(0,r.jsxs)(e.p,{children:["Entrar em contato: ",(0,r.jsx)(e.a,{href:"mailto:contato@franzininho.com.br",children:"contato@franzininho.com.br"})]})]})}function h(n={}){const{wrapper:e}={...(0,o.MN)(),...n.components};return e?(0,r.jsx)(e,{...n,children:(0,r.jsx)(d,{...n})}):d(n)}},95788:(n,e,i)=>{i.d(e,{MN:()=>l});var r=i(11504);function o(n,e,i){return e in n?Object.defineProperty(n,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):n[e]=i,n}function a(n,e){var i=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),i.push.apply(i,r)}return i}function t(n){for(var e=1;e=0||(o[i]=n[i]);return o}(n,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(n,i)&&(o[i]=n[i])}return o}var c=r.createContext({}),l=function(n){var e=r.useContext(c),i=e;return n&&(i="function"==typeof n?n(e):t(t({},e),n)),i},d={inlineCode:"code",wrapper:function(n){var e=n.children;return r.createElement(r.Fragment,{},e)}},h=r.forwardRef((function(n,e){var i=n.components,o=n.mdxType,a=n.originalType,c=n.parentName,h=s(n,["components","mdxType","originalType","parentName"]),p=l(i),m=o,u=p["".concat(c,".").concat(m)]||p[m]||d[m]||a;return i?r.createElement(u,t(t({ref:e},h),{},{components:i})):r.createElement(u,t({ref:e},h))}));h.displayName="MDXCreateElement"},10592:(n,e,i)=>{i.d(e,{c:()=>r});const r=i.p+"assets/images/placa-franzininho-tiny-proto-6ac3251dc92b81414d14e47a1d8d8433.jpg"}}]); \ No newline at end of file diff --git a/assets/js/52fc124a.f8810c76.js b/assets/js/52fc124a.f8810c76.js deleted file mode 100755 index aea97c177..000000000 --- a/assets/js/52fc124a.f8810c76.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2749],{3905:(n,e,a)=>{a.d(e,{Zo:()=>s,kt:()=>h});var r=a(7294);function t(n,e,a){return e in n?Object.defineProperty(n,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[e]=a,n}function o(n,e){var a=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),a.push.apply(a,r)}return a}function i(n){for(var e=1;e=0||(t[a]=n[a]);return t}(n,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(n,a)&&(t[a]=n[a])}return t}var c=r.createContext({}),p=function(n){var e=r.useContext(c),a=e;return n&&(a="function"==typeof n?n(e):i(i({},e),n)),a},s=function(n){var e=p(n.components);return r.createElement(c.Provider,{value:e},n.children)},u="mdxType",m={inlineCode:"code",wrapper:function(n){var e=n.children;return r.createElement(r.Fragment,{},e)}},d=r.forwardRef((function(n,e){var a=n.components,t=n.mdxType,o=n.originalType,c=n.parentName,s=l(n,["components","mdxType","originalType","parentName"]),u=p(a),d=t,h=u["".concat(c,".").concat(d)]||u[d]||m[d]||o;return a?r.createElement(h,i(i({ref:e},s),{},{components:a})):r.createElement(h,i({ref:e},s))}));function h(n,e){var a=arguments,t=e&&e.mdxType;if("string"==typeof n||t){var o=a.length,i=new Array(o);i[0]=d;var l={};for(var c in e)hasOwnProperty.call(e,c)&&(l[c]=e[c]);l.originalType=n,l[u]="string"==typeof n?n:t,i[1]=l;for(var p=2;p{a.r(e),a.d(e,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var r=a(3117),t=(a(7294),a(3905));const o={id:"franzininho-tiny",title:"Placa Franzininho Tiny",slug:"/franzininho-tiny/franzininho-tiny",description:"Detalhes da Franzininho Tiny"},i=void 0,l={unversionedId:"FranzininhoTiny/franzininho-tiny",id:"FranzininhoTiny/franzininho-tiny",title:"Placa Franzininho Tiny",description:"Detalhes da Franzininho Tiny",source:"@site/docs/FranzininhoTiny/franzininho-tiny.md",sourceDirName:"FranzininhoTiny",slug:"/franzininho-tiny/franzininho-tiny",permalink:"/docs/franzininho-tiny/franzininho-tiny",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoTiny/franzininho-tiny.md",tags:[],version:"current",frontMatter:{id:"franzininho-tiny",title:"Placa Franzininho Tiny",slug:"/franzininho-tiny/franzininho-tiny",description:"Detalhes da Franzininho Tiny"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/docs/FranzMakey/primeiros-passos"},next:{title:"Placa Franzino",permalink:"/docs/Franzino/franzino"}},c={},p=[{value:"Resumo de recursos",id:"resumo-de-recursos",level:2},{value:"Documenta\xe7\xe3o",id:"documenta\xe7\xe3o",level:2},{value:"Projeto Open Hardware",id:"projeto-open-hardware",level:2},{value:"Onde comprar",id:"onde-comprar",level:2}],s={toc:p},u="wrapper";function m(n){let{components:e,...o}=n;return(0,t.kt)(u,(0,r.Z)({},s,o,{components:e,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"A Franzininho Tiny veio para dar squencia ao excelente trabalho feito pela Franzininho DIY. Em muitas aplica\xe7\xf5es a soldagem n\xe3o \xe9 vi\xe1vel, assim, muitas vezes foram solicitadas placas Franzininho DIY soldadas, o que n\xe3o era a proposta da placa no formato DIY."),(0,t.kt)("p",null,"Para facilitar, escolhemos um microcontrolador que mantenha a compatibilidade com a Franzininho DIY, por\xe9m com mais op\xe7\xf5es de pinos e no formato SMD."),(0,t.kt)("p",null,"A Franzininho Tiny tem um form factor compat\xedvel com protoboard e j\xe1 vem montada e pronta para programar:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzininho Tiny",src:a(7109).Z,width:"557",height:"418"})),(0,t.kt)("h2",{id:"resumo-de-recursos"},"Resumo de recursos"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Microcontrolador: ATtiny841"),(0,t.kt)("li",{parentName:"ul"},"Pinos de I/O: at\xe9 11 (alguns est\xe3o ligados a USB)"),(0,t.kt)("li",{parentName:"ul"},"Entradas Anal\xf3gicas: at\xe9 9"),(0,t.kt)("li",{parentName:"ul"},"PWM: 4"),(0,t.kt)("li",{parentName:"ul"},"I2C: 1"),(0,t.kt)("li",{parentName:"ul"},"SPI: 1"),(0,t.kt)("li",{parentName:"ul"},"UART: 1"),(0,t.kt)("li",{parentName:"ul"},"Tens\xe3o de funcionamento: 5V"),(0,t.kt)("li",{parentName:"ul"},"Alimenta\xe7\xe3o: USB(5V) ou externa (de 7,5V \xe0 9V)")),(0,t.kt)("h2",{id:"documenta\xe7\xe3o"},"Documenta\xe7\xe3o"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/Franzininho-Tiny"},"Reposit\xf3rio do Hardware"))),(0,t.kt)("h2",{id:"projeto-open-hardware"},"Projeto Open Hardware"),(0,t.kt)("p",null,"Assim como a Franzininho DIY, a placa Franzininho tiny tamb\xe9m foi publicada como projeto de hardware aberto. Para essa placa foi escolhida a CERN Open Hardware Licence, uma licen\xe7as mais adequada para projetos de hardware."),(0,t.kt)("p",null,"Conforme definido no \u201chow to\u201d da licen\xe7a, no reposit\xf3rio do projeto est\xe3o inclu\xeddos os seguintes arquivos:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"LICENSE.TXT"),(0,t.kt)("li",{parentName:"ul"},"cern_ohl_v_1_2_howto.pdf"),(0,t.kt)("li",{parentName:"ul"},"CHANGES.TXT"),(0,t.kt)("li",{parentName:"ul"},"COPYRIGHT.TXT"),(0,t.kt)("li",{parentName:"ul"},"PRODUCT.TXT")),(0,t.kt)("admonition",{title:"Importante",type:"important"},(0,t.kt)("p",{parentName:"admonition"},"Para reprodu\xe7\xe3o do projeto ou deriva\xe7\xf5es, \xe9 importante verificar os requisitos da licen\xe7a , copyright e boas pr\xe1ticas.")),(0,t.kt)("h2",{id:"onde-comprar"},"Onde comprar"),(0,t.kt)("p",null,"Entrar em contato: ",(0,t.kt)("a",{parentName:"p",href:"mailto:contato@franzininho.com.br"},"contato@franzininho.com.br")))}m.isMDXComponent=!0},7109:(n,e,a)=>{a.d(e,{Z:()=>r});const r=a.p+"assets/images/placa-franzininho-tiny-proto-6ac3251dc92b81414d14e47a1d8d8433.jpg"}}]); \ No newline at end of file diff --git a/assets/js/558e6545.20aeae35.js b/assets/js/558e6545.20aeae35.js deleted file mode 100755 index dd7f4f315..000000000 --- a/assets/js/558e6545.20aeae35.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5755],{3905:(e,r,n)=>{n.d(r,{Zo:()=>u,kt:()=>f});var o=n(7294);function t(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function i(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var r=1;r=0||(t[n]=e[n]);return t}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(t[n]=e[n])}return t}var s=o.createContext({}),p=function(e){var r=o.useContext(s),n=r;return e&&(n="function"==typeof e?e(r):a(a({},r),e)),n},u=function(e){var r=p(e.components);return o.createElement(s.Provider,{value:r},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},l=o.forwardRef((function(e,r){var n=e.components,t=e.mdxType,i=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),m=p(n),l=t,f=m["".concat(s,".").concat(l)]||m[l]||d[l]||i;return n?o.createElement(f,a(a({ref:r},u),{},{components:n})):o.createElement(f,a({ref:r},u))}));function f(e,r){var n=arguments,t=r&&r.mdxType;if("string"==typeof e||t){var i=n.length,a=new Array(i);a[0]=l;var c={};for(var s in r)hasOwnProperty.call(r,s)&&(c[s]=r[s]);c.originalType=e,c[m]="string"==typeof e?e:t,a[1]=c;for(var p=2;p{n.r(r),n.d(r,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>c,toc:()=>p});var o=n(3117),t=(n(7294),n(3905));const i={id:"tutoriais-i2c",title:"I2C",slug:"/franzininho-diy/tutoriais-i2c",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},a=void 0,c={unversionedId:"FranzininhoDIY/exemplos-arduino/tutoriais-i2c",id:"FranzininhoDIY/exemplos-arduino/tutoriais-i2c",title:"I2C",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/i2c.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/tutoriais-i2c",permalink:"/docs/franzininho-diy/tutoriais-i2c",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/i2c.md",tags:[],version:"current",frontMatter:{id:"tutoriais-i2c",title:"I2C",slug:"/franzininho-diy/tutoriais-i2c",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."}},s={},p=[{value:"Placa de Circuito impresso",id:"placa-de-circuito-impresso",level:2}],u={toc:p},m="wrapper";function d(e){let{components:r,...n}=e;return(0,t.kt)(m,(0,o.Z)({},u,n,{components:r,mdxType:"MDXLayout"}),(0,t.kt)("h2",{id:"placa-de-circuito-impresso"},"Placa de Circuito impresso"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/558e6545.303e0db1.js b/assets/js/558e6545.303e0db1.js new file mode 100755 index 000000000..4ecc8b714 --- /dev/null +++ b/assets/js/558e6545.303e0db1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1020],{70760:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>c,toc:()=>p});var n=o(17624),t=o(95788);const i={id:"tutoriais-i2c",title:"I2C",slug:"/franzininho-diy/tutoriais-i2c",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},a=void 0,c={id:"FranzininhoDIY/exemplos-arduino/tutoriais-i2c",title:"I2C",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/i2c.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/tutoriais-i2c",permalink:"/docs/franzininho-diy/tutoriais-i2c",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/i2c.md",tags:[],version:"current",frontMatter:{id:"tutoriais-i2c",title:"I2C",slug:"/franzininho-diy/tutoriais-i2c",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."}},s={},p=[{value:"Placa de Circuito impresso",id:"placa-de-circuito-impresso",level:2}];function u(e){const r={h2:"h2",...(0,t.MN)(),...e.components};return(0,n.jsx)(r.h2,{id:"placa-de-circuito-impresso",children:"Placa de Circuito impresso"})}function d(e={}){const{wrapper:r}={...(0,t.MN)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},95788:(e,r,o)=>{o.d(r,{MN:()=>p});var n=o(11504);function t(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}function i(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,n)}return o}function a(e){for(var r=1;r=0||(t[o]=e[o]);return t}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var s=n.createContext({}),p=function(e){var r=n.useContext(s),o=r;return e&&(o="function"==typeof e?e(r):a(a({},r),e)),o},u={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},d=n.forwardRef((function(e,r){var o=e.components,t=e.mdxType,i=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),m=p(o),l=t,f=m["".concat(s,".").concat(l)]||m[l]||u[l]||i;return o?n.createElement(f,a(a({ref:r},d),{},{components:o})):n.createElement(f,a({ref:r},d))}));d.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/55a63e59.2f05caae.js b/assets/js/55a63e59.2f05caae.js new file mode 100755 index 000000000..5c0affe2a --- /dev/null +++ b/assets/js/55a63e59.2f05caae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6312],{22796:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>s,metadata:()=>t,toc:()=>c});var o=n(17624),r=n(95788);const s={id:"circuitpython-display-oled-i2c",title:"Display OLED I2C",slug:"/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",description:"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},a=void 0,t={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c",title:"Display OLED I2C",description:"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/display-oled-i2c.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/display-oled-i2c.md",tags:[],version:"current",frontMatter:{id:"circuitpython-display-oled-i2c",title:"Display OLED I2C",slug:"/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",description:"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},sidebar:"docs",previous:{title:"Pinos de Toque Capacitivo",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo"},next:{title:"Sensor de temperatura e umidade DHT11",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/dht11"}},d={},c=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2}];function l(e){const i={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.p,{children:"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython."}),"\n",(0,o.jsx)(i.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,o.jsx)(i.p,{children:"Identifique os seguintes materiais necess\xe1rios para este projeto:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsx)(i.li,{children:"1 Franzininho WiFi."}),"\n",(0,o.jsx)(i.li,{children:"1 Display OLED 128x64 I2C."}),"\n",(0,o.jsx)(i.li,{children:"1 Protoboard."}),"\n",(0,o.jsx)(i.li,{children:"Cabos de liga\xe7\xe3o."}),"\n"]}),"\n",(0,o.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,o.jsx)(i.p,{children:"A pr\xf3xima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:"}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"Circuito Display OLED I2C",src:n(41761).c+"",width:"463",height:"512"})}),"\n",(0,o.jsx)(i.p,{children:"Resumindo o que \xe9 mostrado nas Figuras 4.2 at\xe9 4.5, a conex\xe3o dos terminais do OLED aos terminais das respectivas placas de desenvolvimento deve ser realizada conforme a tabela a seguir."}),"\n",(0,o.jsxs)(i.table,{children:[(0,o.jsx)(i.thead,{children:(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.th,{style:{textAlign:"center"},children:"OLED I2C"}),(0,o.jsx)(i.th,{style:{textAlign:"center"},children:"Franzininho WiFi"})]})}),(0,o.jsxs)(i.tbody,{children:[(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"SDA (DATA)"}),(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"GPIO8"})]}),(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"SCK (CLK)"}),(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"GPIO9"})]}),(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"VDD"}),(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"3V3"})]}),(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"GND"}),(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"GND"})]})]})]}),"\n",(0,o.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,o.jsx)(i.p,{children:"Como o display OLED \xe9 um componente com funcionamento bastante complexo, vamos fazer uso de uma biblioteca que implementa todas as funcionalidades, permitindo que nossos programas possam ser implementados de maneira bastante simples e produtiva."}),"\n",(0,o.jsxs)(i.p,{children:["As bibliotecas para o CircuitPython podem ser obtidas atrav\xe9s do endere\xe7o ",(0,o.jsx)(i.a,{href:"https://circuitpython.org/libraries",children:"https://circuitpython.org/libraries"}),". Escolha e baixe o arquivo de acordo com a vers\xe3o do CircuitPyhthon que voc\xea tem instalado na Franzininho WiFi."]}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"Bibliotecas",src:n(73508).c+"",width:"1295",height:"465"})}),"\n",(0,o.jsx)(i.p,{children:"Em seguida, copie os seguintes arquivos diretamente para a posta lib do sistema de arquivos da Franzininho WiFi:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsx)(i.li,{children:"adafruit_ssd1306.mpy"}),"\n",(0,o.jsx)(i.li,{children:"adafruit_framebuf.mpy"}),"\n"]}),"\n",(0,o.jsxs)(i.p,{children:["Copie tamb\xe9m o arquivo ",(0,o.jsx)(i.strong,{children:"font5x8.bin"}),", mas neste caso, para a pasta raiz da Franzininho WiFi. Por fim, implemente o programa abaixo no arquivo ",(0,o.jsx)(i.strong,{children:"code.py"})," que est\xe1 localizado na pasta raiz da Franzininho WiFi."]}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"import board\nimport busio\nimport adafruit_ssd1306\nimport time\n\ni2c = busio.I2C(scl=board.IO9, sda=board.IO8)\noled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)\n\ntry:\n inverter = False\n while True:\n oled.invert(inverter)\n oled.fill(0)\n oled.rect(0, 0, 128, 64, 1)\n oled.rect(2, 2, 124, 60, 1)\n oled.text('Franzininho', 4, 4, 1)\n oled.text('WiFi', 4, 14, 1)\n oled.show()\n inverter = not inverter\n time.sleep(2)\nfinally:\n oled.invert(False)\n oled.fill(0)\n oled.show()\n"})}),"\n",(0,o.jsx)(i.h2,{id:"an\xe1lise-do-c\xf3digo",children:"An\xe1lise do c\xf3digo"}),"\n",(0,o.jsx)(i.p,{children:"Devemos importar as bibliotecas busio e adafruit_ssd1306, que ser\xe3o respons\xe1veis pelas classes que ir\xe3o possibilitar a comunica\xe7\xe3o I2C e o uso do display OLED, respectivamente."}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"import busio\nimport adafruit_ssd1306\n"})}),"\n",(0,o.jsxs)(i.p,{children:["A comunica\xe7\xe3o I2C ser\xe1 realizada atrav\xe9s do terminais ",(0,o.jsx)(i.strong,{children:"IO9"})," e ",(0,o.jsx)(i.strong,{children:"IO8"})," da Franzininho WiFi, conforme podemos observar na pinagem, dispon\xedvel em ",(0,o.jsx)(i.a,{href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi",children:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi"})]}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"i2c = busio.I2C(scl=board.IO9, sda=board.IO8)\n"})}),"\n",(0,o.jsx)(i.p,{children:"A configura\xe7\xe3o do display OLED deve levar em conta as suas dimens\xf5es e o seu endere\xe7o no barramento I2C."}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)\n"})}),"\n",(0,o.jsxs)(i.p,{children:["Neste programa o objetivo e realizar a invers\xe3o da exibi\xe7\xe3o do conte\xfado no display a cada 2 segundos. Desta forma, ser\xe1 usado o m\xe9todo ",(0,o.jsx)(i.code,{children:"invert"})," que receber\xe1 uma vari\xe1vel booleana como par\xe2metro, sendo seu valor alternado entre ",(0,o.jsx)(i.code,{children:"True"})," e ",(0,o.jsx)(i.code,{children:"False"}),"."]}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"oled.invert(inverter)\n"})}),"\n",(0,o.jsxs)(i.p,{children:["O m\xe9todo ",(0,o.jsx)(i.code,{children:"fill"})," \xe9 usado para preencher toda \xe1rea do display e atuar\xe1 em conjunto com o m\xe9todo ",(0,o.jsx)(i.code,{children:"invert"}),". Como se trata de um display monocrom\xe1tico temos duas cores dispon\xedveis, 0 (zero) que representa o preto (pixel desligado) e 1 (um) para especificar o branco (pixel ligado), caso o m\xe9todo ",(0,o.jsx)(i.code,{children:"invert"})," tenha recebido como par\xe2metro o valor False. Por outro lado, caso ",(0,o.jsx)(i.code,{children:"invert"})," receber True como par\xe2metro, 1 (um) vai representar o preto (pixel desligado) e 0 (zero) vai especificar o branco (pixel ligado)."]}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"oled.invert(inverter)\noled.fill(0)\n"})}),"\n",(0,o.jsxs)(i.p,{children:["Na sequ\xeancia foi usado o m\xe9todo ",(0,o.jsx)(i.code,{children:"rect"})," para desenhar um ret\xe2ngulo come\xe7ando nas coordenadas ",(0,o.jsx)(i.strong,{children:"x = 0"})," e ",(0,o.jsx)(i.strong,{children:"y = 0"})," e com ",(0,o.jsx)(i.strong,{children:"128 pixels de largura"})," e ",(0,o.jsx)(i.strong,{children:"64 pixels de altura"})," e, logo em seguida, um outro ret\xe2ngulo levemente inferior. O \xfaltimo par\xe2metro do m\xe9todo ",(0,o.jsx)(i.code,{children:"rect"})," consiste na cor que, neste exemplo, ser\xe1 branco. Desta forma, acabamos desenhando uma borda dupla que envolve toda a \xe1rea do display."]}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"oled.rect(0, 0, 128, 64, 1)\noled.rect(2, 2, 124, 60, 1)\n"})}),"\n",(0,o.jsxs)(i.p,{children:["O m\xe9todo ",(0,o.jsx)(i.code,{children:"text"})," possibilita exibir um texto nas coordenadas e na cor especificadas."]}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"oled.text('Franzininho', 4, 4, 1)\noled.text('WiFi', 4, 14, 1)\n"})}),"\n",(0,o.jsxs)(i.p,{children:["O m\xe9todo ",(0,o.jsx)(i.code,{children:"show"}),", ir\xe1 executar os m\xe9todos usados anteriormente, ou seja, ",(0,o.jsx)(i.code,{children:"fill"}),", ",(0,o.jsx)(i.code,{children:"rect"})," e ",(0,o.jsx)(i.code,{children:"text"})," no display. Ou seja, qualquer conte\xfado s\xf3 \xe9 exibido no display quando o m\xe9todo ",(0,o.jsx)(i.code,{children:"show"})," \xe9 executado."]}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"oled.show()\n"})}),"\n",(0,o.jsx)(i.p,{children:"Tente exibir outros textos e imagens. Compartilhe seus resultados com a comunidade."}),"\n",(0,o.jsx)(i.admonition,{type:"info",children:(0,o.jsxs)(i.p,{children:["Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,o.jsx)(i.a,{href:"https://discord.gg/H5kENmWGaz",children:"Discord"})]})}),"\n",(0,o.jsxs)(i.table,{children:[(0,o.jsx)(i.thead,{children:(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.th,{children:"Autor"}),(0,o.jsx)(i.th,{children:(0,o.jsx)(i.a,{href:"mailto:claudio.oliveira@fatec.sp.gov.br",children:"Cl\xe1udio Lu\xeds Vieira Oliveira"})})]})}),(0,o.jsx)(i.tbody,{children:(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.td,{children:"Data:"}),(0,o.jsx)(i.td,{children:"07/10/2021"})]})})]})]})}function p(e={}){const{wrapper:i}={...(0,r.MN)(),...e.components};return i?(0,o.jsx)(i,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},95788:(e,i,n)=>{n.d(i,{MN:()=>c});var o=n(11504);function r(e,i,n){return i in e?Object.defineProperty(e,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[i]=n,e}function s(e,i){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);i&&(o=o.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var i=1;i=0||(r[n]=e[n]);return r}(e,i);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var d=o.createContext({}),c=function(e){var i=o.useContext(d),n=i;return e&&(n="function"==typeof e?e(i):a(a({},i),e)),n},l={inlineCode:"code",wrapper:function(e){var i=e.children;return o.createElement(o.Fragment,{},i)}},p=o.forwardRef((function(e,i){var n=e.components,r=e.mdxType,s=e.originalType,d=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),h=c(n),u=r,m=h["".concat(d,".").concat(u)]||h[u]||l[u]||s;return n?o.createElement(m,a(a({ref:i},p),{},{components:n})):o.createElement(m,a({ref:i},p))}));p.displayName="MDXCreateElement"},41761:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/circuito-display-oled-i2c-ff5b68392bb5d09ccc0c91e16b875d4c.png"},73508:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/libraries-43f696d429c655da2cf36dc63cfc72e0.png"}}]); \ No newline at end of file diff --git a/assets/js/55a63e59.530fbf6e.js b/assets/js/55a63e59.530fbf6e.js deleted file mode 100755 index d61edc3f7..000000000 --- a/assets/js/55a63e59.530fbf6e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4334],{3905:(e,a,t)=>{t.d(a,{Zo:()=>d,kt:()=>h});var n=t(7294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function i(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function r(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=n.createContext({}),p=function(e){var a=n.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):r(r({},a),e)),t},d=function(e){var a=p(e.components);return n.createElement(l.Provider,{value:a},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var t=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=p(t),u=o,h=c["".concat(l,".").concat(u)]||c[u]||m[u]||i;return t?n.createElement(h,r(r({ref:a},d),{},{components:t})):n.createElement(h,r({ref:a},d))}));function h(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var i=t.length,r=new Array(i);r[0]=u;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[c]="string"==typeof e?e:o,r[1]=s;for(var p=2;p{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var n=t(3117),o=(t(7294),t(3905));const i={id:"circuitpython-display-oled-i2c",title:"Display OLED I2C",slug:"/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",description:"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},r=void 0,s={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c",title:"Display OLED I2C",description:"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/display-oled-i2c.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/display-oled-i2c.md",tags:[],version:"current",frontMatter:{id:"circuitpython-display-oled-i2c",title:"Display OLED I2C",slug:"/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",description:"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},sidebar:"docs",previous:{title:"Pinos de Toque Capacitivo",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo"},next:{title:"Sensor de temperatura e umidade DHT11",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/dht11"}},l={},p=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2}],d={toc:p},c="wrapper";function m(e){let{components:a,...i}=e;return(0,o.kt)(c,(0,n.Z)({},d,i,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython."),(0,o.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,o.kt)("p",null,"Identifique os seguintes materiais necess\xe1rios para este projeto:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"1 Franzininho WiFi."),(0,o.kt)("li",{parentName:"ul"},"1 Display OLED 128x64 I2C."),(0,o.kt)("li",{parentName:"ul"},"1 Protoboard."),(0,o.kt)("li",{parentName:"ul"},"Cabos de liga\xe7\xe3o.")),(0,o.kt)("h2",{id:"circuito"},"Circuito"),(0,o.kt)("p",null,"A pr\xf3xima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Circuito Display OLED I2C",src:t(1348).Z,width:"463",height:"512"})),(0,o.kt)("p",null,"Resumindo o que \xe9 mostrado nas Figuras 4.2 at\xe9 4.5, a conex\xe3o dos terminais do OLED aos terminais das respectivas placas de desenvolvimento deve ser realizada conforme a tabela a seguir."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"OLED I2C"),(0,o.kt)("th",{parentName:"tr",align:"center"},"Franzininho WiFi"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"SDA (DATA)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"GPIO8")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"SCK (CLK)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"GPIO9")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"VDD"),(0,o.kt)("td",{parentName:"tr",align:"center"},"3V3")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"GND"),(0,o.kt)("td",{parentName:"tr",align:"center"},"GND")))),(0,o.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,o.kt)("p",null,"Como o display OLED \xe9 um componente com funcionamento bastante complexo, vamos fazer uso de uma biblioteca que implementa todas as funcionalidades, permitindo que nossos programas possam ser implementados de maneira bastante simples e produtiva."),(0,o.kt)("p",null,"As bibliotecas para o CircuitPython podem ser obtidas atrav\xe9s do endere\xe7o ",(0,o.kt)("a",{parentName:"p",href:"https://circuitpython.org/libraries"},"https://circuitpython.org/libraries"),". Escolha e baixe o arquivo de acordo com a vers\xe3o do CircuitPyhthon que voc\xea tem instalado na Franzininho WiFi."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Bibliotecas",src:t(609).Z,width:"1295",height:"465"})),(0,o.kt)("p",null,"Em seguida, copie os seguintes arquivos diretamente para a posta lib do sistema de arquivos da Franzininho WiFi:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"adafruit_ssd1306.mpy"),(0,o.kt)("li",{parentName:"ul"},"adafruit_framebuf.mpy")),(0,o.kt)("p",null,"Copie tamb\xe9m o arquivo ",(0,o.kt)("strong",{parentName:"p"},"font5x8.bin"),", mas neste caso, para a pasta raiz da Franzininho WiFi. Por fim, implemente o programa abaixo no arquivo ",(0,o.kt)("strong",{parentName:"p"},"code.py")," que est\xe1 localizado na pasta raiz da Franzininho WiFi."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"import board\nimport busio\nimport adafruit_ssd1306\nimport time\n\ni2c = busio.I2C(scl=board.IO9, sda=board.IO8)\noled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)\n\ntry:\n inverter = False\n while True:\n oled.invert(inverter)\n oled.fill(0)\n oled.rect(0, 0, 128, 64, 1)\n oled.rect(2, 2, 124, 60, 1)\n oled.text('Franzininho', 4, 4, 1)\n oled.text('WiFi', 4, 14, 1)\n oled.show()\n inverter = not inverter\n time.sleep(2)\nfinally:\n oled.invert(False)\n oled.fill(0)\n oled.show()\n")),(0,o.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},"An\xe1lise do c\xf3digo"),(0,o.kt)("p",null,"Devemos importar as bibliotecas busio e adafruit_ssd1306, que ser\xe3o respons\xe1veis pelas classes que ir\xe3o possibilitar a comunica\xe7\xe3o I2C e o uso do display OLED, respectivamente. "),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"import busio\nimport adafruit_ssd1306\n")),(0,o.kt)("p",null,"A comunica\xe7\xe3o I2C ser\xe1 realizada atrav\xe9s do terminais ",(0,o.kt)("strong",{parentName:"p"},"IO9")," e ",(0,o.kt)("strong",{parentName:"p"},"IO8")," da Franzininho WiFi, conforme podemos observar na pinagem, dispon\xedvel em ",(0,o.kt)("a",{parentName:"p",href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi"},"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi")," "),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"i2c = busio.I2C(scl=board.IO9, sda=board.IO8)\n")),(0,o.kt)("p",null,"A configura\xe7\xe3o do display OLED deve levar em conta as suas dimens\xf5es e o seu endere\xe7o no barramento I2C."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)\n")),(0,o.kt)("p",null,"Neste programa o objetivo e realizar a invers\xe3o da exibi\xe7\xe3o do conte\xfado no display a cada 2 segundos. Desta forma, ser\xe1 usado o m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"invert")," que receber\xe1 uma vari\xe1vel booleana como par\xe2metro, sendo seu valor alternado entre ",(0,o.kt)("inlineCode",{parentName:"p"},"True")," e ",(0,o.kt)("inlineCode",{parentName:"p"},"False"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"oled.invert(inverter)\n")),(0,o.kt)("p",null,"O m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"fill")," \xe9 usado para preencher toda \xe1rea do display e atuar\xe1 em conjunto com o m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"invert"),". Como se trata de um display monocrom\xe1tico temos duas cores dispon\xedveis, 0 (zero) que representa o preto (pixel desligado) e 1 (um) para especificar o branco (pixel ligado), caso o m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"invert")," tenha recebido como par\xe2metro o valor False. Por outro lado, caso ",(0,o.kt)("inlineCode",{parentName:"p"},"invert")," receber True como par\xe2metro, 1 (um) vai representar o preto (pixel desligado) e 0 (zero) vai especificar o branco (pixel ligado)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"oled.invert(inverter)\noled.fill(0)\n")),(0,o.kt)("p",null,"Na sequ\xeancia foi usado o m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"rect")," para desenhar um ret\xe2ngulo come\xe7ando nas coordenadas ",(0,o.kt)("strong",{parentName:"p"},"x = 0")," e ",(0,o.kt)("strong",{parentName:"p"},"y = 0")," e com ",(0,o.kt)("strong",{parentName:"p"},"128 pixels de largura")," e ",(0,o.kt)("strong",{parentName:"p"},"64 pixels de altura")," e, logo em seguida, um outro ret\xe2ngulo levemente inferior. O \xfaltimo par\xe2metro do m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"rect")," consiste na cor que, neste exemplo, ser\xe1 branco. Desta forma, acabamos desenhando uma borda dupla que envolve toda a \xe1rea do display. "),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"oled.rect(0, 0, 128, 64, 1)\noled.rect(2, 2, 124, 60, 1)\n")),(0,o.kt)("p",null,"O m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"text")," possibilita exibir um texto nas coordenadas e na cor especificadas."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"oled.text('Franzininho', 4, 4, 1)\noled.text('WiFi', 4, 14, 1)\n")),(0,o.kt)("p",null,"O m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"show"),", ir\xe1 executar os m\xe9todos usados anteriormente, ou seja, ",(0,o.kt)("inlineCode",{parentName:"p"},"fill"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"rect")," e ",(0,o.kt)("inlineCode",{parentName:"p"},"text")," no display. Ou seja, qualquer conte\xfado s\xf3 \xe9 exibido no display quando o m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"show")," \xe9 executado."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"oled.show()\n")),(0,o.kt)("p",null,"Tente exibir outros textos e imagens. Compartilhe seus resultados com a comunidade. "),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,o.kt)("a",{parentName:"p",href:"https://discord.gg/H5kENmWGaz"},"Discord"))),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Autor"),(0,o.kt)("th",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"th",href:"mailto:claudio.oliveira@fatec.sp.gov.br"},"Cl\xe1udio Lu\xeds Vieira Oliveira")))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Data:"),(0,o.kt)("td",{parentName:"tr",align:null},"07/10/2021")))))}m.isMDXComponent=!0},1348:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/circuito-display-oled-i2c-ff5b68392bb5d09ccc0c91e16b875d4c.png"},609:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/libraries-43f696d429c655da2cf36dc63cfc72e0.png"}}]); \ No newline at end of file diff --git a/assets/js/55ee410e.3c44d945.js b/assets/js/55ee410e.3c44d945.js new file mode 100755 index 000000000..e061072f1 --- /dev/null +++ b/assets/js/55ee410e.3c44d945.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1196],{85452:(e,i,a)=>{a.r(i),a.d(i,{assets:()=>s,contentTitle:()=>r,default:()=>u,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var n=a(17624),o=a(95788);const t={id:"tecla-liga-desliga",title:"Tecla Liga/Desliga",slug:"/franzininho-diy/tecla-liga-desliga",description:"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos."},r=void 0,l={id:"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga",title:"Tecla Liga/Desliga",description:"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/tecla-liga-desliga.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/tecla-liga-desliga",permalink:"/docs/franzininho-diy/tecla-liga-desliga",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/tecla-liga-desliga.md",tags:[],version:"current",frontMatter:{id:"tecla-liga-desliga",title:"Tecla Liga/Desliga",slug:"/franzininho-diy/tecla-liga-desliga",description:"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos."},sidebar:"docs",previous:{title:"Leitura de Tecla",permalink:"/docs/franzininho-diy/leitura-tecla"},next:{title:"LED RGB",permalink:"/docs/franzininho-diy/led-rgb"}},s={},c=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function d(e){const i={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.p,{children:"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos."}),"\n",(0,n.jsx)(i.h2,{id:"materiais",children:"Materiais"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"Placa Franzininho;"}),"\n",(0,n.jsx)(i.li,{children:"Protoboard;"}),"\n",(0,n.jsx)(i.li,{children:"LED 3mm;"}),"\n",(0,n.jsx)(i.li,{children:"1 Resistor 3300;"}),"\n",(0,n.jsx)(i.li,{children:"1 Resistor de 1K;"}),"\n",(0,n.jsx)(i.li,{children:"1 Bot\xe3o;"}),"\n",(0,n.jsx)(i.li,{children:"Jumpers;"}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,n.jsx)(i.p,{children:"No protoboard voc\xea deve inserir o LED, resistores e o bot\xe3o, conforme a imagem abaixo:"}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"Circuito ",src:a(73676).c+"",width:"1755",height:"702"})}),"\n",(0,n.jsx)(i.h2,{id:"sketch",children:"Sketch"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-cpp",children:"/*\n Franzininho\n Exemplo: Tecla liga/desliga\n Esse exemplo exibe como fazer ligar e desligar uma sa\xedda atrav\xe9s de uma tecla\n*/\nconst int LED = 1; //pino para o LED\nconst int BOTAO = 2; //pino para o bot\xe3o\nint estadoAnteriorBotao = 0; // armazena o estado anterior do bot\xe3o\n\nvoid setup(){\n pinMode(LED,OUTPUT); //o LED \xe9 uma sa\xedda\n pinMode(BOTAO,INPUT); //o BOTAO \xe9 uma entrada\n}\n\nvoid loop (){\n int estadoAtualBT= digitalRead(BOTAO); // L\xea estado do bot\xe3o\n delay(10);\n\nif ((estadoAtualBT != estadoAnteriorBotao)&& (estadoAtualBT == LOW)){ //Se o bot\xe3o foi pressionado e o seu estado mudou\n digitalWrite(LED,!digitalRead(LED)); //inverte estado do LED\n}\n estadoAnteriorBotao = estadoAtualBT; //salva o estado do bot\xe3o para comparar na pr\xf3xima leitura\n}\n"})}),"\n",(0,n.jsx)(i.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,n.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311373968060711489?view=diagram"}),"\n",(0,n.jsx)(i.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,n.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/Aht0fUuGIjQ",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function u(e={}){const{wrapper:i}={...(0,o.MN)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},95788:(e,i,a)=>{a.d(i,{MN:()=>c});var n=a(11504);function o(e,i,a){return i in e?Object.defineProperty(e,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[i]=a,e}function t(e,i){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);i&&(n=n.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var i=1;i=0||(o[a]=e[a]);return o}(e,i);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var i=n.useContext(s),a=i;return e&&(a="function"==typeof e?e(i):r(r({},i),e)),a},d={inlineCode:"code",wrapper:function(e){var i=e.children;return n.createElement(n.Fragment,{},i)}},u=n.forwardRef((function(e,i){var a=e.components,o=e.mdxType,t=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=o,g=p["".concat(s,".").concat(m)]||p[m]||d[m]||t;return a?n.createElement(g,r(r({ref:i},u),{},{components:a})):n.createElement(g,r({ref:i},u))}));u.displayName="MDXCreateElement"},73676:(e,i,a)=>{a.d(i,{c:()=>n});const n=a.p+"assets/images/circuito-tecla-liga-desliga-0133088e4f085079b1a5dc507efc2d45.png"}}]); \ No newline at end of file diff --git a/assets/js/55ee410e.b1ed8793.js b/assets/js/55ee410e.b1ed8793.js deleted file mode 100755 index 2cc8cced9..000000000 --- a/assets/js/55ee410e.b1ed8793.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2496],{3905:(e,a,t)=>{t.d(a,{Zo:()=>c,kt:()=>g});var i=t(7294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function n(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,i)}return t}function r(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=i.createContext({}),d=function(e){var a=i.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):r(r({},a),e)),t},c=function(e){var a=d(e.components);return i.createElement(s.Provider,{value:a},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return i.createElement(i.Fragment,{},a)}},m=i.forwardRef((function(e,a){var t=e.components,o=e.mdxType,n=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=d(t),m=o,g=u["".concat(s,".").concat(m)]||u[m]||p[m]||n;return t?i.createElement(g,r(r({ref:a},c),{},{components:t})):i.createElement(g,r({ref:a},c))}));function g(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var n=t.length,r=new Array(n);r[0]=m;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[u]="string"==typeof e?e:o,r[1]=l;for(var d=2;d{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>r,default:()=>p,frontMatter:()=>n,metadata:()=>l,toc:()=>d});var i=t(3117),o=(t(7294),t(3905));const n={id:"tecla-liga-desliga",title:"Tecla Liga/Desliga",slug:"/franzininho-diy/tecla-liga-desliga",description:"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos."},r=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga",id:"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga",title:"Tecla Liga/Desliga",description:"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/tecla-liga-desliga.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/tecla-liga-desliga",permalink:"/docs/franzininho-diy/tecla-liga-desliga",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/tecla-liga-desliga.md",tags:[],version:"current",frontMatter:{id:"tecla-liga-desliga",title:"Tecla Liga/Desliga",slug:"/franzininho-diy/tecla-liga-desliga",description:"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos."},sidebar:"docs",previous:{title:"Leitura de Tecla",permalink:"/docs/franzininho-diy/leitura-tecla"},next:{title:"LED RGB",permalink:"/docs/franzininho-diy/led-rgb"}},s={},d=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],c={toc:d},u="wrapper";function p(e){let{components:a,...n}=e;return(0,o.kt)(u,(0,i.Z)({},c,n,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos."),(0,o.kt)("h2",{id:"materiais"},"Materiais"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Placa Franzininho;"),(0,o.kt)("li",{parentName:"ul"},"Protoboard;"),(0,o.kt)("li",{parentName:"ul"},"LED 3mm; "),(0,o.kt)("li",{parentName:"ul"},"1 Resistor 3300; "),(0,o.kt)("li",{parentName:"ul"},"1 Resistor de 1K; "),(0,o.kt)("li",{parentName:"ul"},"1 Bot\xe3o; "),(0,o.kt)("li",{parentName:"ul"},"Jumpers;")),(0,o.kt)("h2",{id:"circuito"},"Circuito"),(0,o.kt)("p",null,"No protoboard voc\xea deve inserir o LED, resistores e o bot\xe3o, conforme a imagem abaixo:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Circuito ",src:t(643).Z,width:"1755",height:"702"})),(0,o.kt)("h2",{id:"sketch"},"Sketch"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cpp"},"/*\n Franzininho\n Exemplo: Tecla liga/desliga\n Esse exemplo exibe como fazer ligar e desligar uma sa\xedda atrav\xe9s de uma tecla\n*/\nconst int LED = 1; //pino para o LED\nconst int BOTAO = 2; //pino para o bot\xe3o\nint estadoAnteriorBotao = 0; // armazena o estado anterior do bot\xe3o\n\nvoid setup(){\n pinMode(LED,OUTPUT); //o LED \xe9 uma sa\xedda\n pinMode(BOTAO,INPUT); //o BOTAO \xe9 uma entrada\n}\n\nvoid loop (){\n int estadoAtualBT= digitalRead(BOTAO); // L\xea estado do bot\xe3o\n delay(10);\n\nif ((estadoAtualBT != estadoAnteriorBotao)&& (estadoAtualBT == LOW)){ //Se o bot\xe3o foi pressionado e o seu estado mudou\n digitalWrite(LED,!digitalRead(LED)); //inverte estado do LED\n}\n estadoAnteriorBotao = estadoAtualBT; //salva o estado do bot\xe3o para comparar na pr\xf3xima leitura\n}\n")),(0,o.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,o.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311373968060711489?view=diagram"}),(0,o.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,o.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/Aht0fUuGIjQ",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}p.isMDXComponent=!0},643:(e,a,t)=>{t.d(a,{Z:()=>i});const i=t.p+"assets/images/circuito-tecla-liga-desliga-0133088e4f085079b1a5dc507efc2d45.png"}}]); \ No newline at end of file diff --git a/assets/js/58231389.566e0e53.js b/assets/js/58231389.566e0e53.js new file mode 100755 index 000000000..e41ba79e0 --- /dev/null +++ b/assets/js/58231389.566e0e53.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1520],{89172:(e,a,i)=>{i.r(a),i.d(a,{assets:()=>l,contentTitle:()=>t,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var n=i(17624),r=i(95788);const o={id:"circuitpython-sistema-de-irriga\xe7\xe3o",title:"Sistema de irriga\xe7\xe3o autom\xe1tico",slug:"/franzininho-wifi/exemplos-circuitpython/irrigacao",description:"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.",author:"Giuliane Eul\xe1lia Corr\xeaa"},t=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o",title:"Sistema de irriga\xe7\xe3o autom\xe1tico",description:"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/irrigacao.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/irrigacao",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/irrigacao",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/irrigacao.md",tags:[],version:"current",frontMatter:{id:"circuitpython-sistema-de-irriga\xe7\xe3o",title:"Sistema de irriga\xe7\xe3o autom\xe1tico",slug:"/franzininho-wifi/exemplos-circuitpython/irrigacao",description:"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.",author:"Giuliane Eul\xe1lia Corr\xeaa"},sidebar:"docs",previous:{title:"Servo motor",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/servo-motor"},next:{title:"Primeiros Passos",permalink:"/docs/franzininho-wifi/exemplos-arduino/primeiros-passos"}},l={},d=[{value:"Materiais Usados",id:"materiais-usados",level:2},{value:"Circuito Eletr\xf4nico",id:"circuito-eletr\xf4nico",level:2},{value:"C\xf3digo-fonte",id:"c\xf3digo-fonte",level:2},{value:"Entendendo o C\xf3digo-fonte",id:"entendendo-o-c\xf3digo-fonte",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function c(e){const a={a:"a",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o\nde suas plantas."}),"\n",(0,n.jsx)(a.p,{children:"Esse sistema permite programar as regras de acordo com as necessidades das plantas. Isso garante uma economia\nde \xe1gua e tempo, para quem possui um jardim ou horta e para grandes sistemas de irriga\xe7\xe3o\nna agricultura."}),"\n",(0,n.jsx)(a.p,{children:"Agora vamos descrever um exemplo de um sistema de irriga\xe7\xe3o automatico poss\xedvel de construir de forma simples mas com grande\npoder de automa\xe7\xe3o."}),"\n",(0,n.jsx)(a.h2,{id:"materiais-usados",children:(0,n.jsx)(a.strong,{children:"Materiais Usados"})}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"1 Placa Franzininho WiFi"}),"\n",(0,n.jsx)(a.li,{children:"1 Sensor de umidade do solo - Higr\xf4metro com saida digital e analogica"}),"\n",(0,n.jsx)(a.li,{children:"1 Protoboard de 830 pontos"}),"\n",(0,n.jsx)(a.li,{children:"1 Mini bomba de \xe1gua submersa 5v"}),"\n",(0,n.jsx)(a.li,{children:"1 Rel\xe9 5v"}),"\n",(0,n.jsx)(a.li,{children:"Cabos Jumpers - Macho/Macho e Macho/Femea"}),"\n"]}),"\n",(0,n.jsx)(a.h2,{id:"circuito-eletr\xf4nico",children:(0,n.jsx)(a.strong,{children:"Circuito Eletr\xf4nico"})}),"\n",(0,n.jsx)(a.p,{children:"Para o exemplo que vamos ver a seguir, realize a seguinte montagem:"}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Circuito Servo Motor",src:i(11868).c+"",width:"1779",height:"2385"})}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.strong,{children:"Observa\xe7\xf5es:"})}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"O rel\xe9 \xe9 conectado a 5V da placa"}),"\n",(0,n.jsx)(a.li,{children:"Cabos azuis: sa\xeddas digitais"}),"\n",(0,n.jsx)(a.li,{children:"Cabos vermelhos: VCC"}),"\n",(0,n.jsx)(a.li,{children:"Cabos pretos: GND"}),"\n"]}),"\n",(0,n.jsx)(a.h2,{id:"c\xf3digo-fonte",children:(0,n.jsx)(a.strong,{children:"C\xf3digo-fonte"})}),"\n",(0,n.jsxs)(a.p,{children:["Para iniciar, \xe9 necess\xe1rio j\xe1 ter seguido o tutorial de ",(0,n.jsx)(a.strong,{children:"Primeiros passos"}),", que tamb\xe9m se encontra na p\xe1gina da Franzininho em documenta\xe7\xe3o,\nter o CircuitPython instalado na placa e para esse projeto utilizamos o Mu editor. Para obter esse ambiente basta seguir os passos em ",(0,n.jsx)(a.strong,{children:"Instalando as ferramentas"}),"."]}),"\n",(0,n.jsx)(a.p,{children:"A partir daqui consideramos que os primeiros passos de instala\xe7\xe3o e do ambiente foram conclu\xeddos.\nAbaixo est\xe1 o c\xf3digo do sistema na placa usando CircuitPython, voc\xea pode copiar e colar o c\xf3digo fonte na sua IDE."}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:'import board\nimport time\n\nfrom digitalio import DigitalInOut, Direction, Pull\nfrom analogio import AnalogIn \n\nrelay = DigitalInOut(board.IO0)\nrelay.switch_to_output()\n\nhumid_analog = AnalogIn(board.IO1) \nhumid_digital = DigitalInOut(board.IO4) \nhumid_digital.direction = Direction.INPUT \n\nrelay.value = True\n\nwait_time = 1\nwatering_time = 1\n\ndry_value = 51130\n\nwhile True:\n try:\n print("humid (Digital value):", humid_digital.value)\n print("humid (Analogic value):", humid_analog.value)\n\n time.sleep(1);\n\n if humid_analog.value > dry_value :\n print("Starting watering...")\n\n relay.value = False\n\n time.sleep(watering_time)\n print("Finishing watering.")\n\n else:\n relay.value = True\n time.sleep(wait_time)\n\n except RuntimeError as e:\n print("Read failure")\n\n time.sleep(1)\n'})}),"\n",(0,n.jsx)(a.p,{children:"Ap\xf3s terminar de escrever, e analisar no ambiente de desenvolvimento. Basta salvar e apertar no serial para executar no mu-editor. Caso esteja utilizando outra IDE, basta execut\xe1-la no ambiente escolhido."}),"\n",(0,n.jsx)(a.h2,{id:"entendendo-o-c\xf3digo-fonte",children:(0,n.jsx)(a.strong,{children:"Entendendo o C\xf3digo-fonte"})}),"\n",(0,n.jsx)(a.p,{children:"O primeiro m\xf3dulo que vamos importar, \xe9 o board. Ele possibilita o acesso aos pinos da placa:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"import board\n"})}),"\n",(0,n.jsx)(a.p,{children:"Este m\xf3dulo fornece v\xe1rias fun\xe7\xf5es relacionadas ao tempo:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"import time\n"})}),"\n",(0,n.jsx)(a.p,{children:"O digitalio \xe9 um m\xf3dulo que cont\xe9m classes para fornecer acesso a IO digital b\xe1sico:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"from digitalio import DigitalInOut, Direction, Pull\n"})}),"\n",(0,n.jsx)(a.p,{children:"Cria um objeto e conecta o objeto com uma entrada anal\xf3gica:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"from analogio import AnalogIn \n"})}),"\n",(0,n.jsx)(a.p,{children:"Agora, vamos atribuir o rel\xe9:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"relay = DigitalInOut(board.IO0)\nrelay.switch_to_output()\n"})}),"\n",(0,n.jsx)(a.p,{children:"Atribuimos as entradas anal\xf3gicas e digitais do sensor de umidade do solo na porta 1, sendo esta uma porta anal\xf3gica e na porta 4 a digital do franzinho. Configurando tamb\xe9m o pino como entrada digital:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"humid_analog = AnalogIn(board.IO1) # analog\nhumid_digital = DigitalInOut(board.IO4) # digital\nhumid_digital.direction = Direction.INPUT\n"})}),"\n",(0,n.jsx)(a.p,{children:'O rel\xe9 foi configurado para usar a porta "sempre fechada",ent\xe3o precisamos defini-lo com o valor verdadeiro para que o rel\xe9 fique inativo:'}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"relay.value = True\n"})}),"\n",(0,n.jsx)(a.p,{children:"Per\xedodo de tempo para verificar o sistema. O controle desse per\xedodo de tempo para manter a rega da planta depende da voltagem que alimenta a bomba:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"wait_time = 1\nwatering_time = 1\n"})}),"\n",(0,n.jsx)(a.p,{children:"Adaptado de acordo com o sensor de umidade do solo, \xe9 necessario fazer laguns testes na sua terra para saber o valor da terra que vai ser utilizada:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"dry_value = 51130\n"})}),"\n",(0,n.jsxs)(a.p,{children:["Por fim, dentro do ",(0,n.jsx)(a.strong,{children:"while True"}),", o nosso loop, faremos com que os sensores leiam continuamente e imprima os valores lidos do sensor de umidade do solo:"]}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:'while True:\n try:\n\n print("humid (Digital value):", humid_digital.value)\n print("humid (Analogic value):", humid_analog.value)\n\n time.sleep(1);\n'})}),"\n",(0,n.jsx)(a.p,{children:'J\xe1 na condi\xe7\xe3o abaixo, caso o sensor receba um valor que indique que a terra est\xe1 seca, entramos no condicional if e conectamos o rel\xe9 no "sempre fechado",\ne \xe9 por isso que adicionar um Falso a "sempre fechado", signinifica aberto. Ent\xe3o a bomba \xe9 acionada realizando a irriga\xe7\xe3o:'}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:'if humid_analog.value > dry_value :\n print("Starting watering...")\n\n relay.value = False\n\n time.sleep(watering_time)\n print("Finishing watering.")\n\n'})}),"\n",(0,n.jsx)(a.p,{children:"Se o n\xedvel estiver OK, apenas nos certificamos de que o rel\xe9 esteja fechado:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:" else:\n relay.value = True\n time.sleep(wait_time)\n\n"})}),"\n",(0,n.jsx)(a.p,{children:"E colocamos o sensor para dormir novamente:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:" time.sleep(1)\n"})}),"\n",(0,n.jsxs)(a.p,{children:["Tamb\xe9m \xe9 possivel encontrar o codigo em ",(0,n.jsx)(a.a,{href:"https://github.com/GiulianeEC/SystemOfIrrigation_Franzininho",children:"https://github.com/GiulianeEC/SystemOfIrrigation_Franzininho"})]}),"\n",(0,n.jsx)(a.h2,{id:"conclus\xe3o",children:(0,n.jsx)(a.strong,{children:"Conclus\xe3o"})}),"\n",(0,n.jsx)(a.p,{children:"No decorrer da explica\xe7\xe3o, aprendemos a como montar de maneira simples um prot\xf3tipo de irriga\xe7\xe3o automatizado."}),"\n",(0,n.jsxs)(a.table,{children:[(0,n.jsx)(a.thead,{children:(0,n.jsxs)(a.tr,{children:[(0,n.jsx)(a.th,{children:"Autor"}),(0,n.jsx)(a.th,{children:"Giuliane Eul\xe1lia Corr\xeaa"})]})}),(0,n.jsx)(a.tbody,{children:(0,n.jsxs)(a.tr,{children:[(0,n.jsx)(a.td,{children:"Data:"}),(0,n.jsx)(a.td,{children:"28/01/2023"})]})})]})]})}function m(e={}){const{wrapper:a}={...(0,r.MN)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},95788:(e,a,i)=>{i.d(a,{MN:()=>d});var n=i(11504);function r(e,a,i){return a in e?Object.defineProperty(e,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[a]=i,e}function o(e,a){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),i.push.apply(i,n)}return i}function t(e){for(var a=1;a=0||(r[i]=e[i]);return r}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var l=n.createContext({}),d=function(e){var a=n.useContext(l),i=a;return e&&(i="function"==typeof e?e(a):t(t({},a),e)),i},c={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},m=n.forwardRef((function(e,a){var i=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=d(i),p=r,h=u["".concat(l,".").concat(p)]||u[p]||c[p]||o;return i?n.createElement(h,t(t({ref:a},m),{},{components:i})):n.createElement(h,t({ref:a},m))}));m.displayName="MDXCreateElement"},11868:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/prototipo_-b5947fa5c92bd19c5bf7a5f20d326652.jpg"}}]); \ No newline at end of file diff --git a/assets/js/58231389.59443b95.js b/assets/js/58231389.59443b95.js deleted file mode 100755 index 7dbd8c569..000000000 --- a/assets/js/58231389.59443b95.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9429],{3905:(e,a,t)=>{t.d(a,{Zo:()=>m,kt:()=>g});var n=t(7294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=n.createContext({}),u=function(e){var a=n.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},m=function(e){var a=u(e.components);return n.createElement(s.Provider,{value:a},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},c=n.forwardRef((function(e,a){var t=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),p=u(t),c=o,g=p["".concat(s,".").concat(c)]||p[c]||d[c]||r;return t?n.createElement(g,i(i({ref:a},m),{},{components:t})):n.createElement(g,i({ref:a},m))}));function g(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var r=t.length,i=new Array(r);i[0]=c;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var u=2;u{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>u});var n=t(3117),o=(t(7294),t(3905));const r={id:"circuitpython-sistema-de-irriga\xe7\xe3o",title:"Sistema de irriga\xe7\xe3o autom\xe1tico",slug:"/franzininho-wifi/exemplos-circuitpython/irrigacao",description:"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.",author:"Giuliane Eul\xe1lia Corr\xeaa"},i=void 0,l={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o",title:"Sistema de irriga\xe7\xe3o autom\xe1tico",description:"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/irrigacao.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/irrigacao",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/irrigacao",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/irrigacao.md",tags:[],version:"current",frontMatter:{id:"circuitpython-sistema-de-irriga\xe7\xe3o",title:"Sistema de irriga\xe7\xe3o autom\xe1tico",slug:"/franzininho-wifi/exemplos-circuitpython/irrigacao",description:"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.",author:"Giuliane Eul\xe1lia Corr\xeaa"},sidebar:"docs",previous:{title:"Servo motor",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/servo-motor"},next:{title:"Primeiros Passos",permalink:"/docs/franzininho-wifi/exemplos-arduino/primeiros-passos"}},s={},u=[{value:"Materiais Usados",id:"materiais-usados",level:2},{value:"Circuito Eletr\xf4nico",id:"circuito-eletr\xf4nico",level:2},{value:"C\xf3digo-fonte",id:"c\xf3digo-fonte",level:2},{value:"Entendendo o C\xf3digo-fonte",id:"entendendo-o-c\xf3digo-fonte",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],m={toc:u},p="wrapper";function d(e){let{components:a,...r}=e;return(0,o.kt)(p,(0,n.Z)({},m,r,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o\nde suas plantas. "),(0,o.kt)("p",null,"Esse sistema permite programar as regras de acordo com as necessidades das plantas. Isso garante uma economia\nde \xe1gua e tempo, para quem possui um jardim ou horta e para grandes sistemas de irriga\xe7\xe3o\nna agricultura."),(0,o.kt)("p",null,"Agora vamos descrever um exemplo de um sistema de irriga\xe7\xe3o automatico poss\xedvel de construir de forma simples mas com grande\npoder de automa\xe7\xe3o."),(0,o.kt)("h2",{id:"materiais-usados"},(0,o.kt)("strong",{parentName:"h2"},"Materiais Usados")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"1 Placa Franzininho WiFi"),(0,o.kt)("li",{parentName:"ul"},"1 Sensor de umidade do solo - Higr\xf4metro com saida digital e analogica"),(0,o.kt)("li",{parentName:"ul"},"1 Protoboard de 830 pontos"),(0,o.kt)("li",{parentName:"ul"},"1 Mini bomba de \xe1gua submersa 5v"),(0,o.kt)("li",{parentName:"ul"},"1 Rel\xe9 5v"),(0,o.kt)("li",{parentName:"ul"},"Cabos Jumpers - Macho/Macho e Macho/Femea")),(0,o.kt)("h2",{id:"circuito-eletr\xf4nico"},(0,o.kt)("strong",{parentName:"h2"},"Circuito Eletr\xf4nico")),(0,o.kt)("p",null,"Para o exemplo que vamos ver a seguir, realize a seguinte montagem:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Circuito Servo Motor",src:t(3566).Z,width:"1779",height:"2385"})),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Observa\xe7\xf5es:")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"O rel\xe9 \xe9 conectado a 5V da placa"),(0,o.kt)("li",{parentName:"ul"},"Cabos azuis: sa\xeddas digitais"),(0,o.kt)("li",{parentName:"ul"},"Cabos vermelhos: VCC"),(0,o.kt)("li",{parentName:"ul"},"Cabos pretos: GND")),(0,o.kt)("h2",{id:"c\xf3digo-fonte"},(0,o.kt)("strong",{parentName:"h2"},"C\xf3digo-fonte")),(0,o.kt)("p",null,"Para iniciar, \xe9 necess\xe1rio j\xe1 ter seguido o tutorial de ",(0,o.kt)("strong",{parentName:"p"},"Primeiros passos"),", que tamb\xe9m se encontra na p\xe1gina da Franzininho em documenta\xe7\xe3o,\nter o CircuitPython instalado na placa e para esse projeto utilizamos o Mu editor. Para obter esse ambiente basta seguir os passos em ",(0,o.kt)("strong",{parentName:"p"},"Instalando as ferramentas"),"."),(0,o.kt)("p",null,"A partir daqui consideramos que os primeiros passos de instala\xe7\xe3o e do ambiente foram conclu\xeddos.\nAbaixo est\xe1 o c\xf3digo do sistema na placa usando CircuitPython, voc\xea pode copiar e colar o c\xf3digo fonte na sua IDE."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'import board\nimport time\n\nfrom digitalio import DigitalInOut, Direction, Pull\nfrom analogio import AnalogIn \n\nrelay = DigitalInOut(board.IO0)\nrelay.switch_to_output()\n\nhumid_analog = AnalogIn(board.IO1) \nhumid_digital = DigitalInOut(board.IO4) \nhumid_digital.direction = Direction.INPUT \n\nrelay.value = True\n\nwait_time = 1\nwatering_time = 1\n\ndry_value = 51130\n\nwhile True:\n try:\n print("humid (Digital value):", humid_digital.value)\n print("humid (Analogic value):", humid_analog.value)\n\n time.sleep(1);\n\n if humid_analog.value > dry_value :\n print("Starting watering...")\n\n relay.value = False\n\n time.sleep(watering_time)\n print("Finishing watering.")\n\n else:\n relay.value = True\n time.sleep(wait_time)\n\n except RuntimeError as e:\n print("Read failure")\n\n time.sleep(1)\n')),(0,o.kt)("p",null,"Ap\xf3s terminar de escrever, e analisar no ambiente de desenvolvimento. Basta salvar e apertar no serial para executar no mu-editor. Caso esteja utilizando outra IDE, basta execut\xe1-la no ambiente escolhido."),(0,o.kt)("h2",{id:"entendendo-o-c\xf3digo-fonte"},(0,o.kt)("strong",{parentName:"h2"},"Entendendo o C\xf3digo-fonte")),(0,o.kt)("p",null,"O primeiro m\xf3dulo que vamos importar, \xe9 o board. Ele possibilita o acesso aos pinos da placa:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,o.kt)("p",null,"Este m\xf3dulo fornece v\xe1rias fun\xe7\xf5es relacionadas ao tempo:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"import time\n")),(0,o.kt)("p",null,"O digitalio \xe9 um m\xf3dulo que cont\xe9m classes para fornecer acesso a IO digital b\xe1sico:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"from digitalio import DigitalInOut, Direction, Pull\n")),(0,o.kt)("p",null,"Cria um objeto e conecta o objeto com uma entrada anal\xf3gica:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"from analogio import AnalogIn \n")),(0,o.kt)("p",null,"Agora, vamos atribuir o rel\xe9:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"relay = DigitalInOut(board.IO0)\nrelay.switch_to_output()\n")),(0,o.kt)("p",null,"Atribuimos as entradas anal\xf3gicas e digitais do sensor de umidade do solo na porta 1, sendo esta uma porta anal\xf3gica e na porta 4 a digital do franzinho. Configurando tamb\xe9m o pino como entrada digital:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"humid_analog = AnalogIn(board.IO1) # analog\nhumid_digital = DigitalInOut(board.IO4) # digital\nhumid_digital.direction = Direction.INPUT\n")),(0,o.kt)("p",null,'O rel\xe9 foi configurado para usar a porta "sempre fechada",ent\xe3o precisamos defini-lo com o valor verdadeiro para que o rel\xe9 fique inativo:'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"relay.value = True\n")),(0,o.kt)("p",null,"Per\xedodo de tempo para verificar o sistema. O controle desse per\xedodo de tempo para manter a rega da planta depende da voltagem que alimenta a bomba:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"wait_time = 1\nwatering_time = 1\n")),(0,o.kt)("p",null,"Adaptado de acordo com o sensor de umidade do solo, \xe9 necessario fazer laguns testes na sua terra para saber o valor da terra que vai ser utilizada:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"dry_value = 51130\n")),(0,o.kt)("p",null,"Por fim, dentro do ",(0,o.kt)("strong",{parentName:"p"},"while True"),", o nosso loop, faremos com que os sensores leiam continuamente e imprima os valores lidos do sensor de umidade do solo:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'while True:\n try:\n\n print("humid (Digital value):", humid_digital.value)\n print("humid (Analogic value):", humid_analog.value)\n\n time.sleep(1);\n')),(0,o.kt)("p",null,'J\xe1 na condi\xe7\xe3o abaixo, caso o sensor receba um valor que indique que a terra est\xe1 seca, entramos no condicional if e conectamos o rel\xe9 no "sempre fechado",\ne \xe9 por isso que adicionar um Falso a "sempre fechado", signinifica aberto. Ent\xe3o a bomba \xe9 acionada realizando a irriga\xe7\xe3o:'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'if humid_analog.value > dry_value :\n print("Starting watering...")\n\n relay.value = False\n\n time.sleep(watering_time)\n print("Finishing watering.")\n\n')),(0,o.kt)("p",null,"Se o n\xedvel estiver OK, apenas nos certificamos de que o rel\xe9 esteja fechado:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"}," else:\n relay.value = True\n time.sleep(wait_time)\n\n")),(0,o.kt)("p",null,"E colocamos o sensor para dormir novamente:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"}," time.sleep(1)\n")),(0,o.kt)("p",null,"Tamb\xe9m \xe9 possivel encontrar o codigo em ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/GiulianeEC/SystemOfIrrigation_Franzininho"},"https://github.com/GiulianeEC/SystemOfIrrigation_Franzininho")),(0,o.kt)("h2",{id:"conclus\xe3o"},(0,o.kt)("strong",{parentName:"h2"},"Conclus\xe3o")),(0,o.kt)("p",null,"No decorrer da explica\xe7\xe3o, aprendemos a como montar de maneira simples um prot\xf3tipo de irriga\xe7\xe3o automatizado."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Autor"),(0,o.kt)("th",{parentName:"tr",align:null},"Giuliane Eul\xe1lia Corr\xeaa"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Data:"),(0,o.kt)("td",{parentName:"tr",align:null},"28/01/2023")))))}d.isMDXComponent=!0},3566:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/prototipo_-b5947fa5c92bd19c5bf7a5f20d326652.jpg"}}]); \ No newline at end of file diff --git a/assets/js/5c90fd8c.9527db01.js b/assets/js/5c90fd8c.9527db01.js new file mode 100755 index 000000000..aaa11af71 --- /dev/null +++ b/assets/js/5c90fd8c.9527db01.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2212],{29456:(e,a,r)=>{r.r(a),r.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>t,metadata:()=>c,toc:()=>l});var n=r(17624),o=r(95788);const t={id:"franzmakey",title:"Placa FranzMakey",slug:"/FranzMakey/franzmakey",description:"Detalhes da placa FranzMakey"},i=void 0,c={id:"FranzMakey/franzmakey",title:"Placa FranzMakey",description:"Detalhes da placa FranzMakey",source:"@site/docs/FranzMakey/franzmakey.md",sourceDirName:"FranzMakey",slug:"/FranzMakey/franzmakey",permalink:"/docs/FranzMakey/franzmakey",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzMakey/franzmakey.md",tags:[],version:"current",frontMatter:{id:"franzmakey",title:"Placa FranzMakey",slug:"/FranzMakey/franzmakey",description:"Detalhes da placa FranzMakey"},sidebar:"docs",previous:{title:"Franzininho DIY no PICSimLab",permalink:"/docs/franzininho-diy/picsimlab/primeiros-passos"},next:{title:"Primeiros Passos",permalink:"/docs/FranzMakey/primeiros-passos"}},s={},l=[{value:"O que eu posso fazer com o FRANZmakey?",id:"o-que-eu-posso-fazer-com-o-franzmakey",level:2},{value:"O que posso aprender com o FRANZmakey?",id:"o-que-posso-aprender-com-o-franzmakey",level:2},{value:"O que vem no Kit:",id:"o-que-vem-no-kit",level:2},{value:"Veja o funcionamento:",id:"veja-o-funcionamento",level:2},{value:"Onde comprar?",id:"onde-comprar",level:2}];function m(e){const a={a:"a",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,o.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"FRANZmakey \xe9 um kit com funcionamento similar ao Makey Makey, por\xe9m com um custo bem mais acess\xedvel e \xe9 feito no Brasil. O objetivo dessa placa \xe9 possibilitar a intera\xe7\xe3o com o computador atrav\xe9s de objetos inusitados, como: frutas, legumes, etc, e assim estimular a criatividade com muita m\xe3o na massa e o pensamento computacional atrav\xe9s da programa\xe7\xe3o no Scratch."}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Placa FranzMakey",src:r(32960).c+"",width:"1156",height:"867"})}),"\n",(0,n.jsx)(a.h2,{id:"o-que-eu-posso-fazer-com-o-franzmakey",children:"O que eu posso fazer com o FRANZmakey?"}),"\n",(0,n.jsx)(a.p,{children:"Com esse kit voc\xea pode colocar a criatividade e m\xe3o na massa para funcionar, voc\xea pode criar um controle para controlar os controlar jogos no Scartch, animar personagens no Scratch tocando em frutas, criar narrativas, fazer m\xfasicas tocando em frutas e etc."}),"\n",(0,n.jsx)(a.h2,{id:"o-que-posso-aprender-com-o-franzmakey",children:"O que posso aprender com o FRANZmakey?"}),"\n",(0,n.jsx)(a.p,{children:"Pensamento computacional, criatividade, programa\xe7\xe3o em blocos no caso o Scratch, aplica\xe7\xf5es para interface com computador, etc."}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Placa FranzMakey",src:r(55876).c+"",width:"6000",height:"4000"})}),"\n",(0,n.jsx)(a.h2,{id:"o-que-vem-no-kit",children:"O que vem no Kit:"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"1 Placa FRANZmakey"}),"\n",(0,n.jsx)(a.li,{children:"1 Cabo USB 2 metros"}),"\n",(0,n.jsx)(a.li,{children:"5 Garras de jacar\xe9"}),"\n",(0,n.jsx)(a.li,{children:"Manual de instru\xe7\xf5es"}),"\n",(0,n.jsx)(a.li,{children:"Exemplos de projetos"}),"\n"]}),"\n",(0,n.jsx)(a.h2,{id:"veja-o-funcionamento",children:"Veja o funcionamento:"}),"\n",(0,n.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/1Ef_uA7mybc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,n.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/KfDgfVB0vzc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,n.jsx)(a.h2,{id:"onde-comprar",children:"Onde comprar?"}),"\n",(0,n.jsxs)(a.p,{children:["Esse kit \xe9 feito sob encomenda. Para adquiri-lo, entre em contato conosco: ",(0,n.jsx)(a.a,{href:"mailto:contato@franzininho.com.br%EF%BB%BF",children:"contato@franzininho.com.br\ufeff"})]})]})}function p(e={}){const{wrapper:a}={...(0,o.MN)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},95788:(e,a,r)=>{r.d(a,{MN:()=>l});var n=r(11504);function o(e,a,r){return a in e?Object.defineProperty(e,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[a]=r,e}function t(e,a){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var a=1;a=0||(o[r]=e[r]);return o}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var a=n.useContext(s),r=a;return e&&(r="function"==typeof e?e(a):i(i({},a),e)),r},m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},p=n.forwardRef((function(e,a){var r=e.components,o=e.mdxType,t=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),d=l(r),u=o,f=d["".concat(s,".").concat(u)]||d[u]||m[u]||t;return r?n.createElement(f,i(i({ref:a},p),{},{components:r})):n.createElement(f,i({ref:a},p))}));p.displayName="MDXCreateElement"},32960:(e,a,r)=>{r.d(a,{c:()=>n});const n=r.p+"assets/images/kit-FranzMakey-43924bbd9b93f8b37cccbbea0143239a.jpeg"},55876:(e,a,r)=>{r.d(a,{c:()=>n});const n=r.p+"assets/images/kit-franzmakey-frutas-c3bee3b42f39fc669574b58690132123.JPG"}}]); \ No newline at end of file diff --git a/assets/js/5c90fd8c.d9f4e602.js b/assets/js/5c90fd8c.d9f4e602.js deleted file mode 100755 index 1e3e0c543..000000000 --- a/assets/js/5c90fd8c.d9f4e602.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5016],{3905:(e,a,r)=>{r.d(a,{Zo:()=>m,kt:()=>f});var t=r(7294);function o(e,a,r){return a in e?Object.defineProperty(e,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[a]=r,e}function n(e,a){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),r.push.apply(r,t)}return r}function i(e){for(var a=1;a=0||(o[r]=e[r]);return o}(e,a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=t.createContext({}),l=function(e){var a=t.useContext(s),r=a;return e&&(r="function"==typeof e?e(a):i(i({},a),e)),r},m=function(e){var a=l(e.components);return t.createElement(s.Provider,{value:a},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},d=t.forwardRef((function(e,a){var r=e.components,o=e.mdxType,n=e.originalType,s=e.parentName,m=c(e,["components","mdxType","originalType","parentName"]),p=l(r),d=o,f=p["".concat(s,".").concat(d)]||p[d]||u[d]||n;return r?t.createElement(f,i(i({ref:a},m),{},{components:r})):t.createElement(f,i({ref:a},m))}));function f(e,a){var r=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var n=r.length,i=new Array(n);i[0]=d;var c={};for(var s in a)hasOwnProperty.call(a,s)&&(c[s]=a[s]);c.originalType=e,c[p]="string"==typeof e?e:o,i[1]=c;for(var l=2;l{r.r(a),r.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>n,metadata:()=>c,toc:()=>l});var t=r(3117),o=(r(7294),r(3905));const n={id:"franzmakey",title:"Placa FranzMakey",slug:"/FranzMakey/franzmakey",description:"Detalhes da placa FranzMakey"},i=void 0,c={unversionedId:"FranzMakey/franzmakey",id:"FranzMakey/franzmakey",title:"Placa FranzMakey",description:"Detalhes da placa FranzMakey",source:"@site/docs/FranzMakey/franzmakey.md",sourceDirName:"FranzMakey",slug:"/FranzMakey/franzmakey",permalink:"/docs/FranzMakey/franzmakey",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzMakey/franzmakey.md",tags:[],version:"current",frontMatter:{id:"franzmakey",title:"Placa FranzMakey",slug:"/FranzMakey/franzmakey",description:"Detalhes da placa FranzMakey"},sidebar:"docs",previous:{title:"Franzininho DIY no PICSimLab",permalink:"/docs/franzininho-diy/picsimlab/primeiros-passos"},next:{title:"Primeiros Passos",permalink:"/docs/FranzMakey/primeiros-passos"}},s={},l=[{value:"O que eu posso fazer com o FRANZmakey?",id:"o-que-eu-posso-fazer-com-o-franzmakey",level:2},{value:"O que posso aprender com o FRANZmakey?",id:"o-que-posso-aprender-com-o-franzmakey",level:2},{value:"O que vem no Kit:",id:"o-que-vem-no-kit",level:2},{value:"Veja o funcionamento:",id:"veja-o-funcionamento",level:2},{value:"Onde comprar?",id:"onde-comprar",level:2}],m={toc:l},p="wrapper";function u(e){let{components:a,...n}=e;return(0,o.kt)(p,(0,t.Z)({},m,n,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"FRANZmakey \xe9 um kit com funcionamento similar ao Makey Makey, por\xe9m com um custo bem mais acess\xedvel e \xe9 feito no Brasil. O objetivo dessa placa \xe9 possibilitar a intera\xe7\xe3o com o computador atrav\xe9s de objetos inusitados, como: frutas, legumes, etc, e assim estimular a criatividade com muita m\xe3o na massa e o pensamento computacional atrav\xe9s da programa\xe7\xe3o no Scratch."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Placa FranzMakey",src:r(3712).Z,width:"1156",height:"867"})),(0,o.kt)("h2",{id:"o-que-eu-posso-fazer-com-o-franzmakey"},"O que eu posso fazer com o FRANZmakey?"),(0,o.kt)("p",null,"Com esse kit voc\xea pode colocar a criatividade e m\xe3o na massa para funcionar, voc\xea pode criar um controle para controlar os controlar jogos no Scartch, animar personagens no Scratch tocando em frutas, criar narrativas, fazer m\xfasicas tocando em frutas e etc."),(0,o.kt)("h2",{id:"o-que-posso-aprender-com-o-franzmakey"},"O que posso aprender com o FRANZmakey?"),(0,o.kt)("p",null,"Pensamento computacional, criatividade, programa\xe7\xe3o em blocos no caso o Scratch, aplica\xe7\xf5es para interface com computador, etc."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Placa FranzMakey",src:r(7340).Z,width:"6000",height:"4000"})),(0,o.kt)("h2",{id:"o-que-vem-no-kit"},"O que vem no Kit:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"1 Placa FRANZmakey"),(0,o.kt)("li",{parentName:"ul"},"1 Cabo USB 2 metros"),(0,o.kt)("li",{parentName:"ul"},"5 Garras de jacar\xe9"),(0,o.kt)("li",{parentName:"ul"},"Manual de instru\xe7\xf5es"),(0,o.kt)("li",{parentName:"ul"},"Exemplos de projetos")),(0,o.kt)("h2",{id:"veja-o-funcionamento"},"Veja o funcionamento:"),(0,o.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/1Ef_uA7mybc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,o.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/KfDgfVB0vzc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,o.kt)("h2",{id:"onde-comprar"},"Onde comprar?"),(0,o.kt)("p",null,"Esse kit \xe9 feito sob encomenda. Para adquiri-lo, entre em contato conosco: ",(0,o.kt)("a",{parentName:"p",href:"mailto:contato@franzininho.com.br"},"contato@franzininho.com.br\ufeff")))}u.isMDXComponent=!0},3712:(e,a,r)=>{r.d(a,{Z:()=>t});const t=r.p+"assets/images/kit-FranzMakey-43924bbd9b93f8b37cccbbea0143239a.jpeg"},7340:(e,a,r)=>{r.d(a,{Z:()=>t});const t=r.p+"assets/images/kit-franzmakey-frutas-c3bee3b42f39fc669574b58690132123.JPG"}}]); \ No newline at end of file diff --git a/assets/js/5cfa1a80.26444404.js b/assets/js/5cfa1a80.26444404.js new file mode 100755 index 000000000..3b640a9db --- /dev/null +++ b/assets/js/5cfa1a80.26444404.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6780],{61184:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>s,contentTitle:()=>t,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var o=r(17624),i=r(95788);const a={id:"sensor-luz-ldr",title:"Sensor de luz com LDR",slug:"/franzininho-diy/sensor-luz-ldr",description:"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY"},t=void 0,l={id:"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr",title:"Sensor de luz com LDR",description:"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/sensor-luz.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/sensor-luz-ldr",permalink:"/docs/franzininho-diy/sensor-luz-ldr",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/sensor-luz.md",tags:[],version:"current",frontMatter:{id:"sensor-luz-ldr",title:"Sensor de luz com LDR",slug:"/franzininho-diy/sensor-luz-ldr",description:"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY"},sidebar:"docs",previous:{title:"Elefante Colorido! Que cor?",permalink:"/docs/franzininho-diy/elefante-colorido"},next:{title:"Sem\xe1foro",permalink:"/docs/franzininho-diy/semaforo"}},s={},d=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function c(e){const n={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica."}),"\n",(0,o.jsx)(n.p,{children:"Ser\xe1 exibido um exemplo de funcionamento de uma fotoc\xe9lula, onde ao escurecer ser\xe1 aceso o LED, como acontece com a luz da rua."}),"\n",(0,o.jsx)(n.h2,{id:"materiais",children:"Materiais"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Placa Franzininho;"}),"\n",(0,o.jsx)(n.li,{children:"Protoboard;"}),"\n",(0,o.jsx)(n.li,{children:"1 Resistor 10K;"}),"\n",(0,o.jsx)(n.li,{children:"1 LDR(10K)"}),"\n",(0,o.jsx)(n.li,{children:"Jumpers"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,o.jsx)(n.p,{children:"Fa\xe7a a seguinte liga\xe7\xe3o no protoboard:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{src:r(37876).c+"",width:"551",height:"231"})}),"\n",(0,o.jsx)(n.h2,{id:"sketch",children:"Sketch"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-cpp",children:"/*\n Franzininho\n Exemplo: Sensor de Luz - LDR\n Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica. Ser\xe1 exibido um exemplo de funcionamento de uma fotoc\xe9lula, onde ao escurecer ser\xe1 aceso o LED, como acontece na luz da rua. ;)\n*/\n//Sensor de luz com LDR\nint ledPin = 1; //Led no pino 1 - LED da placa\nint ldrPin = A1; //LDR no pino anal\xf3gico A1\nint ldrValor = 0; //Valor lido do LDR\n\nvoid setup() {\n pinMode(ledPin,OUTPUT); //define LED como Sa\xedda\n}\n\nvoid loop() {\n //ler o valor do LDR\n ldrValor = analogRead(ldrPin); //O valor lido ser\xe1 entre 0 e 1023\n //se o valor lido for maior que 800, liga o led\n if (ldrValor>= 800){\n digitalWrite(ledPin, HIGH); //aciona sa\xedda\n } else { // sen\xe3o, apaga o led \n digitalWrite(ledPin,LOW); //desliga sa\xedda\n }\n delay(100);\n}\n"})}),"\n",(0,o.jsx)(n.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311443234729493056?view=diagram"}),"\n",(0,o.jsx)(n.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/AzypBpXO238",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function u(e={}){const{wrapper:n}={...(0,i.MN)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},95788:(e,n,r)=>{r.d(n,{MN:()=>d});var o=r(11504);function i(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function a(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,o)}return r}function t(e){for(var n=1;n=0||(i[r]=e[r]);return i}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var s=o.createContext({}),d=function(e){var n=o.useContext(s),r=n;return e&&(r="function"==typeof e?e(n):t(t({},n),e)),r},c={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var r=e.components,i=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=d(r),m=i,h=p["".concat(s,".").concat(m)]||p[m]||c[m]||a;return r?o.createElement(h,t(t({ref:n},u),{},{components:r})):o.createElement(h,t({ref:n},u))}));u.displayName="MDXCreateElement"},37876:(e,n,r)=>{r.d(n,{c:()=>o});const o=r.p+"assets/images/sensor-luz-circuito-6c590c3ead770407b6f4c790d14d0251.png"}}]); \ No newline at end of file diff --git a/assets/js/5cfa1a80.c626c16e.js b/assets/js/5cfa1a80.c626c16e.js deleted file mode 100755 index 6fcce403b..000000000 --- a/assets/js/5cfa1a80.c626c16e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7600],{3905:(e,n,r)=>{r.d(n,{Zo:()=>c,kt:()=>f});var o=r(7294);function a(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function t(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var n=1;n=0||(a[r]=e[r]);return a}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=o.createContext({}),d=function(e){var n=o.useContext(s),r=n;return e&&(r="function"==typeof e?e(n):i(i({},n),e)),r},c=function(e){var n=d(e.components);return o.createElement(s.Provider,{value:n},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},m=o.forwardRef((function(e,n){var r=e.components,a=e.mdxType,t=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=d(r),m=a,f=u["".concat(s,".").concat(m)]||u[m]||p[m]||t;return r?o.createElement(f,i(i({ref:n},c),{},{components:r})):o.createElement(f,i({ref:n},c))}));function f(e,n){var r=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var t=r.length,i=new Array(t);i[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var d=2;d{r.r(n),r.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var o=r(3117),a=(r(7294),r(3905));const t={id:"sensor-luz-ldr",title:"Sensor de luz com LDR",slug:"/franzininho-diy/sensor-luz-ldr",description:"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY"},i=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr",id:"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr",title:"Sensor de luz com LDR",description:"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/sensor-luz.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/sensor-luz-ldr",permalink:"/docs/franzininho-diy/sensor-luz-ldr",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/sensor-luz.md",tags:[],version:"current",frontMatter:{id:"sensor-luz-ldr",title:"Sensor de luz com LDR",slug:"/franzininho-diy/sensor-luz-ldr",description:"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY"},sidebar:"docs",previous:{title:"Elefante Colorido! Que cor?",permalink:"/docs/franzininho-diy/elefante-colorido"},next:{title:"Sem\xe1foro",permalink:"/docs/franzininho-diy/semaforo"}},s={},d=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],c={toc:d},u="wrapper";function p(e){let{components:n,...t}=e;return(0,a.kt)(u,(0,o.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica. "),(0,a.kt)("p",null,"Ser\xe1 exibido um exemplo de funcionamento de uma fotoc\xe9lula, onde ao escurecer ser\xe1 aceso o LED, como acontece com a luz da rua."),(0,a.kt)("h2",{id:"materiais"},"Materiais"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Placa Franzininho;"),(0,a.kt)("li",{parentName:"ul"},"Protoboard;"),(0,a.kt)("li",{parentName:"ul"},"1 Resistor 10K;"),(0,a.kt)("li",{parentName:"ul"},"1 LDR","(","10K",")"),(0,a.kt)("li",{parentName:"ul"},"Jumpers")),(0,a.kt)("h2",{id:"circuito"},"Circuito"),(0,a.kt)("p",null,"Fa\xe7a a seguinte liga\xe7\xe3o no protoboard:"),(0,a.kt)("p",null,(0,a.kt)("img",{src:r(7803).Z,width:"551",height:"231"})),(0,a.kt)("h2",{id:"sketch"},"Sketch"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cpp"},"/*\n Franzininho\n Exemplo: Sensor de Luz - LDR\n Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica. Ser\xe1 exibido um exemplo de funcionamento de uma fotoc\xe9lula, onde ao escurecer ser\xe1 aceso o LED, como acontece na luz da rua. ;)\n*/\n//Sensor de luz com LDR\nint ledPin = 1; //Led no pino 1 - LED da placa\nint ldrPin = A1; //LDR no pino anal\xf3gico A1\nint ldrValor = 0; //Valor lido do LDR\n\nvoid setup() {\n pinMode(ledPin,OUTPUT); //define LED como Sa\xedda\n}\n\nvoid loop() {\n //ler o valor do LDR\n ldrValor = analogRead(ldrPin); //O valor lido ser\xe1 entre 0 e 1023\n //se o valor lido for maior que 800, liga o led\n if (ldrValor>= 800){\n digitalWrite(ledPin, HIGH); //aciona sa\xedda\n } else { // sen\xe3o, apaga o led \n digitalWrite(ledPin,LOW); //desliga sa\xedda\n }\n delay(100);\n}\n")),(0,a.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,a.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311443234729493056?view=diagram"}),(0,a.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,a.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/AzypBpXO238",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}p.isMDXComponent=!0},7803:(e,n,r)=>{r.d(n,{Z:()=>o});const o=r.p+"assets/images/sensor-luz-circuito-6c590c3ead770407b6f4c790d14d0251.png"}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.1ebb8d2b.js b/assets/js/5e95c892.1ebb8d2b.js new file mode 100755 index 000000000..0728e3098 --- /dev/null +++ b/assets/js/5e95c892.1ebb8d2b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4304],{43564:(e,r,n)=>{n.r(r),n.d(r,{default:()=>t});n(11504);var s=n(34064),c=n(68900),a=n(45864),u=n(85464),i=n(99012),h=n(17624);function t(e){return(0,h.jsx)(c.cr,{className:(0,s.c)(a.W.wrapper.docsPages),children:(0,h.jsx)(i.c,{children:(0,u.k)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/5f765f30.773c8b61.js b/assets/js/5f765f30.773c8b61.js deleted file mode 100755 index 62080b608..000000000 --- a/assets/js/5f765f30.773c8b61.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8601],{3905:(e,a,o)=>{o.d(a,{Zo:()=>c,kt:()=>h});var n=o(7294);function r(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function t(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var a=1;a=0||(r[o]=e[o]);return r}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var p=n.createContext({}),s=function(e){var a=n.useContext(p),o=a;return e&&(o="function"==typeof e?e(a):i(i({},a),e)),o},c=function(e){var a=s(e.components);return n.createElement(p.Provider,{value:a},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},d=n.forwardRef((function(e,a){var o=e.components,r=e.mdxType,t=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(o),d=r,h=u["".concat(p,".").concat(d)]||u[d]||m[d]||t;return o?n.createElement(h,i(i({ref:a},c),{},{components:o})):n.createElement(h,i({ref:a},c))}));function h(e,a){var o=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var t=o.length,i=new Array(t);i[0]=d;var l={};for(var p in a)hasOwnProperty.call(a,p)&&(l[p]=a[p]);l.originalType=e,l[u]="string"==typeof e?e:r,i[1]=l;for(var s=2;s{o.r(a),o.d(a,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>t,metadata:()=>l,toc:()=>s});var n=o(3117),r=(o(7294),o(3905));const t={id:"circuitpython-pwm",title:"PWM - Pulse Width Modulation",slug:"/franzininho-wifi/exemplos-circuitpython/pwm",description:"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.",author:"Mateus Adriano Ventura Vieira"},i=void 0,l={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm",title:"PWM - Pulse Width Modulation",description:"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/pwm.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/pwm",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/pwm",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/pwm.md",tags:[],version:"current",frontMatter:{id:"circuitpython-pwm",title:"PWM - Pulse Width Modulation",slug:"/franzininho-wifi/exemplos-circuitpython/pwm",description:"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.",author:"Mateus Adriano Ventura Vieira"},sidebar:"docs",previous:{title:"Entrada Anal\xf3gica",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas"},next:{title:"Pinos de Toque Capacitivo",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo"}},p={},s=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo para PWM com CircuitPython",id:"c\xf3digo-para-pwm-com-circuitpython",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],c={toc:s},u="wrapper";function m(e){let{components:a,...t}=e;return(0,r.kt)(u,(0,n.Z)({},c,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar."),(0,r.kt)("p",null,"PWM \xe9 abrevia\xe7\xe3o para, Pulse Width Modulation \u2013 que significa \u2013 Modula\xe7\xe3o por Largura de Pulso. Essa \xe9 uma t\xe9cnica onde, uma sa\xedda digital \xe9 usada para simular uma sa\xedda anal\xf3gica. Isso acontece por meio de mudan\xe7as constantes de sinal, que s\xe3o impercept\xedveis e, dessa maneira o componente conectado a esse pino apenas tira uma m\xe9dia de quanto tempo est\xe1 em estado alto e baixo. Quanto mais tempo ligado, maior o valor e, consequentemente, quando menor tempo ligado, menor o valor."),(0,r.kt)("p",null,"Neste exemplo, vamos aprender a usar PWM com CircuitPython na Franzininho WiFi."),(0,r.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"1 Placa Franzininho WiFi com CircuitPython;"),(0,r.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,r.kt)("li",{parentName:"ul"},"1 LED;"),(0,r.kt)("li",{parentName:"ul"},"1 potenci\xf4metro de 10 k\u03a9;"),(0,r.kt)("li",{parentName:"ul"},"1 resistor de 220 \u03a9 ou 330 \u03a9;"),(0,r.kt)("li",{parentName:"ul"},"Jumpers.")),(0,r.kt)("h2",{id:"circuito"},"Circuito"),(0,r.kt)("p",null,"Para os nossos primeiros experimentos, realize a seguinte montagem:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"franzininho-wifi-pwm",src:o(5522).Z,width:"1755",height:"678"}),"\nFigura 1 \u2013 Circuito para teste de PWM com CircuitPython na Franzininho WiFi"),(0,r.kt)("h2",{id:"c\xf3digo-para-pwm-com-circuitpython"},"C\xf3digo para PWM com CircuitPython"),(0,r.kt)("p",null,"Para esse c\xf3digo, utilizaremos a biblioteca simpleio, que ser\xe1 necess\xe1ria para realizarmos a convers\xe3o de valores. As bibliotecas do CircuitPython podem ser encontradas no seguinte endere\xe7o: ",(0,r.kt)("a",{parentName:"p",href:"https://circuitpython.org/libraries"},"https://circuitpython.org/libraries"),". Fa\xe7a o download, de acordo com a vers\xe3o do CircuitPython instalada na sua Franzininho WiFi."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"franzininho-wifi-pwm",src:o(2191).Z,width:"1543",height:"328"})),(0,r.kt)("p",null,"Ap\xf3s baixar o arquivo, copie a pasta desejada para a pasta de arquivos da Franzininho WiFi:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"simpleio.mpy\n")),(0,r.kt)("p",null,"Escreva o c\xf3digo abaixo no arquivo code.py, que est\xe1 localizado no diret\xf3rio da Franzininho:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import pwmio\nimport math\nimport simpleio\nfrom analogio import AnalogIn\nfrom time import sleep\n\npotIn = board.IO2\npot = AnalogIn(potIn)\n\nLED = board.IO4\nled = pwmio.PWMOut(LED)\n\ndef converter(pin):\n pinValue = pin.value\n mapValue = math.trunc(simpleio.map_range\n (pinValue, 536, 51355, 0, 65535))\n print('Valor Original: ', pinValue,\n 'Valor Convertido: ', mapValue)\n return mapValue\n\nwhile True:\n potValue = converter(pot)\n led.duty_cycle = potValue\n sleep(0.1)\n")),(0,r.kt)("p",null,"Depois de finalizar a edi\xe7\xe3o do c\xf3digo, salve. Execute o programa."),(0,r.kt)("p",null,"Utilizaremos o m\xf3dulo board para acessarmos os pinos da Franzininho:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,r.kt)("p",null,"E para configurarmos os pinos PWM, \xe9 necess\xe1rio importarmos o pwmio:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import pwmio\n")),(0,r.kt)("p",null,"Al\xe9m disso, ser\xe1 necess\xe1rio a biblioteca math, para \u201celiminar\u201d as casas decimais:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import math\n")),(0,r.kt)("p",null,"Como dito anteriormente, usaremos o m\xf3dulo simpleio:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import simpleio\n")),(0,r.kt)("p",null,"Ademais, importaremos a fun\xe7\xe3o AnalogIn do m\xf3dulo analogio para, configuramos o potenci\xf4metro como uma entrada anal\xf3gica:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"from analogio import AnalogIn\n")),(0,r.kt)("p",null,"Tamb\xe9m, iremos chamar a fun\xe7\xe3o sleep, da biblioteca time, pois precisaremos de intervalos de temporiza\xe7\xe3o:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"from time import sleep\n")),(0,r.kt)("p",null,"Agora, ap\xf3s importarmos todas os m\xf3dulos que vamos utilizar, vamos configurar os pinos. Primeiro, vamos associar o GPIO2 a uma vari\xe1vel chamada potIn. Ap\xf3s isso, vamos criar um objeto chamado pot e configur\xe1-lo como uma entrada anal\xf3gica:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"LED = board.IO4\nled = pwmio.PWMOut(LED)\n")),(0,r.kt)("p",null,"Configura\xe7\xf5es iniciais encerradas! Depois disso, vamos criar uma fun\xe7\xe3o chamada converte. Como par\xe2metro, essa fun\xe7\xe3o receber\xe1 o pino que estamos realizando a leitura:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"def converter(pin):\n")),(0,r.kt)("p",null,"Dentro da fun\xe7\xe3o, realizaremos a leitura do valor do potenci\xf4metro, que ser\xe1 armazenada na vari\xe1vel pinValue:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"pinValue = pin.value\n")),(0,r.kt)("p",null,"Al\xe9m disso, vamos converter o valor do potenci\xf4metro para o valor aceito pelos pinos PWM. Para isso, vamos usar a fun\xe7\xe3o simpleio.map_range. Os par\xe2metros dessa fun\xe7\xe3o s\xe3o: valor bruto (no caso, o valor recebido naquele instante), valor m\xednimo de entrada, valor m\xe1ximo de entrada, valor m\xednimo de sa\xedda e valor m\xe1ximo de sa\xedda. E, vamos precisar da fun\xe7\xe3o math.trunc, que eliminar\xe1 as casas decimais. Todas essas informa\xe7\xf5es ficar\xe3o armazenadas na vari\xe1vel mapValue:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"mapValue = math.trunc(simpleio.map_range\n (pinValue, 536, 51355, 0, 65535))\n")),(0,r.kt)("p",null,"Colocaremos o print apenas para visualizarmos a convers\xe3o:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"print('Valor Original: ', pinValue,\n 'Valor Convertido: ', mapValue)\n return mapValue\n")),(0,r.kt)("p",null,"E a fun\xe7\xe3o nos retornar\xe1 o valor de mapValue:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"return mapValue\n")),(0,r.kt)("p",null,"E por fim, o loop. Dentro do while True, vamos associar o valor retornado pela fun\xe7\xe3o converte a vari\xe1vel potValue e mandar esse valor para o led. Para enviarmos um valor para o componente, utilizamos a fun\xe7\xe3o duty_cycle, que \xe9 o ciclo de trabalho, ou seja, quanto tempo o sinal estar\xe1 ligado ou n\xe3o. Tamb\xe9m, colocaremos um delay:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"while True:\n potValue = converter(pot)\n led.duty_cycle = potValue\n sleep(0.1)\n")),(0,r.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,r.kt)("p",null,"Nesse exemplo, aprendemos a como usar os pinos PWM com CircuitPython e, como control\xe1-los atrav\xe9s de um potenci\xf4metro. Al\xe9m disso, aprendemos a como mapear valores. No pr\xf3ximo exemplo, vamos aprender a como usar Servos Motores.\nOutros artigos da s\xe9rie."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Autor"),(0,r.kt)("th",{parentName:"tr",align:null},"Mateus Adriano Ventura Vieira"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data:"),(0,r.kt)("td",{parentName:"tr",align:null},"09/05/2022")))))}m.isMDXComponent=!0},2191:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/bundles-58357a122b96bde035495e9835cb75e7.png"},5522:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/pwm-eb18c8cc8e0dbfee8a2537d3706ee4c3.png"}}]); \ No newline at end of file diff --git a/assets/js/5f765f30.8485c53f.js b/assets/js/5f765f30.8485c53f.js new file mode 100755 index 000000000..6511fcb59 --- /dev/null +++ b/assets/js/5f765f30.8485c53f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7024],{77092:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>c,contentTitle:()=>t,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var n=o(17624),i=o(95788);const r={id:"circuitpython-pwm",title:"PWM - Pulse Width Modulation",slug:"/franzininho-wifi/exemplos-circuitpython/pwm",description:"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.",author:"Mateus Adriano Ventura Vieira"},t=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm",title:"PWM - Pulse Width Modulation",description:"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/pwm.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/pwm",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/pwm",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/pwm.md",tags:[],version:"current",frontMatter:{id:"circuitpython-pwm",title:"PWM - Pulse Width Modulation",slug:"/franzininho-wifi/exemplos-circuitpython/pwm",description:"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.",author:"Mateus Adriano Ventura Vieira"},sidebar:"docs",previous:{title:"Entrada Anal\xf3gica",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas"},next:{title:"Pinos de Toque Capacitivo",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo"}},c={},l=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo para PWM com CircuitPython",id:"c\xf3digo-para-pwm-com-circuitpython",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function p(e){const a={a:"a",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar."}),"\n",(0,n.jsx)(a.p,{children:"PWM \xe9 abrevia\xe7\xe3o para, Pulse Width Modulation \u2013 que significa \u2013 Modula\xe7\xe3o por Largura de Pulso. Essa \xe9 uma t\xe9cnica onde, uma sa\xedda digital \xe9 usada para simular uma sa\xedda anal\xf3gica. Isso acontece por meio de mudan\xe7as constantes de sinal, que s\xe3o impercept\xedveis e, dessa maneira o componente conectado a esse pino apenas tira uma m\xe9dia de quanto tempo est\xe1 em estado alto e baixo. Quanto mais tempo ligado, maior o valor e, consequentemente, quando menor tempo ligado, menor o valor."}),"\n",(0,n.jsx)(a.p,{children:"Neste exemplo, vamos aprender a usar PWM com CircuitPython na Franzininho WiFi."}),"\n",(0,n.jsx)(a.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"1 Placa Franzininho WiFi com CircuitPython;"}),"\n",(0,n.jsx)(a.li,{children:"1 Protoboard;"}),"\n",(0,n.jsx)(a.li,{children:"1 LED;"}),"\n",(0,n.jsx)(a.li,{children:"1 potenci\xf4metro de 10 k\u03a9;"}),"\n",(0,n.jsx)(a.li,{children:"1 resistor de 220 \u03a9 ou 330 \u03a9;"}),"\n",(0,n.jsx)(a.li,{children:"Jumpers."}),"\n"]}),"\n",(0,n.jsx)(a.h2,{id:"circuito",children:"Circuito"}),"\n",(0,n.jsx)(a.p,{children:"Para os nossos primeiros experimentos, realize a seguinte montagem:"}),"\n",(0,n.jsxs)(a.p,{children:[(0,n.jsx)(a.img,{alt:"franzininho-wifi-pwm",src:o(33832).c+"",width:"1755",height:"678"}),"\nFigura 1 \u2013 Circuito para teste de PWM com CircuitPython na Franzininho WiFi"]}),"\n",(0,n.jsx)(a.h2,{id:"c\xf3digo-para-pwm-com-circuitpython",children:"C\xf3digo para PWM com CircuitPython"}),"\n",(0,n.jsxs)(a.p,{children:["Para esse c\xf3digo, utilizaremos a biblioteca simpleio, que ser\xe1 necess\xe1ria para realizarmos a convers\xe3o de valores. As bibliotecas do CircuitPython podem ser encontradas no seguinte endere\xe7o: ",(0,n.jsx)(a.a,{href:"https://circuitpython.org/libraries",children:"https://circuitpython.org/libraries"}),". Fa\xe7a o download, de acordo com a vers\xe3o do CircuitPython instalada na sua Franzininho WiFi."]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"franzininho-wifi-pwm",src:o(55184).c+"",width:"1543",height:"328"})}),"\n",(0,n.jsx)(a.p,{children:"Ap\xf3s baixar o arquivo, copie a pasta desejada para a pasta de arquivos da Franzininho WiFi:"}),"\n",(0,n.jsx)(a.p,{children:"simpleio.mpy"}),"\n",(0,n.jsx)(a.p,{children:"Escreva o c\xf3digo abaixo no arquivo code.py, que est\xe1 localizado no diret\xf3rio da Franzininho:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"import pwmio\nimport math\nimport simpleio\nfrom analogio import AnalogIn\nfrom time import sleep\n\npotIn = board.IO2\npot = AnalogIn(potIn)\n\nLED = board.IO4\nled = pwmio.PWMOut(LED)\n\ndef converter(pin):\n pinValue = pin.value\n mapValue = math.trunc(simpleio.map_range\n (pinValue, 536, 51355, 0, 65535))\n print('Valor Original: ', pinValue,\n 'Valor Convertido: ', mapValue)\n return mapValue\n\nwhile True:\n potValue = converter(pot)\n led.duty_cycle = potValue\n sleep(0.1)\n"})}),"\n",(0,n.jsx)(a.p,{children:"Depois de finalizar a edi\xe7\xe3o do c\xf3digo, salve. Execute o programa."}),"\n",(0,n.jsx)(a.p,{children:"Utilizaremos o m\xf3dulo board para acessarmos os pinos da Franzininho:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"import board\n"})}),"\n",(0,n.jsx)(a.p,{children:"E para configurarmos os pinos PWM, \xe9 necess\xe1rio importarmos o pwmio:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"import pwmio\n"})}),"\n",(0,n.jsx)(a.p,{children:"Al\xe9m disso, ser\xe1 necess\xe1rio a biblioteca math, para \u201celiminar\u201d as casas decimais:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"import math\n"})}),"\n",(0,n.jsx)(a.p,{children:"Como dito anteriormente, usaremos o m\xf3dulo simpleio:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"import simpleio\n"})}),"\n",(0,n.jsx)(a.p,{children:"Ademais, importaremos a fun\xe7\xe3o AnalogIn do m\xf3dulo analogio para, configuramos o potenci\xf4metro como uma entrada anal\xf3gica:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"from analogio import AnalogIn\n"})}),"\n",(0,n.jsx)(a.p,{children:"Tamb\xe9m, iremos chamar a fun\xe7\xe3o sleep, da biblioteca time, pois precisaremos de intervalos de temporiza\xe7\xe3o:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"from time import sleep\n"})}),"\n",(0,n.jsx)(a.p,{children:"Agora, ap\xf3s importarmos todas os m\xf3dulos que vamos utilizar, vamos configurar os pinos. Primeiro, vamos associar o GPIO2 a uma vari\xe1vel chamada potIn. Ap\xf3s isso, vamos criar um objeto chamado pot e configur\xe1-lo como uma entrada anal\xf3gica:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"LED = board.IO4\nled = pwmio.PWMOut(LED)\n"})}),"\n",(0,n.jsx)(a.p,{children:"Configura\xe7\xf5es iniciais encerradas! Depois disso, vamos criar uma fun\xe7\xe3o chamada converte. Como par\xe2metro, essa fun\xe7\xe3o receber\xe1 o pino que estamos realizando a leitura:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"def converter(pin):\n"})}),"\n",(0,n.jsx)(a.p,{children:"Dentro da fun\xe7\xe3o, realizaremos a leitura do valor do potenci\xf4metro, que ser\xe1 armazenada na vari\xe1vel pinValue:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"pinValue = pin.value\n"})}),"\n",(0,n.jsx)(a.p,{children:"Al\xe9m disso, vamos converter o valor do potenci\xf4metro para o valor aceito pelos pinos PWM. Para isso, vamos usar a fun\xe7\xe3o simpleio.map_range. Os par\xe2metros dessa fun\xe7\xe3o s\xe3o: valor bruto (no caso, o valor recebido naquele instante), valor m\xednimo de entrada, valor m\xe1ximo de entrada, valor m\xednimo de sa\xedda e valor m\xe1ximo de sa\xedda. E, vamos precisar da fun\xe7\xe3o math.trunc, que eliminar\xe1 as casas decimais. Todas essas informa\xe7\xf5es ficar\xe3o armazenadas na vari\xe1vel mapValue:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"mapValue = math.trunc(simpleio.map_range\n (pinValue, 536, 51355, 0, 65535))\n"})}),"\n",(0,n.jsx)(a.p,{children:"Colocaremos o print apenas para visualizarmos a convers\xe3o:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"print('Valor Original: ', pinValue,\n 'Valor Convertido: ', mapValue)\n return mapValue\n"})}),"\n",(0,n.jsx)(a.p,{children:"E a fun\xe7\xe3o nos retornar\xe1 o valor de mapValue:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"return mapValue\n"})}),"\n",(0,n.jsx)(a.p,{children:"E por fim, o loop. Dentro do while True, vamos associar o valor retornado pela fun\xe7\xe3o converte a vari\xe1vel potValue e mandar esse valor para o led. Para enviarmos um valor para o componente, utilizamos a fun\xe7\xe3o duty_cycle, que \xe9 o ciclo de trabalho, ou seja, quanto tempo o sinal estar\xe1 ligado ou n\xe3o. Tamb\xe9m, colocaremos um delay:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"while True:\n potValue = converter(pot)\n led.duty_cycle = potValue\n sleep(0.1)\n"})}),"\n",(0,n.jsx)(a.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,n.jsx)(a.p,{children:"Nesse exemplo, aprendemos a como usar os pinos PWM com CircuitPython e, como control\xe1-los atrav\xe9s de um potenci\xf4metro. Al\xe9m disso, aprendemos a como mapear valores. No pr\xf3ximo exemplo, vamos aprender a como usar Servos Motores.\nOutros artigos da s\xe9rie."}),"\n",(0,n.jsxs)(a.table,{children:[(0,n.jsx)(a.thead,{children:(0,n.jsxs)(a.tr,{children:[(0,n.jsx)(a.th,{children:"Autor"}),(0,n.jsx)(a.th,{children:"Mateus Adriano Ventura Vieira"})]})}),(0,n.jsx)(a.tbody,{children:(0,n.jsxs)(a.tr,{children:[(0,n.jsx)(a.td,{children:"Data:"}),(0,n.jsx)(a.td,{children:"09/05/2022"})]})})]})]})}function d(e={}){const{wrapper:a}={...(0,i.MN)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},95788:(e,a,o)=>{o.d(a,{MN:()=>l});var n=o(11504);function i(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function r(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function t(e){for(var a=1;a=0||(i[o]=e[o]);return i}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var c=n.createContext({}),l=function(e){var a=n.useContext(c),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},p={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},d=n.forwardRef((function(e,a){var o=e.components,i=e.mdxType,r=e.originalType,c=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),m=l(o),u=i,h=m["".concat(c,".").concat(u)]||m[u]||p[u]||r;return o?n.createElement(h,t(t({ref:a},d),{},{components:o})):n.createElement(h,t({ref:a},d))}));d.displayName="MDXCreateElement"},55184:(e,a,o)=>{o.d(a,{c:()=>n});const n=o.p+"assets/images/bundles-58357a122b96bde035495e9835cb75e7.png"},33832:(e,a,o)=>{o.d(a,{c:()=>n});const n=o.p+"assets/images/pwm-eb18c8cc8e0dbfee8a2537d3706ee4c3.png"}}]); \ No newline at end of file diff --git a/assets/js/5f9a86e6.086ddceb.js b/assets/js/5f9a86e6.086ddceb.js new file mode 100755 index 000000000..4a965858a --- /dev/null +++ b/assets/js/5f9a86e6.086ddceb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6280],{51032:(e,i,o)=>{o.r(i),o.d(i,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var s=o(17624),n=o(95788);const r={id:"micropython-entradas-saidas-digitais",title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",slug:"/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",description:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.",author:"Sthefania Fernandes"},a=void 0,t={id:"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais",title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",description:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.",source:"@site/docs/FranzininhoWifi/exemplos-micropython/entradas-saidas-digitais.md",sourceDirName:"FranzininhoWifi/exemplos-micropython",slug:"/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",permalink:"/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-micropython/entradas-saidas-digitais.md",tags:[],version:"current",frontMatter:{id:"micropython-entradas-saidas-digitais",title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",slug:"/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",description:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.",author:"Sthefania Fernandes"},sidebar:"docs",previous:{title:"Primeiros Passos com MicroPython",permalink:"/docs/franzininho-wifi/exemplos-micropython/primeiros-passos"},next:{title:"Placa Franzininho WiFi dev Edition",permalink:"/docs/franzininho-wifi/franzininho-wifi-dev-edition"}},d={},c=[{value:"Introdu\xe7\xe3o",id:"introdu\xe7\xe3o",level:2},{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"M\xf3dulos do MicroPython",id:"m\xf3dulos-do-micropython",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function l(e){const i={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.MN)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h2,{id:"introdu\xe7\xe3o",children:"Introdu\xe7\xe3o"}),"\n",(0,s.jsx)(i.p,{children:"A Franzininho WiFi conta com pinos que podem operar em dois modos: OUTPUT e INPUT. Al\xe9m disso, \xe9 poss\xedvel usar resistores internos nos pinos configurados como Pull-Up ou Pull-Down para os pinos configurados como entradas."}),"\n",(0,s.jsx)(i.p,{children:"Neste artigo, vamos explorar como utilizar o MicroPython para controlar os pinos de I/O."}),"\n",(0,s.jsx)(i.p,{children:"Para isso vamos criar um c\xf3digo para manipular os LEDs e bot\xf5es da placa Franzininho WiFi LAB01, permitindo criar funcionalidades personalizadas e interativas."}),"\n",(0,s.jsx)(i.h2,{id:"recursos-necess\xe1rios",children:"Recursos necess\xe1rios"}),"\n",(0,s.jsx)(i.p,{children:"Para iniciar o trabalho com os GPIOs, \xe9 essencial possuir o diagrama de pinos da placa Franzininho WiFI LAB01 \xe0 disposi\xe7\xe3o, pois isso permitir\xe1 que voc\xea identifique tanto os nomes quanto as fun\xe7\xf5es associadas a cada um deles."}),"\n",(0,s.jsx)(i.p,{children:"Tabela 1 \u2013 Franzininho WiFi LAB01 mapeamento de pinos"}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Pino"}),(0,s.jsx)(i.th,{children:"Recurso"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO1"}),(0,s.jsx)(i.td,{children:"LDR"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO2"}),(0,s.jsx)(i.td,{children:"BT6"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO3"}),(0,s.jsx)(i.td,{children:"BT5"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO4"}),(0,s.jsx)(i.td,{children:"BT4"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO5"}),(0,s.jsx)(i.td,{children:"BT3"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO6"}),(0,s.jsx)(i.td,{children:"BT2"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO7"}),(0,s.jsx)(i.td,{children:"BT1"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO8"}),(0,s.jsx)(i.td,{children:"OLED_SDA"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO9"}),(0,s.jsx)(i.td,{children:"OLED_SCL"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO10"}),(0,s.jsx)(i.td,{children:"TFT_DC"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO11"}),(0,s.jsx)(i.td,{children:"TFT_RES"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO12"}),(0,s.jsx)(i.td,{children:"LED AZUL"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO13"}),(0,s.jsx)(i.td,{children:"LED VERDE"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO14"}),(0,s.jsx)(i.td,{children:"LED VERMELHO"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO15"}),(0,s.jsx)(i.td,{children:"DHT11"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO17"}),(0,s.jsx)(i.td,{children:"BUZZER"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO35"}),(0,s.jsx)(i.td,{children:"TFT_SDA"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO36"}),(0,s.jsx)(i.td,{children:"TFT_SCL"})]})]})]}),"\n",(0,s.jsxs)(i.p,{children:["Nesta pr\xe1tica iremos utilizar o LED RGB e os bot\xf5es da ",(0,s.jsx)(i.a,{href:"https://docs.franzininho.com.br/docs/franzininho-wifi-lab01",children:"Franzininho WiFi LAB01"}),", conforme destacado na Figura abaixo:"]}),"\n",(0,s.jsxs)(i.p,{children:["Figura 1 \u2013 Resumo dos recursos da placa\n",(0,s.jsx)(i.img,{alt:"entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython",src:o(1521).c+"",width:"800",height:"640"})]}),"\n",(0,s.jsx)(i.h3,{id:"m\xf3dulos-do-micropython",children:"M\xf3dulos do MicroPython"}),"\n",(0,s.jsxs)(i.p,{children:["O ",(0,s.jsx)(i.a,{href:"https://docs.micropython.org/en/latest/library/machine.html",children:"machine"})," cont\xe9m fun\xe7\xf5es espec\xedficas relacionadas ao hardware de uma placa em particular. A maioria das fun\xe7\xf5es neste m\xf3dulo permitem obter acesso direto e irrestrito aos blocos de hardware em um sistema, como: pinos, I2C, UART, SPI, ADC."]}),"\n",(0,s.jsx)(i.p,{children:"No MicroPython, como no Python, \xe9 poss\xedvel importar apenas parte de uma biblioteca, ao inv\xe9s de importar a biblioteca inteira. Um recurso \xfatil que utilizaremos bastante."}),"\n",(0,s.jsxs)(i.p,{children:["A biblioteca ",(0,s.jsx)(i.strong,{children:"\u2018utime\u2019"})," \xe9 uma vers\xe3o projetada para microcontroladores da biblioteca \u2018time\u2019. Essa biblioteca \xe9 \xfatil para inserir os atrasos necess\xe1rios em muitos projetos."]}),"\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.strong,{children:"Obs"}),": se voc\xea esquecer e usar ",(0,s.jsx)(i.code,{children:"import time"})," , n\xe3o se preocupe: o MicroPython usar\xe1 automaticamente a biblioteca ",(0,s.jsx)(i.code,{children:"utime"})," em seu lugar."]}),"\n",(0,s.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,s.jsx)(i.p,{children:"Com a Franzininho WiFi conectada ao seu computador, abra o Thonny e crie um novo arquivo contendo o c\xf3digo a seguir:"}),"\n",(0,s.jsxs)(i.p,{children:["Para criar o programa que controla o LED RGB, come\xe7amos com a instru\xe7\xe3o ",(0,s.jsx)(i.code,{children:"from machine import Pin"}),". Isso instrui o MicroPython a importar apenas a fun\xe7\xe3o ",(0,s.jsx)(i.code,{children:"Pin"})," da biblioteca ",(0,s.jsx)(i.code,{children:"machine"}),", em vez de importar a biblioteca inteira. Dessa forma, teremos acesso apenas \xe0 funcionalidade necess\xe1ria para controlar os pinos da placa."]}),"\n",(0,s.jsxs)(i.p,{children:["\xc9 importante enfatizar que o Micropython \xe9 case-sensitive, isso significa que se voc\xea digitar ",(0,s.jsx)(i.code,{children:"pin"})," a biblioteca n\xe3o ser\xe1 reconhecida, ent\xe3o se atente no uso das letras mai\xfasculas e min\xfasculas."]}),"\n",(0,s.jsxs)(i.p,{children:["Em seguida, vamos nomear os LEDs e associ\xe1-los aos pinos da placa como sa\xedda (",(0,s.jsx)(i.code,{children:"Pin.OUT"}),"). Consultando a tabela de pinos da Franzininho WiFi LAB01, identificamos que o pino 12 \xe9 respons\xe1vel pela cor azul do LED RGB, o pino 13 pela cor verde e o pino 14 pela cor vermelha. Com isso fazemos a atribui\xe7\xe3o setando todos os pinos como sa\xedda."]}),"\n",(0,s.jsx)(i.p,{children:"De forma semelhante, realizamos o mesmo procedimento com os bot\xf5es. Ao consultar a tabela de pinos, identificamos que o pino 7 corresponde ao bot\xe3o 1, o pino 6 ao bot\xe3o 2 e o pino 5 ao bot\xe3o 3. \xc9 importante lembrar que esses dispositivos operam com a configura\xe7\xe3o pull-up, e essa informa\xe7\xe3o deve ser inclu\xedda no programa."}),"\n",(0,s.jsx)(i.p,{children:"Por \xfaltimo, o loop principal monitora constantemente o estado dos bot\xf5es para determinar se o LED deve ser ligado. H\xe1 uma pequena pausa de 100 milissegundos entre cada atualiza\xe7\xe3o do LED em resposta ao estado dos bot\xf5es. Esses atrasos s\xe3o usados para evitar que a leitura dos bot\xf5es e as altera\xe7\xf5es nos LEDs aconte\xe7am muito rapidamente e possam ser dif\xedceis de perceber."}),"\n",(0,s.jsx)(i.p,{children:"Se voc\xea n\xe3o possui a Franzininho WiFi LAB01 para testar o projeto, \xe9 poss\xedvel testar o programa utilizando a montagem do circuito em uma protoboard."}),"\n",(0,s.jsx)(i.p,{children:"Pressione as teclas e verifique que os leds acender\xe3o conforme a tecla pressionada:"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Funcionamento",src:o(77792).c+"",width:"510",height:"306"})}),"\n",(0,s.jsx)(i.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,s.jsx)(i.p,{children:"Neste artigo, explicamos o funcionamento b\xe1sico dos pinos de I/O da Franzininho WiFi usando a placa de aplica\xe7\xe3o Franzininho WiFi LAB01. Exploramos as bibliotecas e fun\xe7\xf5es essenciais que nos permitem configurar esses pinos e acessar seus estados l\xf3gicos."}),"\n",(0,s.jsx)(i.p,{children:"Encorajamos que continue desenvolvendo suas habilidades de programa\xe7\xe3o e eletr\xf4nica, adaptando o c\xf3digo e criando projetos mais complexos. Isso permitir\xe1 explorar todo o potencial da Franzininho WiFi LAB01 com o MicroPython."}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Autor"}),(0,s.jsx)(i.th,{children:"Sthefania Fernandes"})]})}),(0,s.jsx)(i.tbody,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Data:"}),(0,s.jsx)(i.td,{children:"17/11/2023"})]})})]})]})}function h(e={}){const{wrapper:i}={...(0,n.MN)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},95788:(e,i,o)=>{o.d(i,{MN:()=>c});var s=o(11504);function n(e,i,o){return i in e?Object.defineProperty(e,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[i]=o,e}function r(e,i){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);i&&(s=s.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),o.push.apply(o,s)}return o}function a(e){for(var i=1;i=0||(n[o]=e[o]);return n}(e,i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var d=s.createContext({}),c=function(e){var i=s.useContext(d),o=i;return e&&(o="function"==typeof e?e(i):a(a({},i),e)),o},l={inlineCode:"code",wrapper:function(e){var i=e.children;return s.createElement(s.Fragment,{},i)}},h=s.forwardRef((function(e,i){var o=e.components,n=e.mdxType,r=e.originalType,d=e.parentName,h=t(e,["components","mdxType","originalType","parentName"]),p=c(o),m=n,u=p["".concat(d,".").concat(m)]||p[m]||l[m]||r;return o?s.createElement(u,a(a({ref:i},h),{},{components:o})):s.createElement(u,a({ref:i},h))}));h.displayName="MDXCreateElement"},1521:(e,i,o)=>{o.d(i,{c:()=>s});const s=o.p+"assets/images/1-a73b02e1e67137518f241488c8367938.png"},77792:(e,i,o)=>{o.d(i,{c:()=>s});const s=o.p+"assets/images/2-7c035b6c259779caa74c5edd5e4d9c96.gif"}}]); \ No newline at end of file diff --git a/assets/js/5f9a86e6.9be88000.js b/assets/js/5f9a86e6.9be88000.js deleted file mode 100755 index 74fd1ea1f..000000000 --- a/assets/js/5f9a86e6.9be88000.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3405],{3905:(a,e,t)=>{t.d(e,{Zo:()=>p,kt:()=>h});var n=t(7294);function o(a,e,t){return e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function i(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(a);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable}))),t.push.apply(t,n)}return t}function r(a){for(var e=1;e=0||(o[t]=a[t]);return o}(a,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(a);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(a,t)&&(o[t]=a[t])}return o}var l=n.createContext({}),d=function(a){var e=n.useContext(l),t=e;return a&&(t="function"==typeof a?a(e):r(r({},e),a)),t},p=function(a){var e=d(a.components);return n.createElement(l.Provider,{value:e},a.children)},m="mdxType",c={inlineCode:"code",wrapper:function(a){var e=a.children;return n.createElement(n.Fragment,{},e)}},u=n.forwardRef((function(a,e){var t=a.components,o=a.mdxType,i=a.originalType,l=a.parentName,p=s(a,["components","mdxType","originalType","parentName"]),m=d(t),u=o,h=m["".concat(l,".").concat(u)]||m[u]||c[u]||i;return t?n.createElement(h,r(r({ref:e},p),{},{components:t})):n.createElement(h,r({ref:e},p))}));function h(a,e){var t=arguments,o=e&&e.mdxType;if("string"==typeof a||o){var i=t.length,r=new Array(i);r[0]=u;var s={};for(var l in e)hasOwnProperty.call(e,l)&&(s[l]=e[l]);s.originalType=a,s[m]="string"==typeof a?a:o,r[1]=s;for(var d=2;d{t.r(e),t.d(e,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var n=t(3117),o=(t(7294),t(3905));const i={id:"micropython-entradas-saidas-digitais",title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",slug:"/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",description:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.",author:"Sthefania Fernandes"},r=void 0,s={unversionedId:"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais",id:"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais",title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",description:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.",source:"@site/docs/FranzininhoWifi/exemplos-micropython/entradas-saidas-digitais.md",sourceDirName:"FranzininhoWifi/exemplos-micropython",slug:"/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",permalink:"/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-micropython/entradas-saidas-digitais.md",tags:[],version:"current",frontMatter:{id:"micropython-entradas-saidas-digitais",title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",slug:"/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",description:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.",author:"Sthefania Fernandes"},sidebar:"docs",previous:{title:"Primeiros Passos com MicroPython",permalink:"/docs/franzininho-wifi/exemplos-micropython/primeiros-passos"},next:{title:"Placa Franzininho WiFi dev Edition",permalink:"/docs/franzininho-wifi/franzininho-wifi-dev-edition"}},l={},d=[{value:"Introdu\xe7\xe3o",id:"introdu\xe7\xe3o",level:2},{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"M\xf3dulos do MicroPython",id:"m\xf3dulos-do-micropython",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],p={toc:d},m="wrapper";function c(a){let{components:e,...i}=a;return(0,o.kt)(m,(0,n.Z)({},p,i,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"introdu\xe7\xe3o"},"Introdu\xe7\xe3o"),(0,o.kt)("p",null,"A Franzininho WiFi conta com pinos que podem operar em dois modos: OUTPUT e INPUT. Al\xe9m disso, \xe9 poss\xedvel usar resistores internos nos pinos configurados como Pull-Up ou Pull-Down para os pinos configurados como entradas."),(0,o.kt)("p",null,"Neste artigo, vamos explorar como utilizar o MicroPython para controlar os pinos de I/O."),(0,o.kt)("p",null,"Para isso vamos criar um c\xf3digo para manipular os LEDs e bot\xf5es da placa Franzininho WiFi LAB01, permitindo criar funcionalidades personalizadas e interativas."),(0,o.kt)("h2",{id:"recursos-necess\xe1rios"},"Recursos necess\xe1rios"),(0,o.kt)("p",null,"Para iniciar o trabalho com os GPIOs, \xe9 essencial possuir o diagrama de pinos da placa Franzininho WiFI LAB01 \xe0 disposi\xe7\xe3o, pois isso permitir\xe1 que voc\xea identifique tanto os nomes quanto as fun\xe7\xf5es associadas a cada um deles."),(0,o.kt)("p",null,"Tabela 1 \u2013 Franzininho WiFi LAB01 mapeamento de pinos"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Pino"),(0,o.kt)("th",{parentName:"tr",align:null},"Recurso"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO1"),(0,o.kt)("td",{parentName:"tr",align:null},"LDR")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO2"),(0,o.kt)("td",{parentName:"tr",align:null},"BT6")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO3"),(0,o.kt)("td",{parentName:"tr",align:null},"BT5")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO4"),(0,o.kt)("td",{parentName:"tr",align:null},"BT4")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO5"),(0,o.kt)("td",{parentName:"tr",align:null},"BT3")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO6"),(0,o.kt)("td",{parentName:"tr",align:null},"BT2")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO7"),(0,o.kt)("td",{parentName:"tr",align:null},"BT1")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO8"),(0,o.kt)("td",{parentName:"tr",align:null},"OLED_SDA")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO9"),(0,o.kt)("td",{parentName:"tr",align:null},"OLED_SCL")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO10"),(0,o.kt)("td",{parentName:"tr",align:null},"TFT_DC")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO11"),(0,o.kt)("td",{parentName:"tr",align:null},"TFT_RES")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO12"),(0,o.kt)("td",{parentName:"tr",align:null},"LED AZUL")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO13"),(0,o.kt)("td",{parentName:"tr",align:null},"LED VERDE")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO14"),(0,o.kt)("td",{parentName:"tr",align:null},"LED VERMELHO")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO15"),(0,o.kt)("td",{parentName:"tr",align:null},"DHT11")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO17"),(0,o.kt)("td",{parentName:"tr",align:null},"BUZZER")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO35"),(0,o.kt)("td",{parentName:"tr",align:null},"TFT_SDA")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO36"),(0,o.kt)("td",{parentName:"tr",align:null},"TFT_SCL")))),(0,o.kt)("p",null,"Nesta pr\xe1tica iremos utilizar o LED RGB e os bot\xf5es da ",(0,o.kt)("a",{parentName:"p",href:"https://docs.franzininho.com.br/docs/franzininho-wifi-lab01"},"Franzininho WiFi LAB01"),", conforme destacado na Figura abaixo:"),(0,o.kt)("p",null,"Figura 1 \u2013 Resumo dos recursos da placa\n",(0,o.kt)("img",{alt:"entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython",src:t(7939).Z,width:"800",height:"640"})),(0,o.kt)("h3",{id:"m\xf3dulos-do-micropython"},"M\xf3dulos do MicroPython"),(0,o.kt)("p",null,"O ",(0,o.kt)("a",{parentName:"p",href:"https://docs.micropython.org/en/latest/library/machine.html"},"machine")," cont\xe9m fun\xe7\xf5es espec\xedficas relacionadas ao hardware de uma placa em particular. A maioria das fun\xe7\xf5es neste m\xf3dulo permitem obter acesso direto e irrestrito aos blocos de hardware em um sistema, como: pinos, I2C, UART, SPI, ADC."),(0,o.kt)("p",null,"No MicroPython, como no Python, \xe9 poss\xedvel importar apenas parte de uma biblioteca, ao inv\xe9s de importar a biblioteca inteira. Um recurso \xfatil que utilizaremos bastante."),(0,o.kt)("p",null,"A biblioteca ",(0,o.kt)("strong",{parentName:"p"},"\u2018utime\u2019")," \xe9 uma vers\xe3o projetada para microcontroladores da biblioteca \u2018time\u2019. Essa biblioteca \xe9 \xfatil para inserir os atrasos necess\xe1rios em muitos projetos."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Obs"),": se voc\xea esquecer e usar ",(0,o.kt)("inlineCode",{parentName:"p"},"import time")," , n\xe3o se preocupe: o MicroPython usar\xe1 automaticamente a biblioteca ",(0,o.kt)("inlineCode",{parentName:"p"},"utime")," em seu lugar."),(0,o.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,o.kt)("p",null,"Com a Franzininho WiFi conectada ao seu computador, abra o Thonny e crie um novo arquivo contendo o c\xf3digo a seguir:"),(0,o.kt)("p",null,"Para criar o programa que controla o LED RGB, come\xe7amos com a instru\xe7\xe3o ",(0,o.kt)("inlineCode",{parentName:"p"},"from machine import Pin"),". Isso instrui o MicroPython a importar apenas a fun\xe7\xe3o ",(0,o.kt)("inlineCode",{parentName:"p"},"Pin")," da biblioteca ",(0,o.kt)("inlineCode",{parentName:"p"},"machine"),", em vez de importar a biblioteca inteira. Dessa forma, teremos acesso apenas \xe0 funcionalidade necess\xe1ria para controlar os pinos da placa."),(0,o.kt)("p",null,"\xc9 importante enfatizar que o Micropython \xe9 case-sensitive, isso significa que se voc\xea digitar ",(0,o.kt)("inlineCode",{parentName:"p"},"pin")," a biblioteca n\xe3o ser\xe1 reconhecida, ent\xe3o se atente no uso das letras mai\xfasculas e min\xfasculas."),(0,o.kt)("p",null,"Em seguida, vamos nomear os LEDs e associ\xe1-los aos pinos da placa como sa\xedda (",(0,o.kt)("inlineCode",{parentName:"p"},"Pin.OUT"),"). Consultando a tabela de pinos da Franzininho WiFi LAB01, identificamos que o pino 12 \xe9 respons\xe1vel pela cor azul do LED RGB, o pino 13 pela cor verde e o pino 14 pela cor vermelha. Com isso fazemos a atribui\xe7\xe3o setando todos os pinos como sa\xedda."),(0,o.kt)("p",null,"De forma semelhante, realizamos o mesmo procedimento com os bot\xf5es. Ao consultar a tabela de pinos, identificamos que o pino 7 corresponde ao bot\xe3o 1, o pino 6 ao bot\xe3o 2 e o pino 5 ao bot\xe3o 3. \xc9 importante lembrar que esses dispositivos operam com a configura\xe7\xe3o pull-up, e essa informa\xe7\xe3o deve ser inclu\xedda no programa."),(0,o.kt)("p",null,"Por \xfaltimo, o loop principal monitora constantemente o estado dos bot\xf5es para determinar se o LED deve ser ligado. H\xe1 uma pequena pausa de 100 milissegundos entre cada atualiza\xe7\xe3o do LED em resposta ao estado dos bot\xf5es. Esses atrasos s\xe3o usados para evitar que a leitura dos bot\xf5es e as altera\xe7\xf5es nos LEDs aconte\xe7am muito rapidamente e possam ser dif\xedceis de perceber."),(0,o.kt)("p",null,"Se voc\xea n\xe3o possui a Franzininho WiFi LAB01 para testar o projeto, \xe9 poss\xedvel testar o programa utilizando a montagem do circuito em uma protoboard."),(0,o.kt)("p",null,"Pressione as teclas e verifique que os leds acender\xe3o conforme a tecla pressionada:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Funcionamento",src:t(1649).Z,width:"510",height:"306"})),(0,o.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,o.kt)("p",null,"Neste artigo, explicamos o funcionamento b\xe1sico dos pinos de I/O da Franzininho WiFi usando a placa de aplica\xe7\xe3o Franzininho WiFi LAB01. Exploramos as bibliotecas e fun\xe7\xf5es essenciais que nos permitem configurar esses pinos e acessar seus estados l\xf3gicos."),(0,o.kt)("p",null,"Encorajamos que continue desenvolvendo suas habilidades de programa\xe7\xe3o e eletr\xf4nica, adaptando o c\xf3digo e criando projetos mais complexos. Isso permitir\xe1 explorar todo o potencial da Franzininho WiFi LAB01 com o MicroPython."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Autor"),(0,o.kt)("th",{parentName:"tr",align:null},"Sthefania Fernandes"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Data:"),(0,o.kt)("td",{parentName:"tr",align:null},"17/11/2023")))))}c.isMDXComponent=!0},7939:(a,e,t)=>{t.d(e,{Z:()=>n});const n=t.p+"assets/images/1-a73b02e1e67137518f241488c8367938.png"},1649:(a,e,t)=>{t.d(e,{Z:()=>n});const n=t.p+"assets/images/2-7c035b6c259779caa74c5edd5e4d9c96.gif"}}]); \ No newline at end of file diff --git a/assets/js/6048.6ee355ae.js b/assets/js/6048.6ee355ae.js deleted file mode 100755 index 80d64a863..000000000 --- a/assets/js/6048.6ee355ae.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6048],{9058:(e,t,a)=>{a.d(t,{Z:()=>h});var l=a(7294),r=a(4334),n=a(7961),o=a(7524),s=a(9960),i=a(5999);const m={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};function c(e){let{sidebar:t}=e;return l.createElement("aside",{className:"col col--3"},l.createElement("nav",{className:(0,r.Z)(m.sidebar,"thin-scrollbar"),"aria-label":(0,i.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},l.createElement("div",{className:(0,r.Z)(m.sidebarItemTitle,"margin-bottom--md")},t.title),l.createElement("ul",{className:(0,r.Z)(m.sidebarItemList,"clean-list")},t.items.map((e=>l.createElement("li",{key:e.permalink,className:m.sidebarItem},l.createElement(s.Z,{isNavLink:!0,to:e.permalink,className:m.sidebarItemLink,activeClassName:m.sidebarItemLinkActive},e.title)))))))}var u=a(3102);function d(e){let{sidebar:t}=e;return l.createElement("ul",{className:"menu__list"},t.items.map((e=>l.createElement("li",{key:e.permalink,className:"menu__list-item"},l.createElement(s.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title)))))}function g(e){return l.createElement(u.Zo,{component:d,props:e})}function p(e){let{sidebar:t}=e;const a=(0,o.i)();return t?.items.length?"mobile"===a?l.createElement(g,{sidebar:t}):l.createElement(c,{sidebar:t}):null}function h(e){const{sidebar:t,toc:a,children:o,...s}=e,i=t&&t.items.length>0;return l.createElement(n.Z,s,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement(p,{sidebar:t}),l.createElement("main",{className:(0,r.Z)("col",{"col--7":i,"col--9 col--offset-1":!i}),itemScope:!0,itemType:"http://schema.org/Blog"},o),a&&l.createElement("div",{className:"col col--2"},a))))}},390:(e,t,a)=>{a.d(t,{Z:()=>A});var l=a(7294),r=a(4334),n=a(9460),o=a(4996);function s(e){let{children:t,className:a}=e;const{frontMatter:r,assets:s,metadata:{description:i}}=(0,n.C)(),{withBaseUrl:m}=(0,o.C)(),c=s.image??r.image,u=r.keywords??[];return l.createElement("article",{className:a,itemProp:"blogPost",itemScope:!0,itemType:"http://schema.org/BlogPosting"},i&&l.createElement("meta",{itemProp:"description",content:i}),c&&l.createElement("link",{itemProp:"image",href:m(c,{absolute:!0})}),u.length>0&&l.createElement("meta",{itemProp:"keywords",content:u.join(",")}),t)}var i=a(9960);const m={title:"title_f1Hy"};function c(e){let{className:t}=e;const{metadata:a,isBlogPostPage:o}=(0,n.C)(),{permalink:s,title:c}=a,u=o?"h1":"h2";return l.createElement(u,{className:(0,r.Z)(m.title,t),itemProp:"headline"},o?c:l.createElement(i.Z,{itemProp:"url",to:s},c))}var u=a(5999),d=a(8824);const g={container:"container_mt6G"};function p(e){let{readingTime:t}=e;const a=function(){const{selectMessage:e}=(0,d.c)();return t=>{const a=Math.ceil(t);return e(a,(0,u.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:a}))}}();return l.createElement(l.Fragment,null,a(t))}function h(e){let{date:t,formattedDate:a}=e;return l.createElement("time",{dateTime:t,itemProp:"datePublished"},a)}function E(){return l.createElement(l.Fragment,null," \xb7 ")}function b(e){let{className:t}=e;const{metadata:a}=(0,n.C)(),{date:o,formattedDate:s,readingTime:i}=a;return l.createElement("div",{className:(0,r.Z)(g.container,"margin-vert--md",t)},l.createElement(h,{date:o,formattedDate:s}),void 0!==i&&l.createElement(l.Fragment,null,l.createElement(E,null),l.createElement(p,{readingTime:i})))}function f(e){return e.href?l.createElement(i.Z,e):l.createElement(l.Fragment,null,e.children)}function v(e){let{author:t,className:a}=e;const{name:n,title:o,url:s,imageURL:i,email:m}=t,c=s||m&&`mailto:${m}`||void 0;return l.createElement("div",{className:(0,r.Z)("avatar margin-bottom--sm",a)},i&&l.createElement(f,{href:c,className:"avatar__photo-link"},l.createElement("img",{className:"avatar__photo",src:i,alt:n,itemProp:"image"})),n&&l.createElement("div",{className:"avatar__intro",itemProp:"author",itemScope:!0,itemType:"https://schema.org/Person"},l.createElement("div",{className:"avatar__name"},l.createElement(f,{href:c,itemProp:"url"},l.createElement("span",{itemProp:"name"},n))),o&&l.createElement("small",{className:"avatar__subtitle",itemProp:"description"},o)))}const P={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function N(e){let{className:t}=e;const{metadata:{authors:a},assets:o}=(0,n.C)();if(0===a.length)return null;const s=a.every((e=>{let{name:t}=e;return!t}));return l.createElement("div",{className:(0,r.Z)("margin-top--md margin-bottom--sm",s?P.imageOnlyAuthorRow:"row",t)},a.map(((e,t)=>l.createElement("div",{className:(0,r.Z)(!s&&"col col--6",s?P.imageOnlyAuthorCol:P.authorCol),key:t},l.createElement(v,{author:{...e,imageURL:o.authorsImageUrls[t]??e.imageURL}})))))}function _(){return l.createElement("header",null,l.createElement(c,null),l.createElement(b,null),l.createElement(N,null))}var k=a(8780),Z=a(1506);function I(e){let{children:t,className:a}=e;const{isBlogPostPage:o}=(0,n.C)();return l.createElement("div",{id:o?k.blogPostContainerID:void 0,className:(0,r.Z)("markdown",a),itemProp:"articleBody"},l.createElement(Z.Z,null,t))}var C=a(4881),w=a(1526),y=a(3117);function F(){return l.createElement("b",null,l.createElement(u.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts"},"Read More"))}function T(e){const{blogPostTitle:t,...a}=e;return l.createElement(i.Z,(0,y.Z)({"aria-label":(0,u.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t})},a),l.createElement(F,null))}const L={blogPostFooterDetailsFull:"blogPostFooterDetailsFull_mRVl"};function B(){const{metadata:e,isBlogPostPage:t}=(0,n.C)(),{tags:a,title:o,editUrl:s,hasTruncateMarker:i}=e,m=!t&&i,c=a.length>0;return c||m||s?l.createElement("footer",{className:(0,r.Z)("row docusaurus-mt-lg",t&&L.blogPostFooterDetailsFull)},c&&l.createElement("div",{className:(0,r.Z)("col",{"col--9":m})},l.createElement(w.Z,{tags:a})),t&&s&&l.createElement("div",{className:"col margin-top--sm"},l.createElement(C.Z,{editUrl:s})),m&&l.createElement("div",{className:(0,r.Z)("col text--right",{"col--3":c})},l.createElement(T,{blogPostTitle:o,to:e.permalink}))):null}function A(e){let{children:t,className:a}=e;const o=function(){const{isBlogPostPage:e}=(0,n.C)();return e?void 0:"margin-bottom--xl"}();return l.createElement(s,{className:(0,r.Z)(o,a)},l.createElement(_,null),l.createElement(I,null,t),l.createElement(B,null))}},9460:(e,t,a)=>{a.d(t,{C:()=>s,n:()=>o});var l=a(7294),r=a(902);const n=l.createContext(null);function o(e){let{children:t,content:a,isBlogPostPage:r=!1}=e;const o=function(e){let{content:t,isBlogPostPage:a}=e;return(0,l.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:a})),[t,a])}({content:a,isBlogPostPage:r});return l.createElement(n.Provider,{value:o},t)}function s(){const e=(0,l.useContext)(n);if(null===e)throw new r.i6("BlogPostProvider");return e}},8824:(e,t,a)=>{a.d(t,{c:()=>m});var l=a(7294),r=a(2263);const n=["zero","one","two","few","many","other"];function o(e){return n.filter((t=>e.includes(t)))}const s={locale:"en",pluralForms:o(["one","other"]),select:e=>1===e?"one":"other"};function i(){const{i18n:{currentLocale:e}}=(0,r.Z)();return(0,l.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:o(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),s}}),[e])}function m(){const e=i();return{selectMessage:(t,a)=>function(e,t,a){const l=e.split("|");if(1===l.length)return l[0];l.length>a.pluralForms.length&&console.error(`For locale=${a.locale}, a maximum of ${a.pluralForms.length} plural forms are expected (${a.pluralForms.join(",")}), but the message contains ${l.length}: ${e}`);const r=a.select(t),n=a.pluralForms.indexOf(r);return l[Math.min(n,l.length-1)]}(a,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/608ae6a4.7673e5d0.js b/assets/js/608ae6a4.f1559273.js similarity index 76% rename from assets/js/608ae6a4.7673e5d0.js rename to assets/js/608ae6a4.f1559273.js index 1a34d6343..80aa2b675 100755 --- a/assets/js/608ae6a4.7673e5d0.js +++ b/assets/js/608ae6a4.f1559273.js @@ -1 +1 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6938],{4545:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/docusaurus","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5168],{3120:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/docusaurus","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/66406991.4cb8a3d4.js b/assets/js/66406991.4cb8a3d4.js deleted file mode 100755 index 452c0eef2..000000000 --- a/assets/js/66406991.4cb8a3d4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[110],{711:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/hello","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/66406991.e8d76155.js b/assets/js/66406991.e8d76155.js new file mode 100755 index 000000000..4b1593400 --- /dev/null +++ b/assets/js/66406991.e8d76155.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6956],{38960:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/hello","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/66e66c27.07918695.js b/assets/js/66e66c27.07918695.js new file mode 100755 index 000000000..53883e958 --- /dev/null +++ b/assets/js/66e66c27.07918695.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1676],{66016:(i,o,e)=>{e.r(o),e.d(o,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>t,toc:()=>l});var n=e(17624),r=e(95788);const s={id:"franzininho-wifi-wokwi-intro",title:"Como simular a Franzininho WiFi no Wokwi",slug:"/franzininho-wifi/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi"},a=void 0,t={id:"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro",title:"Como simular a Franzininho WiFi no Wokwi",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi",source:"@site/docs/FranzininhoWifi/wokwi/franzininho-wifi-wokwi.md",sourceDirName:"FranzininhoWifi/wokwi",slug:"/franzininho-wifi/wokwi/primeiros-passos",permalink:"/docs/franzininho-wifi/wokwi/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/wokwi/franzininho-wifi-wokwi.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-wokwi-intro",title:"Como simular a Franzininho WiFi no Wokwi",slug:"/franzininho-wifi/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi"},sidebar:"docs",previous:{title:"Placa Franzininho WiFi",permalink:"/docs/franzininho-wifi/franzininho-wifi"},next:{title:"Primeiros Passos com ESP-IDF",permalink:"/docs/franzininho-wifi/exemplos-espidf/primeiros-passos"}},c={},l=[{value:"Saiba mais",id:"saiba-mais",level:2},{value:"Exemplos no simulador",id:"exemplos-no-simulador",level:2}];function d(i){const o={a:"a",admonition:"admonition",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,r.MN)(),...i.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.p,{children:"Wokwi \xe9 um simulador de eletr\xf4nica online. Voc\xea pode us\xe1-lo para simular Arduino, ESP32 e muitas outras placas, componentes e sensores populares. Foi desenvolvido para makers, por makers."}),"\n",(0,n.jsx)(o.p,{children:"Voc\xea pode usar o Wokwi para aprender a programar o Franzininho WiFi, criar prot\xf3tipos de suas id\xe9ias, e compartilhar seus projetos com outros makers."}),"\n",(0,n.jsx)("div",{style:{textAlign:"center"},children:(0,n.jsx)(o.p,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/new/franzininho-wifi",children:(0,n.jsx)(o.img,{alt:"Wokwi Franzininho WiFi",src:e(48472).c+"",width:"243",height:"96"})})})}),"\n",(0,n.jsx)(o.admonition,{title:"Dica",type:"tip",children:(0,n.jsx)(o.p,{children:"Use o Template do Franzininho wifi clicando na imagem acima para come\xe7ar um novo projeto no Wokwi."})}),"\n",(0,n.jsx)(o.h2,{id:"saiba-mais",children:"Saiba mais"}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/parts/board-franzininho-wifi",children:"Documenta\xe7\xe3o da Franzininho WiFi no WokWi"})}),"\n",(0,n.jsxs)(o.p,{children:["Caso queira saber mais sobre outras funcionalidades do simulador, d\xea uma olhada na lista abaixo. Voc\xea pode tamb\xe9m consultar as pe\xe7as na lista de ",(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/",children:"Refer\xeancia do Diagrama"}),", dispon\xedvel na documenta\xe7\xe3o do Wokwi."]}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/diagram-format",children:"Formato do diagram.json"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/keyboard-shortcuts",children:"Teclas de Atalho do Editor"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/serial-monitor",children:"O Monitor Serial"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/gdb-debugging",children:"Usando o GDB no Wokwi"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/logic-analyzer",children:"Guia do Analisador L\xf3gico"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/libraries",children:"Trabalhando com Bibliotecas"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/esp32",children:"Simulador ESP32"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/esp32-wifi",children:"Rede WiFi ESP32"})}),"\n"]}),"\n",(0,n.jsx)(o.h2,{id:"exemplos-no-simulador",children:"Exemplos no simulador"}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/323796775459619410",children:"Rel\xf3gio LCD com cliente (NTP)"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/327061759288410708",children:"Controle de servo motor"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/324682033130373716",children:"Misturador de LED RGB (usando 3 potenci\xf4metros)"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/313606939786347074",children:"Blink com CircuitPython"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/329013233501340242",children:"Display TFT ILI9341"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/323796775459619410",children:"Rel\xf3gico com Display LCD 16 x 2"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/324615433106752083",children:"Entrada anal\xf3gica e saida PWM com ESP-IDF"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/324613550740865619",children:"FreeRTOS Tasks"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/329133882849886804",children:"PWM ESP-IDF"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/322524997423727188",children:"MQTT"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/323043284024820308",children:"NTP"})}),"\n"]})]})}function h(i={}){const{wrapper:o}={...(0,r.MN)(),...i.components};return o?(0,n.jsx)(o,{...i,children:(0,n.jsx)(d,{...i})}):d(i)}},95788:(i,o,e)=>{e.d(o,{MN:()=>l});var n=e(11504);function r(i,o,e){return o in i?Object.defineProperty(i,o,{value:e,enumerable:!0,configurable:!0,writable:!0}):i[o]=e,i}function s(i,o){var e=Object.keys(i);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(i);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(i,o).enumerable}))),e.push.apply(e,n)}return e}function a(i){for(var o=1;o=0||(r[e]=i[e]);return r}(i,o);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(i);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(i,e)&&(r[e]=i[e])}return r}var c=n.createContext({}),l=function(i){var o=n.useContext(c),e=o;return i&&(e="function"==typeof i?i(o):a(a({},o),i)),e},d={inlineCode:"code",wrapper:function(i){var o=i.children;return n.createElement(n.Fragment,{},o)}},h=n.forwardRef((function(i,o){var e=i.components,r=i.mdxType,s=i.originalType,c=i.parentName,h=t(i,["components","mdxType","originalType","parentName"]),p=l(e),m=r,w=p["".concat(c,".").concat(m)]||p[m]||d[m]||s;return e?n.createElement(w,a(a({ref:o},h),{},{components:e})):n.createElement(w,a({ref:o},h))}));h.displayName="MDXCreateElement"},48472:(i,o,e)=>{e.d(o,{c:()=>n});const n=e.p+"assets/images/franzininho-wifi-board-b801f9fce63884679d7c579b276a16ab.svg"}}]); \ No newline at end of file diff --git a/assets/js/66e66c27.164e19c2.js b/assets/js/66e66c27.164e19c2.js deleted file mode 100755 index d3f088fb3..000000000 --- a/assets/js/66e66c27.164e19c2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7932],{3905:(i,e,o)=>{o.d(e,{Zo:()=>m,kt:()=>k});var t=o(7294);function a(i,e,o){return e in i?Object.defineProperty(i,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):i[e]=o,i}function r(i,e){var o=Object.keys(i);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(i);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable}))),o.push.apply(o,t)}return o}function n(i){for(var e=1;e=0||(a[o]=i[o]);return a}(i,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(i,o)&&(a[o]=i[o])}return a}var p=t.createContext({}),l=function(i){var e=t.useContext(p),o=e;return i&&(o="function"==typeof i?i(e):n(n({},e),i)),o},m=function(i){var e=l(i.components);return t.createElement(p.Provider,{value:e},i.children)},c="mdxType",u={inlineCode:"code",wrapper:function(i){var e=i.children;return t.createElement(t.Fragment,{},e)}},d=t.forwardRef((function(i,e){var o=i.components,a=i.mdxType,r=i.originalType,p=i.parentName,m=s(i,["components","mdxType","originalType","parentName"]),c=l(o),d=a,k=c["".concat(p,".").concat(d)]||c[d]||u[d]||r;return o?t.createElement(k,n(n({ref:e},m),{},{components:o})):t.createElement(k,n({ref:e},m))}));function k(i,e){var o=arguments,a=e&&e.mdxType;if("string"==typeof i||a){var r=o.length,n=new Array(r);n[0]=d;var s={};for(var p in e)hasOwnProperty.call(e,p)&&(s[p]=e[p]);s.originalType=i,s[c]="string"==typeof i?i:a,n[1]=s;for(var l=2;l{o.r(e),o.d(e,{assets:()=>p,contentTitle:()=>n,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var t=o(3117),a=(o(7294),o(3905));const r={id:"franzininho-wifi-wokwi-intro",title:"Como simular a Franzininho WiFi no Wokwi",slug:"/franzininho-wifi/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi"},n=void 0,s={unversionedId:"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro",id:"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro",title:"Como simular a Franzininho WiFi no Wokwi",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi",source:"@site/docs/FranzininhoWifi/wokwi/franzininho-wifi-wokwi.md",sourceDirName:"FranzininhoWifi/wokwi",slug:"/franzininho-wifi/wokwi/primeiros-passos",permalink:"/docs/franzininho-wifi/wokwi/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/wokwi/franzininho-wifi-wokwi.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-wokwi-intro",title:"Como simular a Franzininho WiFi no Wokwi",slug:"/franzininho-wifi/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi"},sidebar:"docs",previous:{title:"Placa Franzininho WiFi",permalink:"/docs/franzininho-wifi/franzininho-wifi"},next:{title:"Primeiros Passos com ESP-IDF",permalink:"/docs/franzininho-wifi/exemplos-espidf/primeiros-passos"}},p={},l=[{value:"Saiba mais",id:"saiba-mais",level:2},{value:"Exemplos no simulador",id:"exemplos-no-simulador",level:2}],m={toc:l},c="wrapper";function u(i){let{components:e,...r}=i;return(0,a.kt)(c,(0,t.Z)({},m,r,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Wokwi \xe9 um simulador de eletr\xf4nica online. Voc\xea pode us\xe1-lo para simular Arduino, ESP32 e muitas outras placas, componentes e sensores populares. Foi desenvolvido para makers, por makers."),(0,a.kt)("p",null,"Voc\xea pode usar o Wokwi para aprender a programar o Franzininho WiFi, criar prot\xf3tipos de suas id\xe9ias, e compartilhar seus projetos com outros makers."),(0,a.kt)("div",{style:{textAlign:"center"}},(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://wokwi.com/projects/new/franzininho-wifi"},(0,a.kt)("img",{alt:"Wokwi Franzininho WiFi",src:o(7560).Z,width:"243",height:"96"})))),(0,a.kt)("admonition",{title:"Dica",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"Use o Template do Franzininho wifi clicando na imagem acima para come\xe7ar um novo projeto no Wokwi.")),(0,a.kt)("h2",{id:"saiba-mais"},"Saiba mais"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://docs.wokwi.com/pt-BR/parts/board-franzininho-wifi"},"Documenta\xe7\xe3o da Franzininho WiFi no WokWi")),(0,a.kt)("p",null,"Caso queira saber mais sobre outras funcionalidades do simulador, d\xea uma olhada na lista abaixo. Voc\xea pode tamb\xe9m consultar as pe\xe7as na lista de ",(0,a.kt)("a",{parentName:"p",href:"https://docs.wokwi.com/pt-BR/"},"Refer\xeancia do Diagrama"),", dispon\xedvel na documenta\xe7\xe3o do Wokwi."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/diagram-format"},"Formato do diagram.json")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/keyboard-shortcuts"},"Teclas de Atalho do Editor")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/serial-monitor"},"O Monitor Serial")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/gdb-debugging"},"Usando o GDB no Wokwi")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/logic-analyzer"},"Guia do Analisador L\xf3gico")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/libraries"},"Trabalhando com Bibliotecas")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/esp32"},"Simulador ESP32")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/esp32-wifi"},"Rede WiFi ESP32"))),(0,a.kt)("h2",{id:"exemplos-no-simulador"},"Exemplos no simulador"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/323796775459619410"},"Rel\xf3gio LCD com cliente (NTP)")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/327061759288410708"},"Controle de servo motor")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/324682033130373716"},"Misturador de LED RGB (usando 3 potenci\xf4metros)")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/313606939786347074"},"Blink com CircuitPython")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/329013233501340242"},"Display TFT ILI9341")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/323796775459619410"},"Rel\xf3gico com Display LCD 16 x 2")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/324615433106752083"},"Entrada anal\xf3gica e saida PWM com ESP-IDF")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/324613550740865619"},"FreeRTOS Tasks")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/329133882849886804"},"PWM ESP-IDF")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/322524997423727188"},"MQTT")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/323043284024820308"},"NTP"))))}u.isMDXComponent=!0},7560:(i,e,o)=>{o.d(e,{Z:()=>t});const t=o.p+"assets/images/franzininho-wifi-board-b801f9fce63884679d7c579b276a16ab.svg"}}]); \ No newline at end of file diff --git a/assets/js/68401cc9.082694d1.js b/assets/js/68401cc9.082694d1.js new file mode 100755 index 000000000..122aa303e --- /dev/null +++ b/assets/js/68401cc9.082694d1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1168],{19864:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>t,toc:()=>d});var a=n(17624),i=n(95788);const r={id:"identificando-componentes",title:"Identificando os componentes",slug:"/franzininho-diy/identificando-componentes",description:"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},s=void 0,t={id:"FranzininhoDIY/identificando-componentes",title:"Identificando os componentes",description:"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.",source:"@site/docs/FranzininhoDIY/identificando-componentes.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/identificando-componentes",permalink:"/docs/franzininho-diy/identificando-componentes",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/identificando-componentes.md",tags:[],version:"current",frontMatter:{id:"identificando-componentes",title:"Identificando os componentes",slug:"/franzininho-diy/identificando-componentes",description:"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},sidebar:"docs",previous:{title:"Lista de Materiais",permalink:"/docs/franzininho-diy/lista-de-materiais"},next:{title:"Montagem da Franzininho DIY",permalink:"/docs/franzininho-diy/montagem"}},c={},d=[{value:"Placa de Circuito impresso",id:"placa-de-circuito-impresso",level:2},{value:"Resistores",id:"resistores",level:2},{value:"Capacitores",id:"capacitores",level:2},{value:"LEDs",id:"leds",level:2},{value:"Chave t\xe1ctil",id:"chave-t\xe1ctil",level:2},{value:"Soquete",id:"soquete",level:2},{value:"Barra de pinos",id:"barra-de-pinos",level:2},{value:"Regulador de Tens\xe3o",id:"regulador-de-tens\xe3o",level:2},{value:"Conector USB",id:"conector-usb",level:2},{value:"ATtiny85",id:"attiny85",level:2}];function p(e){const o={a:"a",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.h2,{id:"placa-de-circuito-impresso",children:"Placa de Circuito impresso"}),"\n",(0,a.jsx)(o.p,{children:"A placa de circuito impresso \xe9 respons\xe1vel por receber todos os componentes. Ela pode ser feita de fibra de vidro ou fenolite. Para a Franzininho DIY foi desenvolvido um projeto em face simples, o que permite a fabrica\xe7\xe3o caseira."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"PCB",src:n(82148).c+"",width:"510",height:"301"})}),"\n",(0,a.jsxs)(o.p,{children:["Na parte superior da placa (",(0,a.jsx)(o.strong,{children:"TOP"}),") h\xe1 os desenhos dos componentes, indicando a posi\xe7\xe3o de cada um. Os componentes s\xe3o encaixados em seus respectivos locais e depois s\xe3o soldados atrav\xe9s da parte inferior (",(0,a.jsx)(o.strong,{children:"Bottom"}),")."]}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"TOP e Bottom da placa Franzininho DIY V2",src:n(83880).c+"",width:"1130",height:"294"})}),"\n",(0,a.jsx)(o.h2,{id:"resistores",children:"Resistores"}),"\n",(0,a.jsx)(o.p,{children:"Os resistores s\xe3o componentes passivos que se op\xf5em \xe0 passagem de corrente el\xe9trica no circuito. Existem diversos tipos de resistores dispon\xedveis. Na Franzininho DIY usamos resistores de carbono de 1/4 W. Os an\xe9is coloridos indicam o valor e toler\xe2ncia do resistor."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Tabela C\xf3digo de cores para resistores de 4 faixas",src:n(37580).c+"",width:"780",height:"629"})}),"\n",(0,a.jsxs)(o.p,{children:["Fonte: ",(0,a.jsx)(o.a,{href:"http://blog.render.com.br/eletronica/como-calcular-o-valor-de-um-resistor/",children:"http://blog.render.com.br/eletronica/como-calcular-o-valor-de-um-resistor/"})]}),"\n",(0,a.jsx)(o.p,{children:"Na Franzininho DIY usamos 5 resistores, com as seguintes refer\xeancias e valores:"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"R1 e R2 - 68 R (Azul, Cinza, Preto, Dourado)"}),"\n"]}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Resistores de 68 Ohm",src:n(11916).c+"",width:"356",height:"224"})}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"R3 - 1K5 (Marrom, Verde, Vermelho, Dourado)"}),"\n"]}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Resistor de 1500 Ohm",src:n(44768).c+"",width:"356",height:"145"})}),"\n",(0,a.jsx)(o.p,{children:"R4 e R5 - 1K (Marrom, Preto, Vermelho, Dourado)"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Resistor de 1k Ohm",src:n(64752).c+"",width:"356",height:"123"})}),"\n",(0,a.jsx)(o.h2,{id:"capacitores",children:"Capacitores"}),"\n",(0,a.jsx)(o.p,{children:"Capacitores s\xe3o dispositivos el\xe9tricos capazes de armazenar carga el\xe9trica em um campo el\xe9trico. Na Franzininho DIY temos 2 tipos de capacitores:"}),"\n",(0,a.jsx)(o.p,{children:"C1 - Capacitor Cer\xe2mico 100 nF x 50 V"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Capacitor Cer\xe2mico 100 nF",src:n(71184).c+"",width:"150",height:"305"})}),"\n",(0,a.jsx)(o.p,{children:"C2 - Capacitor eletrol\xedtico 10uF x 35V"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Capacitor eletrol\xedtico 10uF x 35V",src:n(41548).c+"",width:"200",height:"132"})}),"\n",(0,a.jsx)(o.h2,{id:"leds",children:"LEDs"}),"\n",(0,a.jsx)(o.p,{children:"O LED (Light Emitting Diode) \xe9 usado para a emiss\xe3o de luz em locais e instrumentos onde se torna mais conveniente a sua utiliza\xe7\xe3o no lugar de uma l\xe2mpada."}),"\n",(0,a.jsx)(o.p,{children:"Na Franzininho DIY s\xe3o usados dois leds difusos de 3 mm"}),"\n",(0,a.jsx)(o.p,{children:"ON - LED Verde, LED - LED Amarelo"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"LEDs 3mm",src:n(99552).c+"",width:"158",height:"195"})}),"\n",(0,a.jsx)(o.h2,{id:"chave-t\xe1ctil",children:"Chave t\xe1ctil"}),"\n",(0,a.jsx)(o.p,{children:"\xc9 um bot\xe3o de contato moment\xe2neo. Na Franzininho DIY usamos uma chave t\xe1ctil NA (normalmente aberta) de 4,3 x 6 x 6 mm que tem a fun\xe7\xe3o de bot\xe3o de Reset."}),"\n",(0,a.jsx)(o.p,{children:"Chave - RESET"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Chave t\xe1ctil",src:n(19744).c+"",width:"150",height:"150"})}),"\n",(0,a.jsx)(o.h2,{id:"soquete",children:"Soquete"}),"\n",(0,a.jsx)(o.p,{children:"O soquete \xe9 usado para o encaixe de circuitos integrados, facilitando a sua troca na placa."}),"\n",(0,a.jsx)(o.p,{children:"Na Franzininho DIY usamos um soquete de 8 pinos para acomodar o Microcontrolador ATtiny85"}),"\n",(0,a.jsx)(o.p,{children:"IC1 - Soquete"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Soquete torneado 8 pinos",src:n(90116).c+"",width:"200",height:"200"})}),"\n",(0,a.jsx)(o.h2,{id:"barra-de-pinos",children:"Barra de pinos"}),"\n",(0,a.jsx)(o.p,{children:"S\xe3o usadas para expans\xe3o de pinos e entrada de alimenta\xe7\xe3o na placa. Na Franzininho DIY usamos 3 vias para o conector de alimenta\xe7\xe3o e 8 vias para o conector de expans\xe3o da placa"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"J1 - Barra de 3 pinos"}),"\n",(0,a.jsx)(o.li,{children:"P0, P1...GND - Barra de 8 pinos"}),"\n"]}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Barra de pinos",src:n(51368).c+"",width:"450",height:"336"})}),"\n",(0,a.jsx)(o.h2,{id:"regulador-de-tens\xe3o",children:"Regulador de Tens\xe3o"}),"\n",(0,a.jsx)(o.p,{children:"Usado para abaixar a tens\xe3o de entrada para um n\xedvel em que o circuito possa trabalhar. Na Franzininho DIY usamos um regulador de tens\xe3o de 5V, o 78L05"}),"\n",(0,a.jsx)(o.p,{children:"IC2 - 78L05 - Regulador de tens\xe3o 5V"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Regulador de tens\xe3o 78L05",src:n(73204).c+"",width:"200",height:"155"})}),"\n",(0,a.jsx)(o.h2,{id:"conector-usb",children:"Conector USB"}),"\n",(0,a.jsx)(o.p,{children:"Usado para conectar a placa ao computador ou a um circuito de alimenta\xe7\xe3o com conector USB. Na Franzininho DIY usamos um Conector USB Macho 90\xba com trava"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Conector USB Macho 90\xba com trava",src:n(35924).c+"",width:"200",height:"200"})}),"\n",(0,a.jsx)(o.h2,{id:"attiny85",children:"ATtiny85"}),"\n",(0,a.jsx)(o.p,{children:"\xc9 o c\xe9rebro da Franzininho DIY e o componente mais caro. Tenha cuidado na hora de encaixar no soquete. Siga as orienta\xe7\xf5es de montagem."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"ATtiny85",src:n(2198).c+"",width:"600",height:"600"})})]})}function l(e={}){const{wrapper:o}={...(0,i.MN)(),...e.components};return o?(0,a.jsx)(o,{...e,children:(0,a.jsx)(p,{...e})}):p(e)}},95788:(e,o,n)=>{n.d(o,{MN:()=>d});var a=n(11504);function i(e,o,n){return o in e?Object.defineProperty(e,o,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[o]=n,e}function r(e,o){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);o&&(a=a.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var o=1;o=0||(i[n]=e[n]);return i}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var c=a.createContext({}),d=function(e){var o=a.useContext(c),n=o;return e&&(n="function"==typeof e?e(o):s(s({},o),e)),n},p={inlineCode:"code",wrapper:function(e){var o=e.children;return a.createElement(a.Fragment,{},o)}},l=a.forwardRef((function(e,o){var n=e.components,i=e.mdxType,r=e.originalType,c=e.parentName,l=t(e,["components","mdxType","originalType","parentName"]),m=d(n),h=i,u=m["".concat(c,".").concat(h)]||m[h]||p[h]||r;return n?a.createElement(u,s(s({ref:o},l),{},{components:n})):a.createElement(u,s({ref:o},l))}));l.displayName="MDXCreateElement"},2198:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/attiny85-c3f7296a3f19fedda9c4797cfe019d1d.jpeg"},51368:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-barra-37f182ba7a00ccbddafa8dc40ca9e52c.png"},71184:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-capacitor1-f377f2c7605d9807e8a3275a975bafba.png"},41548:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-capacitor2-d6242d5a4f44d52664b79b39535dde51.png"},19744:(e,o,n)=>{n.d(o,{c:()=>a});const a="data:image/png;base64,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"},99552:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-leds-32db86c807fab9e890804d4a228154e4.png"},83880:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-placa-top-botton-9ccf094c03e2914ecc04fc2ef4bebde2.png"},82148:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-placa-82f9ed3365c7b53a5a09ce31390b9aad.png"},73204:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-regulador-c29f86619a6fb5ebd53a76d5106c1471.png"},64752:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-resistor1k-b1aa065144e842347cbc7ffca90e597e.png"},44768:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-resistor1k5-0797ad85dba140cfe5b6e159f138814d.png"},11916:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-resistor68r-f217f04e7a0256e62606a54608736ef7.png"},90116:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-soquete-2f97a7d7776b202d7f80ad3a5fe700b2.png"},37580:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-tabela-resistores-edd34fa8f3b4a4465ccc329faa70cfb0.png"},35924:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-usb-3c13b47eb498c03a88bd467edcc5e5a5.png"}}]); \ No newline at end of file diff --git a/assets/js/68401cc9.aca0addf.js b/assets/js/68401cc9.aca0addf.js deleted file mode 100755 index 4f02b3fcd..000000000 --- a/assets/js/68401cc9.aca0addf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2654],{3905:(e,o,a)=>{a.d(o,{Zo:()=>p,kt:()=>h});var t=a(7294);function n(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function i(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,t)}return a}function r(e){for(var o=1;o=0||(n[a]=e[a]);return n}(e,o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var c=t.createContext({}),d=function(e){var o=t.useContext(c),a=o;return e&&(a="function"==typeof e?e(o):r(r({},o),e)),a},p=function(e){var o=d(e.components);return t.createElement(c.Provider,{value:o},e.children)},l="mdxType",m={inlineCode:"code",wrapper:function(e){var o=e.children;return t.createElement(t.Fragment,{},o)}},u=t.forwardRef((function(e,o){var a=e.components,n=e.mdxType,i=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),l=d(a),u=n,h=l["".concat(c,".").concat(u)]||l[u]||m[u]||i;return a?t.createElement(h,r(r({ref:o},p),{},{components:a})):t.createElement(h,r({ref:o},p))}));function h(e,o){var a=arguments,n=o&&o.mdxType;if("string"==typeof e||n){var i=a.length,r=new Array(i);r[0]=u;var s={};for(var c in o)hasOwnProperty.call(o,c)&&(s[c]=o[c]);s.originalType=e,s[l]="string"==typeof e?e:n,r[1]=s;for(var d=2;d{a.r(o),a.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var t=a(3117),n=(a(7294),a(3905));const i={id:"identificando-componentes",title:"Identificando os componentes",slug:"/franzininho-diy/identificando-componentes",description:"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},r=void 0,s={unversionedId:"FranzininhoDIY/identificando-componentes",id:"FranzininhoDIY/identificando-componentes",title:"Identificando os componentes",description:"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.",source:"@site/docs/FranzininhoDIY/identificando-componentes.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/identificando-componentes",permalink:"/docs/franzininho-diy/identificando-componentes",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/identificando-componentes.md",tags:[],version:"current",frontMatter:{id:"identificando-componentes",title:"Identificando os componentes",slug:"/franzininho-diy/identificando-componentes",description:"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},sidebar:"docs",previous:{title:"Lista de Materiais",permalink:"/docs/franzininho-diy/lista-de-materiais"},next:{title:"Montagem da Franzininho DIY",permalink:"/docs/franzininho-diy/montagem"}},c={},d=[{value:"Placa de Circuito impresso",id:"placa-de-circuito-impresso",level:2},{value:"Resistores",id:"resistores",level:2},{value:"Capacitores",id:"capacitores",level:2},{value:"LEDs",id:"leds",level:2},{value:"Chave t\xe1ctil",id:"chave-t\xe1ctil",level:2},{value:"Soquete",id:"soquete",level:2},{value:"Barra de pinos",id:"barra-de-pinos",level:2},{value:"Regulador de Tens\xe3o",id:"regulador-de-tens\xe3o",level:2},{value:"Conector USB",id:"conector-usb",level:2},{value:"ATtiny85",id:"attiny85",level:2}],p={toc:d},l="wrapper";function m(e){let{components:o,...i}=e;return(0,n.kt)(l,(0,t.Z)({},p,i,{components:o,mdxType:"MDXLayout"}),(0,n.kt)("h2",{id:"placa-de-circuito-impresso"},"Placa de Circuito impresso"),(0,n.kt)("p",null,"A placa de circuito impresso \xe9 respons\xe1vel por receber todos os componentes. Ela pode ser feita de fibra de vidro ou fenolite. Para a Franzininho DIY foi desenvolvido um projeto em face simples, o que permite a fabrica\xe7\xe3o caseira."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"PCB",src:a(2354).Z,width:"510",height:"301"})),(0,n.kt)("p",null,"Na parte superior da placa ","(",(0,n.kt)("strong",{parentName:"p"},"TOP"),")"," h\xe1 os desenhos dos componentes, indicando a posi\xe7\xe3o de cada um. Os componentes s\xe3o encaixados em seus respectivos locais e depois s\xe3o soldados atrav\xe9s da parte inferior ","(",(0,n.kt)("strong",{parentName:"p"},"Bottom"),")","."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"TOP e Bottom da placa Franzininho DIY V2",src:a(377).Z,width:"1130",height:"294"})),(0,n.kt)("h2",{id:"resistores"},"Resistores"),(0,n.kt)("p",null,"Os resistores s\xe3o componentes passivos que se op\xf5em \xe0 passagem de corrente el\xe9trica no circuito. Existem diversos tipos de resistores dispon\xedveis. Na Franzininho DIY usamos resistores de carbono de 1/4 W. Os an\xe9is coloridos indicam o valor e toler\xe2ncia do resistor."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Tabela C\xf3digo de cores para resistores de 4 faixas",src:a(1753).Z,width:"780",height:"629"})),(0,n.kt)("p",null,"Fonte: ",(0,n.kt)("a",{parentName:"p",href:"http://blog.render.com.br/eletronica/como-calcular-o-valor-de-um-resistor/"},"http://blog.render.com.br/eletronica/como-calcular-o-valor-de-um-resistor/")),(0,n.kt)("p",null,"Na Franzininho DIY usamos 5 resistores, com as seguintes refer\xeancias e valores:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"R1 e R2 - 68 R ","(","Azul, Cinza, Preto, Dourado",")")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Resistores de 68 Ohm",src:a(9454).Z,width:"356",height:"224"})),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"R3 - 1K5 ","(","Marrom, Verde, Vermelho, Dourado",")")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Resistor de 1500 Ohm",src:a(70).Z,width:"356",height:"145"})),(0,n.kt)("p",null,"R4 e R5 - 1K ","(","Marrom, Preto, Vermelho, Dourado",")"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Resistor de 1k Ohm",src:a(3397).Z,width:"356",height:"123"})),(0,n.kt)("h2",{id:"capacitores"},"Capacitores"),(0,n.kt)("p",null,"Capacitores s\xe3o dispositivos el\xe9tricos capazes de armazenar carga el\xe9trica em um campo el\xe9trico. Na Franzininho DIY temos 2 tipos de capacitores:"),(0,n.kt)("p",null,"C1 - Capacitor Cer\xe2mico 100 nF x 50 V"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Capacitor Cer\xe2mico 100 nF",src:a(5845).Z,width:"150",height:"305"})),(0,n.kt)("p",null,"C2 - Capacitor eletrol\xedtico 10uF x 35V"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Capacitor eletrol\xedtico 10uF x 35V",src:a(5994).Z,width:"200",height:"132"})),(0,n.kt)("h2",{id:"leds"},"LEDs"),(0,n.kt)("p",null,"O LED ","(","Light Emitting Diode",")"," \xe9 usado para a emiss\xe3o de luz em locais e instrumentos onde se torna mais conveniente a sua utiliza\xe7\xe3o no lugar de uma l\xe2mpada."),(0,n.kt)("p",null,"Na Franzininho DIY s\xe3o usados dois leds difusos de 3 mm"),(0,n.kt)("p",null,"ON - LED Verde, LED - LED Amarelo"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"LEDs 3mm",src:a(8173).Z,width:"158",height:"195"})),(0,n.kt)("h2",{id:"chave-t\xe1ctil"},"Chave t\xe1ctil"),(0,n.kt)("p",null,"\xc9 um bot\xe3o de contato moment\xe2neo. Na Franzininho DIY usamos uma chave t\xe1ctil NA ","(","normalmente aberta",")"," de 4,3 x 6 x 6 mm que tem a fun\xe7\xe3o de bot\xe3o de Reset."),(0,n.kt)("p",null,"Chave - RESET"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Chave t\xe1ctil",src:a(1682).Z,width:"150",height:"150"})),(0,n.kt)("h2",{id:"soquete"},"Soquete"),(0,n.kt)("p",null,"O soquete \xe9 usado para o encaixe de circuitos integrados, facilitando a sua troca na placa."),(0,n.kt)("p",null,"Na Franzininho DIY usamos um soquete de 8 pinos para acomodar o Microcontrolador ATtiny85"),(0,n.kt)("p",null,"IC1 - Soquete"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Soquete torneado 8 pinos",src:a(535).Z,width:"200",height:"200"})),(0,n.kt)("h2",{id:"barra-de-pinos"},"Barra de pinos"),(0,n.kt)("p",null,"S\xe3o usadas para expans\xe3o de pinos e entrada de alimenta\xe7\xe3o na placa. Na Franzininho DIY usamos 3 vias para o conector de alimenta\xe7\xe3o e 8 vias para o conector de expans\xe3o da placa"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"J1 - Barra de 3 pinos"),(0,n.kt)("li",{parentName:"ul"},"P0, P1...GND - Barra de 8 pinos")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Barra de pinos",src:a(2152).Z,width:"450",height:"336"})),(0,n.kt)("h2",{id:"regulador-de-tens\xe3o"},"Regulador de Tens\xe3o"),(0,n.kt)("p",null,"Usado para abaixar a tens\xe3o de entrada para um n\xedvel em que o circuito possa trabalhar. Na Franzininho DIY usamos um regulador de tens\xe3o de 5V, o 78L05"),(0,n.kt)("p",null,"IC2 - 78L05 - Regulador de tens\xe3o 5V"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Regulador de tens\xe3o 78L05",src:a(1990).Z,width:"200",height:"155"})),(0,n.kt)("h2",{id:"conector-usb"},"Conector USB"),(0,n.kt)("p",null,"Usado para conectar a placa ao computador ou a um circuito de alimenta\xe7\xe3o com conector USB. Na Franzininho DIY usamos um Conector USB Macho 90\xba com trava"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Conector USB Macho 90\xba com trava",src:a(6449).Z,width:"200",height:"200"})),(0,n.kt)("h2",{id:"attiny85"},"ATtiny85"),(0,n.kt)("p",null,"\xc9 o c\xe9rebro da Franzininho DIY e o componente mais caro. Tenha cuidado na hora de encaixar no soquete. Siga as orienta\xe7\xf5es de montagem."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ATtiny85",src:a(6011).Z,width:"600",height:"600"})))}m.isMDXComponent=!0},6011:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/attiny85-c3f7296a3f19fedda9c4797cfe019d1d.jpeg"},2152:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-barra-37f182ba7a00ccbddafa8dc40ca9e52c.png"},5845:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-capacitor1-f377f2c7605d9807e8a3275a975bafba.png"},5994:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-capacitor2-d6242d5a4f44d52664b79b39535dde51.png"},1682:(e,o,a)=>{a.d(o,{Z:()=>t});const t="data:image/png;base64,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"},8173:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-leds-32db86c807fab9e890804d4a228154e4.png"},377:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-placa-top-botton-9ccf094c03e2914ecc04fc2ef4bebde2.png"},2354:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-placa-82f9ed3365c7b53a5a09ce31390b9aad.png"},1990:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-regulador-c29f86619a6fb5ebd53a76d5106c1471.png"},3397:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-resistor1k-b1aa065144e842347cbc7ffca90e597e.png"},70:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-resistor1k5-0797ad85dba140cfe5b6e159f138814d.png"},9454:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-resistor68r-f217f04e7a0256e62606a54608736ef7.png"},535:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-soquete-2f97a7d7776b202d7f80ad3a5fe700b2.png"},1753:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-tabela-resistores-edd34fa8f3b4a4465ccc329faa70cfb0.png"},6449:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-usb-3c13b47eb498c03a88bd467edcc5e5a5.png"}}]); \ No newline at end of file diff --git a/assets/js/6875c492.19f388a6.js b/assets/js/6875c492.19f388a6.js deleted file mode 100755 index 2a47f0b4f..000000000 --- a/assets/js/6875c492.19f388a6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8610],{9703:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(7294),l=a(5999),r=a(2244);function s(e){const{metadata:t}=e,{previousPage:a,nextPage:s}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,l.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(r.Z,{permalink:a,title:n.createElement(l.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),s&&n.createElement(r.Z,{permalink:s,title:n.createElement(l.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},9985:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(7294),l=a(9460),r=a(390);function s(e){let{items:t,component:a=r.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(l.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}},1714:(e,t,a)=>{a.r(t),a.d(t,{default:()=>E});var n=a(7294),l=a(4334),r=a(5999),s=a(8824),o=a(1944),i=a(5281),g=a(9960),c=a(9058),m=a(9703),p=a(197),u=a(9985);function d(e){const t=function(){const{selectMessage:e}=(0,s.c)();return t=>e(t,(0,r.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,r.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function h(e){let{tag:t}=e;const a=d(t);return n.createElement(n.Fragment,null,n.createElement(o.d,{title:a}),n.createElement(p.Z,{tag:"blog_tags_posts"}))}function b(e){let{tag:t,items:a,sidebar:l,listMetadata:s}=e;const o=d(t);return n.createElement(c.Z,{sidebar:l},n.createElement("header",{className:"margin-bottom--xl"},n.createElement("h1",null,o),n.createElement(g.Z,{href:t.allTagsPath},n.createElement(r.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),n.createElement(u.Z,{items:a}),n.createElement(m.Z,{metadata:s}))}function E(e){return n.createElement(o.FG,{className:(0,l.Z)(i.k.wrapper.blogPages,i.k.page.blogTagPostListPage)},n.createElement(h,e),n.createElement(b,e))}}}]); \ No newline at end of file diff --git a/assets/js/6875c492.3e92a214.js b/assets/js/6875c492.3e92a214.js new file mode 100755 index 000000000..76f559448 --- /dev/null +++ b/assets/js/6875c492.3e92a214.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2392],{22687:(e,t,n)=>{n.d(t,{c:()=>r});n(11504);var s=n(84357),a=n(70308),i=n(17624);function r(e){const{metadata:t}=e,{previousPage:n,nextPage:r}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.G)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,i.jsx)(a.c,{permalink:n,title:(0,i.jsx)(s.c,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),r&&(0,i.jsx)(a.c,{permalink:r,title:(0,i.jsx)(s.c,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},60992:(e,t,n)=>{n.d(t,{c:()=>r});n(11504);var s=n(83152),a=n(47590),i=n(17624);function r(e){let{items:t,component:n=a.c}=e;return(0,i.jsx)(i.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,i.jsx)(s.E,{content:t,children:(0,i.jsx)(n,{children:(0,i.jsx)(t,{})})},t.metadata.permalink)}))})}},62948:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});n(11504);var s=n(34064),a=n(84357),i=n(95944),r=n(68900),l=n(45864),o=n(10867),c=n(9452),g=n(22687),d=n(48712),u=n(60992),h=n(61528),p=n(56448),m=n(17624);function x(e){const t=function(){const{selectMessage:e}=(0,i.A)();return t=>e(t,(0,a.G)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,a.G)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function j(e){let{tag:t}=e;const n=x(t);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(r.U7,{title:n}),(0,m.jsx)(d.c,{tag:"blog_tags_posts"})]})}function b(e){let{tag:t,items:n,sidebar:s,listMetadata:i}=e;const r=x(t);return(0,m.jsxs)(c.c,{sidebar:s,children:[t.unlisted&&(0,m.jsx)(h.c,{}),(0,m.jsxs)("header",{className:"margin-bottom--xl",children:[(0,m.jsx)(p.c,{as:"h1",children:r}),(0,m.jsx)(o.c,{href:t.allTagsPath,children:(0,m.jsx)(a.c,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,m.jsx)(u.c,{items:n}),(0,m.jsx)(g.c,{metadata:i})]})}function f(e){return(0,m.jsxs)(r.cr,{className:(0,s.c)(l.W.wrapper.blogPages,l.W.page.blogTagPostListPage),children:[(0,m.jsx)(j,{...e}),(0,m.jsx)(b,{...e})]})}},61528:(e,t,n)=>{n.d(t,{c:()=>h});n(11504);var s=n(34064),a=n(84357),i=n(56952),r=n(17624);function l(){return(0,r.jsx)(a.c,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function o(){return(0,r.jsx)(a.c,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,r.jsx)(i.c,{children:(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var g=n(45864),d=n(30304);function u(e){let{className:t}=e;return(0,r.jsx)(d.c,{type:"caution",title:(0,r.jsx)(l,{}),className:(0,s.c)(t,g.W.common.unlistedBanner),children:(0,r.jsx)(o,{})})}function h(e){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c,{}),(0,r.jsx)(u,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/69d6b121.8af5a6f1.js b/assets/js/69d6b121.8af5a6f1.js new file mode 100755 index 000000000..23e60bcf7 --- /dev/null +++ b/assets/js/69d6b121.8af5a6f1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6316],{2788:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>d,contentTitle:()=>t,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var o=n(17624),r=n(95788);const i={id:"elefante-colorido",title:"Elefante Colorido! Que cor?",slug:"/franzininho-diy/elefante-colorido",description:"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica."},t=void 0,l={id:"FranzininhoDIY/exemplos-arduino/elefante-colorido",title:"Elefante Colorido! Que cor?",description:"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/elefante-colorido.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/elefante-colorido",permalink:"/docs/franzininho-diy/elefante-colorido",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/elefante-colorido.md",tags:[],version:"current",frontMatter:{id:"elefante-colorido",title:"Elefante Colorido! Que cor?",slug:"/franzininho-diy/elefante-colorido",description:"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica."},sidebar:"docs",previous:{title:"LED RGB",permalink:"/docs/franzininho-diy/led-rgb"},next:{title:"Sensor de luz com LDR",permalink:"/docs/franzininho-diy/sensor-luz-ldr"}},d={},c=[{value:"Elefante colorido! Que cor?",id:"elefante-colorido-que-cor",level:2},{value:"Podemos adaptar essa brincadeira com eletr\xf4nica?",id:"podemos-adaptar-essa-brincadeira-com-eletr\xf4nica",level:3},{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Simula\xe7\xe3o (modo avan\xe7ado)",id:"simula\xe7\xe3o-modo-avan\xe7ado",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function s(e){const a={admonition:"admonition",blockquote:"blockquote",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(a.p,{children:"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica. Podemos adaptar essa brincadeira com eletr\xf4nica, confira abaixo!"}),"\n",(0,o.jsx)(a.h2,{id:"elefante-colorido-que-cor",children:"Elefante colorido! Que cor?"}),"\n",(0,o.jsx)(a.p,{children:(0,o.jsx)(a.img,{alt:"Montagem Elefante Colorido",src:n(41356).c+"",width:"2992",height:"2000"})}),"\n",(0,o.jsx)(a.p,{children:"\u201cElefante colorido\u201d. \xc9 uma brincadeira caracter\xedstica da Regi\xe3o Sudeste, da cidade de S\xe3o Paulo. As regras s\xe3o as seguintes: uma crian\xe7a \xe9 escolhida para comandar. Em roda, ela diz aos colegas: \u201cElefante colorido!\u201d O grupo pergunta: \u201cQue cor ele \xe9?\u201d O comandante escolhe uma cor e as crian\xe7as correm para tocar em algo que tenha a cor que o comandante escolheu."}),"\n",(0,o.jsxs)(a.blockquote,{children:["\n",(0,o.jsx)(a.p,{children:"Com essa brincadeira podemos trabalhar diversas habilidades, como o desenvolvimento da concentra\xe7\xe3o, aten\xe7\xe3o, coordena\xe7\xe3o motora, reconhecimento das cores, discrimina\xe7\xe3o visual e auditiva."}),"\n"]}),"\n",(0,o.jsx)(a.h3,{id:"podemos-adaptar-essa-brincadeira-com-eletr\xf4nica",children:"Podemos adaptar essa brincadeira com eletr\xf4nica?"}),"\n",(0,o.jsx)(a.p,{children:(0,o.jsx)(a.img,{alt:"Montagem Elefante Colorido",src:n(41724).c+"",width:"2992",height:"2000"})}),"\n",(0,o.jsx)(a.p,{children:"Sim e o mais bacana de tudo que ela est\xe1 alinhada a BNCC."}),"\n",(0,o.jsx)(a.p,{children:"Para Educa\xe7\xe3o infantil trabalhamos com o campos de Experi\xeancia:"}),"\n",(0,o.jsxs)(a.ul,{children:["\n",(0,o.jsx)(a.li,{children:"Tra\xe7os, sons, cores e formas"}),"\n",(0,o.jsx)(a.li,{children:"Escuta, fala, pensamento e imagina\xe7\xe3o"}),"\n"]}),"\n",(0,o.jsx)(a.p,{children:"Para o Fundamental 1 (1\xb0 ao 5 ano):"}),"\n",(0,o.jsxs)(a.ul,{children:["\n",(0,o.jsx)(a.li,{children:"(EF15AR02) Explorar e reconhecer elementos constitutivos das artes visuais (ponto, linha, forma, cor, espa\xe7o, movimento etc.)."}),"\n",(0,o.jsx)(a.li,{children:"(EF15AR26) Explorar diferentes tecnologias e recursos digitais (multimeios, anima\xe7\xf5es, jogos eletr\xf4nicos, grava\xe7\xf5es em \xe1udio e v\xeddeo, fotografia, softwares etc.) nos processos de cria\xe7\xe3o art\xedstica."}),"\n"]}),"\n",(0,o.jsx)(a.p,{children:(0,o.jsx)(a.img,{alt:"Montagem Elefante Colorido",src:n(46584).c+"",width:"2992",height:"2000"})}),"\n",(0,o.jsx)(a.h2,{id:"materiais",children:"Materiais"}),"\n",(0,o.jsxs)(a.ul,{children:["\n",(0,o.jsx)(a.li,{children:"1 Placa Franzininho;"}),"\n",(0,o.jsx)(a.li,{children:"1 Protoboard;"}),"\n",(0,o.jsx)(a.li,{children:"1 LED RGB;"}),"\n",(0,o.jsx)(a.li,{children:"3 Resistor 1k;"}),"\n",(0,o.jsx)(a.li,{children:"3 Jumpers macho/f\xeamea"}),"\n"]}),"\n",(0,o.jsx)(a.h2,{id:"circuito",children:"Circuito"}),"\n",(0,o.jsx)(a.p,{children:"Na protoboard voc\xea pode montar da seguinte forma:"}),"\n",(0,o.jsx)(a.admonition,{type:"tip",children:(0,o.jsx)(a.p,{children:"Voc\xea pode montar ele fora da protoboard depois!"})}),"\n",(0,o.jsx)(a.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,o.jsx)(a.p,{children:"Modo simples: utilizando apenas 3 cores: vermelho, verde e azul."}),"\n",(0,o.jsx)(a.pre,{children:(0,o.jsx)(a.code,{className:"language-cpp",children:"//RGB com a Franzininho DIY\n\nconst int red = 0; \nconst int green = 1; \nconst int blue = 2; \n\nvoid setup() {\n // configura os pinos de cada cor como sa\xedda:\n pinMode(red, OUTPUT);\n pinMode(green, OUTPUT);\n pinMode(blue, OUTPUT);\n}\n\nvoid loop() {\n // aciona o LED na cor vermelha:\n digitalWrite(red, HIGH);\n digitalWrite(green, LOW);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n \n // aciona o LED na cor verde:\n digitalWrite(red, LOW);\n digitalWrite(green, HIGH);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n\n // aciona o LED na cor azul:\n digitalWrite(red, LOW);\n digitalWrite(green, LOW);\n digitalWrite(blue, HIGH);\n delay(5000); // aguarda 5000ms \n}\n"})}),"\n",(0,o.jsx)(a.p,{children:"Modo avan\xe7ado: Variando as cores, confira!"}),"\n",(0,o.jsx)(a.pre,{children:(0,o.jsx)(a.code,{className:"language-cpp",children:"const int red = 0; \nconst int green = 1; \nconst int blue = 2;\n\n// vari\xe1veis para salvar a intensidade de cada cor\nint valor_r = 255; // vermelho (red)\nint valor_g = 0; // verde (green)\nint valor_b = 0; // blue (blue)\n\nvoid setup() {\n // configura os pinos de cada cor como sa\xedda:\n pinMode(red, OUTPUT);\n pinMode(green, OUTPUT);\n pinMode(blue, OUTPUT);\n \n // inicializa LED em cor vemelha e de m\xe1xima intensidade\n analogWrite(red, valor_r);\n analogWrite(green, valor_g);\n analogWrite(blue, valor_b);\n}\n\nvoid loop() {\n // aumenta a intensidade do LED verde\n for (valor_g = 0; valor_g < 255; valor_g=valor_g+5){\n analogWrite(green, valor_g);\n delay(50); // aguarda 50ms \n }\n \n // diminui a intensidade do LED vermelho\n for (valor_r = 255; valor_r > 0; valor_r=valor_r-5){\n analogWrite(red, valor_r);\n delay(50); // aguarda 50ms \n }\n \n // aumenta a intensidade do LED azul\n for (valor_b = 0; valor_b < 255; valor_b=valor_b+5){\n analogWrite(blue, valor_b);\n delay(50); // aguarda 50ms \n }\n \n // diminui a intensidade do LED verde\n for (valor_g = 255; valor_g > 0; valor_g=valor_g-5){\n analogWrite(green, valor_g);\n delay(50);\n }\n \n // aumenta a intensidade do LED vermelho\n for (valor_r = 0; valor_r < 255; valor_r=valor_r+5){\n analogWrite(red, valor_r);\n delay(50); // aguarda 50ms \n }\n}\n\n"})}),"\n",(0,o.jsx)(a.h2,{id:"simula\xe7\xe3o-modo-avan\xe7ado",children:"Simula\xe7\xe3o (modo avan\xe7ado)"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311376279774429761?view=diagram"}),"\n",(0,o.jsx)(a.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/t2_ay1J6TWQ",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function u(e={}){const{wrapper:a}={...(0,r.MN)(),...e.components};return a?(0,o.jsx)(a,{...e,children:(0,o.jsx)(s,{...e})}):s(e)}},95788:(e,a,n)=>{n.d(a,{MN:()=>c});var o=n(11504);function r(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function i(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);a&&(o=o.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,o)}return n}function t(e){for(var a=1;a=0||(r[n]=e[n]);return r}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var d=o.createContext({}),c=function(e){var a=o.useContext(d),n=a;return e&&(n="function"==typeof e?e(a):t(t({},a),e)),n},s={inlineCode:"code",wrapper:function(e){var a=e.children;return o.createElement(o.Fragment,{},a)}},u=o.forwardRef((function(e,a){var n=e.components,r=e.mdxType,i=e.originalType,d=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=c(n),p=r,h=m["".concat(d,".").concat(p)]||m[p]||s[p]||i;return n?o.createElement(h,t(t({ref:a},u),{},{components:n})):o.createElement(h,t({ref:a},u))}));u.displayName="MDXCreateElement"},41356:(e,a,n)=>{n.d(a,{c:()=>o});const o=n.p+"assets/images/elefante-colorido-1-82b80e20d425137e97c37e6a642777ac.JPG"},41724:(e,a,n)=>{n.d(a,{c:()=>o});const o=n.p+"assets/images/elefante-colorido-2-9c268fc9897060a4d24eec40816254b2.JPG"},46584:(e,a,n)=>{n.d(a,{c:()=>o});const o=n.p+"assets/images/elefante-colorido-3-c25273f9a0ee9f87ffcb78620efe28d7.JPG"}}]); \ No newline at end of file diff --git a/assets/js/69d6b121.c3796d17.js b/assets/js/69d6b121.c3796d17.js deleted file mode 100755 index facb3e383..000000000 --- a/assets/js/69d6b121.c3796d17.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6251],{3905:(e,a,o)=>{o.d(a,{Zo:()=>s,kt:()=>f});var n=o(7294);function r(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function i(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function t(e){for(var a=1;a=0||(r[o]=e[o]);return r}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var d=n.createContext({}),c=function(e){var a=n.useContext(d),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},s=function(e){var a=c(e.components);return n.createElement(d.Provider,{value:a},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},p=n.forwardRef((function(e,a){var o=e.components,r=e.mdxType,i=e.originalType,d=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=c(o),p=r,f=u["".concat(d,".").concat(p)]||u[p]||m[p]||i;return o?n.createElement(f,t(t({ref:a},s),{},{components:o})):n.createElement(f,t({ref:a},s))}));function f(e,a){var o=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var i=o.length,t=new Array(i);t[0]=p;var l={};for(var d in a)hasOwnProperty.call(a,d)&&(l[d]=a[d]);l.originalType=e,l[u]="string"==typeof e?e:r,t[1]=l;for(var c=2;c{o.r(a),o.d(a,{assets:()=>d,contentTitle:()=>t,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var n=o(3117),r=(o(7294),o(3905));const i={id:"elefante-colorido",title:"Elefante Colorido! Que cor?",slug:"/franzininho-diy/elefante-colorido",description:"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica."},t=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/elefante-colorido",id:"FranzininhoDIY/exemplos-arduino/elefante-colorido",title:"Elefante Colorido! Que cor?",description:"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/elefante-colorido.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/elefante-colorido",permalink:"/docs/franzininho-diy/elefante-colorido",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/elefante-colorido.md",tags:[],version:"current",frontMatter:{id:"elefante-colorido",title:"Elefante Colorido! Que cor?",slug:"/franzininho-diy/elefante-colorido",description:"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica."},sidebar:"docs",previous:{title:"LED RGB",permalink:"/docs/franzininho-diy/led-rgb"},next:{title:"Sensor de luz com LDR",permalink:"/docs/franzininho-diy/sensor-luz-ldr"}},d={},c=[{value:"Elefante colorido! Que cor?",id:"elefante-colorido-que-cor",level:2},{value:"Podemos adaptar essa brincadeira com eletr\xf4nica?",id:"podemos-adaptar-essa-brincadeira-com-eletr\xf4nica",level:3},{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Simula\xe7\xe3o (modo avan\xe7ado)",id:"simula\xe7\xe3o-modo-avan\xe7ado",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],s={toc:c},u="wrapper";function m(e){let{components:a,...i}=e;return(0,r.kt)(u,(0,n.Z)({},s,i,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica. Podemos adaptar essa brincadeira com eletr\xf4nica, confira abaixo!"),(0,r.kt)("h2",{id:"elefante-colorido-que-cor"},"Elefante colorido! Que cor?"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Montagem Elefante Colorido",src:o(980).Z,width:"2992",height:"2000"})),(0,r.kt)("p",null,"\u201cElefante colorido\u201d. \xc9 uma brincadeira caracter\xedstica da Regi\xe3o Sudeste, da cidade de S\xe3o Paulo. As regras s\xe3o as seguintes: uma crian\xe7a \xe9 escolhida para comandar. Em roda, ela diz aos colegas: \u201cElefante colorido!\u201d O grupo pergunta: \u201cQue cor ele \xe9?\u201d O comandante escolhe uma cor e as crian\xe7as correm para tocar em algo que tenha a cor que o comandante escolheu."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Com essa brincadeira podemos trabalhar diversas habilidades, como o desenvolvimento da concentra\xe7\xe3o, aten\xe7\xe3o, coordena\xe7\xe3o motora, reconhecimento das cores, discrimina\xe7\xe3o visual e auditiva.")),(0,r.kt)("h3",{id:"podemos-adaptar-essa-brincadeira-com-eletr\xf4nica"},"Podemos adaptar essa brincadeira com eletr\xf4nica?"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Montagem Elefante Colorido",src:o(5944).Z,width:"2992",height:"2000"})),(0,r.kt)("p",null,"Sim e o mais bacana de tudo que ela est\xe1 alinhada a BNCC."),(0,r.kt)("p",null,"Para Educa\xe7\xe3o infantil trabalhamos com o campos de Experi\xeancia:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Tra\xe7os, sons, cores e formas"),(0,r.kt)("li",{parentName:"ul"},"Escuta, fala, pensamento e imagina\xe7\xe3o")),(0,r.kt)("p",null,"Para o Fundamental 1 (1\xb0 ao 5 ano):"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"(EF15AR02) Explorar e reconhecer elementos constitutivos das artes visuais (ponto, linha, forma, cor, espa\xe7o, movimento etc.)."),(0,r.kt)("li",{parentName:"ul"},"(EF15AR26) Explorar diferentes tecnologias e recursos digitais (multimeios, anima\xe7\xf5es, jogos eletr\xf4nicos, grava\xe7\xf5es em \xe1udio e v\xeddeo, fotografia, softwares etc.) nos processos de cria\xe7\xe3o art\xedstica.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Montagem Elefante Colorido",src:o(6467).Z,width:"2992",height:"2000"})),(0,r.kt)("h2",{id:"materiais"},"Materiais"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"1 Placa Franzininho;"),(0,r.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,r.kt)("li",{parentName:"ul"},"1 LED RGB;"),(0,r.kt)("li",{parentName:"ul"},"3 Resistor 1k;"),(0,r.kt)("li",{parentName:"ul"},"3 Jumpers macho/f\xeamea")),(0,r.kt)("h2",{id:"circuito"},"Circuito"),(0,r.kt)("p",null,"Na protoboard voc\xea pode montar da seguinte forma:"),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Voc\xea pode montar ele fora da protoboard depois!")),(0,r.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,r.kt)("p",null,"Modo simples: utilizando apenas 3 cores: vermelho, verde e azul."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"//RGB com a Franzininho DIY\n\nconst int red = 0; \nconst int green = 1; \nconst int blue = 2; \n\nvoid setup() {\n // configura os pinos de cada cor como sa\xedda:\n pinMode(red, OUTPUT);\n pinMode(green, OUTPUT);\n pinMode(blue, OUTPUT);\n}\n\nvoid loop() {\n // aciona o LED na cor vermelha:\n digitalWrite(red, HIGH);\n digitalWrite(green, LOW);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n \n // aciona o LED na cor verde:\n digitalWrite(red, LOW);\n digitalWrite(green, HIGH);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n\n // aciona o LED na cor azul:\n digitalWrite(red, LOW);\n digitalWrite(green, LOW);\n digitalWrite(blue, HIGH);\n delay(5000); // aguarda 5000ms \n}\n")),(0,r.kt)("p",null,"Modo avan\xe7ado: Variando as cores, confira!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"const int red = 0; \nconst int green = 1; \nconst int blue = 2;\n\n// vari\xe1veis para salvar a intensidade de cada cor\nint valor_r = 255; // vermelho (red)\nint valor_g = 0; // verde (green)\nint valor_b = 0; // blue (blue)\n\nvoid setup() {\n // configura os pinos de cada cor como sa\xedda:\n pinMode(red, OUTPUT);\n pinMode(green, OUTPUT);\n pinMode(blue, OUTPUT);\n \n // inicializa LED em cor vemelha e de m\xe1xima intensidade\n analogWrite(red, valor_r);\n analogWrite(green, valor_g);\n analogWrite(blue, valor_b);\n}\n\nvoid loop() {\n // aumenta a intensidade do LED verde\n for (valor_g = 0; valor_g < 255; valor_g=valor_g+5){\n analogWrite(green, valor_g);\n delay(50); // aguarda 50ms \n }\n \n // diminui a intensidade do LED vermelho\n for (valor_r = 255; valor_r > 0; valor_r=valor_r-5){\n analogWrite(red, valor_r);\n delay(50); // aguarda 50ms \n }\n \n // aumenta a intensidade do LED azul\n for (valor_b = 0; valor_b < 255; valor_b=valor_b+5){\n analogWrite(blue, valor_b);\n delay(50); // aguarda 50ms \n }\n \n // diminui a intensidade do LED verde\n for (valor_g = 255; valor_g > 0; valor_g=valor_g-5){\n analogWrite(green, valor_g);\n delay(50);\n }\n \n // aumenta a intensidade do LED vermelho\n for (valor_r = 0; valor_r < 255; valor_r=valor_r+5){\n analogWrite(red, valor_r);\n delay(50); // aguarda 50ms \n }\n}\n\n")),(0,r.kt)("h2",{id:"simula\xe7\xe3o-modo-avan\xe7ado"},"Simula\xe7\xe3o (modo avan\xe7ado)"),(0,r.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311376279774429761?view=diagram"}),(0,r.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,r.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/t2_ay1J6TWQ",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}m.isMDXComponent=!0},980:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/elefante-colorido-1-82b80e20d425137e97c37e6a642777ac.JPG"},5944:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/elefante-colorido-2-9c268fc9897060a4d24eec40816254b2.JPG"},6467:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/elefante-colorido-3-c25273f9a0ee9f87ffcb78620efe28d7.JPG"}}]); \ No newline at end of file diff --git a/assets/js/6b289e1f.27a89205.js b/assets/js/6b289e1f.27a89205.js new file mode 100755 index 000000000..280a06429 --- /dev/null +++ b/assets/js/6b289e1f.27a89205.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7560],{92472:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>a,frontMatter:()=>s,metadata:()=>d,toc:()=>c});var n=r(17624),i=r(95788);const s={id:"avr-libc-todo",title:"TODO",slug:"/franzininho-diy/exemplos-avr-libc/todo",description:"Mapeamento dos conte\xfados para exemplos com a AVR LibC"},l=void 0,d={id:"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo",title:"TODO",description:"Mapeamento dos conte\xfados para exemplos com a AVR LibC",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/avr-libc-todo.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/todo",permalink:"/docs/franzininho-diy/exemplos-avr-libc/todo",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/avr-libc-todo.md",tags:[],version:"current",frontMatter:{id:"avr-libc-todo",title:"TODO",slug:"/franzininho-diy/exemplos-avr-libc/todo",description:"Mapeamento dos conte\xfados para exemplos com a AVR LibC"},sidebar:"docs",previous:{title:"Interrup\xe7\xe3o externa",permalink:"/docs/franzininho-diy/exemplos-avr-libc/int-ext"},next:{title:"Como simular a Franzininho DIY no Wokwi",permalink:"/docs/franzininho-diy/wokwi/primeiros-passos"}},o={},c=[{value:"Reposit\xf3rio de Exemplos",id:"reposit\xf3rio-de-exemplos",level:2}];function x(e){const t={a:"a",h2:"h2",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a AVR LibC com a Franzininho DIY."}),"\n",(0,n.jsx)(t.p,{children:"Fique a vontade para colaborar na constru\xe7\xe3o dos materiais e c\xf3digos."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Exemplos"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Status"}),(0,n.jsx)(t.th,{children:"Nota"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Primeiros Passos"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Hello, World!"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Sa\xedda Digital"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Entrada Digital"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Timer 0"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Timer 0 - Interrup\xe7\xe3o"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Contador de pulsos externos"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Instrumento musical com Buzzer"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Interrup\xe7\xe3o externa"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Timer0 CTC"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Timer0 PWM"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Timer 1"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Timer 2 Interrup\xe7\xe3o"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Timer 1 PWM"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Conversor AD"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"I2C"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"SPI"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"EEPROM"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Configura\xe7\xe3o de Clock"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Sleep"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Fuse bits"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]})]})]}),"\n",(0,n.jsx)(t.p,{children:"Legenda:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"\ud83d\udfe2 Feito"}),"\n",(0,n.jsx)(t.li,{children:"\ud83d\udfe1 Em progresso"}),"\n",(0,n.jsx)(t.li,{children:"\ud83d\udd34 Ainda n\xe3o implementado"}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"reposit\xf3rio-de-exemplos",children:"Reposit\xf3rio de Exemplos"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/Franzininho/exemplos-avr-libc",children:"Exemplos AVR LibC"})}),"\n"]})]})}function a(e={}){const{wrapper:t}={...(0,i.MN)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(x,{...e})}):x(e)}},95788:(e,t,r)=>{r.d(t,{MN:()=>c});var n=r(11504);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var o=n.createContext({}),c=function(e){var t=n.useContext(o),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},x={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},a=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,s=e.originalType,o=e.parentName,a=d(e,["components","mdxType","originalType","parentName"]),h=c(r),j=i,p=h["".concat(o,".").concat(j)]||h[j]||x[j]||s;return r?n.createElement(p,l(l({ref:t},a),{},{components:r})):n.createElement(p,l({ref:t},a))}));a.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/6b289e1f.8cc5747c.js b/assets/js/6b289e1f.8cc5747c.js deleted file mode 100755 index 70909a17e..000000000 --- a/assets/js/6b289e1f.8cc5747c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9226],{3905:(t,e,n)=>{n.d(e,{Zo:()=>d,kt:()=>k});var r=n(7294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var p=r.createContext({}),m=function(t){var e=r.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},d=function(t){var e=m(t.components);return r.createElement(p.Provider,{value:e},t.children)},c="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},s=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,l=t.originalType,p=t.parentName,d=o(t,["components","mdxType","originalType","parentName"]),c=m(n),s=a,k=c["".concat(p,".").concat(s)]||c[s]||u[s]||l;return n?r.createElement(k,i(i({ref:e},d),{},{components:n})):r.createElement(k,i({ref:e},d))}));function k(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var l=n.length,i=new Array(l);i[0]=s;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o[c]="string"==typeof t?t:a,i[1]=o;for(var m=2;m{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>o,toc:()=>m});var r=n(3117),a=(n(7294),n(3905));const l={id:"avr-libc-todo",title:"TODO",slug:"/franzininho-diy/exemplos-avr-libc/todo",description:"Mapeamento dos conte\xfados para exemplos com a AVR LibC"},i=void 0,o={unversionedId:"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo",id:"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo",title:"TODO",description:"Mapeamento dos conte\xfados para exemplos com a AVR LibC",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/avr-libc-todo.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/todo",permalink:"/docs/franzininho-diy/exemplos-avr-libc/todo",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/avr-libc-todo.md",tags:[],version:"current",frontMatter:{id:"avr-libc-todo",title:"TODO",slug:"/franzininho-diy/exemplos-avr-libc/todo",description:"Mapeamento dos conte\xfados para exemplos com a AVR LibC"},sidebar:"docs",previous:{title:"Interrup\xe7\xe3o externa",permalink:"/docs/franzininho-diy/exemplos-avr-libc/int-ext"},next:{title:"Como simular a Franzininho DIY no Wokwi",permalink:"/docs/franzininho-diy/wokwi/primeiros-passos"}},p={},m=[{value:"Reposit\xf3rio de Exemplos",id:"reposit\xf3rio-de-exemplos",level:2}],d={toc:m},c="wrapper";function u(t){let{components:e,...n}=t;return(0,a.kt)(c,(0,r.Z)({},d,n,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a AVR LibC com a Franzininho DIY. "),(0,a.kt)("p",null,"Fique a vontade para colaborar na constru\xe7\xe3o dos materiais e c\xf3digos."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Exemplos"),(0,a.kt)("th",{parentName:"tr",align:"center"},"Status"),(0,a.kt)("th",{parentName:"tr",align:null},"Nota"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Primeiros Passos"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Hello, World!"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Sa\xedda Digital"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Entrada Digital"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Timer 0"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Timer 0 - Interrup\xe7\xe3o"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Contador de pulsos externos"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Instrumento musical com Buzzer"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Interrup\xe7\xe3o externa"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Timer0 CTC"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Timer0 PWM"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Timer 1"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Timer 2 Interrup\xe7\xe3o"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Timer 1 PWM"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Conversor AD"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"I2C"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"SPI"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"EEPROM"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Configura\xe7\xe3o de Clock"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Sleep"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Fuse bits"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})))),(0,a.kt)("p",null,"Legenda: "),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\ud83d\udfe2 Feito"),(0,a.kt)("li",{parentName:"ul"},"\ud83d\udfe1 Em progresso"),(0,a.kt)("li",{parentName:"ul"},"\ud83d\udd34 Ainda n\xe3o implementado")),(0,a.kt)("h2",{id:"reposit\xf3rio-de-exemplos"},"Reposit\xf3rio de Exemplos"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/exemplos-avr-libc"},"Exemplos AVR LibC"))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6d6d470f.73f2445d.js b/assets/js/6d6d470f.73f2445d.js deleted file mode 100755 index 901b4754d..000000000 --- a/assets/js/6d6d470f.73f2445d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3020],{3905:(e,i,n)=>{n.d(i,{Zo:()=>d,kt:()=>f});var t=n(7294);function a(e,i,n){return i in e?Object.defineProperty(e,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[i]=n,e}function r(e,i){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);i&&(t=t.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),n.push.apply(n,t)}return n}function o(e){for(var i=1;i=0||(a[n]=e[n]);return a}(e,i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=t.createContext({}),p=function(e){var i=t.useContext(s),n=i;return e&&(n="function"==typeof e?e(i):o(o({},i),e)),n},d=function(e){var i=p(e.components);return t.createElement(s.Provider,{value:i},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var i=e.children;return t.createElement(t.Fragment,{},i)}},m=t.forwardRef((function(e,i){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=p(n),m=a,f=c["".concat(s,".").concat(m)]||c[m]||u[m]||r;return n?t.createElement(f,o(o({ref:i},d),{},{components:n})):t.createElement(f,o({ref:i},d))}));function f(e,i){var n=arguments,a=i&&i.mdxType;if("string"==typeof e||a){var r=n.length,o=new Array(r);o[0]=m;var l={};for(var s in i)hasOwnProperty.call(i,s)&&(l[s]=i[s]);l.originalType=e,l[c]="string"==typeof e?e:a,o[1]=l;for(var p=2;p{n.r(i),n.d(i,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var t=n(3117),a=(n(7294),n(3905));const r={id:"franzininho-wifi-dev-edition",title:"Placa Franzininho WiFi dev Edition",slug:"/franzininho-wifi/franzininho-wifi-dev-edition",description:"Detalhes da Franzininho WiFi Developer Edition"},o=void 0,l={unversionedId:"FranzininhoWifi/franzininho-wifi-dev-edition",id:"FranzininhoWifi/franzininho-wifi-dev-edition",title:"Placa Franzininho WiFi dev Edition",description:"Detalhes da Franzininho WiFi Developer Edition",source:"@site/docs/FranzininhoWifi/franzininho-wifi-dev-edition.md",sourceDirName:"FranzininhoWifi",slug:"/franzininho-wifi/franzininho-wifi-dev-edition",permalink:"/docs/franzininho-wifi/franzininho-wifi-dev-edition",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/franzininho-wifi-dev-edition.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-dev-edition",title:"Placa Franzininho WiFi dev Edition",slug:"/franzininho-wifi/franzininho-wifi-dev-edition",description:"Detalhes da Franzininho WiFi Developer Edition"},sidebar:"docs",previous:{title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",permalink:"/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais"},next:{title:"Franzininho WiFi LAB01",permalink:"/docs/franzininho-wifi-lab01"}},s={},p=[{value:"Caracter\xedsticas",id:"caracter\xedsticas",level:2},{value:"Pinout",id:"pinout",level:2},{value:"Licen\xe7a",id:"licen\xe7a",level:2}],d={toc:p},c="wrapper";function u(e){let{components:i,...r}=e;return(0,a.kt)(c,(0,t.Z)({},d,r,{components:i,mdxType:"MDXLayout"}),(0,a.kt)("admonition",{title:"Aten\xe7\xe3o",type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Essa placa foi feita apenas como prot\xf3tipo. N\xe3o est\xe1 em produ\xe7\xe3o")),(0,a.kt)("p",null,"A Franzininho WiFi Developer Edition \xe9 uma placa de desenvolvimento para avaliar os m\xf3dulos ESP32-S2 (Wroom e Wrover) e desenvolver a nova gera\xe7\xe3o de placas Franzininho. O projeto Franzininho foi criado para desenvolver habilidades em pessoas nas \xe1reas de eletr\xf4nica e programa\xe7\xe3o, por meio de atividades no formato DIY e em conjunto com a cultura maker, no Brasil."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Placa Franzininho WiFi Developer Edition Front",src:n(8167).Z,width:"852",height:"449"})),(0,a.kt)("p",null,"Como n\xe3o existem muitas placas no mercado brasileiro com ESP32-S2, desenvolvemos o Franzininho WiFi Developer Edition (em 2020) para servir como plataforma de desenvolvimento ESP32-S2 e nos ajudar a avaliar e validar aplica\xe7\xf5es com este SoC."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Placa Franzininho WiFi Developer Edition",src:n(9825).Z,width:"792",height:"517"})),(0,a.kt)("h2",{id:"caracter\xedsticas"},"Caracter\xedsticas"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"ESP32-S2 module( Wrover ou Wroom): ",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Xtensa\xaesingle-core32-bit LX7 microprocessor, up to 240 MHz"),(0,a.kt)("li",{parentName:"ul"},"128 KB ROM"),(0,a.kt)("li",{parentName:"ul"},"320 KB SRAM"),(0,a.kt)("li",{parentName:"ul"},"16 KB SRAM in RTC"),(0,a.kt)("li",{parentName:"ul"},"2 MB (8 Mbit) PSRAM ( Only with Wrover Module)"),(0,a.kt)("li",{parentName:"ul"},"WiFi 802.11 b/g/n"))),(0,a.kt)("li",{parentName:"ul"},"Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera interface, IR, pulse counter, LED PWM, TWAI(compatible with ISO 11898-1), USB 1.1OTG, ADC, DAC, touch sensor, temperature sensor."),(0,a.kt)("li",{parentName:"ul"},"USB Type-A Male"),(0,a.kt)("li",{parentName:"ul"},"RGB LED (WS2812) (GPIO 18)"),(0,a.kt)("li",{parentName:"ul"},"40 pin broken out to 2x20 2.54mm header pins(36 GPIO) - Breadboard Friendly"),(0,a.kt)("li",{parentName:"ul"},"Reset and DFU (BOOT0) buttons to get into the ROM bootloader (which is a USB serial port so you don\u2019t need a separate cable!)"),(0,a.kt)("li",{parentName:"ul"},"Serial debug pins ( TX and RX, for checking the hardware serial debug console)\nJTAG pads for advanced debugging access."),(0,a.kt)("li",{parentName:"ul"},"3.3 V Power On LED"),(0,a.kt)("li",{parentName:"ul"},"3.3 V Regulator"),(0,a.kt)("li",{parentName:"ul"},"Power: ",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Micro USB port (default power supply)"),(0,a.kt)("li",{parentName:"ul"},"5V and GND header pins"),(0,a.kt)("li",{parentName:"ul"},"3V3 and GND header pins"))),(0,a.kt)("li",{parentName:"ul"},"Dimensions: 72 mm x 30 mm"),(0,a.kt)("li",{parentName:"ul"},"Works with ",(0,a.kt)("a",{parentName:"li",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/index.html"},"ESP-IDF")," or ",(0,a.kt)("a",{parentName:"li",href:"https://circuitpython.org/"},"CircuitPython"))),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Placa Franzininho WiFi Developer Edition back",src:n(1378).Z,width:"784",height:"492"})),(0,a.kt)("h2",{id:"pinout"},"Pinout"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Pinout placa Franzininho WiFi Developer Edition",src:n(3381).Z,width:"2138",height:"1417"})),(0,a.kt)("h2",{id:"licen\xe7a"},"Licen\xe7a"),(0,a.kt)("p",null,"O projeto \xe9 um hardware de c\xf3digo aberto e est\xe1 dispon\xedvel na licen\xe7a de hardware aberto do CERN."),(0,a.kt)("p",null,"A placa Franzininho WiFi Developer Edition \xe9 certificada na OSHWA:\n",(0,a.kt)("a",{parentName:"p",href:"https://certification.oshwa.org/br000006.html"},"UID BR000006")),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"oshwa",src:n(4272).Z,width:"900",height:"660"})))}u.isMDXComponent=!0},4272:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/OSHW_mark_BR000006-d3520baa4e06ecf07d8ffc4e77efc865.png"},1378:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/back-7e00c997c9b7384d1b1802e74d36763f.jpeg"},9825:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/front-4c0319330ac58760d0a1d8d19f8d84ed.jpeg"},3381:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/pinagem-franzininho-wifi-3ee791cdc4872c0837b81cd12994e047.png"},8167:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/placaFranzininhoWiFi-a2a75be880fd864e7e155166d4e669af.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/6d6d470f.dd51a55f.js b/assets/js/6d6d470f.dd51a55f.js new file mode 100755 index 000000000..767fdd64b --- /dev/null +++ b/assets/js/6d6d470f.dd51a55f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8448],{2008:(i,e,n)=>{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=n(17624),a=n(95788);const o={id:"franzininho-wifi-dev-edition",title:"Placa Franzininho WiFi dev Edition",slug:"/franzininho-wifi/franzininho-wifi-dev-edition",description:"Detalhes da Franzininho WiFi Developer Edition"},t=void 0,s={id:"FranzininhoWifi/franzininho-wifi-dev-edition",title:"Placa Franzininho WiFi dev Edition",description:"Detalhes da Franzininho WiFi Developer Edition",source:"@site/docs/FranzininhoWifi/franzininho-wifi-dev-edition.md",sourceDirName:"FranzininhoWifi",slug:"/franzininho-wifi/franzininho-wifi-dev-edition",permalink:"/docs/franzininho-wifi/franzininho-wifi-dev-edition",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/franzininho-wifi-dev-edition.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-dev-edition",title:"Placa Franzininho WiFi dev Edition",slug:"/franzininho-wifi/franzininho-wifi-dev-edition",description:"Detalhes da Franzininho WiFi Developer Edition"},sidebar:"docs",previous:{title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",permalink:"/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais"},next:{title:"Franzininho WiFi LAB01",permalink:"/docs/franzininho-wifi-lab01"}},c={},d=[{value:"Caracter\xedsticas",id:"caracter\xedsticas",level:2},{value:"Pinout",id:"pinout",level:2},{value:"Licen\xe7a",id:"licen\xe7a",level:2}];function l(i){const e={a:"a",admonition:"admonition",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,a.MN)(),...i.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.admonition,{title:"Aten\xe7\xe3o",type:"caution",children:(0,r.jsx)(e.p,{children:"Essa placa foi feita apenas como prot\xf3tipo. N\xe3o est\xe1 em produ\xe7\xe3o"})}),"\n",(0,r.jsx)(e.p,{children:"A Franzininho WiFi Developer Edition \xe9 uma placa de desenvolvimento para avaliar os m\xf3dulos ESP32-S2 (Wroom e Wrover) e desenvolver a nova gera\xe7\xe3o de placas Franzininho. O projeto Franzininho foi criado para desenvolver habilidades em pessoas nas \xe1reas de eletr\xf4nica e programa\xe7\xe3o, por meio de atividades no formato DIY e em conjunto com a cultura maker, no Brasil."}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Placa Franzininho WiFi Developer Edition Front",src:n(75820).c+"",width:"852",height:"449"})}),"\n",(0,r.jsx)(e.p,{children:"Como n\xe3o existem muitas placas no mercado brasileiro com ESP32-S2, desenvolvemos o Franzininho WiFi Developer Edition (em 2020) para servir como plataforma de desenvolvimento ESP32-S2 e nos ajudar a avaliar e validar aplica\xe7\xf5es com este SoC."}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Placa Franzininho WiFi Developer Edition",src:n(89160).c+"",width:"792",height:"517"})}),"\n",(0,r.jsx)(e.h2,{id:"caracter\xedsticas",children:"Caracter\xedsticas"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:["ESP32-S2 module( Wrover ou Wroom):","\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"Xtensa\xaesingle-core32-bit LX7 microprocessor, up to 240 MHz"}),"\n",(0,r.jsx)(e.li,{children:"128 KB ROM"}),"\n",(0,r.jsx)(e.li,{children:"320 KB SRAM"}),"\n",(0,r.jsx)(e.li,{children:"16 KB SRAM in RTC"}),"\n",(0,r.jsx)(e.li,{children:"2 MB (8 Mbit) PSRAM ( Only with Wrover Module)"}),"\n",(0,r.jsx)(e.li,{children:"WiFi 802.11 b/g/n"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.li,{children:"Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera interface, IR, pulse counter, LED PWM, TWAI(compatible with ISO 11898-1), USB 1.1OTG, ADC, DAC, touch sensor, temperature sensor."}),"\n",(0,r.jsx)(e.li,{children:"USB Type-A Male"}),"\n",(0,r.jsx)(e.li,{children:"RGB LED (WS2812) (GPIO 18)"}),"\n",(0,r.jsx)(e.li,{children:"40 pin broken out to 2x20 2.54mm header pins(36 GPIO) - Breadboard Friendly"}),"\n",(0,r.jsx)(e.li,{children:"Reset and DFU (BOOT0) buttons to get into the ROM bootloader (which is a USB serial port so you don\u2019t need a separate cable!)"}),"\n",(0,r.jsx)(e.li,{children:"Serial debug pins ( TX and RX, for checking the hardware serial debug console)\nJTAG pads for advanced debugging access."}),"\n",(0,r.jsx)(e.li,{children:"3.3 V Power On LED"}),"\n",(0,r.jsx)(e.li,{children:"3.3 V Regulator"}),"\n",(0,r.jsxs)(e.li,{children:["Power:","\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"Micro USB port (default power supply)"}),"\n",(0,r.jsx)(e.li,{children:"5V and GND header pins"}),"\n",(0,r.jsx)(e.li,{children:"3V3 and GND header pins"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.li,{children:"Dimensions: 72 mm x 30 mm"}),"\n",(0,r.jsxs)(e.li,{children:["Works with ",(0,r.jsx)(e.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/index.html",children:"ESP-IDF"})," or ",(0,r.jsx)(e.a,{href:"https://circuitpython.org/",children:"CircuitPython"})]}),"\n"]}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Placa Franzininho WiFi Developer Edition back",src:n(32080).c+"",width:"784",height:"492"})}),"\n",(0,r.jsx)(e.h2,{id:"pinout",children:"Pinout"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Pinout placa Franzininho WiFi Developer Edition",src:n(55380).c+"",width:"2138",height:"1417"})}),"\n",(0,r.jsx)(e.h2,{id:"licen\xe7a",children:"Licen\xe7a"}),"\n",(0,r.jsx)(e.p,{children:"O projeto \xe9 um hardware de c\xf3digo aberto e est\xe1 dispon\xedvel na licen\xe7a de hardware aberto do CERN."}),"\n",(0,r.jsxs)(e.p,{children:["A placa Franzininho WiFi Developer Edition \xe9 certificada na OSHWA:\n",(0,r.jsx)(e.a,{href:"https://certification.oshwa.org/br000006.html",children:"UID BR000006"})]}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"oshwa",src:n(51836).c+"",width:"900",height:"660"})})]})}function h(i={}){const{wrapper:e}={...(0,a.MN)(),...i.components};return e?(0,r.jsx)(e,{...i,children:(0,r.jsx)(l,{...i})}):l(i)}},95788:(i,e,n)=>{n.d(e,{MN:()=>d});var r=n(11504);function a(i,e,n){return e in i?Object.defineProperty(i,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):i[e]=n,i}function o(i,e){var n=Object.keys(i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable}))),n.push.apply(n,r)}return n}function t(i){for(var e=1;e=0||(a[n]=i[n]);return a}(i,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(i);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(i,n)&&(a[n]=i[n])}return a}var c=r.createContext({}),d=function(i){var e=r.useContext(c),n=e;return i&&(n="function"==typeof i?i(e):t(t({},e),i)),n},l={inlineCode:"code",wrapper:function(i){var e=i.children;return r.createElement(r.Fragment,{},e)}},h=r.forwardRef((function(i,e){var n=i.components,a=i.mdxType,o=i.originalType,c=i.parentName,h=s(i,["components","mdxType","originalType","parentName"]),p=d(n),f=a,u=p["".concat(c,".").concat(f)]||p[f]||l[f]||o;return n?r.createElement(u,t(t({ref:e},h),{},{components:n})):r.createElement(u,t({ref:e},h))}));h.displayName="MDXCreateElement"},51836:(i,e,n)=>{n.d(e,{c:()=>r});const r=n.p+"assets/images/OSHW_mark_BR000006-d3520baa4e06ecf07d8ffc4e77efc865.png"},32080:(i,e,n)=>{n.d(e,{c:()=>r});const r=n.p+"assets/images/back-7e00c997c9b7384d1b1802e74d36763f.jpeg"},89160:(i,e,n)=>{n.d(e,{c:()=>r});const r=n.p+"assets/images/front-4c0319330ac58760d0a1d8d19f8d84ed.jpeg"},55380:(i,e,n)=>{n.d(e,{c:()=>r});const r=n.p+"assets/images/pinagem-franzininho-wifi-3ee791cdc4872c0837b81cd12994e047.png"},75820:(i,e,n)=>{n.d(e,{c:()=>r});const r=n.p+"assets/images/placaFranzininhoWiFi-a2a75be880fd864e7e155166d4e669af.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/6da7bcf7.24cf6136.js b/assets/js/6da7bcf7.24cf6136.js new file mode 100755 index 000000000..b52b56194 --- /dev/null +++ b/assets/js/6da7bcf7.24cf6136.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8292],{69484:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>t,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>d});var r=n(17624),o=n(95788);const a={id:"drivers-micronucleus",title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",slug:"/franzininho-diy/drivers-micronucleus",description:"Instala\xe7\xe3o dos drivers USB para correto funcionamento"},t=void 0,s={id:"FranzininhoDIY/bootloader/drivers-micronucleus",title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",description:"Instala\xe7\xe3o dos drivers USB para correto funcionamento",source:"@site/docs/FranzininhoDIY/bootloader/drivers.md",sourceDirName:"FranzininhoDIY/bootloader",slug:"/franzininho-diy/drivers-micronucleus",permalink:"/docs/franzininho-diy/drivers-micronucleus",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/bootloader/drivers.md",tags:[],version:"current",frontMatter:{id:"drivers-micronucleus",title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",slug:"/franzininho-diy/drivers-micronucleus",description:"Instala\xe7\xe3o dos drivers USB para correto funcionamento"},sidebar:"docs",previous:{title:"Bootloader",permalink:"/docs/franzininho-diy/bootloader"},next:{title:"Configura\xe7\xe3o da Arduino IDE",permalink:"/docs/franzininho-diy/pacote"}},c={},d=[{value:"Windows",id:"windows",level:2},{value:"Linux",id:"linux",level:2}];function l(e){const i={a:"a",admonition:"admonition",h2:"h2",img:"img",p:"p",...(0,o.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.p,{children:"At\xe9 aqui voc\xea possui a placa pronta!"}),"\n",(0,r.jsx)(i.p,{children:"Agora precisamos instalar os drivers necess\xe1rio para que a USB da Franzininho DIY possa receber os c\xf3digos atrav\xe9s da Arduino IDE."}),"\n",(0,r.jsx)(i.p,{children:"A seguir s\xe3o apresentados os passos para correta configura\xe7\xe3o, conforme o sistema operacional usado."}),"\n",(0,r.jsx)(i.h2,{id:"windows",children:"Windows"}),"\n",(0,r.jsxs)(i.p,{children:["Fa\xe7a o download do driver no seguinte link: ",(0,r.jsx)(i.a,{href:"https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip",children:"https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip"})]}),"\n",(0,r.jsx)(i.p,{children:"Descompacte."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"instalando drive",src:n(90508).c+"",width:"512",height:"315"})}),"\n",(0,r.jsx)(i.p,{children:"Abra a pasta!"}),"\n",(0,r.jsx)(i.p,{children:"Dentro dela ter\xe1 v\xe1rios arquivos, v\xe1 at\xe9 as op\xe7\xf5es abaixo:"}),"\n",(0,r.jsx)(i.p,{children:"Para Windows 32 bits execute o DPinst.exe e se tiver usando o Windows 64 bits execute o DPinst64.exe"}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"instalando drive",src:n(38844).c+"",width:"1600",height:"984"})}),"\n",(0,r.jsx)(i.p,{children:"Ao selecionar um deles d\xea dois cliques e ir\xe1 aparecer uma janela, pressione sim, ent\xe3o aparecer\xe1 outra janela e clique em avan\xe7ar."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"instalando drive",src:n(8216).c+"",width:"500",height:"389"})}),"\n",(0,r.jsx)(i.p,{children:"Aguarde a instala\xe7\xe3o e clique em concluir!"}),"\n",(0,r.jsx)(i.p,{children:"Maravilha, agora veremos se realmente o driver foi instalado."}),"\n",(0,r.jsx)(i.p,{children:"Plugue seu Franzininho na USB do seu computador e abra o gerenciador de dispositivo."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"instalando drive",src:n(18384).c+"",width:"512",height:"396"})}),"\n",(0,r.jsx)(i.p,{children:"Se aparecer libusb ou digispark, maravilha foi instalado com sucesso!"}),"\n",(0,r.jsx)(i.admonition,{title:"N\xe3o esque\xe7a de plugar a Franzininho em seu computador, pois se n\xe3o. N\xe3o ir\xe1 aparecer!",type:"warning"}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"instalando drive",src:n(38096).c+"",width:"1308",height:"966"})}),"\n",(0,r.jsxs)(i.p,{children:["Fonte: ",(0,r.jsx)(i.a,{href:"http://digistump.com/wiki/digispark/tutorials/connecting",children:"http://digistump.com/wiki/digispark/tutorials/connecting"})]}),"\n",(0,r.jsx)(i.h2,{id:"linux",children:"Linux"}),"\n",(0,r.jsx)(i.p,{children:"Fa\xe7a o seguinte procedimento"}),"\n",(0,r.jsxs)(i.p,{children:["Linux Troubleshooting: ",(0,r.jsx)(i.a,{href:"http://digistump.com/wiki/digispark/tutorials/linuxtroubleshooting",children:"http://digistump.com/wiki/digispark/tutorials/linuxtroubleshooting"})]})]})}function u(e={}){const{wrapper:i}={...(0,o.MN)(),...e.components};return i?(0,r.jsx)(i,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},95788:(e,i,n)=>{n.d(i,{MN:()=>d});var r=n(11504);function o(e,i,n){return i in e?Object.defineProperty(e,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[i]=n,e}function a(e,i){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);i&&(r=r.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),n.push.apply(n,r)}return n}function t(e){for(var i=1;i=0||(o[n]=e[n]);return o}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),d=function(e){var i=r.useContext(c),n=i;return e&&(n="function"==typeof e?e(i):t(t({},i),e)),n},l={inlineCode:"code",wrapper:function(e){var i=e.children;return r.createElement(r.Fragment,{},i)}},u=r.forwardRef((function(e,i){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=d(n),m=o,h=p["".concat(c,".").concat(m)]||p[m]||l[m]||a;return n?r.createElement(h,t(t({ref:i},u),{},{components:n})):r.createElement(h,t({ref:i},u))}));u.displayName="MDXCreateElement"},90508:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/imagem1-55713c352d357089e7567e4b64ea6117.png"},38844:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/imagem2-770c6fccd5193b12ac18d230ade94bdb.png"},8216:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/imagem3-a18e79cf7427506529aee7d9333433a5.png"},18384:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/imagem4-88a2c677015dd3904d35cc788e537ae6.png"},38096:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/imagem5-b292a12333da269a6bce1870fd64dd26.png"}}]); \ No newline at end of file diff --git a/assets/js/6da7bcf7.d71e2631.js b/assets/js/6da7bcf7.d71e2631.js deleted file mode 100755 index b00f22674..000000000 --- a/assets/js/6da7bcf7.d71e2631.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9515],{3905:(e,r,t)=>{t.d(r,{Zo:()=>c,kt:()=>g});var n=t(7294);function i(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function o(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function a(e){for(var r=1;r=0||(i[t]=e[t]);return i}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var l=n.createContext({}),d=function(e){var r=n.useContext(l),t=r;return e&&(t="function"==typeof e?e(r):a(a({},r),e)),t},c=function(e){var r=d(e.components);return n.createElement(l.Provider,{value:r},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},m=n.forwardRef((function(e,r){var t=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=d(t),m=i,g=u["".concat(l,".").concat(m)]||u[m]||p[m]||o;return t?n.createElement(g,a(a({ref:r},c),{},{components:t})):n.createElement(g,a({ref:r},c))}));function g(e,r){var t=arguments,i=r&&r.mdxType;if("string"==typeof e||i){var o=t.length,a=new Array(o);a[0]=m;var s={};for(var l in r)hasOwnProperty.call(r,l)&&(s[l]=r[l]);s.originalType=e,s[u]="string"==typeof e?e:i,a[1]=s;for(var d=2;d{t.r(r),t.d(r,{assets:()=>l,contentTitle:()=>a,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var n=t(3117),i=(t(7294),t(3905));const o={id:"drivers-micronucleus",title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",slug:"/franzininho-diy/drivers-micronucleus",description:"Instala\xe7\xe3o dos drivers USB para correto funcionamento"},a=void 0,s={unversionedId:"FranzininhoDIY/bootloader/drivers-micronucleus",id:"FranzininhoDIY/bootloader/drivers-micronucleus",title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",description:"Instala\xe7\xe3o dos drivers USB para correto funcionamento",source:"@site/docs/FranzininhoDIY/bootloader/drivers.md",sourceDirName:"FranzininhoDIY/bootloader",slug:"/franzininho-diy/drivers-micronucleus",permalink:"/docs/franzininho-diy/drivers-micronucleus",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/bootloader/drivers.md",tags:[],version:"current",frontMatter:{id:"drivers-micronucleus",title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",slug:"/franzininho-diy/drivers-micronucleus",description:"Instala\xe7\xe3o dos drivers USB para correto funcionamento"},sidebar:"docs",previous:{title:"Bootloader",permalink:"/docs/franzininho-diy/bootloader"},next:{title:"Configura\xe7\xe3o da Arduino IDE",permalink:"/docs/franzininho-diy/pacote"}},l={},d=[{value:"Windows",id:"windows",level:2},{value:"Linux",id:"linux",level:2}],c={toc:d},u="wrapper";function p(e){let{components:r,...o}=e;return(0,i.kt)(u,(0,n.Z)({},c,o,{components:r,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"At\xe9 aqui voc\xea possui a placa pronta!"),(0,i.kt)("p",null,"Agora precisamos instalar os drivers necess\xe1rio para que a USB da Franzininho DIY possa receber os c\xf3digos atrav\xe9s da Arduino IDE."),(0,i.kt)("p",null,"A seguir s\xe3o apresentados os passos para correta configura\xe7\xe3o, conforme o sistema operacional usado."),(0,i.kt)("h2",{id:"windows"},"Windows"),(0,i.kt)("p",null,"Fa\xe7a o download do driver no seguinte link: ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip"},"https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip")),(0,i.kt)("p",null,"Descompacte."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"instalando drive",src:t(6433).Z,width:"512",height:"315"})),(0,i.kt)("p",null,"Abra a pasta!"),(0,i.kt)("p",null,"Dentro dela ter\xe1 v\xe1rios arquivos, v\xe1 at\xe9 as op\xe7\xf5es abaixo:"),(0,i.kt)("p",null,"Para Windows 32 bits execute o DPinst.exe e se tiver usando o Windows 64 bits execute o DPinst64.exe"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"instalando drive",src:t(5438).Z,width:"1600",height:"984"})),(0,i.kt)("p",null,"Ao selecionar um deles d\xea dois cliques e ir\xe1 aparecer uma janela, pressione sim, ent\xe3o aparecer\xe1 outra janela e clique em avan\xe7ar."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"instalando drive",src:t(4346).Z,width:"500",height:"389"})),(0,i.kt)("p",null,"Aguarde a instala\xe7\xe3o e clique em concluir!"),(0,i.kt)("p",null,"Maravilha, agora veremos se realmente o driver foi instalado."),(0,i.kt)("p",null,"Plugue seu Franzininho na USB do seu computador e abra o gerenciador de dispositivo."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"instalando drive",src:t(8713).Z,width:"512",height:"396"})),(0,i.kt)("p",null,"Se aparecer libusb ou digispark, maravilha foi instalado com sucesso!"),(0,i.kt)("admonition",{title:"N\xe3o esque\xe7a de plugar a Franzininho em seu computador, pois se n\xe3o. N\xe3o ir\xe1 aparecer!",type:"warning"}),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"instalando drive",src:t(4506).Z,width:"1308",height:"966"})),(0,i.kt)("p",null,"Fonte: ",(0,i.kt)("a",{parentName:"p",href:"http://digistump.com/wiki/digispark/tutorials/connecting"},"http://digistump.com/wiki/digispark/tutorials/connecting")),(0,i.kt)("h2",{id:"linux"},"Linux"),(0,i.kt)("p",null,"Fa\xe7a o seguinte procedimento"),(0,i.kt)("p",null,"Linux Troubleshooting: ",(0,i.kt)("a",{parentName:"p",href:"http://digistump.com/wiki/digispark/tutorials/linuxtroubleshooting"},"http://digistump.com/wiki/digispark/tutorials/linuxtroubleshooting")))}p.isMDXComponent=!0},6433:(e,r,t)=>{t.d(r,{Z:()=>n});const n=t.p+"assets/images/imagem1-55713c352d357089e7567e4b64ea6117.png"},5438:(e,r,t)=>{t.d(r,{Z:()=>n});const n=t.p+"assets/images/imagem2-770c6fccd5193b12ac18d230ade94bdb.png"},4346:(e,r,t)=>{t.d(r,{Z:()=>n});const n=t.p+"assets/images/imagem3-a18e79cf7427506529aee7d9333433a5.png"},8713:(e,r,t)=>{t.d(r,{Z:()=>n});const n=t.p+"assets/images/imagem4-88a2c677015dd3904d35cc788e537ae6.png"},4506:(e,r,t)=>{t.d(r,{Z:()=>n});const n=t.p+"assets/images/imagem5-b292a12333da269a6bce1870fd64dd26.png"}}]); \ No newline at end of file diff --git a/assets/js/6e2ab842.4c950afc.js b/assets/js/6e2ab842.4c950afc.js new file mode 100755 index 000000000..131e013de --- /dev/null +++ b/assets/js/6e2ab842.4c950afc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4268],{23156:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>t,metadata:()=>d,toc:()=>c});var r=a(17624),n=a(95788);const t={id:"badge",title:"Badge - Aprenda a soldar",slug:"/badge/badge",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},i=void 0,d={id:"Badge/badge",title:"Badge - Aprenda a soldar",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.",source:"@site/docs/Badge/badge.md",sourceDirName:"Badge",slug:"/badge/badge",permalink:"/docs/badge/badge",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Badge/badge.md",tags:[],version:"current",frontMatter:{id:"badge",title:"Badge - Aprenda a soldar",slug:"/badge/badge",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},sidebar:"docs",previous:{title:"Placa FranzBoy",permalink:"/docs/FranzBoy/franzboy"},next:{title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",permalink:"/docs/LaboratorioSistemasIot/LaboratorioSistemasIot"}},s={},c=[{value:"O que \xe9 Badge?",id:"o-que-\xe9-badge",level:2},{value:"Contrate uma oficina ou adquira kit do Badge Aprenda Soldar",id:"contrate-uma-oficina-ou-adquira-kit-do-badge-aprenda-soldar",level:2}];function p(e){const o={a:"a",admonition:"admonition",h2:"h2",img:"img",p:"p",...(0,n.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.h2,{id:"o-que-\xe9-badge",children:"O que \xe9 Badge?"}),"\n",(0,r.jsx)(o.p,{children:"O badge Aprenda Soldar foi desenvolvido para oficinas de solda onde os participantes d\xe3o os primeiros passos com o uso de ferramentas de soldagem e adquirem conhecimento dos componentes eletr\xf4nicos e circuito da placa."}),"\n",(0,r.jsx)(o.p,{children:"Com poucos componentes, esse badge permite que qualquer pessoa aprenda a soldar e se divertir."}),"\n",(0,r.jsx)(o.p,{children:(0,r.jsx)(o.img,{alt:"montagem Badge",src:a(80548).c+"",width:"900",height:"675"})}),"\n",(0,r.jsx)(o.p,{children:"O circuito escolhido para esse badge, foi o cl\xe1ssico multivibrador ast\xe1vel com transistores. Ao final da soldagem os olhos do rob\xf4 piscam, e placa est\xe1 pronta para usar como colar ou chaveiro."}),"\n",(0,r.jsx)(o.p,{children:"Durante a oficina os participantes conseguem aprender a usar o ferro de solda e como \xe9 o processo de soldagem de componentes PTH em uma placa."}),"\n",(0,r.jsx)(o.p,{children:"As oficinas com o Badge Aprenda Soldar s\xe3o direcionadas para adultos e adolescentes com interesse em aprender sobre soldagem eletr\xf4nica. A oficina dura em m\xe9dia 1 h, dependendo da quantidade de pessoas no grupo."}),"\n",(0,r.jsx)(o.admonition,{title:'Premia\xe7\xe3o: Contest badge Love na categoria "The Badge of Hope\ufeff"',type:"tip"}),"\n",(0,r.jsx)(o.p,{children:"Esse projeto foi um dos vencedores do Contest badge Love na categoria The Badge of Hope, promovido pelo Hackster\ufeff \ufeff O projeto \xe9 open hardware e foi publicado sob a licen\xe7a Creative Commons Attribution Share Alike 4.0 International\ufeff"}),"\n",(0,r.jsx)(o.h2,{id:"contrate-uma-oficina-ou-adquira-kit-do-badge-aprenda-soldar",children:"Contrate uma oficina ou adquira kit do Badge Aprenda Soldar"}),"\n",(0,r.jsxs)(o.p,{children:["Para adquirir placas e kits do Badge Aprenda Soldar ou oficinas, entre em contato conosco: ",(0,r.jsx)(o.a,{href:"mailto:contato@franzininho.com.br",children:"contato@franzininho.com.br"}),"\ufeff"]}),"\n",(0,r.jsx)(o.p,{children:"Fotos de oficinas com Badge Aprenda Soldar"}),"\n",(0,r.jsx)(o.p,{children:(0,r.jsx)(o.img,{alt:"montagem Badge",src:a(56968).c+"",width:"2000",height:"1600"})})]})}function m(e={}){const{wrapper:o}={...(0,n.MN)(),...e.components};return o?(0,r.jsx)(o,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},95788:(e,o,a)=>{a.d(o,{MN:()=>c});var r=a(11504);function n(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function t(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);o&&(r=r.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var o=1;o=0||(n[a]=e[a]);return n}(e,o);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),c=function(e){var o=r.useContext(s),a=o;return e&&(a="function"==typeof e?e(o):i(i({},o),e)),a},p={inlineCode:"code",wrapper:function(e){var o=e.children;return r.createElement(r.Fragment,{},o)}},m=r.forwardRef((function(e,o){var a=e.components,n=e.mdxType,t=e.originalType,s=e.parentName,m=d(e,["components","mdxType","originalType","parentName"]),l=c(a),u=n,f=l["".concat(s,".").concat(u)]||l[u]||p[u]||t;return a?r.createElement(f,i(i({ref:o},m),{},{components:a})):r.createElement(f,i({ref:o},m))}));m.displayName="MDXCreateElement"},56968:(e,o,a)=>{a.d(o,{c:()=>r});const r=a.p+"assets/images/oficinas-57a5fef71b5d7ee7d1e002a56ac4959a.png"},80548:(e,o,a)=>{a.d(o,{c:()=>r});const r=a.p+"assets/images/project-badge-aprenda-soldar-00-e68e0962b230233de45052f9516773be.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/6e2ab842.eb73eb7d.js b/assets/js/6e2ab842.eb73eb7d.js deleted file mode 100755 index cf890d5c8..000000000 --- a/assets/js/6e2ab842.eb73eb7d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3567],{3905:(e,a,o)=>{o.d(a,{Zo:()=>p,kt:()=>f});var r=o(7294);function t(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function n(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,r)}return o}function i(e){for(var a=1;a=0||(t[o]=e[o]);return t}(e,a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var s=r.createContext({}),c=function(e){var a=r.useContext(s),o=a;return e&&(o="function"==typeof e?e(a):i(i({},a),e)),o},p=function(e){var a=c(e.components);return r.createElement(s.Provider,{value:a},e.children)},l="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},m=r.forwardRef((function(e,a){var o=e.components,t=e.mdxType,n=e.originalType,s=e.parentName,p=d(e,["components","mdxType","originalType","parentName"]),l=c(o),m=t,f=l["".concat(s,".").concat(m)]||l[m]||u[m]||n;return o?r.createElement(f,i(i({ref:a},p),{},{components:o})):r.createElement(f,i({ref:a},p))}));function f(e,a){var o=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var n=o.length,i=new Array(n);i[0]=m;var d={};for(var s in a)hasOwnProperty.call(a,s)&&(d[s]=a[s]);d.originalType=e,d[l]="string"==typeof e?e:t,i[1]=d;for(var c=2;c{o.r(a),o.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>n,metadata:()=>d,toc:()=>c});var r=o(3117),t=(o(7294),o(3905));const n={id:"badge",title:"Badge - Aprenda a soldar",slug:"/badge/badge",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},i=void 0,d={unversionedId:"Badge/badge",id:"Badge/badge",title:"Badge - Aprenda a soldar",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.",source:"@site/docs/Badge/badge.md",sourceDirName:"Badge",slug:"/badge/badge",permalink:"/docs/badge/badge",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Badge/badge.md",tags:[],version:"current",frontMatter:{id:"badge",title:"Badge - Aprenda a soldar",slug:"/badge/badge",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},sidebar:"docs",previous:{title:"Placa FranzBoy",permalink:"/docs/FranzBoy/franzboy"},next:{title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",permalink:"/docs/LaboratorioSistemasIot/LaboratorioSistemasIot"}},s={},c=[{value:"O que \xe9 Badge?",id:"o-que-\xe9-badge",level:2},{value:"Contrate uma oficina ou adquira kit do Badge Aprenda Soldar",id:"contrate-uma-oficina-ou-adquira-kit-do-badge-aprenda-soldar",level:2}],p={toc:c},l="wrapper";function u(e){let{components:a,...n}=e;return(0,t.kt)(l,(0,r.Z)({},p,n,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("h2",{id:"o-que-\xe9-badge"},"O que \xe9 Badge?"),(0,t.kt)("p",null,"O badge Aprenda Soldar foi desenvolvido para oficinas de solda onde os participantes d\xe3o os primeiros passos com o uso de ferramentas de soldagem e adquirem conhecimento dos componentes eletr\xf4nicos e circuito da placa."),(0,t.kt)("p",null,"Com poucos componentes, esse badge permite que qualquer pessoa aprenda a soldar e se divertir."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"montagem Badge",src:o(4992).Z,width:"900",height:"675"})),(0,t.kt)("p",null,"O circuito escolhido para esse badge, foi o cl\xe1ssico multivibrador ast\xe1vel com transistores. Ao final da soldagem os olhos do rob\xf4 piscam, e placa est\xe1 pronta para usar como colar ou chaveiro."),(0,t.kt)("p",null,"Durante a oficina os participantes conseguem aprender a usar o ferro de solda e como \xe9 o processo de soldagem de componentes PTH em uma placa."),(0,t.kt)("p",null,"As oficinas com o Badge Aprenda Soldar s\xe3o direcionadas para adultos e adolescentes com interesse em aprender sobre soldagem eletr\xf4nica. A oficina dura em m\xe9dia 1 h, dependendo da quantidade de pessoas no grupo."),(0,t.kt)("admonition",{title:'Premia\xe7\xe3o: Contest badge Love na categoria "The Badge of Hope\ufeff"',type:"tip"}),(0,t.kt)("p",null,"Esse projeto foi um dos vencedores do Contest badge Love na categoria The Badge of Hope, promovido pelo Hackster\ufeff \ufeff O projeto \xe9 open hardware e foi publicado sob a licen\xe7a Creative Commons Attribution Share Alike 4.0 International\ufeff"),(0,t.kt)("h2",{id:"contrate-uma-oficina-ou-adquira-kit-do-badge-aprenda-soldar"},"Contrate uma oficina ou adquira kit do Badge Aprenda Soldar"),(0,t.kt)("p",null,"Para adquirir placas e kits do Badge Aprenda Soldar ou oficinas, entre em contato conosco: ",(0,t.kt)("a",{parentName:"p",href:"mailto:contato@franzininho.com.br"},"contato@franzininho.com.br"),"\ufeff"),(0,t.kt)("p",null,"Fotos de oficinas com Badge Aprenda Soldar"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"montagem Badge",src:o(6725).Z,width:"2000",height:"1600"})))}u.isMDXComponent=!0},6725:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/oficinas-57a5fef71b5d7ee7d1e002a56ac4959a.png"},4992:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/project-badge-aprenda-soldar-00-e68e0962b230233de45052f9516773be.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/7561b0ae.ceceb5c0.js b/assets/js/7561b0ae.ceceb5c0.js deleted file mode 100755 index 1b9d6bc07..000000000 --- a/assets/js/7561b0ae.ceceb5c0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[157],{3905:(e,r,a)=>{a.d(r,{Zo:()=>s,kt:()=>f});var n=a(7294);function o(e,r,a){return r in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a,e}function t(e,r){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var r=1;r=0||(o[a]=e[a]);return o}(e,r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),p=function(e){var r=n.useContext(l),a=r;return e&&(a="function"==typeof e?e(r):i(i({},r),e)),a},s=function(e){var r=p(e.components);return n.createElement(l.Provider,{value:r},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},m=n.forwardRef((function(e,r){var a=e.components,o=e.mdxType,t=e.originalType,l=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),d=p(a),m=o,f=d["".concat(l,".").concat(m)]||d[m]||u[m]||t;return a?n.createElement(f,i(i({ref:r},s),{},{components:a})):n.createElement(f,i({ref:r},s))}));function f(e,r){var a=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var t=a.length,i=new Array(t);i[0]=m;var c={};for(var l in r)hasOwnProperty.call(r,l)&&(c[l]=r[l]);c.originalType=e,c[d]="string"==typeof e?e:o,i[1]=c;for(var p=2;p{a.r(r),a.d(r,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>t,metadata:()=>c,toc:()=>p});var n=a(3117),o=(a(7294),a(3905));const t={id:"franzboy",title:"Placa FranzBoy",slug:"/FranzBoy/franzboy",description:"Detalhes da placa Franzboy"},i=void 0,c={unversionedId:"FranzBoy/franzboy",id:"FranzBoy/franzboy",title:"Placa FranzBoy",description:"Detalhes da placa Franzboy",source:"@site/docs/FranzBoy/franzboy.md",sourceDirName:"FranzBoy",slug:"/FranzBoy/franzboy",permalink:"/docs/FranzBoy/franzboy",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzBoy/franzboy.md",tags:[],version:"current",frontMatter:{id:"franzboy",title:"Placa FranzBoy",slug:"/FranzBoy/franzboy",description:"Detalhes da placa Franzboy"},sidebar:"docs",previous:{title:"Gravando a Franzino com um placa Arduino UNO",permalink:"/docs/Franzino/upload-com-arduino-uno"},next:{title:"Badge - Aprenda a soldar",permalink:"/docs/badge/badge"}},l={},p=[{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Confira o video de apresenta\xe7\xe3o da placa",id:"confira-o-video-de-apresenta\xe7\xe3o-da-placa",level:2}],s={toc:p},d="wrapper";function u(e){let{components:r,...t}=e;return(0,o.kt)(d,(0,n.Z)({},s,t,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"A placa FranzBoy veio para integrar a fam\xedlia de placas Franzininho em uma nova abordagem. Com o formato de game retro, procura incentivar o desenvolvimento de jogos, e hacks diversos. Voc\xea pode se divertir e aprender muito com eletr\xf4nica e programa\xe7\xe3o."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Placa FranzBoy",src:a(4894).Z,width:"1280",height:"960"})),(0,o.kt)("p",null,"Possui um hardware enxuto onde \xe9 explorado (escovando bits) os recursos do Atmega328, em conjunto com Display OLED e teclas, em um formato de badge para voc\xea usar nos eventos."),(0,o.kt)("h2",{id:"licen\xe7a"},"Licen\xe7a"),(0,o.kt)("p",null,"Assim como as placas Franzininho DIY e Franzininho Tiny, a placa FranzBoy tamb\xe9m foi publicada como projeto de hardware aberto. Ela foi publicada sob a licen\xe7a CERN Open Hardware Licence."),(0,o.kt)("p",null,"Conforme definido no \u201chow to\u201d da licen\xe7a, no reposit\xf3rio do projeto est\xe3o inclu\xeddos os seguintes arquivos:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"LICENSE.TXT"),(0,o.kt)("li",{parentName:"ul"},"cern_ohl_v_1_2_howto.pdf"),(0,o.kt)("li",{parentName:"ul"},"CHANGES.TXT"),(0,o.kt)("li",{parentName:"ul"},"COPYRIGHT.TXT"),(0,o.kt)("li",{parentName:"ul"},"PRODUCT.TXT")),(0,o.kt)("p",null,"O projeto est\xe1 dispon\xedvel em: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/FranzBoy"},"https://github.com/Franzininho/FranzBoy")),(0,o.kt)("h2",{id:"confira-o-video-de-apresenta\xe7\xe3o-da-placa"},"Confira o video de apresenta\xe7\xe3o da placa"),(0,o.kt)("iframe",{width:"828",height:"466",src:"https://www.youtube.com/embed/EFIQ9oZN7Zc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}u.isMDXComponent=!0},4894:(e,r,a)=>{a.d(r,{Z:()=>n});const n=a.p+"assets/images/1-1c1862f25749e45cbcb838377e66d001.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/7561b0ae.eddfc397.js b/assets/js/7561b0ae.eddfc397.js new file mode 100755 index 000000000..688e3d5e2 --- /dev/null +++ b/assets/js/7561b0ae.eddfc397.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9488],{89976:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>t,metadata:()=>c,toc:()=>l});var a=r(17624),o=r(95788);const t={id:"franzboy",title:"Placa FranzBoy",slug:"/FranzBoy/franzboy",description:"Detalhes da placa Franzboy"},i=void 0,c={id:"FranzBoy/franzboy",title:"Placa FranzBoy",description:"Detalhes da placa Franzboy",source:"@site/docs/FranzBoy/franzboy.md",sourceDirName:"FranzBoy",slug:"/FranzBoy/franzboy",permalink:"/docs/FranzBoy/franzboy",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzBoy/franzboy.md",tags:[],version:"current",frontMatter:{id:"franzboy",title:"Placa FranzBoy",slug:"/FranzBoy/franzboy",description:"Detalhes da placa Franzboy"},sidebar:"docs",previous:{title:"Gravando a Franzino com um placa Arduino UNO",permalink:"/docs/Franzino/upload-com-arduino-uno"},next:{title:"Badge - Aprenda a soldar",permalink:"/docs/badge/badge"}},s={},l=[{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Confira o video de apresenta\xe7\xe3o da placa",id:"confira-o-video-de-apresenta\xe7\xe3o-da-placa",level:2}];function d(e){const n={a:"a",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,o.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"A placa FranzBoy veio para integrar a fam\xedlia de placas Franzininho em uma nova abordagem. Com o formato de game retro, procura incentivar o desenvolvimento de jogos, e hacks diversos. Voc\xea pode se divertir e aprender muito com eletr\xf4nica e programa\xe7\xe3o."}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Placa FranzBoy",src:r(40912).c+"",width:"1280",height:"960"})}),"\n",(0,a.jsx)(n.p,{children:"Possui um hardware enxuto onde \xe9 explorado (escovando bits) os recursos do Atmega328, em conjunto com Display OLED e teclas, em um formato de badge para voc\xea usar nos eventos."}),"\n",(0,a.jsx)(n.h2,{id:"licen\xe7a",children:"Licen\xe7a"}),"\n",(0,a.jsx)(n.p,{children:"Assim como as placas Franzininho DIY e Franzininho Tiny, a placa FranzBoy tamb\xe9m foi publicada como projeto de hardware aberto. Ela foi publicada sob a licen\xe7a CERN Open Hardware Licence."}),"\n",(0,a.jsx)(n.p,{children:"Conforme definido no \u201chow to\u201d da licen\xe7a, no reposit\xf3rio do projeto est\xe3o inclu\xeddos os seguintes arquivos:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"LICENSE.TXT"}),"\n",(0,a.jsx)(n.li,{children:"cern_ohl_v_1_2_howto.pdf"}),"\n",(0,a.jsx)(n.li,{children:"CHANGES.TXT"}),"\n",(0,a.jsx)(n.li,{children:"COPYRIGHT.TXT"}),"\n",(0,a.jsx)(n.li,{children:"PRODUCT.TXT"}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["O projeto est\xe1 dispon\xedvel em: ",(0,a.jsx)(n.a,{href:"https://github.com/Franzininho/FranzBoy",children:"https://github.com/Franzininho/FranzBoy"})]}),"\n",(0,a.jsx)(n.h2,{id:"confira-o-video-de-apresenta\xe7\xe3o-da-placa",children:"Confira o video de apresenta\xe7\xe3o da placa"}),"\n",(0,a.jsx)("iframe",{width:"828",height:"466",src:"https://www.youtube.com/embed/EFIQ9oZN7Zc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function p(e={}){const{wrapper:n}={...(0,o.MN)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},95788:(e,n,r)=>{r.d(n,{MN:()=>l});var a=r(11504);function o(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function t(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var n=1;n=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=a.createContext({}),l=function(e){var n=a.useContext(s),r=n;return e&&(r="function"==typeof e?e(n):i(i({},n),e)),r},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},p=a.forwardRef((function(e,n){var r=e.components,o=e.mdxType,t=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(r),m=o,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||t;return r?a.createElement(f,i(i({ref:n},p),{},{components:r})):a.createElement(f,i({ref:n},p))}));p.displayName="MDXCreateElement"},40912:(e,n,r)=>{r.d(n,{c:()=>a});const a=r.p+"assets/images/1-1c1862f25749e45cbcb838377e66d001.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/7e45b7ad.829cddcf.js b/assets/js/7e45b7ad.829cddcf.js new file mode 100755 index 000000000..1fb11d058 --- /dev/null +++ b/assets/js/7e45b7ad.829cddcf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1744],{84220:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>c,contentTitle:()=>t,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=o(17624),r=o(95788);const i={id:"buzzer",title:"Instrumento musical com Buzzer",slug:"/franzininho-diy/exemplos-avr-libc/buzzer",description:"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/06/2020",some_url:"https://github.com/EduardoDuenas"},t=void 0,s={id:"FranzininhoDIY/exemplos-avr-libc/buzzer",title:"Instrumento musical com Buzzer",description:"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/buzzer.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/buzzer",permalink:"/docs/franzininho-diy/exemplos-avr-libc/buzzer",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/buzzer.md",tags:[],version:"current",frontMatter:{id:"buzzer",title:"Instrumento musical com Buzzer",slug:"/franzininho-diy/exemplos-avr-libc/buzzer",description:"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/06/2020",some_url:"https://github.com/EduardoDuenas"},sidebar:"docs",previous:{title:"Contador de pulsos externos",permalink:"/docs/franzininho-diy/exemplos-avr-libc/contadores"},next:{title:"Interrup\xe7\xe3o externa",permalink:"/docs/franzininho-diy/exemplos-avr-libc/int-ext"}},c={},l=[{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Fazendo m\xfasica com o Buzzer",id:"fazendo-m\xfasica-com-o-buzzer",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Montagem",id:"montagem",level:3},{value:"Compila\xe7\xe3o e upload",id:"compila\xe7\xe3o-e-upload",level:3},{value:"Resultado",id:"resultado",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2},{value:"Gloss\xe1rio",id:"gloss\xe1rio",level:2}];function d(e){const a={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer na Franzininho DIY. Vamos aprender como se usar um buzzer passivo para gerar cada nota musical com ajuda do timer0."}),"\n",(0,n.jsx)(a.p,{children:"Boa pr\xe1tica!"}),"\n",(0,n.jsx)(a.h2,{id:"recursos-necess\xe1rios",children:(0,n.jsx)(a.strong,{children:"Recursos necess\xe1rios"})}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"Franzininho DIY (com Micronucleos)"}),"\n",(0,n.jsx)(a.li,{children:"1 buzzer passivo 5v"}),"\n",(0,n.jsx)(a.li,{children:"4 jumpers macho-f\xeamea"}),"\n",(0,n.jsx)(a.li,{children:"1 jumper macho-macho"}),"\n"]}),"\n",(0,n.jsx)(a.h2,{id:"fazendo-m\xfasica-com-o-buzzer",children:(0,n.jsx)(a.strong,{children:"Fazendo m\xfasica com o Buzzer"})}),"\n",(0,n.jsxs)(a.p,{children:["Nesse exemplo vamos atrav\xe9s de uma ",(0,n.jsx)(a.em,{children:"lookup table"})," vamos ensinar quais as frequ\xeancias de cada nota, e com o uso do timer vamos variar a entrada no buzzer na frequ\xeancia da nota que queremos. Com a ajuda de outra tabela, vamos dar para o Franzininho a sequ\xeancia das notas que queremos que ele toque, podendo assim, tocar a m\xfasica que quisermos."]}),"\n",(0,n.jsx)(a.p,{children:"O buzzer passivo funciona como um pequeno alto falante, enquanto tivermos a tens\xe3o nominal na entrada positiva e o terra na entrada negativa o im\xe3 dentro dele vai para frente. Por outro lado, quando tivermos terra em ambas ele volta para a posi\xe7\xe3o inicial. Se variarmos entre esses dois estados na frequ\xeancia de uma nota musical geraremos uma onda sonora com o tom dela."}),"\n",(0,n.jsxs)(a.p,{children:["As notas musicais ocidentais em uma escala maior s\xe3o ",(0,n.jsx)(a.em,{children:"Do Do# Re Re# Mi Fa Fa# Sol Sol# L\xe1 L\xe1# Si"})," voltando para ",(0,n.jsx)(a.em,{children:"Do"})," depois. Cada nota est\xe1 a uma dist\xe2ncia de meio tom da outra e a 6 tons de sua pr\xf3xima oitava, que \xe9 a mesma nota por\xe9m mais fina."]}),"\n",(0,n.jsxs)(a.p,{children:["Olhando pela frequ\xeancia temos que partindo de ",(0,n.jsx)(a.em,{children:"L\xe1"})," da terceira oitava, 440Hz, cada ",(0,n.jsx)(a.em,{children:"L\xe1"})," uma oitava acima tem o dobro da frequ\xeancia e cada oitava a baixo tem metade da frequ\xeancia. J\xe1 para subir cada semitom, basta multiplicar por 2^(1/12), ou para x semitons, 2^(x/12)."]}),"\n",(0,n.jsx)(a.h3,{id:"c\xf3digo",children:(0,n.jsx)(a.strong,{children:"C\xf3digo"})}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-c",children:'/***********************************************\n * @file main.c\n * @author Eduardo Due\xf1as / Daniel Quadros\n * @brief Exemplo tocar musicas usando buzzer\n * @version 1.0\n * @date 21/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 15/05/2021\n **********************************************/\n#include \n#include \n\n#define F_CPU 16500000L\n\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\n\n#define NumNotas 32\n#define CONT(freq) ((F_CPU*10L)/(256L*freq))\n\nenum notas {Pausa, Do, DoS, Re, ReS, Mi, Fa, FaS, Sol, SolS, La, LaS, Si, DoM, DoSM, ReM};\nlong f[16] = {\n 255L, (long)CONT(5232L), (long)CONT(5543L), (long)CONT(5873L), (long)CONT(6222L), (long)CONT(6592L), (long)CONT(6984L),\n (long)CONT(7400L), (long)CONT(7840L), (long)CONT(8306L), (long)CONT(8800L), (long)CONT(9323L), (long)CONT(9877L),\n (long)CONT(10465L), (long)CONT(11087L), (long)CONT(11746L)\n};\n\n// {0xFF,123, 116, 110, 104, 98, 92, 87, 82, 78, 73, 69, 65, 62, 58, 54}\n// Lookup table com os valores de cada nota a ser colocado na flag do timer\n\nchar Partitura[NumNotas] = {\n Re, Mi, Mi, Re, Sol, FaS, FaS, FaS, Re, Mi, Mi, Re, La, Sol, Sol, Sol,\n Re, ReM, ReM, Si, Sol, FaS, FaS, Mi, DoM, Si, Si, Sol, La, Sol, Sol, Sol\n}; // Partitura da m\xfasica\nvolatile char cont = 0; // Local da partitura\nvolatile long aux = 0;\n\n// Tratamento de interrup\xe7\xe3o\nISR (TIM0_COMPB_vect) { // Vetor de compara\xe7\xe3o B\n if (aux <= 0xff) { // Se aux menor que 8bits\n OCR0B = (TCNT0 + aux) & (0xff); // Mandar aux para o contador\n aux = f[Partitura[cont]]; // Reinicia o aux\n toogleBit(PORTB, PB1); // Inverter o buzzer\n }\n else { // Se n\xe3o\n OCR0B = TCNT0; // Mandar o tempoatual para o contador, o mesmo que esperar um overflow\n aux -= 0xff; // Subitrair 8bits do aux\n }\n}\n\n// Fun\xe7\xe3o main\nint main() {\n enum notas nota;\n setBit(DDRB, PB1); // Configura o PortB1 como sa\xedda, pino do buzzer\n\n // Configura\xe7\xe3o do timer\n TCCR0A = 0x00; // Configura pino de comparara\xe7\xe3o desconectado\n TCCR0B = 0x04; // Configura o prescaler como 256\n setBit(TIMSK, OCIE0B); // Habilita a interrup\xe7\xe3o por compara\xe7\xe3o de COMPB\n sei(); // Habilita interrup\xe7\xf5es globais\n aux = f[Partitura[cont]]; // Inicia o contador de COMPB\n\n if (aux <= 0xff) {\n OCR0B = (TCNT0 + aux) & (0xff);\n aux = f[Partitura[cont]];\n toogleBit(PORTB, PB1);\n }\n else {\n OCR0B = TCNT0;\n aux -= 0xff;\n }\n\n // Loop infinito\n for (;;) {\n long i;\n for (i = 0; i < 1000000L; i++) {\n asm ("nop");\n cont++; // Avan\xe7a na partitura\n if (cont >= NumNotas)cont = 0; // Toca de novo\n }\n}\n'})}),"\n",(0,n.jsx)(a.h3,{id:"montagem",children:(0,n.jsx)(a.strong,{children:"Montagem"})}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"circuito buzzer",src:o(99732).c+"",width:"2535",height:"636"})}),"\n",(0,n.jsx)(a.p,{children:"Dependendo do buzzer \xe9 necess\xe1rio conectar os jumpers diretamente nos pinos do buzzer ao inv\xe9s de coloc\xe1-lo na protoboard."}),"\n",(0,n.jsx)(a.h3,{id:"compila\xe7\xe3o-e-upload",children:(0,n.jsx)(a.strong,{children:"Compila\xe7\xe3o e upload"})}),"\n",(0,n.jsxs)(a.p,{children:["Para compilar o programa, acesse a pasta do exemplo e d\xea o comando ",(0,n.jsx)(a.code,{children:"make"}),":"]}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"exemplos-avr-libc/exemplos/buzzer$ make\n"})}),"\n",(0,n.jsx)(a.p,{children:"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n"})}),"\n",(0,n.jsx)(a.p,{children:"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."}),"\n",(0,n.jsx)(a.h3,{id:"resultado",children:(0,n.jsx)(a.strong,{children:"Resultado"})}),"\n",(0,n.jsx)(a.p,{children:"O buzzer deve tocar Parab\xe9ns para voc\xea e deve continuar em loop at\xe9 a placa ser desligada."}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.a,{href:"https://wokwi.com/arduino/projects/302834828095521293",children:"Simule esse exemplo no WokWi"})}),"\n",(0,n.jsx)(a.h2,{id:"conclus\xe3o",children:(0,n.jsx)(a.strong,{children:"Conclus\xe3o"})}),"\n",(0,n.jsx)(a.p,{children:"O buzzer passivo \xe9 um componente muito vers\xe1til com o qual podemos, n\xe3o s\xf3, tocar m\xfasicas como tamb\xe9m gerar diversos tipos de efeitos sonoros, tudo que precisamos \xe9 entender como gerar o som que queremos. Al\xe9m disso vimos como podemos usar interrup\xe7\xf5es de timer para fun\xe7\xf5es que precisam de Real Time, ou seja, que precisam de precis\xe3o de tempo."}),"\n",(0,n.jsx)(a.h2,{id:"gloss\xe1rio",children:"Gloss\xe1rio"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"Setar: colocar um novo valor em um registrador. Para um bit \xe9 convencionado setar, mud\xe1-lo para valor 1, e clear (limpar), mud\xe1-lo para valor 0"}),"\n",(0,n.jsx)(a.li,{children:"Resetar: reiniciar"}),"\n",(0,n.jsx)(a.li,{children:"Timer: circuito eletr\xf4nico dedicado a contagem de tempo"}),"\n",(0,n.jsx)(a.li,{children:"Lookup table: tabela de consulta, no contexto de programa\xe7\xe3o \xe9 um vetor com informa\xe7\xf5es necess\xe1rias para o programa."}),"\n"]}),"\n",(0,n.jsxs)(a.table,{children:[(0,n.jsx)(a.thead,{children:(0,n.jsxs)(a.tr,{children:[(0,n.jsx)(a.th,{children:"Autor"}),(0,n.jsx)(a.th,{children:(0,n.jsx)(a.a,{href:"https://github.com/EduardoDuenas",children:"Eduardo Due\xf1as"})})]})}),(0,n.jsx)(a.tbody,{children:(0,n.jsxs)(a.tr,{children:[(0,n.jsx)(a.td,{children:"Data:"}),(0,n.jsx)(a.td,{children:"05/06/2020"})]})})]})]})}function u(e={}){const{wrapper:a}={...(0,r.MN)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},95788:(e,a,o)=>{o.d(a,{MN:()=>l});var n=o(11504);function r(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function i(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function t(e){for(var a=1;a=0||(r[o]=e[o]);return r}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var c=n.createContext({}),l=function(e){var a=n.useContext(c),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},d={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var o=e.components,r=e.mdxType,i=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=l(o),p=r,h=m["".concat(c,".").concat(p)]||m[p]||d[p]||i;return o?n.createElement(h,t(t({ref:a},u),{},{components:o})):n.createElement(h,t({ref:a},u))}));u.displayName="MDXCreateElement"},99732:(e,a,o)=>{o.d(a,{c:()=>n});const n=o.p+"assets/images/Exemplo_Buzzer_Circuito-a4e81be25a4bb91d65d45043dffc52ac.png"}}]); \ No newline at end of file diff --git a/assets/js/7e45b7ad.bef3f00d.js b/assets/js/7e45b7ad.bef3f00d.js deleted file mode 100755 index 72bee3d53..000000000 --- a/assets/js/7e45b7ad.bef3f00d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[694],{3905:(e,a,o)=>{o.d(a,{Zo:()=>m,kt:()=>g});var n=o(7294);function r(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function t(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var a=1;a=0||(r[o]=e[o]);return r}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=n.createContext({}),u=function(e){var a=n.useContext(l),o=a;return e&&(o="function"==typeof e?e(a):i(i({},a),e)),o},m=function(e){var a=u(e.components);return n.createElement(l.Provider,{value:a},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},d=n.forwardRef((function(e,a){var o=e.components,r=e.mdxType,t=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=u(o),d=r,g=c["".concat(l,".").concat(d)]||c[d]||p[d]||t;return o?n.createElement(g,i(i({ref:a},m),{},{components:o})):n.createElement(g,i({ref:a},m))}));function g(e,a){var o=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var t=o.length,i=new Array(t);i[0]=d;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var u=2;u{o.r(a),o.d(a,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>t,metadata:()=>s,toc:()=>u});var n=o(3117),r=(o(7294),o(3905));const t={id:"buzzer",title:"Instrumento musical com Buzzer",slug:"/franzininho-diy/exemplos-avr-libc/buzzer",description:"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/06/2020",some_url:"https://github.com/EduardoDuenas"},i=void 0,s={unversionedId:"FranzininhoDIY/exemplos-avr-libc/buzzer",id:"FranzininhoDIY/exemplos-avr-libc/buzzer",title:"Instrumento musical com Buzzer",description:"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/buzzer.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/buzzer",permalink:"/docs/franzininho-diy/exemplos-avr-libc/buzzer",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/buzzer.md",tags:[],version:"current",frontMatter:{id:"buzzer",title:"Instrumento musical com Buzzer",slug:"/franzininho-diy/exemplos-avr-libc/buzzer",description:"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/06/2020",some_url:"https://github.com/EduardoDuenas"},sidebar:"docs",previous:{title:"Contador de pulsos externos",permalink:"/docs/franzininho-diy/exemplos-avr-libc/contadores"},next:{title:"Interrup\xe7\xe3o externa",permalink:"/docs/franzininho-diy/exemplos-avr-libc/int-ext"}},l={},u=[{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Fazendo m\xfasica com o Buzzer",id:"fazendo-m\xfasica-com-o-buzzer",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Montagem",id:"montagem",level:3},{value:"Compila\xe7\xe3o e upload",id:"compila\xe7\xe3o-e-upload",level:3},{value:"Resultado",id:"resultado",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2},{value:"Gloss\xe1rio",id:"gloss\xe1rio",level:2}],m={toc:u},c="wrapper";function p(e){let{components:a,...t}=e;return(0,r.kt)(c,(0,n.Z)({},m,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer na Franzininho DIY. Vamos aprender como se usar um buzzer passivo para gerar cada nota musical com ajuda do timer0."),(0,r.kt)("p",null,"Boa pr\xe1tica!"),(0,r.kt)("h2",{id:"recursos-necess\xe1rios"},(0,r.kt)("strong",{parentName:"h2"},"Recursos necess\xe1rios")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Franzininho DIY (com Micronucleos)"),(0,r.kt)("li",{parentName:"ul"},"1 buzzer passivo 5v"),(0,r.kt)("li",{parentName:"ul"},"4 jumpers macho-f\xeamea"),(0,r.kt)("li",{parentName:"ul"},"1 jumper macho-macho")),(0,r.kt)("h2",{id:"fazendo-m\xfasica-com-o-buzzer"},(0,r.kt)("strong",{parentName:"h2"},"Fazendo m\xfasica com o Buzzer")),(0,r.kt)("p",null,"Nesse exemplo vamos atrav\xe9s de uma ",(0,r.kt)("em",{parentName:"p"},"lookup table")," vamos ensinar quais as frequ\xeancias de cada nota, e com o uso do timer vamos variar a entrada no buzzer na frequ\xeancia da nota que queremos. Com a ajuda de outra tabela, vamos dar para o Franzininho a sequ\xeancia das notas que queremos que ele toque, podendo assim, tocar a m\xfasica que quisermos."),(0,r.kt)("p",null,"O buzzer passivo funciona como um pequeno alto falante, enquanto tivermos a tens\xe3o nominal na entrada positiva e o terra na entrada negativa o im\xe3 dentro dele vai para frente. Por outro lado, quando tivermos terra em ambas ele volta para a posi\xe7\xe3o inicial. Se variarmos entre esses dois estados na frequ\xeancia de uma nota musical geraremos uma onda sonora com o tom dela."),(0,r.kt)("p",null,"As notas musicais ocidentais em uma escala maior s\xe3o ",(0,r.kt)("em",{parentName:"p"},"Do Do# Re Re# Mi Fa Fa# Sol Sol# L\xe1 L\xe1# Si")," voltando para ",(0,r.kt)("em",{parentName:"p"},"Do")," depois. Cada nota est\xe1 a uma dist\xe2ncia de meio tom da outra e a 6 tons de sua pr\xf3xima oitava, que \xe9 a mesma nota por\xe9m mais fina."),(0,r.kt)("p",null,"Olhando pela frequ\xeancia temos que partindo de ",(0,r.kt)("em",{parentName:"p"},"L\xe1")," da terceira oitava, 440Hz, cada ",(0,r.kt)("em",{parentName:"p"},"L\xe1")," uma oitava acima tem o dobro da frequ\xeancia e cada oitava a baixo tem metade da frequ\xeancia. J\xe1 para subir cada semitom, basta multiplicar por 2^(1/12), ou para x semitons, 2^(x/12)."),(0,r.kt)("h3",{id:"c\xf3digo"},(0,r.kt)("strong",{parentName:"h3"},"C\xf3digo")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-c"},'/***********************************************\n * @file main.c\n * @author Eduardo Due\xf1as / Daniel Quadros\n * @brief Exemplo tocar musicas usando buzzer\n * @version 1.0\n * @date 21/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 15/05/2021\n **********************************************/\n#include \n#include \n\n#define F_CPU 16500000L\n\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\n\n#define NumNotas 32\n#define CONT(freq) ((F_CPU*10L)/(256L*freq))\n\nenum notas {Pausa, Do, DoS, Re, ReS, Mi, Fa, FaS, Sol, SolS, La, LaS, Si, DoM, DoSM, ReM};\nlong f[16] = {\n 255L, (long)CONT(5232L), (long)CONT(5543L), (long)CONT(5873L), (long)CONT(6222L), (long)CONT(6592L), (long)CONT(6984L),\n (long)CONT(7400L), (long)CONT(7840L), (long)CONT(8306L), (long)CONT(8800L), (long)CONT(9323L), (long)CONT(9877L),\n (long)CONT(10465L), (long)CONT(11087L), (long)CONT(11746L)\n};\n\n// {0xFF,123, 116, 110, 104, 98, 92, 87, 82, 78, 73, 69, 65, 62, 58, 54}\n// Lookup table com os valores de cada nota a ser colocado na flag do timer\n\nchar Partitura[NumNotas] = {\n Re, Mi, Mi, Re, Sol, FaS, FaS, FaS, Re, Mi, Mi, Re, La, Sol, Sol, Sol,\n Re, ReM, ReM, Si, Sol, FaS, FaS, Mi, DoM, Si, Si, Sol, La, Sol, Sol, Sol\n}; // Partitura da m\xfasica\nvolatile char cont = 0; // Local da partitura\nvolatile long aux = 0;\n\n// Tratamento de interrup\xe7\xe3o\nISR (TIM0_COMPB_vect) { // Vetor de compara\xe7\xe3o B\n if (aux <= 0xff) { // Se aux menor que 8bits\n OCR0B = (TCNT0 + aux) & (0xff); // Mandar aux para o contador\n aux = f[Partitura[cont]]; // Reinicia o aux\n toogleBit(PORTB, PB1); // Inverter o buzzer\n }\n else { // Se n\xe3o\n OCR0B = TCNT0; // Mandar o tempoatual para o contador, o mesmo que esperar um overflow\n aux -= 0xff; // Subitrair 8bits do aux\n }\n}\n\n// Fun\xe7\xe3o main\nint main() {\n enum notas nota;\n setBit(DDRB, PB1); // Configura o PortB1 como sa\xedda, pino do buzzer\n\n // Configura\xe7\xe3o do timer\n TCCR0A = 0x00; // Configura pino de comparara\xe7\xe3o desconectado\n TCCR0B = 0x04; // Configura o prescaler como 256\n setBit(TIMSK, OCIE0B); // Habilita a interrup\xe7\xe3o por compara\xe7\xe3o de COMPB\n sei(); // Habilita interrup\xe7\xf5es globais\n aux = f[Partitura[cont]]; // Inicia o contador de COMPB\n\n if (aux <= 0xff) {\n OCR0B = (TCNT0 + aux) & (0xff);\n aux = f[Partitura[cont]];\n toogleBit(PORTB, PB1);\n }\n else {\n OCR0B = TCNT0;\n aux -= 0xff;\n }\n\n // Loop infinito\n for (;;) {\n long i;\n for (i = 0; i < 1000000L; i++) {\n asm ("nop");\n cont++; // Avan\xe7a na partitura\n if (cont >= NumNotas)cont = 0; // Toca de novo\n }\n}\n')),(0,r.kt)("h3",{id:"montagem"},(0,r.kt)("strong",{parentName:"h3"},"Montagem")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"circuito buzzer",src:o(2247).Z,width:"2535",height:"636"})),(0,r.kt)("p",null,"Dependendo do buzzer \xe9 necess\xe1rio conectar os jumpers diretamente nos pinos do buzzer ao inv\xe9s de coloc\xe1-lo na protoboard."),(0,r.kt)("h3",{id:"compila\xe7\xe3o-e-upload"},(0,r.kt)("strong",{parentName:"h3"},"Compila\xe7\xe3o e upload")),(0,r.kt)("p",null,"Para compilar o programa, acesse a pasta do exemplo e d\xea o comando ",(0,r.kt)("inlineCode",{parentName:"p"},"make"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"exemplos-avr-libc/exemplos/buzzer$ make\n")),(0,r.kt)("p",null,"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n")),(0,r.kt)("p",null,"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."),(0,r.kt)("h3",{id:"resultado"},(0,r.kt)("strong",{parentName:"h3"},"Resultado")),(0,r.kt)("p",null,"O buzzer deve tocar Parab\xe9ns para voc\xea e deve continuar em loop at\xe9 a placa ser desligada."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://wokwi.com/arduino/projects/302834828095521293"},"Simule esse exemplo no WokWi")),(0,r.kt)("h2",{id:"conclus\xe3o"},(0,r.kt)("strong",{parentName:"h2"},"Conclus\xe3o")),(0,r.kt)("p",null,"O buzzer passivo \xe9 um componente muito vers\xe1til com o qual podemos, n\xe3o s\xf3, tocar m\xfasicas como tamb\xe9m gerar diversos tipos de efeitos sonoros, tudo que precisamos \xe9 entender como gerar o som que queremos. Al\xe9m disso vimos como podemos usar interrup\xe7\xf5es de timer para fun\xe7\xf5es que precisam de Real Time, ou seja, que precisam de precis\xe3o de tempo."),(0,r.kt)("h2",{id:"gloss\xe1rio"},"Gloss\xe1rio"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Setar: colocar um novo valor em um registrador. Para um bit \xe9 convencionado setar, mud\xe1-lo para valor 1, e clear (limpar), mud\xe1-lo para valor 0"),(0,r.kt)("li",{parentName:"ul"},"Resetar: reiniciar"),(0,r.kt)("li",{parentName:"ul"},"Timer: circuito eletr\xf4nico dedicado a contagem de tempo"),(0,r.kt)("li",{parentName:"ul"},"Lookup table: tabela de consulta, no contexto de programa\xe7\xe3o \xe9 um vetor com informa\xe7\xf5es necess\xe1rias para o programa.")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Autor"),(0,r.kt)("th",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"th",href:"https://github.com/EduardoDuenas"},"Eduardo Due\xf1as")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data:"),(0,r.kt)("td",{parentName:"tr",align:null},"05/06/2020")))))}p.isMDXComponent=!0},2247:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/Exemplo_Buzzer_Circuito-a4e81be25a4bb91d65d45043dffc52ac.png"}}]); \ No newline at end of file diff --git a/assets/js/814f3328.055bf5fd.js b/assets/js/814f3328.055bf5fd.js new file mode 100755 index 000000000..28604f596 --- /dev/null +++ b/assets/js/814f3328.055bf5fd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5512],{4352:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Welcome","permalink":"/blog/welcome","unlisted":false},{"title":"Hello","permalink":"/blog/hello-world","unlisted":false},{"title":"Hola","permalink":"/blog/hola","unlisted":false}]}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.c97ab362.js b/assets/js/814f3328.c97ab362.js deleted file mode 100755 index e95584336..000000000 --- a/assets/js/814f3328.c97ab362.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2535],{5641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Welcome","permalink":"/blog/welcome"},{"title":"Hello","permalink":"/blog/hello-world"},{"title":"Hola","permalink":"/blog/hola"}]}')}}]); \ No newline at end of file diff --git a/assets/js/8b8a5829.3ea90757.js b/assets/js/8b8a5829.3ea90757.js new file mode 100755 index 000000000..950f01f1e --- /dev/null +++ b/assets/js/8b8a5829.3ea90757.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6116],{82076:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>m,frontMatter:()=>t,metadata:()=>s,toc:()=>l});var r=i(17624),o=i(95788);const t={id:"theremim",title:"Theremim",slug:"/franzininho-diy/theremim",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},a=void 0,s={id:"FranzininhoDIY/exemplos-arduino/theremim",title:"Theremim",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/theremim.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/theremim",permalink:"/docs/franzininho-diy/theremim",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/theremim.md",tags:[],version:"current",frontMatter:{id:"theremim",title:"Theremim",slug:"/franzininho-diy/theremim",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},sidebar:"docs",previous:{title:"Sem\xe1foro",permalink:"/docs/franzininho-diy/semaforo"},next:{title:"Girassol Automatizado",permalink:"/docs/franzininho-diy/girassol-automatizado"}},c={},l=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function d(e){const n={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"O Theremim \xe9 um instrumento musical eletr\xf4nico controlado sem contato f\xedsico. O nome vem do seu inventor, L\xe9on Theremin, que patenteou o dispositivo em 1928."}),"\n",(0,r.jsx)(n.p,{children:"Nesse tutorial voc\xea far\xe1 uma vers\xe3o simplificada do Theremim usando a Franzininho DIY."}),"\n",(0,r.jsx)(n.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Franzininho DIY"}),"\n",(0,r.jsx)(n.li,{children:"2 LDR 10K"}),"\n",(0,r.jsx)(n.li,{children:"BC548"}),"\n",(0,r.jsx)(n.li,{children:"Resistor 330 R"}),"\n",(0,r.jsx)(n.li,{children:"Alto falante 8 ohm"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Circuito Theremim",src:i(43204).c+"",width:"552",height:"330"})}),"\n",(0,r.jsx)(n.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,r.jsx)(n.p,{children:"O c\xf3digo a seguir ler o valor da entrada anal\xf3gica e atua na sa\xedda do speaker:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-cpp",children:"/*\n * Theremim Franzininho\n * Autor: F\xe1bio Souza\n * Data: 10/09/2018\n */\nint speaker = 0; // pino de sa\xedda do falante\nint sensor = 1;\n\nvoid setup()\n{\n pinMode(speaker, OUTPUT);\n}\n\n// Theremin\nvoid loop()\n{\n digitalWrite(speaker, HIGH);\n delayMicroseconds(analogRead(sensor)<<2);\n digitalWrite(speaker, LOW);\n delayMicroseconds(analogRead(sensor)<<2);\n}\n"})}),"\n",(0,r.jsx)(n.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,r.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311445334890906178?view=diagram"}),"\n",(0,r.jsx)(n.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,r.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/l1MmqiYB4GI",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function m(e={}){const{wrapper:n}={...(0,o.MN)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},95788:(e,n,i)=>{i.d(n,{MN:()=>l});var r=i(11504);function o(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function t(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,r)}return i}function a(e){for(var n=1;n=0||(o[i]=e[i]);return o}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(o[i]=e[i])}return o}var c=r.createContext({}),l=function(e){var n=r.useContext(c),i=n;return e&&(i="function"==typeof e?e(n):a(a({},n),e)),i},d={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var i=e.components,o=e.mdxType,t=e.originalType,c=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=l(i),p=o,h=u["".concat(c,".").concat(p)]||u[p]||d[p]||t;return i?r.createElement(h,a(a({ref:n},m),{},{components:i})):r.createElement(h,a({ref:n},m))}));m.displayName="MDXCreateElement"},43204:(e,n,i)=>{i.d(n,{c:()=>r});const r=i.p+"assets/images/theremin-5678c5409f34287c92b305f1a9f92c42.png"}}]); \ No newline at end of file diff --git a/assets/js/8b8a5829.4099713a.js b/assets/js/8b8a5829.4099713a.js deleted file mode 100755 index c990dded1..000000000 --- a/assets/js/8b8a5829.4099713a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[604],{3905:(e,n,r)=>{r.d(n,{Zo:()=>c,kt:()=>f});var i=r(7294);function t(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function o(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,i)}return r}function a(e){for(var n=1;n=0||(t[r]=e[r]);return t}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(t[r]=e[r])}return t}var s=i.createContext({}),m=function(e){var n=i.useContext(s),r=n;return e&&(r="function"==typeof e?e(n):a(a({},n),e)),r},c=function(e){var n=m(e.components);return i.createElement(s.Provider,{value:n},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},p=i.forwardRef((function(e,n){var r=e.components,t=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=m(r),p=t,f=u["".concat(s,".").concat(p)]||u[p]||d[p]||o;return r?i.createElement(f,a(a({ref:n},c),{},{components:r})):i.createElement(f,a({ref:n},c))}));function f(e,n){var r=arguments,t=n&&n.mdxType;if("string"==typeof e||t){var o=r.length,a=new Array(o);a[0]=p;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[u]="string"==typeof e?e:t,a[1]=l;for(var m=2;m{r.r(n),r.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>m});var i=r(3117),t=(r(7294),r(3905));const o={id:"theremim",title:"Theremim",slug:"/franzininho-diy/theremim",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},a=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/theremim",id:"FranzininhoDIY/exemplos-arduino/theremim",title:"Theremim",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/theremim.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/theremim",permalink:"/docs/franzininho-diy/theremim",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/theremim.md",tags:[],version:"current",frontMatter:{id:"theremim",title:"Theremim",slug:"/franzininho-diy/theremim",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},sidebar:"docs",previous:{title:"Sem\xe1foro",permalink:"/docs/franzininho-diy/semaforo"},next:{title:"Girassol Automatizado",permalink:"/docs/franzininho-diy/girassol-automatizado"}},s={},m=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],c={toc:m},u="wrapper";function d(e){let{components:n,...o}=e;return(0,t.kt)(u,(0,i.Z)({},c,o,{components:n,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"O Theremim \xe9 um instrumento musical eletr\xf4nico controlado sem contato f\xedsico. O nome vem do seu inventor, L\xe9on Theremin, que patenteou o dispositivo em 1928."),(0,t.kt)("p",null,"Nesse tutorial voc\xea far\xe1 uma vers\xe3o simplificada do Theremim usando a Franzininho DIY."),(0,t.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Franzininho DIY"),(0,t.kt)("li",{parentName:"ul"},"2 LDR 10K "),(0,t.kt)("li",{parentName:"ul"},"BC548"),(0,t.kt)("li",{parentName:"ul"},"Resistor 330 R"),(0,t.kt)("li",{parentName:"ul"},"Alto falante 8 ohm")),(0,t.kt)("h2",{id:"circuito"},"Circuito"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Circuito Theremim",src:r(5193).Z,width:"552",height:"330"})),(0,t.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,t.kt)("p",null,"O c\xf3digo a seguir ler o valor da entrada anal\xf3gica e atua na sa\xedda do speaker:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-cpp"},"/*\n * Theremim Franzininho\n * Autor: F\xe1bio Souza\n * Data: 10/09/2018\n */\nint speaker = 0; // pino de sa\xedda do falante\nint sensor = 1;\n\nvoid setup()\n{\n pinMode(speaker, OUTPUT);\n}\n\n// Theremin\nvoid loop()\n{\n digitalWrite(speaker, HIGH);\n delayMicroseconds(analogRead(sensor)<<2);\n digitalWrite(speaker, LOW);\n delayMicroseconds(analogRead(sensor)<<2);\n}\n")),(0,t.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,t.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311445334890906178?view=diagram"}),(0,t.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,t.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/l1MmqiYB4GI",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}d.isMDXComponent=!0},5193:(e,n,r)=>{r.d(n,{Z:()=>i});const i=r.p+"assets/images/theremin-5678c5409f34287c92b305f1a9f92c42.png"}}]); \ No newline at end of file diff --git a/assets/js/8e9f0a8a.a78a4d90.js b/assets/js/8e9f0a8a.a78a4d90.js new file mode 100755 index 000000000..c58deee3e --- /dev/null +++ b/assets/js/8e9f0a8a.a78a4d90.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3496],{75224:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>u,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var o=r(17624),n=r(95788);const a={slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},u=void 0,i={permalink:"/blog/hola",source:"@site/blog/2019-05-28-hola.md",title:"Hola",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet",date:"2019-05-28T00:00:00.000Z",tags:[{label:"hola",permalink:"/blog/tags/hola"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!1,authors:[{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",imageURL:"https://avatars1.githubusercontent.com/u/2055384?v=4"}],frontMatter:{slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},unlisted:!1,prevItem:{title:"Hello",permalink:"/blog/hello-world"}},s={authorsImageUrls:[void 0]},l=[];function c(e){const t={p:"p",...(0,n.MN)(),...e.components};return(0,o.jsx)(t.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"})}function m(e={}){const{wrapper:t}={...(0,n.MN)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},95788:(e,t,r)=>{r.d(t,{MN:()=>l});var o=r(11504);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function u(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=o.createContext({}),l=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):u(u({},t),e)),r},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),p=l(r),h=n,g=p["".concat(s,".").concat(h)]||p[h]||c[h]||a;return r?o.createElement(g,u(u({ref:t},m),{},{components:r})):o.createElement(g,u({ref:t},m))}));m.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/8e9f0a8a.e9626fc6.js b/assets/js/8e9f0a8a.e9626fc6.js deleted file mode 100755 index 0a3adb2e2..000000000 --- a/assets/js/8e9f0a8a.e9626fc6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4035],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function u(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),s=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):u(u({},t),e)),r},c=function(e){var t=s(e.components);return o.createElement(l.Provider,{value:t},e.children)},m="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},g=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=s(r),g=n,h=m["".concat(l,".").concat(g)]||m[g]||p[g]||a;return r?o.createElement(h,u(u({ref:t},c),{},{components:r})):o.createElement(h,u({ref:t},c))}));function h(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,u=new Array(a);u[0]=g;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[m]="string"==typeof e?e:n,u[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var o=r(3117),n=(r(7294),r(3905));const a={slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},u=void 0,i={permalink:"/blog/hola",source:"@site/blog/2019-05-28-hola.md",title:"Hola",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet",date:"2019-05-28T00:00:00.000Z",formattedDate:"28 de maio de 2019",tags:[{label:"hola",permalink:"/blog/tags/hola"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!1,authors:[{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",imageURL:"https://avatars1.githubusercontent.com/u/2055384?v=4"}],frontMatter:{slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},prevItem:{title:"Hello",permalink:"/blog/hello-world"}},l={authorsImageUrls:[void 0]},s=[],c={toc:s},m="wrapper";function p(e){let{components:t,...r}=e;return(0,n.kt)(m,(0,o.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8f70110c.19567802.js b/assets/js/8f70110c.19567802.js deleted file mode 100755 index 0480064ac..000000000 --- a/assets/js/8f70110c.19567802.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6553],{3905:(a,e,n)=>{n.d(e,{Zo:()=>m,kt:()=>g});var o=n(7294);function i(a,e,n){return e in a?Object.defineProperty(a,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):a[e]=n,a}function t(a,e){var n=Object.keys(a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(a);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable}))),n.push.apply(n,o)}return n}function r(a){for(var e=1;e=0||(i[n]=a[n]);return i}(a,e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(a);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(a,n)&&(i[n]=a[n])}return i}var s=o.createContext({}),p=function(a){var e=o.useContext(s),n=e;return a&&(n="function"==typeof a?a(e):r(r({},e),a)),n},m=function(a){var e=p(a.components);return o.createElement(s.Provider,{value:e},a.children)},c="mdxType",d={inlineCode:"code",wrapper:function(a){var e=a.children;return o.createElement(o.Fragment,{},e)}},u=o.forwardRef((function(a,e){var n=a.components,i=a.mdxType,t=a.originalType,s=a.parentName,m=l(a,["components","mdxType","originalType","parentName"]),c=p(n),u=i,g=c["".concat(s,".").concat(u)]||c[u]||d[u]||t;return n?o.createElement(g,r(r({ref:e},m),{},{components:n})):o.createElement(g,r({ref:e},m))}));function g(a,e){var n=arguments,i=e&&e.mdxType;if("string"==typeof a||i){var t=n.length,r=new Array(t);r[0]=u;var l={};for(var s in e)hasOwnProperty.call(e,s)&&(l[s]=e[s]);l.originalType=a,l[c]="string"==typeof a?a:i,r[1]=l;for(var p=2;p{n.r(e),n.d(e,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>t,metadata:()=>l,toc:()=>p});var o=n(3117),i=(n(7294),n(3905));const t={id:"circuitpython-entradas-analogicas",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",description:"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi",author:"Diana Santos e F\xe1bio Souza"},r=void 0,l={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas",title:"Entrada Anal\xf3gica",description:"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-analogica.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/entrada-analogica.md",tags:[],version:"current",frontMatter:{id:"circuitpython-entradas-analogicas",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",description:"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi",author:"Diana Santos e F\xe1bio Souza"},sidebar:"docs",previous:{title:"Entradas e Sa\xeddas Digitais",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais"},next:{title:"PWM - Pulse Width Modulation",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/pwm"}},s={},p=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo (Exemplos 1 e 2)",id:"an\xe1lise-do-c\xf3digo-exemplos-1-e-2",level:3},{value:"An\xe1lise do c\xf3digo (Exemplo 3)",id:"an\xe1lise-do-c\xf3digo-exemplo-3",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],m={toc:p},c="wrapper";function d(a){let{components:e,...t}=a;return(0,i.kt)(c,(0,o.Z)({},m,t,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Neste exemplo aprenderemos como usar as entradas anal\xf3gicas. Veremos qual m\xf3dulo precisamos usar e como fazer a leitura do valor anal\xf3gico usando um potenci\xf4metro. Ao final faremos um exemplo para ligar e desligar um LED a partir do valor lido na entrada anal\xf3gica. Assim, ao final dessa etapa voc\xea estar\xe1 apto para ler sensores anal\xf3gicos."),(0,i.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"1 Placa Franzininho WiFi com CircuitPython;"),(0,i.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,i.kt)("li",{parentName:"ul"},"1 potenci\xf4metro de 10K;"),(0,i.kt)("li",{parentName:"ul"},"1 LED vermelho de 3 mm;"),(0,i.kt)("li",{parentName:"ul"},"1 Resistor 330 \u03a9;"),(0,i.kt)("li",{parentName:"ul"},"Jumpers.")),(0,i.kt)("h2",{id:"circuito"},"Circuito"),(0,i.kt)("p",null,"Para os primeiros exemplos, fa\xe7a a seguinte montagem:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Circuito",src:n(3672).Z,width:"984",height:"1164"})),(0,i.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,i.kt)("p",null,"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 no diret\xf3rio CIRCUITPY:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"#Leitura de Entrada anal\xf3gica - Exemplo 2\nimport time #importa m\xf3dulo de temporiza\xe7\xe3o\nimport board #importa m\xf3dulo da placa\nfrom analogio import AnalogIn #immport m\xf3dulo de entrada anal\xf3gica\n\nanalog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n\nwhile True: #loop infinito\n print((analog_in.value,)) #imprime o valor da leitura anal\xf3gica\n time.sleep(0.2) #aguarda 200 ms\n")),(0,i.kt)("p",null,"Salve o arquivo e teste o funcionamento girando o potenci\xf4metro e no Mu Editor visualize os dados no terminal serial e no gr\xe1fico:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Teste 1",src:n(591).Z,width:"1861",height:"998"})),(0,i.kt)("p",null,"Note que os valores de convers\xe3o AD s\xe3o exibidos no terminal e no gr\xe1fico."),(0,i.kt)("p",null,"Agora faremos um exemplo para converter esses valores em tens\xe3o."),(0,i.kt)("p",null,"Digite o seguinte c\xf3digo:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"#Leitura de Entrada anal\xf3gica - Exemplo 2\nimport time #importa m\xf3dulo de temporiza\xe7\xe3o\nimport board #importa m\xf3dulo da placa\nfrom analogio import AnalogIn #import m\xf3dulo de entrada anal\xf3gica\n\nanalog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n\ndef ler_tensao(pin):\n return (pin.value * 3.3) / 65536\n\nwhile True: #loop infinito\n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica\n time.sleep(0.2) #aguarda 200 ms\n")),(0,i.kt)("p",null,"Salve o arquivo e teste o funcionamento girando o potenci\xf4metro e no Mu Editor visualize os dados no terminal serial e no gr\xe1fico:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Teste 2",src:n(5402).Z,width:"1861",height:"998"})),(0,i.kt)("p",null,"Note que exibimos agora o valor de tens\xe3o."),(0,i.kt)("h3",{id:"an\xe1lise-do-c\xf3digo-exemplos-1-e-2"},"An\xe1lise do c\xf3digo (Exemplos 1 e 2)"),(0,i.kt)("p",null,"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,i.kt)("p",null,"Como precisaremos de intervalos de temporiza\xe7\xe3o importamos o m\xf3dulo time:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"import time\n")),(0,i.kt)("p",null,"Trabalharemos como entradas anal\xf3gicas nesse exemplo, assim, precisamos importar o seguinte m\xf3dulo em analogio:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"from analogio import AnalogIn #import m\xf3dulo de entrada anal\xf3gica\n")),(0,i.kt)("p",null,"A Franzininho Wifi possui diversas entradas anal\xf3gicas. Para esse exemplo usamos a entrada anal\xf3gica no pino IO1"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"analog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n")),(0,i.kt)("p",null,"No loop infinito fazemos a leitura da convers\xe3o AD lendo o valor presente no pino em intervalos de 200 ms. No primeiro exemplos fizemos apenas a impress\xe3o do valor convertido:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"while True: #loop infinito \n print((analog_in.value,)) #imprime o valor da leitura anal\xf3gica \n time.sleep(0.2) #aguarda 200 ms\n")),(0,i.kt)("p",null,"J\xe1 no segundo exemplo fizemos uma fun\xe7\xe3o que converte o valor lido no pino em tens\xe3o:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"def ler_tensao(pin): \n return (pin.value * 3.3) / 65536 \n \nwhile True: #loop infinito \n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica \n time.sleep(0.2) #aguarda 200 ms\n")),(0,i.kt)("p",null,"Agora faremos uma aplica\xe7\xe3o para ligar e desligar um LED dependo do valor lido no potenci\xf4metro."),(0,i.kt)("p",null,"Digite o seguinte c\xf3digo:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"#Leitura de Entrada anal\xf3gica - Exemplo 3\nimport time #importa m\xf3dulo de temporiza\xe7\xe3o\nimport board #importa m\xf3dulo da placa\nfrom analogio import AnalogIn #immport m\xf3dulo de entrada anal\xf3gica\nfrom digitalio import DigitalInOut, Direction\n\nanalog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n\nled = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n\ndef ler_tensao(pin):\n return (pin.value * 3.3) / 65536\n\nwhile True: #loop infinito\n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica\n \n if(ler_tensao(analog_in)>2.5): #se valor lido for maior que 2.5V\n led.value = 1 #liga LED\n else: #se n\xe3o\n led.value =0 #desliga o LED\n \n time.sleep(0.2) #aguarda 200 ms\n")),(0,i.kt)("p",null,"Salve o arquivo e teste o funcionamento girando o potenci\xf4metro. Verifique se o LED acender\xe1 quando ultrapassar o valor de 2,5V (exibido no terminal). Quando abaixo de 2,5V o LED deve apagar."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Teste 3",src:n(3924).Z,width:"1861",height:"998"})),(0,i.kt)("h3",{id:"an\xe1lise-do-c\xf3digo-exemplo-3"},"An\xe1lise do c\xf3digo (Exemplo 3)"),(0,i.kt)("p",null,"Nesse exemplo adicionamos uma sa\xedda digital para controlar um LED."),(0,i.kt)("admonition",{title:"Dica",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Se voc\xea ainda n\xe3o sabe trabalhar com entradas anal\xf3gicas. Consulte o exemplo ",(0,i.kt)("a",{parentName:"p",href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais"},"Entradas e Sa\xeddas Digitais"),".")),(0,i.kt)("p",null,"No loop principal fizemos um teste para verificar o valor de tens\xe3o da entrada anal\xf3gico, caso acima de 2,5V liga o LED e abaixo de 2,5 V desliga o LED."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"while True: #loop infinito \n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica \n \n if(ler_tensao(analog_in)>2.5): #se valor lido for maior que 2.5V \n led.value = 1 #liga LED \n else: #se n\xe3o \n led.value =0 #desliga o LED \n \n time.sleep(0.2) #aguarda 200 ms\n")),(0,i.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,i.kt)("p",null,"Neste exemplo, aprendemos como fazer a leitura de uma entrada anal\xf3gica. Para voc\xea ler outras entradas pode seguir o mesmo padr\xe3o. Por\xe9m, \xe9 importante verificar se o pino possui essa funcionalidade."),(0,i.kt)("p",null,"Com esse recurso poderemos ler diversos sensores anal\xf3gicos como de temperatura, aceler\xf4metro, som, etc."),(0,i.kt)("admonition",{title:"Desafio",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Fa\xe7a a leitura de outro potenci\xf4metro usando outra entrada anal\xf3gica. Exiba no gr\xe1fico o valor dos 2 potenci\xf4metros em simult\xe2neo.")),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Autor"),(0,i.kt)("th",{parentName:"tr",align:null},"Diana Santos"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Autor"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("a",{parentName:"td",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Data:"),(0,i.kt)("td",{parentName:"tr",align:null},"16/09/2021")))))}d.isMDXComponent=!0},3672:(a,e,n)=>{n.d(e,{Z:()=>o});const o=n.p+"assets/images/circuito-337482518ca8b8ea5e0631611abb8e67.png"},591:(a,e,n)=>{n.d(e,{Z:()=>o});const o=n.p+"assets/images/grafico_entrada_analogica-1-76717640082c66f149c344256345a47c.gif"},5402:(a,e,n)=>{n.d(e,{Z:()=>o});const o=n.p+"assets/images/grafico_entrada_analogica-2-6e0e667074f33acf85d9a4775bad2013.gif"},3924:(a,e,n)=>{n.d(e,{Z:()=>o});const o=n.p+"assets/images/grafico_entrada_analogica-3-a3dd8b9ac8f4c314d4ba9db8516dba43.gif"}}]); \ No newline at end of file diff --git a/assets/js/8f70110c.9828e65d.js b/assets/js/8f70110c.9828e65d.js new file mode 100755 index 000000000..87679d363 --- /dev/null +++ b/assets/js/8f70110c.9828e65d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2496],{99920:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>l,contentTitle:()=>t,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var i=n(17624),o=n(95788);const r={id:"circuitpython-entradas-analogicas",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",description:"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi",author:"Diana Santos e F\xe1bio Souza"},t=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas",title:"Entrada Anal\xf3gica",description:"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-analogica.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/entrada-analogica.md",tags:[],version:"current",frontMatter:{id:"circuitpython-entradas-analogicas",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",description:"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi",author:"Diana Santos e F\xe1bio Souza"},sidebar:"docs",previous:{title:"Entradas e Sa\xeddas Digitais",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais"},next:{title:"PWM - Pulse Width Modulation",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/pwm"}},l={},c=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo (Exemplos 1 e 2)",id:"an\xe1lise-do-c\xf3digo-exemplos-1-e-2",level:3},{value:"An\xe1lise do c\xf3digo (Exemplo 3)",id:"an\xe1lise-do-c\xf3digo-exemplo-3",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function d(e){const a={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.p,{children:"Neste exemplo aprenderemos como usar as entradas anal\xf3gicas. Veremos qual m\xf3dulo precisamos usar e como fazer a leitura do valor anal\xf3gico usando um potenci\xf4metro. Ao final faremos um exemplo para ligar e desligar um LED a partir do valor lido na entrada anal\xf3gica. Assim, ao final dessa etapa voc\xea estar\xe1 apto para ler sensores anal\xf3gicos."}),"\n",(0,i.jsx)(a.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,i.jsxs)(a.ul,{children:["\n",(0,i.jsx)(a.li,{children:"1 Placa Franzininho WiFi com CircuitPython;"}),"\n",(0,i.jsx)(a.li,{children:"1 Protoboard;"}),"\n",(0,i.jsx)(a.li,{children:"1 potenci\xf4metro de 10K;"}),"\n",(0,i.jsx)(a.li,{children:"1 LED vermelho de 3 mm;"}),"\n",(0,i.jsx)(a.li,{children:"1 Resistor 330 \u03a9;"}),"\n",(0,i.jsx)(a.li,{children:"Jumpers."}),"\n"]}),"\n",(0,i.jsx)(a.h2,{id:"circuito",children:"Circuito"}),"\n",(0,i.jsx)(a.p,{children:"Para os primeiros exemplos, fa\xe7a a seguinte montagem:"}),"\n",(0,i.jsx)(a.p,{children:(0,i.jsx)(a.img,{alt:"Circuito",src:n(36212).c+"",width:"984",height:"1164"})}),"\n",(0,i.jsx)(a.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,i.jsx)(a.p,{children:"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 no diret\xf3rio CIRCUITPY:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"#Leitura de Entrada anal\xf3gica - Exemplo 2\nimport time #importa m\xf3dulo de temporiza\xe7\xe3o\nimport board #importa m\xf3dulo da placa\nfrom analogio import AnalogIn #immport m\xf3dulo de entrada anal\xf3gica\n\nanalog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n\nwhile True: #loop infinito\n print((analog_in.value,)) #imprime o valor da leitura anal\xf3gica\n time.sleep(0.2) #aguarda 200 ms\n"})}),"\n",(0,i.jsx)(a.p,{children:"Salve o arquivo e teste o funcionamento girando o potenci\xf4metro e no Mu Editor visualize os dados no terminal serial e no gr\xe1fico:"}),"\n",(0,i.jsx)(a.p,{children:(0,i.jsx)(a.img,{alt:"Teste 1",src:n(66112).c+"",width:"1861",height:"998"})}),"\n",(0,i.jsx)(a.p,{children:"Note que os valores de convers\xe3o AD s\xe3o exibidos no terminal e no gr\xe1fico."}),"\n",(0,i.jsx)(a.p,{children:"Agora faremos um exemplo para converter esses valores em tens\xe3o."}),"\n",(0,i.jsx)(a.p,{children:"Digite o seguinte c\xf3digo:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"#Leitura de Entrada anal\xf3gica - Exemplo 2\nimport time #importa m\xf3dulo de temporiza\xe7\xe3o\nimport board #importa m\xf3dulo da placa\nfrom analogio import AnalogIn #import m\xf3dulo de entrada anal\xf3gica\n\nanalog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n\ndef ler_tensao(pin):\n return (pin.value * 3.3) / 65536\n\nwhile True: #loop infinito\n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica\n time.sleep(0.2) #aguarda 200 ms\n"})}),"\n",(0,i.jsx)(a.p,{children:"Salve o arquivo e teste o funcionamento girando o potenci\xf4metro e no Mu Editor visualize os dados no terminal serial e no gr\xe1fico:"}),"\n",(0,i.jsx)(a.p,{children:(0,i.jsx)(a.img,{alt:"Teste 2",src:n(17650).c+"",width:"1861",height:"998"})}),"\n",(0,i.jsx)(a.p,{children:"Note que exibimos agora o valor de tens\xe3o."}),"\n",(0,i.jsx)(a.h3,{id:"an\xe1lise-do-c\xf3digo-exemplos-1-e-2",children:"An\xe1lise do c\xf3digo (Exemplos 1 e 2)"}),"\n",(0,i.jsx)(a.p,{children:"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"import board\n"})}),"\n",(0,i.jsx)(a.p,{children:"Como precisaremos de intervalos de temporiza\xe7\xe3o importamos o m\xf3dulo time:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"import time\n"})}),"\n",(0,i.jsx)(a.p,{children:"Trabalharemos como entradas anal\xf3gicas nesse exemplo, assim, precisamos importar o seguinte m\xf3dulo em analogio:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"from analogio import AnalogIn #import m\xf3dulo de entrada anal\xf3gica\n"})}),"\n",(0,i.jsx)(a.p,{children:"A Franzininho Wifi possui diversas entradas anal\xf3gicas. Para esse exemplo usamos a entrada anal\xf3gica no pino IO1"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"analog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n"})}),"\n",(0,i.jsx)(a.p,{children:"No loop infinito fazemos a leitura da convers\xe3o AD lendo o valor presente no pino em intervalos de 200 ms. No primeiro exemplos fizemos apenas a impress\xe3o do valor convertido:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"while True: #loop infinito \n print((analog_in.value,)) #imprime o valor da leitura anal\xf3gica \n time.sleep(0.2) #aguarda 200 ms\n"})}),"\n",(0,i.jsx)(a.p,{children:"J\xe1 no segundo exemplo fizemos uma fun\xe7\xe3o que converte o valor lido no pino em tens\xe3o:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"def ler_tensao(pin): \n return (pin.value * 3.3) / 65536 \n \nwhile True: #loop infinito \n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica \n time.sleep(0.2) #aguarda 200 ms\n"})}),"\n",(0,i.jsx)(a.p,{children:"Agora faremos uma aplica\xe7\xe3o para ligar e desligar um LED dependo do valor lido no potenci\xf4metro."}),"\n",(0,i.jsx)(a.p,{children:"Digite o seguinte c\xf3digo:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"#Leitura de Entrada anal\xf3gica - Exemplo 3\nimport time #importa m\xf3dulo de temporiza\xe7\xe3o\nimport board #importa m\xf3dulo da placa\nfrom analogio import AnalogIn #immport m\xf3dulo de entrada anal\xf3gica\nfrom digitalio import DigitalInOut, Direction\n\nanalog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n\nled = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n\ndef ler_tensao(pin):\n return (pin.value * 3.3) / 65536\n\nwhile True: #loop infinito\n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica\n \n if(ler_tensao(analog_in)>2.5): #se valor lido for maior que 2.5V\n led.value = 1 #liga LED\n else: #se n\xe3o\n led.value =0 #desliga o LED\n \n time.sleep(0.2) #aguarda 200 ms\n"})}),"\n",(0,i.jsx)(a.p,{children:"Salve o arquivo e teste o funcionamento girando o potenci\xf4metro. Verifique se o LED acender\xe1 quando ultrapassar o valor de 2,5V (exibido no terminal). Quando abaixo de 2,5V o LED deve apagar."}),"\n",(0,i.jsx)(a.p,{children:(0,i.jsx)(a.img,{alt:"Teste 3",src:n(81032).c+"",width:"1861",height:"998"})}),"\n",(0,i.jsx)(a.h3,{id:"an\xe1lise-do-c\xf3digo-exemplo-3",children:"An\xe1lise do c\xf3digo (Exemplo 3)"}),"\n",(0,i.jsx)(a.p,{children:"Nesse exemplo adicionamos uma sa\xedda digital para controlar um LED."}),"\n",(0,i.jsx)(a.admonition,{title:"Dica",type:"tip",children:(0,i.jsxs)(a.p,{children:["Se voc\xea ainda n\xe3o sabe trabalhar com entradas anal\xf3gicas. Consulte o exemplo ",(0,i.jsx)(a.a,{href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",children:"Entradas e Sa\xeddas Digitais"}),"."]})}),"\n",(0,i.jsx)(a.p,{children:"No loop principal fizemos um teste para verificar o valor de tens\xe3o da entrada anal\xf3gico, caso acima de 2,5V liga o LED e abaixo de 2,5 V desliga o LED."}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"while True: #loop infinito \n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica \n \n if(ler_tensao(analog_in)>2.5): #se valor lido for maior que 2.5V \n led.value = 1 #liga LED \n else: #se n\xe3o \n led.value =0 #desliga o LED \n \n time.sleep(0.2) #aguarda 200 ms\n"})}),"\n",(0,i.jsx)(a.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,i.jsx)(a.p,{children:"Neste exemplo, aprendemos como fazer a leitura de uma entrada anal\xf3gica. Para voc\xea ler outras entradas pode seguir o mesmo padr\xe3o. Por\xe9m, \xe9 importante verificar se o pino possui essa funcionalidade."}),"\n",(0,i.jsx)(a.p,{children:"Com esse recurso poderemos ler diversos sensores anal\xf3gicos como de temperatura, aceler\xf4metro, som, etc."}),"\n",(0,i.jsx)(a.admonition,{title:"Desafio",type:"tip",children:(0,i.jsx)(a.p,{children:"Fa\xe7a a leitura de outro potenci\xf4metro usando outra entrada anal\xf3gica. Exiba no gr\xe1fico o valor dos 2 potenci\xf4metros em simult\xe2neo."})}),"\n",(0,i.jsxs)(a.table,{children:[(0,i.jsx)(a.thead,{children:(0,i.jsxs)(a.tr,{children:[(0,i.jsx)(a.th,{children:"Autor"}),(0,i.jsx)(a.th,{children:"Diana Santos"})]})}),(0,i.jsxs)(a.tbody,{children:[(0,i.jsxs)(a.tr,{children:[(0,i.jsx)(a.td,{children:"Autor"}),(0,i.jsx)(a.td,{children:(0,i.jsx)(a.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]}),(0,i.jsxs)(a.tr,{children:[(0,i.jsx)(a.td,{children:"Data:"}),(0,i.jsx)(a.td,{children:"16/09/2021"})]})]})]})]})}function p(e={}){const{wrapper:a}={...(0,o.MN)(),...e.components};return a?(0,i.jsx)(a,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},95788:(e,a,n)=>{n.d(a,{MN:()=>c});var i=n(11504);function o(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function r(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,i)}return n}function t(e){for(var a=1;a=0||(o[n]=e[n]);return o}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=i.createContext({}),c=function(e){var a=i.useContext(l),n=a;return e&&(n="function"==typeof e?e(a):t(t({},a),e)),n},d={inlineCode:"code",wrapper:function(e){var a=e.children;return i.createElement(i.Fragment,{},a)}},p=i.forwardRef((function(e,a){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=c(n),u=o,g=m["".concat(l,".").concat(u)]||m[u]||d[u]||r;return n?i.createElement(g,t(t({ref:a},p),{},{components:n})):i.createElement(g,t({ref:a},p))}));p.displayName="MDXCreateElement"},36212:(e,a,n)=>{n.d(a,{c:()=>i});const i=n.p+"assets/images/circuito-337482518ca8b8ea5e0631611abb8e67.png"},66112:(e,a,n)=>{n.d(a,{c:()=>i});const i=n.p+"assets/images/grafico_entrada_analogica-1-76717640082c66f149c344256345a47c.gif"},17650:(e,a,n)=>{n.d(a,{c:()=>i});const i=n.p+"assets/images/grafico_entrada_analogica-2-6e0e667074f33acf85d9a4775bad2013.gif"},81032:(e,a,n)=>{n.d(a,{c:()=>i});const i=n.p+"assets/images/grafico_entrada_analogica-3-a3dd8b9ac8f4c314d4ba9db8516dba43.gif"}}]); \ No newline at end of file diff --git a/assets/js/8f8a0b80.67c3b34b.js b/assets/js/8f8a0b80.67c3b34b.js new file mode 100755 index 000000000..5c0479298 --- /dev/null +++ b/assets/js/8f8a0b80.67c3b34b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5752],{60060:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>p,frontMatter:()=>a,metadata:()=>d,toc:()=>s});var o=i(17624),r=i(95788);const a={id:"arduino-neopixel",title:"Neopixel RGB LED Onboard",slug:"/franzininho-wifi/exemplos-arduino/neopixel-onboard",description:"Exemplo de uso do led RGB onboard do Franzininho WiFi",author:"Henrique Vilela"},t=void 0,d={id:"FranzininhoWifi/exemplos-arduino/arduino-neopixel",title:"Neopixel RGB LED Onboard",description:"Exemplo de uso do led RGB onboard do Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-arduino/onboard-rgb-led-example.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/neopixel-onboard",permalink:"/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/onboard-rgb-led-example.md",tags:[],version:"current",frontMatter:{id:"arduino-neopixel",title:"Neopixel RGB LED Onboard",slug:"/franzininho-wifi/exemplos-arduino/neopixel-onboard",description:"Exemplo de uso do led RGB onboard do Franzininho WiFi",author:"Henrique Vilela"},sidebar:"docs",previous:{title:"Blink",permalink:"/docs/franzininho-wifi/exemplos-arduino/blink"},next:{title:"Leitura DHT11",permalink:"/docs/franzininho-wifi/exemplos-arduino/dht11"}},l={},s=[{value:"Instala\xe7\xe3o da biblioteca",id:"instala\xe7\xe3o-da-biblioteca",level:2},{value:"C\xf3digo de Exemplo",id:"c\xf3digo-de-exemplo",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"Nesse exemplo vamos aprender usar o LED RGB Neopixel onboard na Franzininho WiFi."}),"\n",(0,o.jsx)(n.h2,{id:"instala\xe7\xe3o-da-biblioteca",children:"Instala\xe7\xe3o da biblioteca"}),"\n",(0,o.jsxs)(n.p,{children:["Na IDE Arduino, clique em ",(0,o.jsx)(n.strong,{children:"Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas"})]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Neopixel",src:i(84960).c+"",width:"865",height:"452"})}),"\n",(0,o.jsxs)(n.p,{children:['Selecione: "Adafruit NeoPixel by Adafruit Vers\xe3o X.X.X" e clique em ',(0,o.jsx)(n.strong,{children:"Instalar"})]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Neopixel",src:i(73855).c+"",width:"1178",height:"654"})}),"\n",(0,o.jsx)(n.p,{children:"Ap\xf3s selecionar a placa Franzininho conforme os outros tutoriais, poder\xe1 ser usado o c\xf3digo de exemplo abaixo:"}),"\n",(0,o.jsx)(n.h2,{id:"c\xf3digo-de-exemplo",children:"C\xf3digo de Exemplo"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-cpp",children:'// inclui biblioteca NeoPixel\n#include \n\n// O Led RGB est\xe1 conectado ao pino 18 do Franzininho\n#define PIN 18\n// H\xe1 apenas um LED\n#define NUMPIXELS 1\n\n// quantidade de cores que ser\xe3o mostradas\n#define MAXCOLORS 4\n\n// Inst\xe2ncia do objeto "Adafruit_NeoPixel"\nAdafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);\n\n//cores\n#define RED pixels.Color(255, 0, 0) // vermelho\n#define GREEN pixels.Color(0, 255, 0) // verde\n#define BLUE pixels.Color(0, 0, 255) // azul\n#define WHITE pixels.Color(255, 255, 255) // branco\n\n// array com todas as cores para uso em la\xe7o for\n// uint32_t \xe9 o tipo retornado pela fun\xe7\xe3o Color\nuint32_t cores[MAXCOLORS] = {RED, GREEN, BLUE, WHITE};\n\nvoid setup() {\n \n // Inicializa o NeoPixel\n pixels.begin();\n}\n\nvoid loop() {\n \n // "apaga" o LED RGB\n pixels.clear();\n\n // exibe as cores em sequ\xeancia definida no array cores\n for(int i = 0; i{i.d(n,{MN:()=>s});var o=i(11504);function r(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function a(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,o)}return i}function t(e){for(var n=1;n=0||(r[i]=e[i]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var l=o.createContext({}),s=function(e){var n=o.useContext(l),i=n;return e&&(i="function"==typeof e?e(n):t(t({},n),e)),i},c={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},p=o.forwardRef((function(e,n){var i=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,p=d(e,["components","mdxType","originalType","parentName"]),u=s(i),x=r,h=u["".concat(l,".").concat(x)]||u[x]||c[x]||a;return i?o.createElement(h,t(t({ref:n},p),{},{components:i})):o.createElement(h,t({ref:n},p))}));p.displayName="MDXCreateElement"},84960:(e,n,i)=>{i.d(n,{c:()=>o});const o=i.p+"assets/images/neopixel01-2aab47e3a5428cdb244778275a87cc07.PNG"},73855:(e,n,i)=>{i.d(n,{c:()=>o});const o=i.p+"assets/images/neopixel02-92c8d5b2ebfc5c043d28e78d7dce21ff.PNG"}}]); \ No newline at end of file diff --git a/assets/js/8f8a0b80.6d757495.js b/assets/js/8f8a0b80.6d757495.js deleted file mode 100755 index 843692f35..000000000 --- a/assets/js/8f8a0b80.6d757495.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2559],{3905:(e,n,o)=>{o.d(n,{Zo:()=>s,kt:()=>f});var i=o(7294);function r(e,n,o){return n in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o,e}function a(e,n){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),o.push.apply(o,i)}return o}function t(e){for(var n=1;n=0||(r[o]=e[o]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var d=i.createContext({}),p=function(e){var n=i.useContext(d),o=n;return e&&(o="function"==typeof e?e(n):t(t({},n),e)),o},s=function(e){var n=p(e.components);return i.createElement(d.Provider,{value:n},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},m=i.forwardRef((function(e,n){var o=e.components,r=e.mdxType,a=e.originalType,d=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),c=p(o),m=r,f=c["".concat(d,".").concat(m)]||c[m]||u[m]||a;return o?i.createElement(f,t(t({ref:n},s),{},{components:o})):i.createElement(f,t({ref:n},s))}));function f(e,n){var o=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=o.length,t=new Array(a);t[0]=m;var l={};for(var d in n)hasOwnProperty.call(n,d)&&(l[d]=n[d]);l.originalType=e,l[c]="string"==typeof e?e:r,t[1]=l;for(var p=2;p{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var i=o(3117),r=(o(7294),o(3905));const a={id:"arduino-neopixel",title:"Neopixel RGB LED Onboard",slug:"/franzininho-wifi/exemplos-arduino/neopixel-onboard",description:"Exemplo de uso do led RGB onboard do Franzininho WiFi",author:"Henrique Vilela"},t=void 0,l={unversionedId:"FranzininhoWifi/exemplos-arduino/arduino-neopixel",id:"FranzininhoWifi/exemplos-arduino/arduino-neopixel",title:"Neopixel RGB LED Onboard",description:"Exemplo de uso do led RGB onboard do Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-arduino/onboard-rgb-led-example.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/neopixel-onboard",permalink:"/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/onboard-rgb-led-example.md",tags:[],version:"current",frontMatter:{id:"arduino-neopixel",title:"Neopixel RGB LED Onboard",slug:"/franzininho-wifi/exemplos-arduino/neopixel-onboard",description:"Exemplo de uso do led RGB onboard do Franzininho WiFi",author:"Henrique Vilela"},sidebar:"docs",previous:{title:"Blink",permalink:"/docs/franzininho-wifi/exemplos-arduino/blink"},next:{title:"Leitura DHT11",permalink:"/docs/franzininho-wifi/exemplos-arduino/dht11"}},d={},p=[{value:"Instala\xe7\xe3o da biblioteca",id:"instala\xe7\xe3o-da-biblioteca",level:2},{value:"C\xf3digo de Exemplo",id:"c\xf3digo-de-exemplo",level:2}],s={toc:p},c="wrapper";function u(e){let{components:n,...a}=e;return(0,r.kt)(c,(0,i.Z)({},s,a,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Nesse exemplo vamos aprender usar o LED RGB Neopixel onboard na Franzininho WiFi."),(0,r.kt)("h2",{id:"instala\xe7\xe3o-da-biblioteca"},"Instala\xe7\xe3o da biblioteca"),(0,r.kt)("p",null,"Na IDE Arduino, clique em ",(0,r.kt)("strong",{parentName:"p"},"Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Neopixel",src:o(5037).Z,width:"865",height:"452"})),(0,r.kt)("p",null,'Selecione: "Adafruit NeoPixel by Adafruit Vers\xe3o X.X.X" e clique em ',(0,r.kt)("strong",{parentName:"p"},"Instalar")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Neopixel",src:o(3634).Z,width:"1178",height:"654"})),(0,r.kt)("p",null,"Ap\xf3s selecionar a placa Franzininho conforme os outros tutoriais, poder\xe1 ser usado o c\xf3digo de exemplo abaixo:"),(0,r.kt)("h2",{id:"c\xf3digo-de-exemplo"},"C\xf3digo de Exemplo"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},'// inclui biblioteca NeoPixel\n#include \n\n// O Led RGB est\xe1 conectado ao pino 18 do Franzininho\n#define PIN 18\n// H\xe1 apenas um LED\n#define NUMPIXELS 1\n\n// quantidade de cores que ser\xe3o mostradas\n#define MAXCOLORS 4\n\n// Inst\xe2ncia do objeto "Adafruit_NeoPixel"\nAdafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);\n\n//cores\n#define RED pixels.Color(255, 0, 0) // vermelho\n#define GREEN pixels.Color(0, 255, 0) // verde\n#define BLUE pixels.Color(0, 0, 255) // azul\n#define WHITE pixels.Color(255, 255, 255) // branco\n\n// array com todas as cores para uso em la\xe7o for\n// uint32_t \xe9 o tipo retornado pela fun\xe7\xe3o Color\nuint32_t cores[MAXCOLORS] = {RED, GREEN, BLUE, WHITE};\n\nvoid setup() {\n \n // Inicializa o NeoPixel\n pixels.begin();\n}\n\nvoid loop() {\n \n // "apaga" o LED RGB\n pixels.clear();\n\n // exibe as cores em sequ\xeancia definida no array cores\n for(int i = 0; i{o.d(n,{Z:()=>i});const i=o.p+"assets/images/neopixel01-2aab47e3a5428cdb244778275a87cc07.PNG"},3634:(e,n,o)=>{o.d(n,{Z:()=>i});const i=o.p+"assets/images/neopixel02-92c8d5b2ebfc5c043d28e78d7dce21ff.PNG"}}]); \ No newline at end of file diff --git a/assets/js/92ef60c0.26252886.js b/assets/js/92ef60c0.26252886.js deleted file mode 100755 index 8a0eefcfe..000000000 --- a/assets/js/92ef60c0.26252886.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6799],{3905:(e,n,i)=>{i.d(n,{Zo:()=>d,kt:()=>f});var a=i(7294);function o(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function r(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,a)}return i}function t(e){for(var n=1;n=0||(o[i]=e[i]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(o[i]=e[i])}return o}var l=a.createContext({}),s=function(e){var n=a.useContext(l),i=n;return e&&(i="function"==typeof e?e(n):t(t({},n),e)),i},d=function(e){var n=s(e.components);return a.createElement(l.Provider,{value:n},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var i=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),p=s(i),m=o,f=p["".concat(l,".").concat(m)]||p[m]||u[m]||r;return i?a.createElement(f,t(t({ref:n},d),{},{components:i})):a.createElement(f,t({ref:n},d))}));function f(e,n){var i=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=i.length,t=new Array(r);t[0]=m;var c={};for(var l in n)hasOwnProperty.call(n,l)&&(c[l]=n[l]);c.originalType=e,c[p]="string"==typeof e?e:o,t[1]=c;for(var s=2;s{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>s});var a=i(3117),o=(i(7294),i(3905));const r={id:"pisca-led",title:"Pisca LED",slug:"/franzininho-diy/pisca-led",description:"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY."},t=void 0,c={unversionedId:"FranzininhoDIY/exemplos-arduino/pisca-led",id:"FranzininhoDIY/exemplos-arduino/pisca-led",title:"Pisca LED",description:"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/pisca-led.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/pisca-led",permalink:"/docs/franzininho-diy/pisca-led",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/pisca-led.md",tags:[],version:"current",frontMatter:{id:"pisca-led",title:"Pisca LED",slug:"/franzininho-diy/pisca-led",description:"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY."},sidebar:"docs",previous:{title:"Sa\xeddas PWM",permalink:"/docs/franzininho-diy/saidas-pwm"},next:{title:"Controle brilho de LED",permalink:"/docs/franzininho-diy/brilho-led"}},l={},s=[{value:"Materiais:",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],d={toc:s},p="wrapper";function u(e){let{components:n,...r}=e;return(0,o.kt)(p,(0,a.Z)({},d,r,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"O primeiro contato com a programa\xe7\xe3o com o Arduino, voc\xea faz o blink ","(","que faz com que o led pisque em intervalos de tempo",")",". Com a Franzininho n\xe3o \xe9 diferente, voc\xea pode testar com o pr\xf3prio LED que ela tem ou caso voc\xea queira, pode ligar um LED em uma protoboard. A seguir vamos explicar como fazer um blink com a Franzininho."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"resultado Pisca LED",src:i(8382).Z,width:"4000",height:"2250"})),(0,o.kt)("h2",{id:"materiais"},"Materiais:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Placa Franzininho;"),(0,o.kt)("li",{parentName:"ul"},"Protoboard;"),(0,o.kt)("li",{parentName:"ul"},"LED 3mm;"),(0,o.kt)("li",{parentName:"ul"},"Resistor 330;"),(0,o.kt)("li",{parentName:"ul"},"Jumpers")),(0,o.kt)("h2",{id:"circuito"},"Circuito"),(0,o.kt)("p",null,"Na protoboard voc\xea pode montar o circuito para acionamento do LED da seguinte forma:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Circuito Pisca LED",src:i(2676).Z,width:"1833",height:"756"})),(0,o.kt)("h2",{id:"sketch"},"Sketch"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cpp"},"/*\n Pisca LED - Blink\n\n Esse exemplo exibe como piscar o LED presente na placa ou um LED externo ligado ao pino 1 da Franzininho em intervalos de 1 segundo.\n\n*/\n\nconst int LED = 1; //pino digital conectado ao LED\n\nvoid setup(){\n pinMode(LED,OUTPUT); //pino digital de sa\xedda\n}\n\nvoid loop(){\n digitalWrite(LED,HIGH); //acende o led da placa\n delay(1000); //aguarda um segundo\n digitalWrite(LED,LOW); //apaga o led da placa\n delay(1000); //aguarda um segundo\n}\n")),(0,o.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,o.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311359028691206722?view=diagram"}),(0,o.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,o.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/0YHNiuUSfyk",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}u.isMDXComponent=!0},8382:(e,n,i)=>{i.d(n,{Z:()=>a});const a=i.p+"assets/images/pisca-led-95dfe2300337a645c61ca8cbda964ef4.gif"},2676:(e,n,i)=>{i.d(n,{Z:()=>a});const a=i.p+"assets/images/pisca-led-cafaefb0f69ebc87e542c140ed6f0f67.png"}}]); \ No newline at end of file diff --git a/assets/js/92ef60c0.f802e225.js b/assets/js/92ef60c0.f802e225.js new file mode 100755 index 000000000..3b491e7cd --- /dev/null +++ b/assets/js/92ef60c0.f802e225.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9964],{86100:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>s,contentTitle:()=>t,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var o=i(17624),r=i(95788);const a={id:"pisca-led",title:"Pisca LED",slug:"/franzininho-diy/pisca-led",description:"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY."},t=void 0,c={id:"FranzininhoDIY/exemplos-arduino/pisca-led",title:"Pisca LED",description:"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/pisca-led.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/pisca-led",permalink:"/docs/franzininho-diy/pisca-led",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/pisca-led.md",tags:[],version:"current",frontMatter:{id:"pisca-led",title:"Pisca LED",slug:"/franzininho-diy/pisca-led",description:"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY."},sidebar:"docs",previous:{title:"Sa\xeddas PWM",permalink:"/docs/franzininho-diy/saidas-pwm"},next:{title:"Controle brilho de LED",permalink:"/docs/franzininho-diy/brilho-led"}},s={},l=[{value:"Materiais:",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function d(e){const n={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"O primeiro contato com a programa\xe7\xe3o com o Arduino, voc\xea faz o blink (que faz com que o led pisque em intervalos de tempo). Com a Franzininho n\xe3o \xe9 diferente, voc\xea pode testar com o pr\xf3prio LED que ela tem ou caso voc\xea queira, pode ligar um LED em uma protoboard. A seguir vamos explicar como fazer um blink com a Franzininho."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"resultado Pisca LED",src:i(59288).c+"",width:"4000",height:"2250"})}),"\n",(0,o.jsx)(n.h2,{id:"materiais",children:"Materiais:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Placa Franzininho;"}),"\n",(0,o.jsx)(n.li,{children:"Protoboard;"}),"\n",(0,o.jsx)(n.li,{children:"LED 3mm;"}),"\n",(0,o.jsx)(n.li,{children:"Resistor 330;"}),"\n",(0,o.jsx)(n.li,{children:"Jumpers"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,o.jsx)(n.p,{children:"Na protoboard voc\xea pode montar o circuito para acionamento do LED da seguinte forma:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Circuito Pisca LED",src:i(18540).c+"",width:"1833",height:"756"})}),"\n",(0,o.jsx)(n.h2,{id:"sketch",children:"Sketch"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-cpp",children:"/*\n Pisca LED - Blink\n\n Esse exemplo exibe como piscar o LED presente na placa ou um LED externo ligado ao pino 1 da Franzininho em intervalos de 1 segundo.\n\n*/\n\nconst int LED = 1; //pino digital conectado ao LED\n\nvoid setup(){\n pinMode(LED,OUTPUT); //pino digital de sa\xedda\n}\n\nvoid loop(){\n digitalWrite(LED,HIGH); //acende o led da placa\n delay(1000); //aguarda um segundo\n digitalWrite(LED,LOW); //apaga o led da placa\n delay(1000); //aguarda um segundo\n}\n"})}),"\n",(0,o.jsx)(n.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311359028691206722?view=diagram"}),"\n",(0,o.jsx)(n.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/0YHNiuUSfyk",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function p(e={}){const{wrapper:n}={...(0,r.MN)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},95788:(e,n,i)=>{i.d(n,{MN:()=>l});var o=i(11504);function r(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function a(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,o)}return i}function t(e){for(var n=1;n=0||(r[i]=e[i]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var s=o.createContext({}),l=function(e){var n=o.useContext(s),i=n;return e&&(i="function"==typeof e?e(n):t(t({},n),e)),i},d={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},p=o.forwardRef((function(e,n){var i=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(i),m=r,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return i?o.createElement(h,t(t({ref:n},p),{},{components:i})):o.createElement(h,t({ref:n},p))}));p.displayName="MDXCreateElement"},59288:(e,n,i)=>{i.d(n,{c:()=>o});const o=i.p+"assets/images/pisca-led-95dfe2300337a645c61ca8cbda964ef4.gif"},18540:(e,n,i)=>{i.d(n,{c:()=>o});const o=i.p+"assets/images/pisca-led-cafaefb0f69ebc87e542c140ed6f0f67.png"}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.4d50966b.js b/assets/js/935f2afb.4d50966b.js new file mode 100755 index 000000000..b3034ebb1 --- /dev/null +++ b/assets/js/935f2afb.4d50966b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5696],{35988:i=>{i.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Pr\xf3ximo","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"category","label":"Comece aqui","items":[{"type":"link","label":"Seja bem vindo!","href":"/docs/","docId":"sobre","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho WiFi","items":[{"type":"link","label":"Placa Franzininho WiFi","href":"/docs/franzininho-wifi/franzininho-wifi","docId":"FranzininhoWifi/franzininho-wifi","unlisted":false},{"type":"category","label":"Wokwi","items":[{"type":"link","label":"Como simular a Franzininho WiFi no Wokwi","href":"/docs/franzininho-wifi/wokwi/primeiros-passos","docId":"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"ESP-IDF","items":[{"type":"link","label":"Primeiros Passos com ESP-IDF","href":"/docs/franzininho-wifi/exemplos-espidf/primeiros-passos","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00","unlisted":false},{"type":"link","label":"Hello World! ESP-IDF","href":"/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01","unlisted":false},{"type":"link","label":"Entrada digital","href":"/docs/franzininho-wifi/exemplos-espidf/entrada-digital","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02","unlisted":false},{"type":"link","label":"Entrada Anal\xf3gica","href":"/docs/franzininho-wifi/exemplos-espidf/entrada-analogica","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03","unlisted":false},{"type":"link","label":"PWM com LEDC","href":"/docs/franzininho-wifi/exemplos-espidf/ledc","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04","unlisted":false},{"type":"link","label":"Primeiros passos com a AWS","href":"/docs/franzininho-wifi/exemplos-espidf/aws","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"CircuitPython","items":[{"type":"link","label":"Primeiros Passos","href":"/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos","unlisted":false},{"type":"link","label":"Instalando as ferramentas","href":"/docs/franzininho-wifi/exemplos-circuitpython/ferramentas","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas","unlisted":false},{"type":"link","label":"Hello World!","href":"/docs/franzininho-wifi/exemplos-circuitpython/hello-world","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world","unlisted":false},{"type":"link","label":"Serial Console","href":"/docs/franzininho-wifi/exemplos-circuitpython/serial-console","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console","unlisted":false},{"type":"link","label":"Entradas e Sa\xeddas Digitais","href":"/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais","unlisted":false},{"type":"link","label":"Entrada Anal\xf3gica","href":"/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas","unlisted":false},{"type":"link","label":"PWM - Pulse Width Modulation","href":"/docs/franzininho-wifi/exemplos-circuitpython/pwm","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm","unlisted":false},{"type":"link","label":"Pinos de Toque Capacitivo","href":"/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo","unlisted":false},{"type":"link","label":"Display OLED I2C","href":"/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c","unlisted":false},{"type":"link","label":"Sensor de temperatura e umidade DHT11","href":"/docs/franzininho-wifi/exemplos-circuitpython/dht11","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11","unlisted":false},{"type":"link","label":"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04","href":"/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04","unlisted":false},{"type":"link","label":"Servo motor","href":"/docs/franzininho-wifi/exemplos-circuitpython/servo-motor","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor","unlisted":false},{"type":"link","label":"Sistema de irriga\xe7\xe3o autom\xe1tico","href":"/docs/franzininho-wifi/exemplos-circuitpython/irrigacao","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Arduino","items":[{"type":"link","label":"Primeiros Passos","href":"/docs/franzininho-wifi/exemplos-arduino/primeiros-passos","docId":"FranzininhoWifi/exemplos-arduino/arduino","unlisted":false},{"type":"link","label":"Blink","href":"/docs/franzininho-wifi/exemplos-arduino/blink","docId":"FranzininhoWifi/exemplos-arduino/arduino-blink","unlisted":false},{"type":"link","label":"Neopixel RGB LED Onboard","href":"/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard","docId":"FranzininhoWifi/exemplos-arduino/arduino-neopixel","unlisted":false},{"type":"link","label":"Leitura DHT11","href":"/docs/franzininho-wifi/exemplos-arduino/dht11","docId":"FranzininhoWifi/exemplos-arduino/arduino-dht11","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"MicroPython","items":[{"type":"link","label":"Primeiros Passos com MicroPython","href":"/docs/franzininho-wifi/exemplos-micropython/primeiros-passos","docId":"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos","unlisted":false},{"type":"link","label":"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython","href":"/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais","docId":"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Placa Franzininho WiFi dev Edition","href":"/docs/franzininho-wifi/franzininho-wifi-dev-edition","docId":"FranzininhoWifi/franzininho-wifi-dev-edition","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho WiFi Lab01","items":[{"type":"link","label":"Franzininho WiFi LAB01","href":"/docs/franzininho-wifi-lab01","docId":"FranzininhoWiFiLAB01/franzininho-wifi-lab01","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho C0(STM32C0)","items":[{"type":"link","label":"Placa Franzininho C0","href":"/docs/franzininho-c0/franzininho-c0-board","docId":"franzininhoSTM32C0/franzininho-stm32c0","unlisted":false},{"type":"category","label":"STM32CubeIDE","items":[{"type":"link","label":"STM32Cube IDE TODO List","href":"/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist","docId":"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist","unlisted":false},{"type":"link","label":"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos","href":"/docs/franzininho-c0/config-franzininho-c0-stm32cubeide","docId":"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Arduino","items":[{"type":"link","label":"Arduino IDE TODO List","href":"/docs/franzininho-c0/arduino-todolist","docId":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist","unlisted":false},{"type":"link","label":"Primeiros passos com Arduino","href":"/docs/franzininho-c0/arduino-primeiros-passos","docId":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos","unlisted":false},{"type":"link","label":"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino","href":"/docs/franzininho-c0/arduino-identificacao-pinos","docId":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho DIY","items":[{"type":"link","label":"Placa Franzininho DIY","href":"/docs/franzininho-diy/sobre","docId":"FranzininhoDIY/franzininho-diy","unlisted":false},{"type":"category","label":"Montagem","items":[{"type":"link","label":"Lista de Materiais","href":"/docs/franzininho-diy/lista-de-materiais","docId":"FranzininhoDIY/lista-de-materiais","unlisted":false},{"type":"link","label":"Identificando os componentes","href":"/docs/franzininho-diy/identificando-componentes","docId":"FranzininhoDIY/identificando-componentes","unlisted":false},{"type":"link","label":"Montagem da Franzininho DIY","href":"/docs/franzininho-diy/montagem","docId":"FranzininhoDIY/montagem","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Bootloader","items":[{"type":"link","label":"Bootloader","href":"/docs/franzininho-diy/bootloader","docId":"FranzininhoDIY/bootloader/bootloader","unlisted":false},{"type":"link","label":"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB","href":"/docs/franzininho-diy/drivers-micronucleus","docId":"FranzininhoDIY/bootloader/drivers-micronucleus","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Exemplos Arduino","items":[{"type":"link","label":"Configura\xe7\xe3o da Arduino IDE","href":"/docs/franzininho-diy/pacote","docId":"FranzininhoDIY/exemplos-arduino/pacote","unlisted":false},{"type":"link","label":"Entradas e Sa\xeddas Digitais","href":"/docs/franzininho-diy/entradas-saidas-digitais","docId":"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais","unlisted":false},{"type":"link","label":"Entradas Anal\xf3gicas","href":"/docs/franzininho-diy/entradas-analogicas","docId":"FranzininhoDIY/exemplos-arduino/entradas-analogicas","unlisted":false},{"type":"link","label":"Sa\xeddas PWM","href":"/docs/franzininho-diy/saidas-pwm","docId":"FranzininhoDIY/exemplos-arduino/saidas-pwm","unlisted":false},{"type":"link","label":"Pisca LED","href":"/docs/franzininho-diy/pisca-led","docId":"FranzininhoDIY/exemplos-arduino/pisca-led","unlisted":false},{"type":"link","label":"Controle brilho de LED","href":"/docs/franzininho-diy/brilho-led","docId":"FranzininhoDIY/exemplos-arduino/brilho-led","unlisted":false},{"type":"link","label":"Leitura de Tecla","href":"/docs/franzininho-diy/leitura-tecla","docId":"FranzininhoDIY/exemplos-arduino/leitura-tecla","unlisted":false},{"type":"link","label":"Tecla Liga/Desliga","href":"/docs/franzininho-diy/tecla-liga-desliga","docId":"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga","unlisted":false},{"type":"link","label":"LED RGB","href":"/docs/franzininho-diy/led-rgb","docId":"FranzininhoDIY/exemplos-arduino/led-rgb","unlisted":false},{"type":"link","label":"Elefante Colorido! Que cor?","href":"/docs/franzininho-diy/elefante-colorido","docId":"FranzininhoDIY/exemplos-arduino/elefante-colorido","unlisted":false},{"type":"link","label":"Sensor de luz com LDR","href":"/docs/franzininho-diy/sensor-luz-ldr","docId":"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr","unlisted":false},{"type":"link","label":"Sem\xe1foro","href":"/docs/franzininho-diy/semaforo","docId":"FranzininhoDIY/exemplos-arduino/semaforo","unlisted":false},{"type":"link","label":"Theremim","href":"/docs/franzininho-diy/theremim","docId":"FranzininhoDIY/exemplos-arduino/theremim","unlisted":false},{"type":"link","label":"Girassol Automatizado","href":"/docs/franzininho-diy/girassol-automatizado","docId":"FranzininhoDIY/exemplos-arduino/girassol-automatizado","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Exemplos AVR Libc","items":[{"type":"link","label":"Primeiros Passos","href":"/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos","docId":"FranzininhoDIY/exemplos-avr-libc/primeiros-passos","unlisted":false},{"type":"link","label":"Hello, World!","href":"/docs/franzininho-diy/exemplos-avr-libc/hello-world","docId":"FranzininhoDIY/exemplos-avr-libc/hello-world","unlisted":false},{"type":"link","label":"Sa\xedda Digital","href":"/docs/franzininho-diy/exemplos-avr-libc/saida-digital","docId":"FranzininhoDIY/exemplos-avr-libc/saida-digital","unlisted":false},{"type":"link","label":"Entrada Digital","href":"/docs/franzininho-diy/exemplos-avr-libc/entrada-digital","docId":"FranzininhoDIY/exemplos-avr-libc/entrada-digital","unlisted":false},{"type":"link","label":"Timer 0","href":"/docs/franzininho-diy/exemplos-avr-libc/timer0","docId":"FranzininhoDIY/exemplos-avr-libc/timer0","unlisted":false},{"type":"link","label":"Timer 0 - Interrup\xe7\xe3o","href":"/docs/franzininho-diy/exemplos-avr-libc/timer0-int","docId":"FranzininhoDIY/exemplos-avr-libc/timer0-int","unlisted":false},{"type":"link","label":"Contador de pulsos externos","href":"/docs/franzininho-diy/exemplos-avr-libc/contadores","docId":"FranzininhoDIY/exemplos-avr-libc/contadores","unlisted":false},{"type":"link","label":"Instrumento musical com Buzzer","href":"/docs/franzininho-diy/exemplos-avr-libc/buzzer","docId":"FranzininhoDIY/exemplos-avr-libc/buzzer","unlisted":false},{"type":"link","label":"Interrup\xe7\xe3o externa","href":"/docs/franzininho-diy/exemplos-avr-libc/int-ext","docId":"FranzininhoDIY/exemplos-avr-libc/int-externa","unlisted":false},{"type":"link","label":"TODO","href":"/docs/franzininho-diy/exemplos-avr-libc/todo","docId":"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Simulador Wokwi","items":[{"type":"link","label":"Como simular a Franzininho DIY no Wokwi","href":"/docs/franzininho-diy/wokwi/primeiros-passos","docId":"FranzininhoDIY/wokwi/wokwi-intro","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Simulador PICSimLab","items":[{"type":"link","label":"Franzininho DIY no PICSimLab","href":"/docs/franzininho-diy/picsimlab/primeiros-passos","docId":"FranzininhoDIY/picsimlab/picsimlab-intro","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"FranzMakey","items":[{"type":"link","label":"Placa FranzMakey","href":"/docs/FranzMakey/franzmakey","docId":"FranzMakey/franzmakey","unlisted":false},{"type":"link","label":"Primeiros Passos","href":"/docs/FranzMakey/primeiros-passos","docId":"FranzMakey/primeiros-passos","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho Tiny","items":[{"type":"link","label":"Placa Franzininho Tiny","href":"/docs/franzininho-tiny/franzininho-tiny","docId":"FranzininhoTiny/franzininho-tiny","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzino","items":[{"type":"link","label":"Placa Franzino","href":"/docs/Franzino/franzino","docId":"Franzino/franzino","unlisted":false},{"type":"link","label":"Upload via conversor USB/SERIAL","href":"/docs/Franzino/upload-conversor-serial","docId":"Franzino/upload-conversor-serial","unlisted":false},{"type":"link","label":"Gravando a Franzino com um placa Arduino UNO","href":"/docs/Franzino/upload-com-arduino-uno","docId":"Franzino/upload-com-arduino-uno","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"FranzBoy","items":[{"type":"link","label":"Placa FranzBoy","href":"/docs/FranzBoy/franzboy","docId":"FranzBoy/franzboy","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Badges","items":[{"type":"link","label":"Badge - Aprenda a soldar","href":"/docs/badge/badge","docId":"Badge/badge","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Laborat\xf3rio de Sistemas Embarcados e IoT","items":[{"type":"link","label":"Placa Laborat\xf3rio de Sistemas Embarcados e IoT","href":"/docs/LaboratorioSistemasIot/LaboratorioSistemasIot","docId":"LaboratorioSistemasIot/laboratorio-sistemas-iot","unlisted":false},{"type":"category","label":"Adaptadores","items":[{"type":"link","label":"Adaptador Arduino Uno","href":"/docs/LaboratorioSistemasIot/adaptadores/arduino-uno","docId":"LaboratorioSistemasIot/adaptadores/adaptador-arduino","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Bibliotecas","items":[{"type":"link","label":"laboratorioFW","href":"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","docId":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","unlisted":false},{"type":"link","label":"laboratorioFW_ARDUNO","href":"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO","docId":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}]},"docs":{"Badge/badge":{"id":"Badge/badge","title":"Badge - Aprenda a soldar","description":"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.","sidebar":"docs"},"FranzBoy/franzboy":{"id":"FranzBoy/franzboy","title":"Placa FranzBoy","description":"Detalhes da placa Franzboy","sidebar":"docs"},"FranzininhoDIY/bootloader/bootloader":{"id":"FranzininhoDIY/bootloader/bootloader","title":"Bootloader","description":"Grava\xe7\xe3o do Bootloader na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/bootloader/drivers-micronucleus":{"id":"FranzininhoDIY/bootloader/drivers-micronucleus","title":"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB","description":"Instala\xe7\xe3o dos drivers USB para correto funcionamento","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/brilho-led":{"id":"FranzininhoDIY/exemplos-arduino/brilho-led","title":"Controle brilho de LED","description":"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/elefante-colorido":{"id":"FranzininhoDIY/exemplos-arduino/elefante-colorido","title":"Elefante Colorido! Que cor?","description":"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/entradas-analogicas":{"id":"FranzininhoDIY/exemplos-arduino/entradas-analogicas","title":"Entradas Anal\xf3gicas","description":"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais":{"id":"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais","title":"Entradas e Sa\xeddas Digitais","description":"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/girassol-automatizado":{"id":"FranzininhoDIY/exemplos-arduino/girassol-automatizado","title":"Girassol Automatizado","description":"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/led-rgb":{"id":"FranzininhoDIY/exemplos-arduino/led-rgb","title":"LED RGB","description":"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/leitura-tecla":{"id":"FranzininhoDIY/exemplos-arduino/leitura-tecla","title":"Leitura de Tecla","description":"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/pacote":{"id":"FranzininhoDIY/exemplos-arduino/pacote","title":"Configura\xe7\xe3o da Arduino IDE","description":"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/pisca-led":{"id":"FranzininhoDIY/exemplos-arduino/pisca-led","title":"Pisca LED","description":"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/saidas-pwm":{"id":"FranzininhoDIY/exemplos-arduino/saidas-pwm","title":"Sa\xeddas PWM","description":"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/semaforo":{"id":"FranzininhoDIY/exemplos-arduino/semaforo","title":"Sem\xe1foro","description":"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr":{"id":"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr","title":"Sensor de luz com LDR","description":"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga":{"id":"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga","title":"Tecla Liga/Desliga","description":"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/theremim":{"id":"FranzininhoDIY/exemplos-arduino/theremim","title":"Theremim","description":"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/tutoriais-i2c":{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-i2c","title":"I2C","description":"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},"FranzininhoDIY/exemplos-arduino/tutoriais-introducao":{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-introducao","title":"Introdu\xe7\xe3o","description":"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho"},"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo":{"id":"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo","title":"TODO","description":"Mapeamento dos conte\xfados para exemplos com a AVR LibC","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/buzzer":{"id":"FranzininhoDIY/exemplos-avr-libc/buzzer","title":"Instrumento musical com Buzzer","description":"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/contadores":{"id":"FranzininhoDIY/exemplos-avr-libc/contadores","title":"Contador de pulsos externos","description":"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/entrada-digital":{"id":"FranzininhoDIY/exemplos-avr-libc/entrada-digital","title":"Entrada Digital","description":"Vamos entender como trabalhar com as Entradas Digitais","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/hello-world":{"id":"FranzininhoDIY/exemplos-avr-libc/hello-world","title":"Hello, World!","description":"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/int-externa":{"id":"FranzininhoDIY/exemplos-avr-libc/int-externa","title":"Interrup\xe7\xe3o externa","description":"Exemplo para uso da interrup\xe7\xe3o externa","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/primeiros-passos":{"id":"FranzininhoDIY/exemplos-avr-libc/primeiros-passos","title":"Primeiros Passos","description":"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/saida-digital":{"id":"FranzininhoDIY/exemplos-avr-libc/saida-digital","title":"Sa\xedda Digital","description":"Vamos entender como trabalhar com as sa\xeddas Digitais","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/timer0":{"id":"FranzininhoDIY/exemplos-avr-libc/timer0","title":"Timer 0","description":"Vamos aprender usar o timer 0 como temporizador","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/timer0-int":{"id":"FranzininhoDIY/exemplos-avr-libc/timer0-int","title":"Timer 0 - Interrup\xe7\xe3o","description":"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o","sidebar":"docs"},"FranzininhoDIY/franzininho-diy":{"id":"FranzininhoDIY/franzininho-diy","title":"Placa Franzininho DIY","description":"Detalhes da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/identificando-componentes":{"id":"FranzininhoDIY/identificando-componentes","title":"Identificando os componentes","description":"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.","sidebar":"docs"},"FranzininhoDIY/lista-de-materiais":{"id":"FranzininhoDIY/lista-de-materiais","title":"Lista de Materiais","description":"Lista de materiais (componentes) para montagem da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/montagem":{"id":"FranzininhoDIY/montagem","title":"Montagem da Franzininho DIY","description":"Passo a passo da montagem da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/picsimlab/picsimlab-intro":{"id":"FranzininhoDIY/picsimlab/picsimlab-intro","title":"Franzininho DIY no PICSimLab","description":"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/wokwi/wokwi-intro":{"id":"FranzininhoDIY/wokwi/wokwi-intro","title":"Como simular a Franzininho DIY no Wokwi","description":"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY","sidebar":"docs"},"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos":{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos","title":"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino","description":"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino","sidebar":"docs"},"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos":{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos","title":"Primeiros passos com Arduino","description":"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0","sidebar":"docs"},"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist":{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist","title":"Arduino IDE TODO List","description":"Todo list para exemplos com Arduino","sidebar":"docs"},"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide":{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide","title":"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos","description":"7 passos para voc\xea configurar um novo projeto para a Franzininho C0","sidebar":"docs"},"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist":{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist","title":"STM32Cube IDE TODO List","description":"Todo list para exemplos com STM32Cube IDE","sidebar":"docs"},"franzininhoSTM32C0/franzininho-stm32c0":{"id":"franzininhoSTM32C0/franzininho-stm32c0","title":"Placa Franzininho C0","description":"Franzininho C0 \'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics","sidebar":"docs"},"FranzininhoTiny/franzininho-tiny":{"id":"FranzininhoTiny/franzininho-tiny","title":"Placa Franzininho Tiny","description":"Detalhes da Franzininho Tiny","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino":{"id":"FranzininhoWifi/exemplos-arduino/arduino","title":"Primeiros Passos","description":"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino-blink":{"id":"FranzininhoWifi/exemplos-arduino/arduino-blink","title":"Blink","description":"Primeiro Hello World com a Franzininho WiFi no Arduino IDE","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino-dht11":{"id":"FranzininhoWifi/exemplos-arduino/arduino-dht11","title":"Leitura DHT11","description":"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino-neopixel":{"id":"FranzininhoWifi/exemplos-arduino/arduino-neopixel","title":"Neopixel RGB LED Onboard","description":"Exemplo de uso do led RGB onboard do Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11","title":"Sensor de temperatura e umidade DHT11","description":"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c","title":"Display OLED I2C","description":"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas","title":"Entrada Anal\xf3gica","description":"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais","title":"Entradas e Sa\xeddas Digitais","description":"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas","title":"Instalando as ferramentas","description":"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world","title":"Hello World!","description":"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos","title":"Primeiros Passos","description":"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm","title":"PWM - Pulse Width Modulation","description":"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04","title":"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04","description":"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console","title":"Serial Console","description":"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor","title":"Servo motor","description":"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o","title":"Sistema de irriga\xe7\xe3o autom\xe1tico","description":"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo","title":"Pinos de Toque Capacitivo","description":"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00","title":"Primeiros Passos com ESP-IDF","description":"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01","title":"Hello World! ESP-IDF","description":"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02","title":"Entrada digital","description":"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03","title":"Entrada Anal\xf3gica","description":"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04","title":"PWM com LEDC","description":"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05","title":"Primeiros passos com a AWS","description":"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.","sidebar":"docs"},"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais":{"id":"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais","title":"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython","description":"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.","sidebar":"docs"},"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos":{"id":"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos","title":"Primeiros Passos com MicroPython","description":"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.","sidebar":"docs"},"FranzininhoWifi/franzininho-wifi":{"id":"FranzininhoWifi/franzininho-wifi","title":"Placa Franzininho WiFi","description":"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes.","sidebar":"docs"},"FranzininhoWifi/franzininho-wifi-dev-edition":{"id":"FranzininhoWifi/franzininho-wifi-dev-edition","title":"Placa Franzininho WiFi dev Edition","description":"Detalhes da Franzininho WiFi Developer Edition","sidebar":"docs"},"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro":{"id":"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro","title":"Como simular a Franzininho WiFi no Wokwi","description":"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi","sidebar":"docs"},"FranzininhoWiFiLAB01/franzininho-wifi-lab01":{"id":"FranzininhoWiFiLAB01/franzininho-wifi-lab01","title":"Franzininho WiFi LAB01","description":"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi.","sidebar":"docs"},"Franzino/franzino":{"id":"Franzino/franzino","title":"Placa Franzino","description":"Detalhes da placa Franzino","sidebar":"docs"},"Franzino/upload-com-arduino-uno":{"id":"Franzino/upload-com-arduino-uno","title":"Gravando a Franzino com um placa Arduino UNO","description":"Veja como usar um Arduino Uno como programador para a Franzino","sidebar":"docs"},"Franzino/upload-conversor-serial":{"id":"Franzino/upload-conversor-serial","title":"Upload via conversor USB/SERIAL","description":"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos","sidebar":"docs"},"FranzMakey/franzmakey":{"id":"FranzMakey/franzmakey","title":"Placa FranzMakey","description":"Detalhes da placa FranzMakey","sidebar":"docs"},"FranzMakey/primeiros-passos":{"id":"FranzMakey/primeiros-passos","title":"Primeiros Passos","description":"Primeiros passos com a placa FranzMakey","sidebar":"docs"},"LaboratorioSistemasIot/adaptadores/adaptador-arduino":{"id":"LaboratorioSistemasIot/adaptadores/adaptador-arduino","title":"Adaptador Arduino Uno","description":"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT","sidebar":"docs"},"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW":{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","title":"laboratorioFW","description":"O que \xe9 a biblioteca laboratorioFW","sidebar":"docs"},"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO":{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO","title":"laboratorioFW_ARDUNO","description":"O que \xe9 a biblioteca laboratorioFW-ARDUNO","sidebar":"docs"},"LaboratorioSistemasIot/laboratorio-sistemas-iot":{"id":"LaboratorioSistemasIot/laboratorio-sistemas-iot","title":"Placa Laborat\xf3rio de Sistemas Embarcados e IoT","description":"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT","sidebar":"docs"},"sobre":{"id":"sobre","title":"Seja bem vindo a documenta\xe7\xe3o do projeto Franzininho","description":"Aqui voc\xea encontra a documenta\xe7\xe3o (em Desenvolvimento) para trabalhar com todas as placas e Kits Franzininho.","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.bea23187.js b/assets/js/935f2afb.bea23187.js deleted file mode 100755 index ec855d703..000000000 --- a/assets/js/935f2afb.bea23187.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[53],{1109:i=>{i.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Pr\xf3ximo","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"category","label":"Comece aqui","items":[{"type":"link","label":"Seja bem vindo!","href":"/docs/","docId":"sobre"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho WiFi","items":[{"type":"link","label":"Placa Franzininho WiFi","href":"/docs/franzininho-wifi/franzininho-wifi","docId":"FranzininhoWifi/franzininho-wifi"},{"type":"category","label":"Wokwi","items":[{"type":"link","label":"Como simular a Franzininho WiFi no Wokwi","href":"/docs/franzininho-wifi/wokwi/primeiros-passos","docId":"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro"}],"collapsed":true,"collapsible":true},{"type":"category","label":"ESP-IDF","items":[{"type":"link","label":"Primeiros Passos com ESP-IDF","href":"/docs/franzininho-wifi/exemplos-espidf/primeiros-passos","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00"},{"type":"link","label":"Hello World! ESP-IDF","href":"/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01"},{"type":"link","label":"Entrada digital","href":"/docs/franzininho-wifi/exemplos-espidf/entrada-digital","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02"},{"type":"link","label":"Entrada Anal\xf3gica","href":"/docs/franzininho-wifi/exemplos-espidf/entrada-analogica","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03"},{"type":"link","label":"PWM com LEDC","href":"/docs/franzininho-wifi/exemplos-espidf/ledc","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04"},{"type":"link","label":"Primeiros passos com a AWS","href":"/docs/franzininho-wifi/exemplos-espidf/aws","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05"}],"collapsed":true,"collapsible":true},{"type":"category","label":"CircuitPython","items":[{"type":"link","label":"Primeiros Passos","href":"/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos"},{"type":"link","label":"Instalando as ferramentas","href":"/docs/franzininho-wifi/exemplos-circuitpython/ferramentas","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas"},{"type":"link","label":"Hello World!","href":"/docs/franzininho-wifi/exemplos-circuitpython/hello-world","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world"},{"type":"link","label":"Serial Console","href":"/docs/franzininho-wifi/exemplos-circuitpython/serial-console","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console"},{"type":"link","label":"Entradas e Sa\xeddas Digitais","href":"/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais"},{"type":"link","label":"Entrada Anal\xf3gica","href":"/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas"},{"type":"link","label":"PWM - Pulse Width Modulation","href":"/docs/franzininho-wifi/exemplos-circuitpython/pwm","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm"},{"type":"link","label":"Pinos de Toque Capacitivo","href":"/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo"},{"type":"link","label":"Display OLED I2C","href":"/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c"},{"type":"link","label":"Sensor de temperatura e umidade DHT11","href":"/docs/franzininho-wifi/exemplos-circuitpython/dht11","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11"},{"type":"link","label":"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04","href":"/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04"},{"type":"link","label":"Servo motor","href":"/docs/franzininho-wifi/exemplos-circuitpython/servo-motor","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor"},{"type":"link","label":"Sistema de irriga\xe7\xe3o autom\xe1tico","href":"/docs/franzininho-wifi/exemplos-circuitpython/irrigacao","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Arduino","items":[{"type":"link","label":"Primeiros Passos","href":"/docs/franzininho-wifi/exemplos-arduino/primeiros-passos","docId":"FranzininhoWifi/exemplos-arduino/arduino"},{"type":"link","label":"Blink","href":"/docs/franzininho-wifi/exemplos-arduino/blink","docId":"FranzininhoWifi/exemplos-arduino/arduino-blink"},{"type":"link","label":"Neopixel RGB LED Onboard","href":"/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard","docId":"FranzininhoWifi/exemplos-arduino/arduino-neopixel"},{"type":"link","label":"Leitura DHT11","href":"/docs/franzininho-wifi/exemplos-arduino/dht11","docId":"FranzininhoWifi/exemplos-arduino/arduino-dht11"}],"collapsed":true,"collapsible":true},{"type":"category","label":"MicroPython","items":[{"type":"link","label":"Primeiros Passos com MicroPython","href":"/docs/franzininho-wifi/exemplos-micropython/primeiros-passos","docId":"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos"},{"type":"link","label":"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython","href":"/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais","docId":"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais"}],"collapsed":true,"collapsible":true},{"type":"link","label":"Placa Franzininho WiFi dev Edition","href":"/docs/franzininho-wifi/franzininho-wifi-dev-edition","docId":"FranzininhoWifi/franzininho-wifi-dev-edition"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho WiFi Lab01","items":[{"type":"link","label":"Franzininho WiFi LAB01","href":"/docs/franzininho-wifi-lab01","docId":"FranzininhoWiFiLAB01/franzininho-wifi-lab01"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho C0(STM32C0)","items":[{"type":"link","label":"Placa Franzininho C0","href":"/docs/franzininho-c0/franzininho-c0-board","docId":"franzininhoSTM32C0/franzininho-stm32c0"},{"type":"category","label":"STM32CubeIDE","items":[{"type":"link","label":"STM32Cube IDE TODO List","href":"/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist","docId":"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist"},{"type":"link","label":"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos","href":"/docs/franzininho-c0/config-franzininho-c0-stm32cubeide","docId":"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Arduino","items":[{"type":"link","label":"Arduino IDE TODO List","href":"/docs/franzininho-c0/arduino-todolist","docId":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist"},{"type":"link","label":"Primeiros passos com Arduino","href":"/docs/franzininho-c0/arduino-primeiros-passos","docId":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos"},{"type":"link","label":"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino","href":"/docs/franzininho-c0/arduino-identificacao-pinos","docId":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho DIY","items":[{"type":"link","label":"Placa Franzininho DIY","href":"/docs/franzininho-diy/sobre","docId":"FranzininhoDIY/franzininho-diy"},{"type":"category","label":"Montagem","items":[{"type":"link","label":"Lista de Materiais","href":"/docs/franzininho-diy/lista-de-materiais","docId":"FranzininhoDIY/lista-de-materiais"},{"type":"link","label":"Identificando os componentes","href":"/docs/franzininho-diy/identificando-componentes","docId":"FranzininhoDIY/identificando-componentes"},{"type":"link","label":"Montagem da Franzininho DIY","href":"/docs/franzininho-diy/montagem","docId":"FranzininhoDIY/montagem"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Bootloader","items":[{"type":"link","label":"Bootloader","href":"/docs/franzininho-diy/bootloader","docId":"FranzininhoDIY/bootloader/bootloader"},{"type":"link","label":"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB","href":"/docs/franzininho-diy/drivers-micronucleus","docId":"FranzininhoDIY/bootloader/drivers-micronucleus"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Exemplos Arduino","items":[{"type":"link","label":"Configura\xe7\xe3o da Arduino IDE","href":"/docs/franzininho-diy/pacote","docId":"FranzininhoDIY/exemplos-arduino/pacote"},{"type":"link","label":"Entradas e Sa\xeddas Digitais","href":"/docs/franzininho-diy/entradas-saidas-digitais","docId":"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais"},{"type":"link","label":"Entradas Anal\xf3gicas","href":"/docs/franzininho-diy/entradas-analogicas","docId":"FranzininhoDIY/exemplos-arduino/entradas-analogicas"},{"type":"link","label":"Sa\xeddas PWM","href":"/docs/franzininho-diy/saidas-pwm","docId":"FranzininhoDIY/exemplos-arduino/saidas-pwm"},{"type":"link","label":"Pisca LED","href":"/docs/franzininho-diy/pisca-led","docId":"FranzininhoDIY/exemplos-arduino/pisca-led"},{"type":"link","label":"Controle brilho de LED","href":"/docs/franzininho-diy/brilho-led","docId":"FranzininhoDIY/exemplos-arduino/brilho-led"},{"type":"link","label":"Leitura de Tecla","href":"/docs/franzininho-diy/leitura-tecla","docId":"FranzininhoDIY/exemplos-arduino/leitura-tecla"},{"type":"link","label":"Tecla Liga/Desliga","href":"/docs/franzininho-diy/tecla-liga-desliga","docId":"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga"},{"type":"link","label":"LED RGB","href":"/docs/franzininho-diy/led-rgb","docId":"FranzininhoDIY/exemplos-arduino/led-rgb"},{"type":"link","label":"Elefante Colorido! Que cor?","href":"/docs/franzininho-diy/elefante-colorido","docId":"FranzininhoDIY/exemplos-arduino/elefante-colorido"},{"type":"link","label":"Sensor de luz com LDR","href":"/docs/franzininho-diy/sensor-luz-ldr","docId":"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr"},{"type":"link","label":"Sem\xe1foro","href":"/docs/franzininho-diy/semaforo","docId":"FranzininhoDIY/exemplos-arduino/semaforo"},{"type":"link","label":"Theremim","href":"/docs/franzininho-diy/theremim","docId":"FranzininhoDIY/exemplos-arduino/theremim"},{"type":"link","label":"Girassol Automatizado","href":"/docs/franzininho-diy/girassol-automatizado","docId":"FranzininhoDIY/exemplos-arduino/girassol-automatizado"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Exemplos AVR Libc","items":[{"type":"link","label":"Primeiros Passos","href":"/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos","docId":"FranzininhoDIY/exemplos-avr-libc/primeiros-passos"},{"type":"link","label":"Hello, World!","href":"/docs/franzininho-diy/exemplos-avr-libc/hello-world","docId":"FranzininhoDIY/exemplos-avr-libc/hello-world"},{"type":"link","label":"Sa\xedda Digital","href":"/docs/franzininho-diy/exemplos-avr-libc/saida-digital","docId":"FranzininhoDIY/exemplos-avr-libc/saida-digital"},{"type":"link","label":"Entrada Digital","href":"/docs/franzininho-diy/exemplos-avr-libc/entrada-digital","docId":"FranzininhoDIY/exemplos-avr-libc/entrada-digital"},{"type":"link","label":"Timer 0","href":"/docs/franzininho-diy/exemplos-avr-libc/timer0","docId":"FranzininhoDIY/exemplos-avr-libc/timer0"},{"type":"link","label":"Timer 0 - Interrup\xe7\xe3o","href":"/docs/franzininho-diy/exemplos-avr-libc/timer0-int","docId":"FranzininhoDIY/exemplos-avr-libc/timer0-int"},{"type":"link","label":"Contador de pulsos externos","href":"/docs/franzininho-diy/exemplos-avr-libc/contadores","docId":"FranzininhoDIY/exemplos-avr-libc/contadores"},{"type":"link","label":"Instrumento musical com Buzzer","href":"/docs/franzininho-diy/exemplos-avr-libc/buzzer","docId":"FranzininhoDIY/exemplos-avr-libc/buzzer"},{"type":"link","label":"Interrup\xe7\xe3o externa","href":"/docs/franzininho-diy/exemplos-avr-libc/int-ext","docId":"FranzininhoDIY/exemplos-avr-libc/int-externa"},{"type":"link","label":"TODO","href":"/docs/franzininho-diy/exemplos-avr-libc/todo","docId":"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Simulador Wokwi","items":[{"type":"link","label":"Como simular a Franzininho DIY no Wokwi","href":"/docs/franzininho-diy/wokwi/primeiros-passos","docId":"FranzininhoDIY/wokwi/wokwi-intro"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Simulador PICSimLab","items":[{"type":"link","label":"Franzininho DIY no PICSimLab","href":"/docs/franzininho-diy/picsimlab/primeiros-passos","docId":"FranzininhoDIY/picsimlab/picsimlab-intro"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"FranzMakey","items":[{"type":"link","label":"Placa FranzMakey","href":"/docs/FranzMakey/franzmakey","docId":"FranzMakey/franzmakey"},{"type":"link","label":"Primeiros Passos","href":"/docs/FranzMakey/primeiros-passos","docId":"FranzMakey/primeiros-passos"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho Tiny","items":[{"type":"link","label":"Placa Franzininho Tiny","href":"/docs/franzininho-tiny/franzininho-tiny","docId":"FranzininhoTiny/franzininho-tiny"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzino","items":[{"type":"link","label":"Placa Franzino","href":"/docs/Franzino/franzino","docId":"Franzino/franzino"},{"type":"link","label":"Upload via conversor USB/SERIAL","href":"/docs/Franzino/upload-conversor-serial","docId":"Franzino/upload-conversor-serial"},{"type":"link","label":"Gravando a Franzino com um placa Arduino UNO","href":"/docs/Franzino/upload-com-arduino-uno","docId":"Franzino/upload-com-arduino-uno"}],"collapsed":true,"collapsible":true},{"type":"category","label":"FranzBoy","items":[{"type":"link","label":"Placa FranzBoy","href":"/docs/FranzBoy/franzboy","docId":"FranzBoy/franzboy"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Badges","items":[{"type":"link","label":"Badge - Aprenda a soldar","href":"/docs/badge/badge","docId":"Badge/badge"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Laborat\xf3rio de Sistemas Embarcados e IoT","items":[{"type":"link","label":"Placa Laborat\xf3rio de Sistemas Embarcados e IoT","href":"/docs/LaboratorioSistemasIot/LaboratorioSistemasIot","docId":"LaboratorioSistemasIot/laboratorio-sistemas-iot"},{"type":"category","label":"Adaptadores","items":[{"type":"link","label":"Adaptador Arduino Uno","href":"/docs/LaboratorioSistemasIot/adaptadores/arduino-uno","docId":"LaboratorioSistemasIot/adaptadores/adaptador-arduino"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Bibliotecas","items":[{"type":"link","label":"laboratorioFW","href":"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","docId":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW"},{"type":"link","label":"laboratorioFW_ARDUNO","href":"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO","docId":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}]},"docs":{"Badge/badge":{"id":"Badge/badge","title":"Badge - Aprenda a soldar","description":"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.","sidebar":"docs"},"FranzBoy/franzboy":{"id":"FranzBoy/franzboy","title":"Placa FranzBoy","description":"Detalhes da placa Franzboy","sidebar":"docs"},"FranzininhoDIY/bootloader/bootloader":{"id":"FranzininhoDIY/bootloader/bootloader","title":"Bootloader","description":"Grava\xe7\xe3o do Bootloader na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/bootloader/drivers-micronucleus":{"id":"FranzininhoDIY/bootloader/drivers-micronucleus","title":"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB","description":"Instala\xe7\xe3o dos drivers USB para correto funcionamento","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/brilho-led":{"id":"FranzininhoDIY/exemplos-arduino/brilho-led","title":"Controle brilho de LED","description":"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/elefante-colorido":{"id":"FranzininhoDIY/exemplos-arduino/elefante-colorido","title":"Elefante Colorido! Que cor?","description":"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/entradas-analogicas":{"id":"FranzininhoDIY/exemplos-arduino/entradas-analogicas","title":"Entradas Anal\xf3gicas","description":"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais":{"id":"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais","title":"Entradas e Sa\xeddas Digitais","description":"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/girassol-automatizado":{"id":"FranzininhoDIY/exemplos-arduino/girassol-automatizado","title":"Girassol Automatizado","description":"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/led-rgb":{"id":"FranzininhoDIY/exemplos-arduino/led-rgb","title":"LED RGB","description":"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/leitura-tecla":{"id":"FranzininhoDIY/exemplos-arduino/leitura-tecla","title":"Leitura de Tecla","description":"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/pacote":{"id":"FranzininhoDIY/exemplos-arduino/pacote","title":"Configura\xe7\xe3o da Arduino IDE","description":"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/pisca-led":{"id":"FranzininhoDIY/exemplos-arduino/pisca-led","title":"Pisca LED","description":"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/saidas-pwm":{"id":"FranzininhoDIY/exemplos-arduino/saidas-pwm","title":"Sa\xeddas PWM","description":"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/semaforo":{"id":"FranzininhoDIY/exemplos-arduino/semaforo","title":"Sem\xe1foro","description":"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr":{"id":"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr","title":"Sensor de luz com LDR","description":"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga":{"id":"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga","title":"Tecla Liga/Desliga","description":"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/theremim":{"id":"FranzininhoDIY/exemplos-arduino/theremim","title":"Theremim","description":"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/tutoriais-i2c":{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-i2c","title":"I2C","description":"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},"FranzininhoDIY/exemplos-arduino/tutoriais-introducao":{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-introducao","title":"Introdu\xe7\xe3o","description":"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho"},"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo":{"id":"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo","title":"TODO","description":"Mapeamento dos conte\xfados para exemplos com a AVR LibC","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/buzzer":{"id":"FranzininhoDIY/exemplos-avr-libc/buzzer","title":"Instrumento musical com Buzzer","description":"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/contadores":{"id":"FranzininhoDIY/exemplos-avr-libc/contadores","title":"Contador de pulsos externos","description":"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/entrada-digital":{"id":"FranzininhoDIY/exemplos-avr-libc/entrada-digital","title":"Entrada Digital","description":"Vamos entender como trabalhar com as Entradas Digitais","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/hello-world":{"id":"FranzininhoDIY/exemplos-avr-libc/hello-world","title":"Hello, World!","description":"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/int-externa":{"id":"FranzininhoDIY/exemplos-avr-libc/int-externa","title":"Interrup\xe7\xe3o externa","description":"Exemplo para uso da interrup\xe7\xe3o externa","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/primeiros-passos":{"id":"FranzininhoDIY/exemplos-avr-libc/primeiros-passos","title":"Primeiros Passos","description":"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/saida-digital":{"id":"FranzininhoDIY/exemplos-avr-libc/saida-digital","title":"Sa\xedda Digital","description":"Vamos entender como trabalhar com as sa\xeddas Digitais","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/timer0":{"id":"FranzininhoDIY/exemplos-avr-libc/timer0","title":"Timer 0","description":"Vamos aprender usar o timer 0 como temporizador","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/timer0-int":{"id":"FranzininhoDIY/exemplos-avr-libc/timer0-int","title":"Timer 0 - Interrup\xe7\xe3o","description":"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o","sidebar":"docs"},"FranzininhoDIY/franzininho-diy":{"id":"FranzininhoDIY/franzininho-diy","title":"Placa Franzininho DIY","description":"Detalhes da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/identificando-componentes":{"id":"FranzininhoDIY/identificando-componentes","title":"Identificando os componentes","description":"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.","sidebar":"docs"},"FranzininhoDIY/lista-de-materiais":{"id":"FranzininhoDIY/lista-de-materiais","title":"Lista de Materiais","description":"Lista de materiais (componentes) para montagem da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/montagem":{"id":"FranzininhoDIY/montagem","title":"Montagem da Franzininho DIY","description":"Passo a passo da montagem da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/picsimlab/picsimlab-intro":{"id":"FranzininhoDIY/picsimlab/picsimlab-intro","title":"Franzininho DIY no PICSimLab","description":"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/wokwi/wokwi-intro":{"id":"FranzininhoDIY/wokwi/wokwi-intro","title":"Como simular a Franzininho DIY no Wokwi","description":"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY","sidebar":"docs"},"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos":{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos","title":"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino","description":"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino","sidebar":"docs"},"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos":{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos","title":"Primeiros passos com Arduino","description":"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0","sidebar":"docs"},"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist":{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist","title":"Arduino IDE TODO List","description":"Todo list para exemplos com Arduino","sidebar":"docs"},"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide":{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide","title":"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos","description":"7 passos para voc\xea configurar um novo projeto para a Franzininho C0","sidebar":"docs"},"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist":{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist","title":"STM32Cube IDE TODO List","description":"Todo list para exemplos com STM32Cube IDE","sidebar":"docs"},"franzininhoSTM32C0/franzininho-stm32c0":{"id":"franzininhoSTM32C0/franzininho-stm32c0","title":"Placa Franzininho C0","description":"Franzininho C0 \'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics","sidebar":"docs"},"FranzininhoTiny/franzininho-tiny":{"id":"FranzininhoTiny/franzininho-tiny","title":"Placa Franzininho Tiny","description":"Detalhes da Franzininho Tiny","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino":{"id":"FranzininhoWifi/exemplos-arduino/arduino","title":"Primeiros Passos","description":"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino-blink":{"id":"FranzininhoWifi/exemplos-arduino/arduino-blink","title":"Blink","description":"Primeiro Hello World com a Franzininho WiFi no Arduino IDE","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino-dht11":{"id":"FranzininhoWifi/exemplos-arduino/arduino-dht11","title":"Leitura DHT11","description":"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino-neopixel":{"id":"FranzininhoWifi/exemplos-arduino/arduino-neopixel","title":"Neopixel RGB LED Onboard","description":"Exemplo de uso do led RGB onboard do Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11","title":"Sensor de temperatura e umidade DHT11","description":"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c","title":"Display OLED I2C","description":"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas","title":"Entrada Anal\xf3gica","description":"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais","title":"Entradas e Sa\xeddas Digitais","description":"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas","title":"Instalando as ferramentas","description":"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world","title":"Hello World!","description":"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos","title":"Primeiros Passos","description":"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm","title":"PWM - Pulse Width Modulation","description":"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04","title":"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04","description":"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console","title":"Serial Console","description":"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor","title":"Servo motor","description":"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o","title":"Sistema de irriga\xe7\xe3o autom\xe1tico","description":"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo","title":"Pinos de Toque Capacitivo","description":"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00","title":"Primeiros Passos com ESP-IDF","description":"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01","title":"Hello World! ESP-IDF","description":"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02","title":"Entrada digital","description":"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03","title":"Entrada Anal\xf3gica","description":"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04","title":"PWM com LEDC","description":"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05","title":"Primeiros passos com a AWS","description":"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.","sidebar":"docs"},"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais":{"id":"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais","title":"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython","description":"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.","sidebar":"docs"},"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos":{"id":"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos","title":"Primeiros Passos com MicroPython","description":"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.","sidebar":"docs"},"FranzininhoWifi/franzininho-wifi":{"id":"FranzininhoWifi/franzininho-wifi","title":"Placa Franzininho WiFi","description":"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes.","sidebar":"docs"},"FranzininhoWifi/franzininho-wifi-dev-edition":{"id":"FranzininhoWifi/franzininho-wifi-dev-edition","title":"Placa Franzininho WiFi dev Edition","description":"Detalhes da Franzininho WiFi Developer Edition","sidebar":"docs"},"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro":{"id":"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro","title":"Como simular a Franzininho WiFi no Wokwi","description":"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi","sidebar":"docs"},"FranzininhoWiFiLAB01/franzininho-wifi-lab01":{"id":"FranzininhoWiFiLAB01/franzininho-wifi-lab01","title":"Franzininho WiFi LAB01","description":"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi.","sidebar":"docs"},"Franzino/franzino":{"id":"Franzino/franzino","title":"Placa Franzino","description":"Detalhes da placa Franzino","sidebar":"docs"},"Franzino/upload-com-arduino-uno":{"id":"Franzino/upload-com-arduino-uno","title":"Gravando a Franzino com um placa Arduino UNO","description":"Veja como usar um Arduino Uno como programador para a Franzino","sidebar":"docs"},"Franzino/upload-conversor-serial":{"id":"Franzino/upload-conversor-serial","title":"Upload via conversor USB/SERIAL","description":"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos","sidebar":"docs"},"FranzMakey/franzmakey":{"id":"FranzMakey/franzmakey","title":"Placa FranzMakey","description":"Detalhes da placa FranzMakey","sidebar":"docs"},"FranzMakey/primeiros-passos":{"id":"FranzMakey/primeiros-passos","title":"Primeiros Passos","description":"Primeiros passos com a placa FranzMakey","sidebar":"docs"},"LaboratorioSistemasIot/adaptadores/adaptador-arduino":{"id":"LaboratorioSistemasIot/adaptadores/adaptador-arduino","title":"Adaptador Arduino Uno","description":"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT","sidebar":"docs"},"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW":{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","title":"laboratorioFW","description":"O que \xe9 a biblioteca laboratorioFW","sidebar":"docs"},"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO":{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO","title":"laboratorioFW_ARDUNO","description":"O que \xe9 a biblioteca laboratorioFW-ARDUNO","sidebar":"docs"},"LaboratorioSistemasIot/laboratorio-sistemas-iot":{"id":"LaboratorioSistemasIot/laboratorio-sistemas-iot","title":"Placa Laborat\xf3rio de Sistemas Embarcados e IoT","description":"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT","sidebar":"docs"},"sobre":{"id":"sobre","title":"Seja bem vindo a documenta\xe7\xe3o do projeto Franzininho","description":"Aqui voc\xea encontra a documenta\xe7\xe3o (em Desenvolvimento) para trabalhar com todas as placas e Kits Franzininho.","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/94c955d1.021550af.js b/assets/js/94c955d1.021550af.js new file mode 100755 index 000000000..189f4ff68 --- /dev/null +++ b/assets/js/94c955d1.021550af.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6200],{6604:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var t=i(17624),r=i(95788);const s={id:"franzininhoc0-arduino-identificacao-pinos",title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",slug:"/franzininho-c0/arduino-identificacao-pinos",description:"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino"},a=void 0,o={id:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos",title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",description:"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino",source:"@site/docs/franzininhoSTM32C0/exemplos-arduino/identificacao-pinos.md",sourceDirName:"franzininhoSTM32C0/exemplos-arduino",slug:"/franzininho-c0/arduino-identificacao-pinos",permalink:"/docs/franzininho-c0/arduino-identificacao-pinos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-arduino/identificacao-pinos.md",tags:[],version:"current",frontMatter:{id:"franzininhoc0-arduino-identificacao-pinos",title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",slug:"/franzininho-c0/arduino-identificacao-pinos",description:"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino"},sidebar:"docs",previous:{title:"Primeiros passos com Arduino",permalink:"/docs/franzininho-c0/arduino-primeiros-passos"},next:{title:"Placa Franzininho DIY",permalink:"/docs/franzininho-diy/sobre"}},d={},l=[{value:"Entrada e Sa\xedda Digital",id:"entrada-e-sa\xedda-digital",level:2},{value:"Entrada Anal\xf3gica (ADC)",id:"entrada-anal\xf3gica-adc",level:2},{value:"Interface Serial Ass\xedncrona (UART)",id:"interface-serial-ass\xedncrona-uart",level:2},{value:"SPI",id:"spi",level:2},{value:"I^2^C",id:"i2c",level:2},{value:"Op\xe7\xf5es V\xe1lidas para os Pinos",id:"op\xe7\xf5es-v\xe1lidas-para-os-pinos",level:2}];function c(e){const n={code:"code",em:"em",h2:"h2",img:"img",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.MN)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"Na documenta\xe7\xe3o da ST, os pinos dos microcontroladores STM32 s\xe3o identificados por nomes como PA1, PA2 e PB6 (como pode ser visto no esquema da Franzininho C0). Descrevemos aqui as identifica\xe7\xf5es usadas no Ambiente Arduino."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:'Estas informa\xe7\xf5es se referem \xe0 op\xe7\xe3o de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma op\xe7\xe3o de placa espec\xedfica para a Franzininho C0, usando op\xe7\xf5es default mais adequadas para os pinos.'})}),"\n",(0,t.jsx)(n.p,{children:"A figura abaixo resume as identifica\xe7\xf5es:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",src:i(91740).c+"",width:"800",height:"595"})}),"\n",(0,t.jsx)(n.p,{children:'O pacote STM32duino aceita as identifica\xe7\xf5es do tipo PA1 como "nomes" dos pinos, por\xe9m esta n\xe3o \xe9 a identifica\xe7\xe3o usual do ambiente Arduino.'}),"\n",(0,t.jsx)(n.h2,{id:"entrada-e-sa\xedda-digital",children:"Entrada e Sa\xedda Digital"}),"\n",(0,t.jsx)(n.p,{children:"Para entrada e sa\xedda digital, o ambiente Arduino utiliza n\xfameros para identificar os pinos. A figura no in\xedcio da p\xe1gina mostra os n\xfameros correspondentes aos pinos da Franzininho."}),"\n",(0,t.jsx)(n.p,{children:"As fun\xe7\xf5es digitais aceitam tamb\xe9m os nomes usados para entrada anal\xf3gica (ver o pr\xf3ximo item)."}),"\n",(0,t.jsx)(n.h2,{id:"entrada-anal\xf3gica-adc",children:"Entrada Anal\xf3gica (ADC)"}),"\n",(0,t.jsx)(n.p,{children:"Para entrada anal\xf3gica, o ambiente Arduino utiliza nomes do tipo An. A figura no in\xedcio da p\xe1gina mostra os nomes correspondentes aos pinos da Franzininho."}),"\n",(0,t.jsx)(n.h2,{id:"interface-serial-ass\xedncrona-uart",children:"Interface Serial Ass\xedncrona (UART)"}),"\n",(0,t.jsx)(n.p,{children:"O microcontrolador na Franzininho C0 possui duas interfaces seriais ass\xedncronas (uart1 e uart2). Ele possui uma certa flexibilidade na conex\xe3o destas interfaces aos pinos."}),"\n",(0,t.jsx)(n.p,{children:"No ambiente Arduino, as interfaces seriais ass\xedncronas s\xe3o acessadas atrav\xe9s de objetos com nomes como Serial, Serial1 e Serial2."}),"\n",(0,t.jsx)(n.p,{children:"Na Franzininho C0, os pinos PA9 e PA10 est\xe3o conectados ao conversor serial USB CH340, para fornecer comunica\xe7\xe3o serial com um micro atrav\xe9s de um cabo USB."}),"\n",(0,t.jsxs)(n.p,{children:['A op\xe7\xe3o "Generic STM32C0" define um objeto Serial associado \xe0 interface uart1, usando os pinos PA0 e PA1 (como indicado na figura no alto da p\xe1gina). Para usar o objeto Serial para comunicar via USB \xe9 preciso reconfigurar os pinos atrav\xe9s dos m\xe9todos setRx e setTx ',(0,t.jsx)(n.strong,{children:"antes"}),' de chamar o m\xe9todo begin (veja tamb\xe9m o exemplo "Hello World"):']}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:" Serial.setRx(PA_10_R);\r\n Serial.setTx(PA_9_R);\r\n Serial.begin(115200);\n"})}),"\n",(0,t.jsx)(n.p,{children:"Obs.: Os nomes especiais para os pinos PA9 e PA10 se devem ao fato destes pinos compartilharem os mesmos pinos f\xedsicos que PA11 e PA12."}),"\n",(0,t.jsx)(n.p,{children:"Para usar a uart2 \xe9 preciso declarar um objeto Serial2 e especificar os pinos que ser\xe3o usados:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"HardwareSerial Serial2(uart2);\r\n\r\n Serial2.setRx(PA3);\r\n Serial2.setTx(PA2);\r\n Serial2.begin(115200);\n"})}),"\n",(0,t.jsx)(n.h2,{id:"spi",children:"SPI"}),"\n",(0,t.jsx)(n.p,{children:"A figura no alto da p\xe1gina indica os pinos utilizados por padr\xe3o para a interface spi, acessada atrav\xe9s do objeto SPI que \xe9 parte da bioblioteca padr\xe3o SPI."}),"\n",(0,t.jsx)(n.p,{children:"Veja detalhes no exemplo SPI."}),"\n",(0,t.jsx)(n.h2,{id:"i2c",children:"I^2^C"}),"\n",(0,t.jsx)(n.p,{children:"No ambiente Arduino, a interface i^2^c \xe9 acessada atrav\xe9s do objeto Wire, que \xe9 parte da bioblioteca padr\xe3o SPI."}),"\n",(0,t.jsxs)(n.p,{children:['A op\xe7\xe3o "Generic STM32C0" usa como padr\xe3o os pinos PA9 e PA10 para a interface i2c. Como estes pinos est\xe3o ligados na Franzininho C0 aos conversor serial USB, \xe9 preciso reconfigurar os pinos atrav\xe9s dos m\xe9todos setSCL e setSDA ',(0,t.jsx)(n.strong,{children:"antes"}),' de chamar o m\xe9todo begin (veja o exemplo "I2C").']}),"\n",(0,t.jsx)(n.h2,{id:"op\xe7\xf5es-v\xe1lidas-para-os-pinos",children:"Op\xe7\xf5es V\xe1lidas para os Pinos"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"UART1"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Sinal"}),(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Op\xe7\xf5es"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"TX"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA0, PA9, PB6, PC14"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"RX"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA1, PA8, PA10, PB7"})]})]})]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"UART2"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Sinal"}),(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Op\xe7\xf5es"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"TX"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA2, PA4, PA8, PA14"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"RX"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA3, PA5, PA13, PA14"})]})]})]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"SPI"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Sinal"}),(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Op\xe7\xf5es"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"MISO"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA6, PA1, PB6"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"MOSI"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA2, PA7, PA12, PB6"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"SCK"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA1, PA5, PB6"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"SS"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA4, PA8, PA14"})]})]})]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"I2C"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Sinal"}),(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Op\xe7\xf5es"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"SCL"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA9, PB6, PB7"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"SDA"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PC14, PA10, PB7"})]})]})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Autor"}),(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Daniel Quadros"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"Data:"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"19/10/2023"})]})})]})]})}function p(e={}){const{wrapper:n}={...(0,r.MN)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},95788:(e,n,i)=>{i.d(n,{MN:()=>l});var t=i(11504);function r(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function s(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,t)}return i}function a(e){for(var n=1;n=0||(r[i]=e[i]);return r}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var d=t.createContext({}),l=function(e){var n=t.useContext(d),i=n;return e&&(i="function"==typeof e?e(n):a(a({},n),e)),i},c={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},p=t.forwardRef((function(e,n){var i=e.components,r=e.mdxType,s=e.originalType,d=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),h=l(i),x=r,f=h["".concat(d,".").concat(x)]||h[x]||c[x]||s;return i?t.createElement(f,a(a({ref:n},p),{},{components:i})):t.createElement(f,a({ref:n},p))}));p.displayName="MDXCreateElement"},91740:(e,n,i)=>{i.d(n,{c:()=>t});const t=i.p+"assets/images/FranzC0_Arduino-89bf26df3ced3b5ae9d0bb802bebeebb.png"}}]); \ No newline at end of file diff --git a/assets/js/94c955d1.af720c33.js b/assets/js/94c955d1.af720c33.js deleted file mode 100755 index 89d089cc7..000000000 --- a/assets/js/94c955d1.af720c33.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7347],{3905:(e,a,t)=>{t.d(a,{Zo:()=>p,kt:()=>f});var n=t(7294);function r(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function i(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function o(e){for(var a=1;a=0||(r[t]=e[t]);return r}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var l=n.createContext({}),d=function(e){var a=n.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):o(o({},a),e)),t},p=function(e){var a=d(e.components);return n.createElement(l.Provider,{value:a},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var t=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=d(t),u=r,f=c["".concat(l,".").concat(u)]||c[u]||m[u]||i;return t?n.createElement(f,o(o({ref:a},p),{},{components:t})):n.createElement(f,o({ref:a},p))}));function f(e,a){var t=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=u;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[c]="string"==typeof e?e:r,o[1]=s;for(var d=2;d{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var n=t(3117),r=(t(7294),t(3905));const i={id:"franzininhoc0-arduino-identificacao-pinos",title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",slug:"/franzininho-c0/arduino-identificacao-pinos",description:"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino"},o=void 0,s={unversionedId:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos",id:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos",title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",description:"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino",source:"@site/docs/franzininhoSTM32C0/exemplos-arduino/identificacao-pinos.md",sourceDirName:"franzininhoSTM32C0/exemplos-arduino",slug:"/franzininho-c0/arduino-identificacao-pinos",permalink:"/docs/franzininho-c0/arduino-identificacao-pinos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-arduino/identificacao-pinos.md",tags:[],version:"current",frontMatter:{id:"franzininhoc0-arduino-identificacao-pinos",title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",slug:"/franzininho-c0/arduino-identificacao-pinos",description:"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino"},sidebar:"docs",previous:{title:"Primeiros passos com Arduino",permalink:"/docs/franzininho-c0/arduino-primeiros-passos"},next:{title:"Placa Franzininho DIY",permalink:"/docs/franzininho-diy/sobre"}},l={},d=[{value:"Entrada e Sa\xedda Digital",id:"entrada-e-sa\xedda-digital",level:2},{value:"Entrada Anal\xf3gica (ADC)",id:"entrada-anal\xf3gica-adc",level:2},{value:"Interface Serial Ass\xedncrona (UART)",id:"interface-serial-ass\xedncrona-uart",level:2},{value:"SPI",id:"spi",level:2},{value:"I^2^C",id:"i2c",level:2},{value:"Op\xe7\xf5es V\xe1lidas para os Pinos",id:"op\xe7\xf5es-v\xe1lidas-para-os-pinos",level:2}],p={toc:d},c="wrapper";function m(e){let{components:a,...i}=e;return(0,r.kt)(c,(0,n.Z)({},p,i,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Na documenta\xe7\xe3o da ST, os pinos dos microcontroladores STM32 s\xe3o identificados por nomes como PA1, PA2 e PB6 (como pode ser visto no esquema da Franzininho C0). Descrevemos aqui as identifica\xe7\xf5es usadas no Ambiente Arduino."),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},'Estas informa\xe7\xf5es se referem \xe0 op\xe7\xe3o de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma op\xe7\xe3o de placa espec\xedfica para a Franzininho C0, usando op\xe7\xf5es default mais adequadas para os pinos.')),(0,r.kt)("p",null,"A figura abaixo resume as identifica\xe7\xf5es:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",src:t(1572).Z,width:"1500",height:"1116"})),(0,r.kt)("p",null,'O pacote STM32duino aceita as identifica\xe7\xf5es do tipo PA1 como "nomes" dos pinos, por\xe9m esta n\xe3o \xe9 a identifica\xe7\xe3o usual do ambiente Arduino.'),(0,r.kt)("h2",{id:"entrada-e-sa\xedda-digital"},"Entrada e Sa\xedda Digital"),(0,r.kt)("p",null,"Para entrada e sa\xedda digital, o ambiente Arduino utiliza n\xfameros para identificar os pinos. A figura no in\xedcio da p\xe1gina mostra os n\xfameros correspondentes aos pinos da Franzininho."),(0,r.kt)("p",null,"As fun\xe7\xf5es digitais aceitam tamb\xe9m os nomes usados para entrada anal\xf3gica (ver o pr\xf3ximo item)."),(0,r.kt)("h2",{id:"entrada-anal\xf3gica-adc"},"Entrada Anal\xf3gica (ADC)"),(0,r.kt)("p",null,"Para entrada anal\xf3gica, o ambiente Arduino utiliza nomes do tipo An. A figura no in\xedcio da p\xe1gina mostra os nomes correspondentes aos pinos da Franzininho."),(0,r.kt)("h2",{id:"interface-serial-ass\xedncrona-uart"},"Interface Serial Ass\xedncrona (UART)"),(0,r.kt)("p",null,"O microcontrolador na Franzininho C0 possui duas interfaces seriais ass\xedncronas (uart1 e uart2). Ele possui uma certa flexibilidade na conex\xe3o destas interfaces aos pinos."),(0,r.kt)("p",null,"No ambiente Arduino, as interfaces seriais ass\xedncronas s\xe3o acessadas atrav\xe9s de objetos com nomes como Serial, Serial1 e Serial2."),(0,r.kt)("p",null,"Na Franzininho C0, os pinos PA9 e PA10 est\xe3o conectados ao conversor serial USB CH340, para fornecer comunica\xe7\xe3o serial com um micro atrav\xe9s de um cabo USB."),(0,r.kt)("p",null,'A op\xe7\xe3o "Generic STM32C0" define um objeto Serial associado \xe0 interface uart1, usando os pinos PA0 e PA1 (como indicado na figura no alto da p\xe1gina). Para usar o objeto Serial para comunicar via USB \xe9 preciso reconfigurar os pinos atrav\xe9s dos m\xe9todos setRx e setTx ',(0,r.kt)("strong",{parentName:"p"},"antes"),' de chamar o m\xe9todo begin (veja tamb\xe9m o exemplo "Hello World"):'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"}," Serial.setRx(PA_10_R);\n Serial.setTx(PA_9_R);\n Serial.begin(115200);\n")),(0,r.kt)("p",null,"Obs.: Os nomes especiais para os pinos PA9 e PA10 se devem ao fato destes pinos compartilharem os mesmos pinos f\xedsicos que PA11 e PA12."),(0,r.kt)("p",null,"Para usar a uart2 \xe9 preciso declarar um objeto Serial2 e especificar os pinos que ser\xe3o usados:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"HardwareSerial Serial2(uart2);\n\n Serial2.setRx(PA3);\n Serial2.setTx(PA2);\n Serial2.begin(115200);\n")),(0,r.kt)("h2",{id:"spi"},"SPI"),(0,r.kt)("p",null,"A figura no alto da p\xe1gina indica os pinos utilizados por padr\xe3o para a interface spi, acessada atrav\xe9s do objeto SPI que \xe9 parte da bioblioteca padr\xe3o SPI."),(0,r.kt)("p",null,"Veja detalhes no exemplo SPI."),(0,r.kt)("h2",{id:"i2c"},"I^2^C"),(0,r.kt)("p",null,"No ambiente Arduino, a interface i^2^c \xe9 acessada atrav\xe9s do objeto Wire, que \xe9 parte da bioblioteca padr\xe3o SPI."),(0,r.kt)("p",null,'A op\xe7\xe3o "Generic STM32C0" usa como padr\xe3o os pinos PA9 e PA10 para a interface i2c. Como estes pinos est\xe3o ligados na Franzininho C0 aos conversor serial USB, \xe9 preciso reconfigurar os pinos atrav\xe9s dos m\xe9todos setSCL e setSDA ',(0,r.kt)("strong",{parentName:"p"},"antes"),' de chamar o m\xe9todo begin (veja o exemplo "I2C").'),(0,r.kt)("h2",{id:"op\xe7\xf5es-v\xe1lidas-para-os-pinos"},"Op\xe7\xf5es V\xe1lidas para os Pinos"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"UART1")," "),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Sinal"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Op\xe7\xf5es"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"TX"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA0, PA9, PB6, PC14")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"RX"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA1, PA8, PA10, PB7")))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"UART2")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Sinal"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Op\xe7\xf5es"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"TX"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA2, PA4, PA8, PA14")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"RX"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA3, PA5, PA13, PA14")))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"SPI")," "),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Sinal"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Op\xe7\xf5es"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"MISO"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA6, PA1, PB6")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"MOSI"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA2, PA7, PA12, PB6")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"SCK"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA1, PA5, PB6")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"SS"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA4, PA8, PA14")))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"I2C")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Sinal"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Op\xe7\xf5es"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"SCL"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA9, PB6, PB7")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"SDA"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PC14, PA10, PB7")))),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Autor"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Daniel Quadros"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Data:"),(0,r.kt)("td",{parentName:"tr",align:"left"},"19/10/2023")))))}m.isMDXComponent=!0},1572:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/FranzC0_Arduino-89bf26df3ced3b5ae9d0bb802bebeebb.png"}}]); \ No newline at end of file diff --git a/assets/js/9785.4a98800b.js b/assets/js/9785.4a98800b.js deleted file mode 100755 index ba6e3434e..000000000 --- a/assets/js/9785.4a98800b.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9785],{3905:(e,t,n)=>{"use strict";n.d(t,{Zo:()=>u,kt:()=>f});var o=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function c(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=o.createContext({}),s=function(e){var t=o.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},u=function(e){var t=s(e.components);return o.createElement(i.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},p=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,i=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=s(n),p=a,f=m["".concat(i,".").concat(p)]||m[p]||d[p]||r;return n?o.createElement(f,c(c({ref:t},u),{},{components:n})):o.createElement(f,c({ref:t},u))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,c=new Array(r);c[0]=p;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[m]="string"==typeof e?e:a,c[1]=l;for(var s=2;s{"use strict";n.d(t,{Z:()=>u});var o=n(7294),a=n(5999),r=n(5281),c=n(3117),l=n(4334);const i={iconEdit:"iconEdit_Z9Sw"};function s(e){let{className:t,...n}=e;return o.createElement("svg",(0,c.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,l.Z)(i.iconEdit,t),"aria-hidden":"true"},n),o.createElement("g",null,o.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function u(e){let{editUrl:t}=e;return o.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:r.k.common.editThisPage},o.createElement(s,null),o.createElement(a.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},2503:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var o=n(3117),a=n(7294),r=n(4334),c=n(5999),l=n(6668),i=n(9960);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};function u(e){let{as:t,id:n,...u}=e;const{navbar:{hideOnScroll:m}}=(0,l.L)();if("h1"===t||!n)return a.createElement(t,(0,o.Z)({},u,{id:void 0}));const d=(0,c.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return a.createElement(t,(0,o.Z)({},u,{className:(0,r.Z)("anchor",m?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,u.className),id:n}),u.children,a.createElement(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":d,title:d},"\u200b"))}},1506:(e,t,n)=>{"use strict";n.d(t,{Z:()=>be});var o=n(7294),a=n(3905),r=n(3117),c=n(5742);var l=n(2389),i=n(4334),s=n(2949),u=n(6668);function m(){const{prism:e}=(0,u.L)(),{colorMode:t}=(0,s.I)(),n=e.theme,o=e.darkTheme||n;return"dark"===t?o:n}var d=n(5281),p=n(7594),f=n.n(p);const g=/title=(?["'])(?.*?)\1/,h=/\{(?<range>[\d,-]+)\}/,y={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function b(e,t){const n=e.map((e=>{const{start:n,end:o}=y[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${o})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function v(e,t){let n=e.replace(/\n$/,"");const{language:o,magicComments:a,metastring:r}=t;if(r&&h.test(r)){const e=r.match(h).groups.range;if(0===a.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${r}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=a[0].className,o=f()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(o),code:n}}if(void 0===o)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return b(["js","jsBlock"],t);case"jsx":case"tsx":return b(["js","jsBlock","jsx"],t);case"html":return b(["js","jsBlock","html"],t);case"python":case"py":case"bash":return b(["bash"],t);case"markdown":case"md":return b(["html","jsx","bash"],t);default:return b(Object.keys(y),t)}}(o,a),l=n.split("\n"),i=Object.fromEntries(a.map((e=>[e.className,{start:0,range:""}]))),s=Object.fromEntries(a.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),u=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),m=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let p=0;p<l.length;){const e=l[p].match(c);if(!e){p+=1;continue}const t=e.slice(1).find((e=>void 0!==e));s[t]?i[s[t]].range+=`${p},`:u[t]?i[u[t]].start=p:m[t]&&(i[m[t]].range+=`${i[m[t]].start}-${p-1},`),l.splice(p,1)}n=l.join("\n");const d={};return Object.entries(i).forEach((e=>{let[t,{range:n}]=e;f()(n).forEach((e=>{d[e]??=[],d[e].push(t)}))})),{lineClassNames:d,code:n}}const E={codeBlockContainer:"codeBlockContainer_Ckt0"};function k(e){let{as:t,...n}=e;const a=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[o,a]=e;const r=t[o];r&&"string"==typeof a&&(n[r]=a)})),n}(m());return o.createElement(t,(0,r.Z)({},n,{style:a,className:(0,i.Z)(n.className,E.codeBlockContainer,d.k.common.codeBlock)}))}const N={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function C(e){let{children:t,className:n}=e;return o.createElement(k,{as:"pre",tabIndex:0,className:(0,i.Z)(N.codeBlockStandalone,"thin-scrollbar",n)},o.createElement("code",{className:N.codeBlockLines},t))}var w=n(902);const B={attributes:!0,characterData:!0,childList:!0,subtree:!0};function Z(e,t){const[n,a]=(0,o.useState)(),r=(0,o.useCallback)((()=>{a(e.current?.closest("[role=tabpanel][hidden]"))}),[e,a]);(0,o.useEffect)((()=>{r()}),[r]),function(e,t,n){void 0===n&&(n=B);const a=(0,w.zX)(t),r=(0,w.Ql)(n);(0,o.useEffect)((()=>{const t=new MutationObserver(a);return e&&t.observe(e,r),()=>t.disconnect()}),[e,a,r])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),r())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}const T={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]};var L={Prism:n(7410).Z,theme:T};function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _(){return _=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},_.apply(this,arguments)}var x=/\r\n|\r|\n/,O=function(e){0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},S=function(e,t){var n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)};function z(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&-1===t.indexOf(o)&&(n[o]=e[o]);return n}var P=function(e){function t(){for(var t=this,n=[],o=arguments.length;o--;)n[o]=arguments[o];e.apply(this,n),j(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?function(e,t){var n=e.plain,o=Object.create(null),a=e.styles.reduce((function(e,n){var o=n.languages,a=n.style;return o&&!o.includes(t)||n.types.forEach((function(t){var n=_({},e[t],a);e[t]=n})),e}),o);return a.root=n,a.plain=_({},n,{backgroundColor:null}),a}(e.theme,e.language):void 0;return t.themeDict=n})),j(this,"getLineProps",(function(e){var n=e.key,o=e.className,a=e.style,r=_({},z(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),c=t.getThemeDict(t.props);return void 0!==c&&(r.style=c.plain),void 0!==a&&(r.style=void 0!==r.style?_({},r.style,a):a),void 0!==n&&(r.key=n),o&&(r.className+=" "+o),r})),j(this,"getStyleForToken",(function(e){var n=e.types,o=e.empty,a=n.length,r=t.getThemeDict(t.props);if(void 0!==r){if(1===a&&"plain"===n[0])return o?{display:"inline-block"}:void 0;if(1===a&&!o)return r[n[0]];var c=o?{display:"inline-block"}:{},l=n.map((function(e){return r[e]}));return Object.assign.apply(Object,[c].concat(l))}})),j(this,"getTokenProps",(function(e){var n=e.key,o=e.className,a=e.style,r=e.token,c=_({},z(e,["key","className","style","token"]),{className:"token "+r.types.join(" "),children:r.content,style:t.getStyleForToken(r),key:void 0});return void 0!==a&&(c.style=void 0!==c.style?_({},c.style,a):a),void 0!==n&&(c.key=n),o&&(c.className+=" "+o),c})),j(this,"tokenize",(function(e,t,n,o){var a={code:t,grammar:n,language:o,tokens:[]};e.hooks.run("before-tokenize",a);var r=a.tokens=e.tokenize(a.code,a.grammar,a.language);return e.hooks.run("after-tokenize",a),r}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,o=e.code,a=e.children,r=this.getThemeDict(this.props),c=t.languages[n];return a({tokens:function(e){for(var t=[[]],n=[e],o=[0],a=[e.length],r=0,c=0,l=[],i=[l];c>-1;){for(;(r=o[c]++)<a[c];){var s=void 0,u=t[c],m=n[c][r];if("string"==typeof m?(u=c>0?u:["plain"],s=m):(u=S(u,m.type),m.alias&&(u=S(u,m.alias)),s=m.content),"string"==typeof s){var d=s.split(x),p=d.length;l.push({types:u,content:d[0]});for(var f=1;f<p;f++)O(l),i.push(l=[]),l.push({types:u,content:d[f]})}else c++,t.push(u),n.push(s),o.push(0),a.push(s.length)}c--,t.pop(),n.pop(),o.pop(),a.pop()}return O(l),i}(void 0!==c?this.tokenize(t,o,c,n):[o]),className:"prism-code language-"+n,style:void 0!==r?r.root:{},getLineProps:this.getLineProps,getTokenProps:this.getTokenProps})},t}(o.Component);const A=P,I={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function W(e){let{line:t,classNames:n,showLineNumbers:a,getLineProps:c,getTokenProps:l}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const s=c({line:t,className:(0,i.Z)(n,a&&I.codeLine)}),u=t.map(((e,t)=>o.createElement("span",(0,r.Z)({key:t},l({token:e,key:t})))));return o.createElement("span",s,a?o.createElement(o.Fragment,null,o.createElement("span",{className:I.codeLineNumber}),o.createElement("span",{className:I.codeLineContent},u)):u,o.createElement("br",null))}var M=n(5999);function H(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"}))}function D(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))}const V={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function R(e){let{code:t,className:n}=e;const[a,r]=(0,o.useState)(!1),c=(0,o.useRef)(void 0),l=(0,o.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const o=document.createElement("textarea"),a=document.activeElement;o.value=e,o.setAttribute("readonly",""),o.style.contain="strict",o.style.position="absolute",o.style.left="-9999px",o.style.fontSize="12pt";const r=document.getSelection(),c=r.rangeCount>0&&r.getRangeAt(0);n.append(o),o.select(),o.selectionStart=0,o.selectionEnd=e.length;let l=!1;try{l=document.execCommand("copy")}catch{}o.remove(),c&&(r.removeAllRanges(),r.addRange(c)),a&&a.focus()}(t),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[t]);return(0,o.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),o.createElement("button",{type:"button","aria-label":a?(0,M.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,M.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,M.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,V.copyButton,a&&V.copyButtonCopied),onClick:l},o.createElement("span",{className:V.copyButtonIcons,"aria-hidden":"true"},o.createElement(H,{className:V.copyButtonIcon}),o.createElement(D,{className:V.copyButtonSuccessIcon})))}function $(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"}))}const F={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function q(e){let{className:t,onClick:n,isEnabled:a}=e;const r=(0,M.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return o.createElement("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",t,a&&F.wordWrapButtonEnabled),"aria-label":r,title:r},o.createElement($,{className:F.wordWrapButtonIcon,"aria-hidden":"true"}))}function G(e){let{children:t,className:n="",metastring:a,title:c,showLineNumbers:l,language:s}=e;const{prism:{defaultLanguage:d,magicComments:p}}=(0,u.L)(),f=s??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??d,h=m(),y=function(){const[e,t]=(0,o.useState)(!1),[n,a]=(0,o.useState)(!1),r=(0,o.useRef)(null),c=(0,o.useCallback)((()=>{const n=r.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[r,e]),l=(0,o.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=r.current,n=e>t||r.current.querySelector("code").hasAttribute("style");a(n)}),[r]);return Z(r,l),(0,o.useEffect)((()=>{l()}),[e,l]),(0,o.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:r,isEnabled:e,isCodeScrollable:n,toggle:c}}(),b=function(e){return e?.match(g)?.groups.title??""}(a)||c,{lineClassNames:E,code:C}=v(t,{metastring:a,language:f,magicComments:p}),w=l??function(e){return Boolean(e?.includes("showLineNumbers"))}(a);return o.createElement(k,{as:"div",className:(0,i.Z)(n,f&&!n.includes(`language-${f}`)&&`language-${f}`)},b&&o.createElement("div",{className:N.codeBlockTitle},b),o.createElement("div",{className:N.codeBlockContent},o.createElement(A,(0,r.Z)({},L,{theme:h,code:C,language:f??"text"}),(e=>{let{className:t,tokens:n,getLineProps:a,getTokenProps:r}=e;return o.createElement("pre",{tabIndex:0,ref:y.codeBlockRef,className:(0,i.Z)(t,N.codeBlock,"thin-scrollbar")},o.createElement("code",{className:(0,i.Z)(N.codeBlockLines,w&&N.codeBlockLinesWithNumbering)},n.map(((e,t)=>o.createElement(W,{key:t,line:e,getLineProps:a,getTokenProps:r,classNames:E[t],showLineNumbers:w})))))})),o.createElement("div",{className:N.buttonGroup},(y.isEnabled||y.isCodeScrollable)&&o.createElement(q,{className:N.codeButton,onClick:()=>y.toggle(),isEnabled:y.isEnabled}),o.createElement(R,{className:N.codeButton,code:C}))))}function U(e){let{children:t,...n}=e;const a=(0,l.Z)(),c=function(e){return o.Children.toArray(e).some((e=>(0,o.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof c?G:C;return o.createElement(i,(0,r.Z)({key:String(a)},n),c)}var Q=n(9960);var X=n(7459),Y=n(6043);const J={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function K(e){return!!e&&("SUMMARY"===e.tagName||K(e.parentElement))}function ee(e,t){return!!e&&(e===t||ee(e.parentElement,t))}function te(e){let{summary:t,children:n,...a}=e;const c=(0,l.Z)(),i=(0,o.useRef)(null),{collapsed:s,setCollapsed:u}=(0,Y.u)({initialState:!a.open}),[m,d]=(0,o.useState)(a.open),p=o.isValidElement(t)?t:o.createElement("summary",null,t??"Details");return o.createElement("details",(0,r.Z)({},a,{ref:i,open:m,"data-collapsed":s,className:(0,X.Z)(J.details,c&&J.isBrowser,a.className),onMouseDown:e=>{K(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;K(t)&&ee(t,i.current)&&(e.preventDefault(),s?(u(!1),d(!0)):u(!0))}}),p,o.createElement(Y.z,{lazy:!1,collapsed:s,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{u(e),d(!e)}},o.createElement("div",{className:J.collapsibleContent},n)))}const ne={details:"details_b_Ee"},oe="alert alert--info";function ae(e){let{...t}=e;return o.createElement(te,(0,r.Z)({},t,{className:(0,i.Z)(oe,ne.details,t.className)}))}var re=n(2503);function ce(e){return o.createElement(re.Z,e)}const le={containsTaskList:"containsTaskList_mC6p"};function ie(e){if(void 0!==e)return(0,i.Z)(e,e?.includes("contains-task-list")&&le.containsTaskList)}const se={img:"img_ev3q"};const ue="admonition_LlT9",me="admonitionHeading_tbUL",de="admonitionIcon_kALy",pe="admonitionContent_S0QG";const fe={note:{infimaClassName:"secondary",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 14 16"},o.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:o.createElement(M.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 12 16"},o.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:o.createElement(M.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 12 16"},o.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:o.createElement(M.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 14 16"},o.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:o.createElement(M.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 16 16"},o.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:o.createElement(M.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},ge={secondary:"note",important:"info",success:"tip",warning:"danger"};function he(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=o.Children.toArray(e),n=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),a=o.createElement(o.Fragment,null,t.filter((e=>e!==n)));return{mdxAdmonitionTitle:n,rest:a}}(e.children);return{...e,title:e.title??t,children:n}}const ye={head:function(e){const t=o.Children.map(e.children,(e=>o.isValidElement(e)?function(e){if(e.props?.mdxType&&e.props.originalType){const{mdxType:t,originalType:n,...a}=e.props;return o.createElement(e.props.originalType,a)}return e}(e):e));return o.createElement(c.Z,e,t)},code:function(e){const t=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return o.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")||(0,o.isValidElement)(e)&&t.includes(e.props?.mdxType)))?o.createElement("code",e):o.createElement(U,e)},a:function(e){return o.createElement(Q.Z,e)},pre:function(e){return o.createElement(U,(0,o.isValidElement)(e.children)&&"code"===e.children.props?.originalType?e.children.props:{...e})},details:function(e){const t=o.Children.toArray(e.children),n=t.find((e=>o.isValidElement(e)&&"summary"===e.props?.mdxType)),a=o.createElement(o.Fragment,null,t.filter((e=>e!==n)));return o.createElement(ae,(0,r.Z)({},e,{summary:n}),a)},ul:function(e){return o.createElement("ul",(0,r.Z)({},e,{className:ie(e.className)}))},img:function(e){return o.createElement("img",(0,r.Z)({loading:"lazy"},e,{className:(t=e.className,(0,i.Z)(t,se.img))}));var t},h1:e=>o.createElement(ce,(0,r.Z)({as:"h1"},e)),h2:e=>o.createElement(ce,(0,r.Z)({as:"h2"},e)),h3:e=>o.createElement(ce,(0,r.Z)({as:"h3"},e)),h4:e=>o.createElement(ce,(0,r.Z)({as:"h4"},e)),h5:e=>o.createElement(ce,(0,r.Z)({as:"h5"},e)),h6:e=>o.createElement(ce,(0,r.Z)({as:"h6"},e)),admonition:function(e){const{children:t,type:n,title:a,icon:r}=he(e),c=function(e){const t=ge[e]??e,n=fe[t];return n||(console.warn(`No admonition config found for admonition type "${t}". Using Info as fallback.`),fe.info)}(n),l=a??c.label,{iconComponent:s}=c,u=r??o.createElement(s,null);return o.createElement("div",{className:(0,i.Z)(d.k.common.admonition,d.k.common.admonitionType(e.type),"alert",`alert--${c.infimaClassName}`,ue)},o.createElement("div",{className:me},o.createElement("span",{className:de},u),l),o.createElement("div",{className:pe},t))},mermaid:n(1875).Z};function be(e){let{children:t}=e;return o.createElement(a.Zo,{components:ye},t)}},2244:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var o=n(7294),a=n(4334),r=n(9960);function c(e){const{permalink:t,title:n,subLabel:c,isNext:l}=e;return o.createElement(r.Z,{className:(0,a.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},c&&o.createElement("div",{className:"pagination-nav__sublabel"},c),o.createElement("div",{className:"pagination-nav__label"},n))}},3008:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var o=n(7294),a=n(4334),r=n(9960);const c={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function l(e){let{permalink:t,label:n,count:l}=e;return o.createElement(r.Z,{href:t,className:(0,a.Z)(c.tag,l?c.tagWithCount:c.tagRegular)},n,l&&o.createElement("span",null,l))}},1526:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var o=n(7294),a=n(4334),r=n(5999),c=n(3008);const l={tags:"tags_jXut",tag:"tag_QGVx"};function i(e){let{tags:t}=e;return o.createElement(o.Fragment,null,o.createElement("b",null,o.createElement(r.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),o.createElement("ul",{className:(0,a.Z)(l.tags,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:n}=e;return o.createElement("li",{key:n,className:l.tag},o.createElement(c.Z,{label:t,permalink:n}))}))))}},7594:(e,t)=>{function n(e){let t,n=[];for(let o of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(o))n.push(parseInt(o,10));else if(t=o.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,o,a,r]=t;if(o&&r){o=parseInt(o),r=parseInt(r);const e=o<r?1:-1;"-"!==a&&".."!==a&&"\u2025"!==a||(r+=e);for(let t=o;t!==r;t+=e)n.push(t)}}return n}t.default=n,e.exports=n}}]); \ No newline at end of file diff --git a/assets/js/9968.84c0a0fd.js b/assets/js/9968.84c0a0fd.js new file mode 100755 index 000000000..8057127aa --- /dev/null +++ b/assets/js/9968.84c0a0fd.js @@ -0,0 +1 @@ +(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9968],{30304:(e,t,n)=>{"use strict";n.d(t,{c:()=>_});var s=n(11504),a=n(17624);function c(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find((e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),c=t.filter((e=>e!==n)),o=n?.props.children;return{mdxAdmonitionTitle:o,rest:c.length>0?(0,a.jsx)(a.Fragment,{children:c}):null}}(e.children),c=e.title??t;return{...e,...c&&{title:c},children:n}}var o=n(34064),i=n(84357),r=n(45864);const l={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function d(e){let{type:t,className:n,children:s}=e;return(0,a.jsx)("div",{className:(0,o.c)(r.W.common.admonition,r.W.common.admonitionType(t),l.admonition,n),children:s})}function u(e){let{icon:t,title:n}=e;return(0,a.jsxs)("div",{className:l.admonitionHeading,children:[(0,a.jsx)("span",{className:l.admonitionIcon,children:t}),n]})}function m(e){let{children:t}=e;return t?(0,a.jsx)("div",{className:l.admonitionContent,children:t}):null}function h(e){const{type:t,icon:n,title:s,children:c,className:o}=e;return(0,a.jsxs)(d,{type:t,className:o,children:[(0,a.jsx)(u,{title:s,icon:n}),(0,a.jsx)(m,{children:c})]})}function p(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const f={icon:(0,a.jsx)(p,{}),title:(0,a.jsx)(i.c,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function g(e){return(0,a.jsx)(h,{...f,...e,className:(0,o.c)("alert alert--secondary",e.className),children:e.children})}function x(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const j={icon:(0,a.jsx)(x,{}),title:(0,a.jsx)(i.c,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function b(e){return(0,a.jsx)(h,{...j,...e,className:(0,o.c)("alert alert--success",e.className),children:e.children})}function v(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const y={icon:(0,a.jsx)(v,{}),title:(0,a.jsx)(i.c,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function N(e){return(0,a.jsx)(h,{...y,...e,className:(0,o.c)("alert alert--info",e.className),children:e.children})}function k(e){return(0,a.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const B={icon:(0,a.jsx)(k,{}),title:(0,a.jsx)(i.c,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function C(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const w={icon:(0,a.jsx)(C,{}),title:(0,a.jsx)(i.c,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const L={icon:(0,a.jsx)(k,{}),title:(0,a.jsx)(i.c,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const E={...{note:g,tip:b,info:N,warning:function(e){return(0,a.jsx)(h,{...B,...e,className:(0,o.c)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,a.jsx)(h,{...w,...e,className:(0,o.c)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,a.jsx)(g,{title:"secondary",...e}),important:e=>(0,a.jsx)(N,{title:"important",...e}),success:e=>(0,a.jsx)(b,{title:"success",...e}),caution:function(e){return(0,a.jsx)(h,{...L,...e,className:(0,o.c)("alert alert--warning",e.className),children:e.children})}}};function _(e){const t=c(e),n=(s=t.type,E[s]||(console.warn(`No admonition component found for admonition type "${s}". Using Info as fallback.`),E.info));var s;return(0,a.jsx)(n,{...t})}},43092:(e,t,n)=>{"use strict";n.d(t,{c:()=>g});n(11504);var s=n(34064),a=n(84357),c=n(45864),o=n(10867);const i={iconEdit:"iconEdit_Z9Sw"};var r=n(17624);function l(e){let{className:t,...n}=e;return(0,r.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.c)(i.iconEdit,t),"aria-hidden":"true",...n,children:(0,r.jsx)("g",{children:(0,r.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function d(e){let{editUrl:t}=e;return(0,r.jsxs)(o.c,{to:t,className:c.W.common.editThisPage,children:[(0,r.jsx)(l,{}),(0,r.jsx)(a.c,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var u=n(93852);function m(e){let{lastUpdatedAt:t}=e;const n=new Date(t),s=(0,u.y)({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(n);return(0,r.jsx)(a.c,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,r.jsx)("b",{children:(0,r.jsx)("time",{dateTime:n.toISOString(),itemProp:"dateModified",children:s})})},children:" on {date}"})}function h(e){let{lastUpdatedBy:t}=e;return(0,r.jsx)(a.c,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,r.jsx)("b",{children:t})},children:" by {user}"})}function p(e){let{lastUpdatedAt:t,lastUpdatedBy:n}=e;return(0,r.jsxs)("span",{className:c.W.common.lastUpdated,children:[(0,r.jsx)(a.c,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t?(0,r.jsx)(m,{lastUpdatedAt:t}):"",byUser:n?(0,r.jsx)(h,{lastUpdatedBy:n}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const f={lastUpdated:"lastUpdated_JAkA"};function g(e){let{className:t,editUrl:n,lastUpdatedAt:a,lastUpdatedBy:c}=e;return(0,r.jsxs)("div",{className:(0,s.c)("row",t),children:[(0,r.jsx)("div",{className:"col",children:n&&(0,r.jsx)(d,{editUrl:n})}),(0,r.jsx)("div",{className:(0,s.c)("col",f.lastUpdated),children:(a||c)&&(0,r.jsx)(p,{lastUpdatedAt:a,lastUpdatedBy:c})})]})}},15216:(e,t,n)=>{"use strict";n.d(t,{c:()=>ue});var s=n(11504);const a={},c=s.createContext(a);function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:function(e){const t=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}(e.components),s.createElement(c.Provider,{value:t},e.children)}var i=n(56952),r=n(93664),l=n(34064),d=n(66528),u=n(21824);function m(){const{prism:e}=(0,u.y)(),{colorMode:t}=(0,d.U)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}var h=n(45864),p=n(46504),f=n.n(p);const g=/title=(?<quote>["'])(?<title>.*?)\1/,x=/\{(?<range>[\d,-]+)\}/,j={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},b={...j,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},v=Object.keys(j);function y(e,t){const n=e.map((e=>{const{start:n,end:s}=b[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${s})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function N(e,t){let n=e.replace(/\n$/,"");const{language:s,magicComments:a,metastring:c}=t;if(c&&x.test(c)){const e=c.match(x).groups.range;if(0===a.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=a[0].className,s=f()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(s),code:n}}if(void 0===s)return{lineClassNames:{},code:n};const o=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return y(["js","jsBlock"],t);case"jsx":case"tsx":return y(["js","jsBlock","jsx"],t);case"html":return y(["js","jsBlock","html"],t);case"python":case"py":case"bash":return y(["bash"],t);case"markdown":case"md":return y(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return y(["tex"],t);case"lua":case"haskell":case"sql":return y(["lua"],t);case"wasm":return y(["wasm"],t);case"vb":case"vba":case"visual-basic":return y(["vb","rem"],t);case"vbnet":return y(["vbnet","rem"],t);case"batch":return y(["rem"],t);case"basic":return y(["rem","f90"],t);case"fsharp":return y(["js","ml"],t);case"ocaml":case"sml":return y(["ml"],t);case"fortran":return y(["f90"],t);case"cobol":return y(["cobol"],t);default:return y(v,t)}}(s,a),i=n.split("\n"),r=Object.fromEntries(a.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(a.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),d=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),u=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let h=0;h<i.length;){const e=i[h].match(o);if(!e){h+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?r[l[t]].range+=`${h},`:d[t]?r[d[t]].start=h:u[t]&&(r[u[t]].range+=`${r[u[t]].start}-${h-1},`),i.splice(h,1)}n=i.join("\n");const m={};return Object.entries(r).forEach((e=>{let[t,{range:n}]=e;f()(n).forEach((e=>{m[e]??=[],m[e].push(t)}))})),{lineClassNames:m,code:n}}const k={codeBlockContainer:"codeBlockContainer_Ckt0"};var B=n(17624);function C(e){let{as:t,...n}=e;const s=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[s,a]=e;const c=t[s];c&&"string"==typeof a&&(n[c]=a)})),n}(m());return(0,B.jsx)(t,{...n,style:s,className:(0,l.c)(n.className,k.codeBlockContainer,h.W.common.codeBlock)})}const w={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function L(e){let{children:t,className:n}=e;return(0,B.jsx)(C,{as:"pre",tabIndex:0,className:(0,l.c)(w.codeBlockStandalone,"thin-scrollbar",n),children:(0,B.jsx)("code",{className:w.codeBlockLines,children:t})})}var E=n(91100);const _={attributes:!0,characterData:!0,childList:!0,subtree:!0};function T(e,t){const[n,a]=(0,s.useState)(),c=(0,s.useCallback)((()=>{a(e.current?.closest("[role=tabpanel][hidden]"))}),[e,a]);(0,s.useEffect)((()=>{c()}),[c]),function(e,t,n){void 0===n&&(n=_);const a=(0,E.yA)(t),c=(0,E.Mh)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(a);return e&&t.observe(e,c),()=>t.disconnect()}),[e,a,c])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),c())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var A=n(46756);const S={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function U(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:a,getTokenProps:c}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const o=a({line:t,className:(0,l.c)(n,s&&S.codeLine)}),i=t.map(((e,t)=>(0,B.jsx)("span",{...c({token:e,key:t})},t)));return(0,B.jsxs)("span",{...o,children:[s?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)("span",{className:S.codeLineNumber}),(0,B.jsx)("span",{className:S.codeLineContent,children:i})]}):i,(0,B.jsx)("br",{})]})}var z=n(84357);function M(e){return(0,B.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,B.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function I(e){return(0,B.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,B.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const H={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function W(e){let{code:t,className:n}=e;const[a,c]=(0,s.useState)(!1),o=(0,s.useRef)(void 0),i=(0,s.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const s=document.createElement("textarea"),a=document.activeElement;s.value=e,s.setAttribute("readonly",""),s.style.contain="strict",s.style.position="absolute",s.style.left="-9999px",s.style.fontSize="12pt";const c=document.getSelection(),o=c.rangeCount>0&&c.getRangeAt(0);n.append(s),s.select(),s.selectionStart=0,s.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}s.remove(),o&&(c.removeAllRanges(),c.addRange(o)),a&&a.focus()}(t),c(!0),o.current=window.setTimeout((()=>{c(!1)}),1e3)}),[t]);return(0,s.useEffect)((()=>()=>window.clearTimeout(o.current)),[]),(0,B.jsx)("button",{type:"button","aria-label":a?(0,z.G)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,z.G)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,z.G)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,l.c)("clean-btn",n,H.copyButton,a&&H.copyButtonCopied),onClick:i,children:(0,B.jsxs)("span",{className:H.copyButtonIcons,"aria-hidden":"true",children:[(0,B.jsx)(M,{className:H.copyButtonIcon}),(0,B.jsx)(I,{className:H.copyButtonSuccessIcon})]})})}function R(e){return(0,B.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,B.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const V={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function $(e){let{className:t,onClick:n,isEnabled:s}=e;const a=(0,z.G)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,B.jsx)("button",{type:"button",onClick:n,className:(0,l.c)("clean-btn",t,s&&V.wordWrapButtonEnabled),"aria-label":a,title:a,children:(0,B.jsx)(R,{className:V.wordWrapButtonIcon,"aria-hidden":"true"})})}function D(e){let{children:t,className:n="",metastring:a,title:c,showLineNumbers:o,language:i}=e;const{prism:{defaultLanguage:r,magicComments:d}}=(0,u.y)(),h=function(e){return e?.toLowerCase()}(i??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??r),p=m(),f=function(){const[e,t]=(0,s.useState)(!1),[n,a]=(0,s.useState)(!1),c=(0,s.useRef)(null),o=(0,s.useCallback)((()=>{const n=c.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[c,e]),i=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=c.current,n=e>t||c.current.querySelector("code").hasAttribute("style");a(n)}),[c]);return T(c,i),(0,s.useEffect)((()=>{i()}),[e,i]),(0,s.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:c,isEnabled:e,isCodeScrollable:n,toggle:o}}(),x=function(e){return e?.match(g)?.groups.title??""}(a)||c,{lineClassNames:j,code:b}=N(t,{metastring:a,language:h,magicComments:d}),v=o??function(e){return Boolean(e?.includes("showLineNumbers"))}(a);return(0,B.jsxs)(C,{as:"div",className:(0,l.c)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[x&&(0,B.jsx)("div",{className:w.codeBlockTitle,children:x}),(0,B.jsxs)("div",{className:w.codeBlockContent,children:[(0,B.jsx)(A.gl,{theme:p,code:b,language:h??"text",children:e=>{let{className:t,style:n,tokens:s,getLineProps:a,getTokenProps:c}=e;return(0,B.jsx)("pre",{tabIndex:0,ref:f.codeBlockRef,className:(0,l.c)(t,w.codeBlock,"thin-scrollbar"),style:n,children:(0,B.jsx)("code",{className:(0,l.c)(w.codeBlockLines,v&&w.codeBlockLinesWithNumbering),children:s.map(((e,t)=>(0,B.jsx)(U,{line:e,getLineProps:a,getTokenProps:c,classNames:j[t],showLineNumbers:v},t)))})})}}),(0,B.jsxs)("div",{className:w.buttonGroup,children:[(f.isEnabled||f.isCodeScrollable)&&(0,B.jsx)($,{className:w.codeButton,onClick:()=>f.toggle(),isEnabled:f.isEnabled}),(0,B.jsx)(W,{className:w.codeButton,code:b})]})]})]})}function P(e){let{children:t,...n}=e;const a=(0,r.c)(),c=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),o="string"==typeof c?D:L;return(0,B.jsx)(o,{...n,children:c},String(a))}function F(e){return(0,B.jsx)("code",{...e})}var O=n(10867);var q=n(15420),G=n(5976),Z=n(58448);const J={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function Y(e){return!!e&&("SUMMARY"===e.tagName||Y(e.parentElement))}function K(e,t){return!!e&&(e===t||K(e.parentElement,t))}function Q(e){let{summary:t,children:n,...a}=e;(0,G.c)().collectAnchor(a.id);const c=(0,r.c)(),o=(0,s.useRef)(null),{collapsed:i,setCollapsed:l}=(0,Z.a)({initialState:!a.open}),[d,u]=(0,s.useState)(a.open),m=s.isValidElement(t)?t:(0,B.jsx)("summary",{children:t??"Details"});return(0,B.jsxs)("details",{...a,ref:o,open:d,"data-collapsed":i,className:(0,q.c)(J.details,c&&J.isBrowser,a.className),onMouseDown:e=>{Y(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;Y(t)&&K(t,o.current)&&(e.preventDefault(),i?(l(!1),u(!0)):l(!0))},children:[m,(0,B.jsx)(Z.U,{lazy:!1,collapsed:i,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{l(e),u(!e)},children:(0,B.jsx)("div",{className:J.collapsibleContent,children:n})})]})}const X={details:"details_b_Ee"},ee="alert alert--info";function te(e){let{...t}=e;return(0,B.jsx)(Q,{...t,className:(0,l.c)(ee,X.details,t.className)})}function ne(e){const t=s.Children.toArray(e.children),n=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),a=(0,B.jsx)(B.Fragment,{children:t.filter((e=>e!==n))});return(0,B.jsx)(te,{...e,summary:n,children:a})}var se=n(56448);function ae(e){return(0,B.jsx)(se.c,{...e})}const ce={containsTaskList:"containsTaskList_mC6p"};function oe(e){if(void 0!==e)return(0,l.c)(e,e?.includes("contains-task-list")&&ce.containsTaskList)}const ie={img:"img_ev3q"};var re=n(30304),le=n(82944);const de={Head:i.c,details:ne,Details:ne,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,B.jsx)(F,{...e}):(0,B.jsx)(P,{...e})},a:function(e){return(0,B.jsx)(O.c,{...e})},pre:function(e){return(0,B.jsx)(B.Fragment,{children:e.children})},ul:function(e){return(0,B.jsx)("ul",{...e,className:oe(e.className)})},li:function(e){return(0,G.c)().collectAnchor(e.id),(0,B.jsx)("li",{...e})},img:function(e){return(0,B.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,l.c)(t,ie.img))});var t},h1:e=>(0,B.jsx)(ae,{as:"h1",...e}),h2:e=>(0,B.jsx)(ae,{as:"h2",...e}),h3:e=>(0,B.jsx)(ae,{as:"h3",...e}),h4:e=>(0,B.jsx)(ae,{as:"h4",...e}),h5:e=>(0,B.jsx)(ae,{as:"h5",...e}),h6:e=>(0,B.jsx)(ae,{as:"h6",...e}),admonition:re.c,mermaid:le.c};function ue(e){let{children:t}=e;return(0,B.jsx)(o,{components:de,children:t})}},70308:(e,t,n)=>{"use strict";n.d(t,{c:()=>o});n(11504);var s=n(34064),a=n(10867),c=n(17624);function o(e){const{permalink:t,title:n,subLabel:o,isNext:i}=e;return(0,c.jsxs)(a.c,{className:(0,s.c)("pagination-nav__link",i?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[o&&(0,c.jsx)("div",{className:"pagination-nav__sublabel",children:o}),(0,c.jsx)("div",{className:"pagination-nav__label",children:n})]})}},83020:(e,t,n)=>{"use strict";n.d(t,{c:()=>i});n(11504);var s=n(34064),a=n(10867);const c={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var o=n(17624);function i(e){let{permalink:t,label:n,count:i}=e;return(0,o.jsxs)(a.c,{href:t,className:(0,s.c)(c.tag,i?c.tagWithCount:c.tagRegular),children:[n,i&&(0,o.jsx)("span",{children:i})]})}},1096:(e,t,n)=>{"use strict";n.d(t,{c:()=>r});n(11504);var s=n(34064),a=n(84357),c=n(83020);const o={tags:"tags_jXut",tag:"tag_QGVx"};var i=n(17624);function r(e){let{tags:t}=e;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("b",{children:(0,i.jsx)(a.c,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,i.jsx)("ul",{className:(0,s.c)(o.tags,"padding--none","margin-left--sm"),children:t.map((e=>{let{label:t,permalink:n}=e;return(0,i.jsx)("li",{className:o.tag,children:(0,i.jsx)(c.c,{label:t,permalink:n})},n)}))})]})}},93852:(e,t,n)=>{"use strict";n.d(t,{y:()=>a});var s=n(28264);function a(e){void 0===e&&(e={});const{i18n:{currentLocale:t}}=(0,s.c)(),n=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,s.c)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:n,...e})}},46504:(e,t)=>{function n(e){let t,n=[];for(let s of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,a,c]=t;if(s&&c){s=parseInt(s),c=parseInt(c);const e=s<c?1:-1;"-"!==a&&".."!==a&&"\u2025"!==a||(c+=e);for(let t=s;t!==c;t+=e)n.push(t)}}return n}t.default=n,e.exports=n}}]); \ No newline at end of file diff --git a/assets/js/9ccd4375.6c3d6bca.js b/assets/js/9ccd4375.6c3d6bca.js new file mode 100755 index 000000000..008d40a98 --- /dev/null +++ b/assets/js/9ccd4375.6c3d6bca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4640],{97192:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var a=o(17624),i=o(95788);const r={id:"montagem",title:"Montagem da Franzininho DIY",slug:"/franzininho-diy/montagem",description:"Passo a passo da montagem da Franzininho DIY"},s=void 0,t={id:"FranzininhoDIY/montagem",title:"Montagem da Franzininho DIY",description:"Passo a passo da montagem da Franzininho DIY",source:"@site/docs/FranzininhoDIY/montagem.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/montagem",permalink:"/docs/franzininho-diy/montagem",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/montagem.md",tags:[],version:"current",frontMatter:{id:"montagem",title:"Montagem da Franzininho DIY",slug:"/franzininho-diy/montagem",description:"Passo a passo da montagem da Franzininho DIY"},sidebar:"docs",previous:{title:"Identificando os componentes",permalink:"/docs/franzininho-diy/identificando-componentes"},next:{title:"Bootloader",permalink:"/docs/franzininho-diy/bootloader"}},d={},c=[{value:"Antes de colocar a m\xe3o na massa",id:"antes-de-colocar-a-m\xe3o-na-massa",level:3},{value:"Montando a sua Franzininho DIY",id:"montando-a-sua-franzininho-diy",level:3},{value:"Diodo 1N1448",id:"diodo-1n1448",level:3},{value:"Diodos Zener (3V6)",id:"diodos-zener-3v6",level:3},{value:"Resistores de 68R",id:"resistores-de-68r",level:3},{value:"Resistor 1k5",id:"resistor-1k5",level:3},{value:"Resistores 1k",id:"resistores-1k",level:3},{value:"Soquete 8 pinos",id:"soquete-8-pinos",level:3},{value:"Chave t\xe1ctil",id:"chave-t\xe1ctil",level:3},{value:"Capacitor Cer\xe2mico",id:"capacitor-cer\xe2mico",level:3},{value:"LED Verde",id:"led-verde",level:3},{value:"LED Amarelo",id:"led-amarelo",level:3},{value:"Regulador de tens\xe3o",id:"regulador-de-tens\xe3o",level:3},{value:"Barra de 3 pinos",id:"barra-de-3-pinos",level:3},{value:"Barra de 8 pinos",id:"barra-de-8-pinos",level:3},{value:"Capacitor eletrol\xedtico",id:"capacitor-eletrol\xedtico",level:3},{value:"Conector USB",id:"conector-usb",level:3},{value:"ATtiny85",id:"attiny85",level:3}];function l(e){const n={a:"a",admonition:"admonition",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"Passo a passo da montagem da Franzininho DIY V2RV2"}),"\n",(0,a.jsx)(n.h3,{id:"antes-de-colocar-a-m\xe3o-na-massa",children:"Antes de colocar a m\xe3o na massa"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(58388).c+"",width:"571",height:"370"})}),"\n",(0,a.jsx)(n.p,{children:"Antes de tudo voc\xea deve preparar o ambiente, separando as ferramentas necess\xe1rias para a soldagem. Vamos precisar de:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Ferro de solda;"}),"\n",(0,a.jsx)(n.li,{children:"Estanho;"}),"\n",(0,a.jsx)(n.li,{children:"Alicate de corte diagonal para eletr\xf4nica;"}),"\n",(0,a.jsx)(n.li,{children:"\xd3culos de prote\xe7\xe3o;"}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["Voc\xea tamb\xe9m deve separar os componentes para facilitar na hora de soldar. Voc\xea encontra os componentes na ",(0,a.jsx)(n.a,{href:"/docs/franzininho-diy/lista-de-materiais",children:"lista de materiais"}),". Tudo organizado? Ent\xe3o vamos l\xe1?!"]}),"\n",(0,a.jsx)(n.h3,{id:"montando-a-sua-franzininho-diy",children:"Montando a sua Franzininho DIY"}),"\n",(0,a.jsx)(n.p,{children:"De in\xedcio voc\xea ter\xe1 uma placa sem componentes, conforme a imagem abaixo:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(8460).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.admonition,{title:"Sequ\xeancia de montagem",type:"tip",children:(0,a.jsx)(n.p,{children:"Voc\xea deve sempre come\xe7ar pelos componentes baixos. Siga a sequ\xeancia recomendada abaixo."})}),"\n",(0,a.jsx)(n.h3,{id:"diodo-1n1448",children:"Diodo 1N1448"}),"\n",(0,a.jsxs)(n.p,{children:["O primeiro componente a ser colocado \xe9 o diodo 1N4148 no ",(0,a.jsx)(n.strong,{children:"D3"}),"."]}),"\n",(0,a.jsx)(n.admonition,{title:"Aten\xe7\xe3o",type:"caution",children:(0,a.jsx)(n.p,{children:"Cuidando com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa."})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(48800).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"diodos-zener-3v6",children:"Diodos Zener (3V6)"}),"\n",(0,a.jsxs)(n.p,{children:["Temos dois diodos zeners que dever\xe3o ser colocados nas refer\xeancias ",(0,a.jsx)(n.strong,{children:"D1"})," e ",(0,a.jsx)(n.strong,{children:"D2"}),"."]}),"\n",(0,a.jsx)(n.admonition,{title:"Aten\xe7\xe3o",type:"caution",children:(0,a.jsx)(n.p,{children:"Cuidado com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa."})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(9580).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"resistores-de-68r",children:"Resistores de 68R"}),"\n",(0,a.jsxs)(n.p,{children:["Nas refer\xeancias ",(0,a.jsx)(n.strong,{children:"R1"})," e ",(0,a.jsx)(n.strong,{children:"R2"})," voc\xea ir\xe1 colocar os resistores de 68R que s\xe3o representado pelas cores (azul, cinza, preto e dourado)."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(20444).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"resistor-1k5",children:"Resistor 1k5"}),"\n",(0,a.jsxs)(n.p,{children:["Em ",(0,a.jsx)(n.strong,{children:"R3"})," deve-se colocar o resistor de ",(0,a.jsx)(n.strong,{children:"1k5"})," que \xe9 representado nas cores (marrom, verde, vermelho e dourado)."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(588).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"resistores-1k",children:"Resistores 1k"}),"\n",(0,a.jsxs)(n.p,{children:["Resistores de ",(0,a.jsx)(n.strong,{children:"1k"})," que s\xe3o representados nas cores (marrom, preto, vermelho e dourado) devem ser colocados em ",(0,a.jsx)(n.strong,{children:"R4"})," e ",(0,a.jsx)(n.strong,{children:"R5"}),"."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(26736).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"soquete-8-pinos",children:"Soquete 8 pinos"}),"\n",(0,a.jsxs)(n.p,{children:["O soquete deve ser colocado no ",(0,a.jsx)(n.strong,{children:"IC1"})," que traz a facilidade do encaixe do ATtiny85."]}),"\n",(0,a.jsx)(n.admonition,{title:"Aten\xe7\xe3o",type:"caution",children:(0,a.jsx)(n.p,{children:"Verifique a posi\xe7\xe3o do soquete a meia lua deve ficar virada para o lado do barramento de pinos da placa."})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(88088).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"chave-t\xe1ctil",children:"Chave t\xe1ctil"}),"\n",(0,a.jsxs)(n.p,{children:["A chave voc\xea consegue colocar apenas em uma posi\xe7\xe3o, ent\xe3o \xe9 s\xf3 encaix\xe1-la onde est\xe1 localizada como ",(0,a.jsx)(n.strong,{children:"RESET"}),"."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(83036).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"capacitor-cer\xe2mico",children:"Capacitor Cer\xe2mico"}),"\n",(0,a.jsxs)(n.p,{children:["No ",(0,a.jsx)(n.strong,{children:"C1"})," voc\xea ir\xe1 colocar o capacitor cer\xe2mico."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(78452).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"led-verde",children:"LED Verde"}),"\n",(0,a.jsxs)(n.p,{children:["O LED verde deve ser colocado no ",(0,a.jsx)(n.strong,{children:"ON"}),"."]}),"\n",(0,a.jsx)(n.admonition,{title:"Cuidado com polaridade dos terminais dos LED.",type:"caution",children:(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Terminal maior (positivo) - Terminal menor (negativo)"})})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(9180).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"led-amarelo",children:"LED Amarelo"}),"\n",(0,a.jsxs)(n.p,{children:["O LED amarelo deve ser colocado no ",(0,a.jsx)(n.strong,{children:"LED"}),"."]}),"\n",(0,a.jsx)(n.admonition,{title:"Cuidado com polaridade dos terminais dos LED.",type:"caution",children:(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Terminal maior (positivo) - Terminal menor (negativo)"})})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(42424).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"regulador-de-tens\xe3o",children:"Regulador de tens\xe3o"}),"\n",(0,a.jsxs)(n.p,{children:["No ",(0,a.jsx)(n.strong,{children:"IC2"})," voc\xea deve colocar o regulador. Ele tem 3 terminais e deve ser colocado conforme o desenho na placa."]}),"\n",(0,a.jsx)(n.admonition,{title:"Siga o desenho do componente na placa para se orientar no encaixe.",type:"tip"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(13212).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"barra-de-3-pinos",children:"Barra de 3 pinos"}),"\n",(0,a.jsxs)(n.p,{children:["Em ",(0,a.jsx)(n.strong,{children:"J1"}),", onde est\xe1 indicado com ",(0,a.jsx)(n.strong,{children:"VIN, GND, VCC"}),", voc\xea ir\xe1 colocar a barra com tr\xeas pinos."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(9776).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"barra-de-8-pinos",children:"Barra de 8 pinos"}),"\n",(0,a.jsxs)(n.p,{children:["Dever\xe1 ser colocada onde est\xe3o indicados ",(0,a.jsx)(n.strong,{children:"(GND, VCC, P6, ..., P1,P0)"})]}),"\n",(0,a.jsx)(n.admonition,{title:"Apoie bem a barra. Solde apenas um terminal e verifique se ela ficou alinhada.",type:"tip"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(57008).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"capacitor-eletrol\xedtico",children:"Capacitor eletrol\xedtico"}),"\n",(0,a.jsxs)(n.p,{children:["Agora vamos colocar o capacitor eletrol\xedtico em ",(0,a.jsx)(n.strong,{children:"C2"}),"."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(63232).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"conector-usb",children:"Conector USB"}),"\n",(0,a.jsx)(n.p,{children:"Quase l\xe1! Iremos agora colocar o conector USB, conforme o encaixe dele."}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(77416).c+"",width:"635",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"attiny85",children:"ATtiny85"}),"\n",(0,a.jsx)(n.p,{children:"Por \xfaltimo iremos colocar o microcontrolador ATtiny85 no soquete de 8 pinos."}),"\n",(0,a.jsx)(n.admonition,{title:"Tome cuidado com a posi\xe7\xe3o de encaixe do microcontrolador. Se oriente pelo desenho do soquete e fa\xe7a uma dupla checagem antes de ligar a placa.",type:"caution"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(68699).c+"",width:"635",height:"301"})}),"\n",(0,a.jsx)(n.p,{children:"Pronto!"}),"\n",(0,a.jsx)(n.p,{children:"Sua Franzininho vers\xe3o V2RV2 est\xe1 montada, agora \xe9 s\xf3 programar e criar v\xe1rios projetos."})]})}function m(e={}){const{wrapper:n}={...(0,i.MN)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},95788:(e,n,o)=>{o.d(n,{MN:()=>c});var a=o(11504);function i(e,n,o){return n in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o,e}function r(e,n){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),o.push.apply(o,a)}return o}function s(e){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?r(Object(o),!0).forEach((function(n){i(e,n,o[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(o,n))}))}return e}function t(e,n){if(null==e)return{};var o,a,i=function(e,n){if(null==e)return{};var o,a,i={},r=Object.keys(e);for(a=0;a<r.length;a++)o=r[a],n.indexOf(o)>=0||(i[o]=e[o]);return i}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)o=r[a],n.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var d=a.createContext({}),c=function(e){var n=a.useContext(d),o=n;return e&&(o="function"==typeof e?e(n):s(s({},n),e)),o},l={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var o=e.components,i=e.mdxType,r=e.originalType,d=e.parentName,m=t(e,["components","mdxType","originalType","parentName"]),h=c(o),p=i,g=h["".concat(d,".").concat(p)]||h[p]||l[p]||r;return o?a.createElement(g,s(s({ref:n},m),{},{components:o})):a.createElement(g,s({ref:n},m))}));m.displayName="MDXCreateElement"},8460:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/00-pcb-82f9ed3365c7b53a5a09ce31390b9aad.png"},48800:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/01-diodo1N4148-b2575456f360ea73761834e767d72c90.png"},9580:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/02-diodos-zenners-945b4e54e78a4e6a5e051b27b8587e56.png"},20444:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/03-resistores68R-168a34f8fe2ec11adc19adbf84255ac7.png"},588:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/04-resistor1k5-4b971ee05a02090bfb70dc89fcd8fe6b.png"},26736:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/05-resistores1k-1cfbefa2c32dbfcf52a48a6f886d6795.png"},88088:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/06-soquete-26bf7fe45959f19875edf8486ad5a9f3.png"},83036:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/07-chave-t\xe1ctil-97aa74515ede9e2c5f3777f089820d70.png"},78452:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/08-capacitor-cer\xe2mico-d06f66e30230ef812e368518847be12b.png"},9180:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/09-led-verde-4fc27b760643f55b71ea8f8e146fce89.png"},42424:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/10-led-amarelo-ae1af4a364a24d972d5650d7359e4139.png"},13212:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/11-regulador-de-tens\xe3o-c63a573030e85e90c5d1df41a455d703.png"},9776:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/12-barra-de-3-pinos-0d84ec73f936b9295267a4e5965bd110.png"},57008:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/13-barra-de-8-pinos-56009deec589f751a95aa31550079bd5.png"},63232:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/14-capacitor-eletrolitico-4fbeebf62e259e5a3bcffcede9505afe.png"},77416:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/15-conector-usb-5ff829b25a93b25a5aedf3162622b78e.png"},68699:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/16-attiny85-e7ad18a24acc40ef1b94c343390b3cc6.png"},58388:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/prepare-ambiente-7a1cd5b66f251000b207872ec322a3e2.png"}}]); \ No newline at end of file diff --git a/assets/js/9ccd4375.abe226f6.js b/assets/js/9ccd4375.abe226f6.js deleted file mode 100755 index a625cc649..000000000 --- a/assets/js/9ccd4375.abe226f6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4123],{3905:(e,a,o)=>{o.d(a,{Zo:()=>c,kt:()=>g});var t=o(7294);function n(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function i(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,t)}return o}function r(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?i(Object(o),!0).forEach((function(a){n(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function s(e,a){if(null==e)return{};var o,t,n=function(e,a){if(null==e)return{};var o,t,n={},i=Object.keys(e);for(t=0;t<i.length;t++)o=i[t],a.indexOf(o)>=0||(n[o]=e[o]);return n}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t<i.length;t++)o=i[t],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var d=t.createContext({}),l=function(e){var a=t.useContext(d),o=a;return e&&(o="function"==typeof e?e(a):r(r({},a),e)),o},c=function(e){var a=l(e.components);return t.createElement(d.Provider,{value:a},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},u=t.forwardRef((function(e,a){var o=e.components,n=e.mdxType,i=e.originalType,d=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=l(o),u=n,g=p["".concat(d,".").concat(u)]||p[u]||m[u]||i;return o?t.createElement(g,r(r({ref:a},c),{},{components:o})):t.createElement(g,r({ref:a},c))}));function g(e,a){var o=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var i=o.length,r=new Array(i);r[0]=u;var s={};for(var d in a)hasOwnProperty.call(a,d)&&(s[d]=a[d]);s.originalType=e,s[p]="string"==typeof e?e:n,r[1]=s;for(var l=2;l<i;l++)r[l]=o[l];return t.createElement.apply(null,r)}return t.createElement.apply(null,o)}u.displayName="MDXCreateElement"},7620:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>d,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var t=o(3117),n=(o(7294),o(3905));const i={id:"montagem",title:"Montagem da Franzininho DIY",slug:"/franzininho-diy/montagem",description:"Passo a passo da montagem da Franzininho DIY"},r=void 0,s={unversionedId:"FranzininhoDIY/montagem",id:"FranzininhoDIY/montagem",title:"Montagem da Franzininho DIY",description:"Passo a passo da montagem da Franzininho DIY",source:"@site/docs/FranzininhoDIY/montagem.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/montagem",permalink:"/docs/franzininho-diy/montagem",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/montagem.md",tags:[],version:"current",frontMatter:{id:"montagem",title:"Montagem da Franzininho DIY",slug:"/franzininho-diy/montagem",description:"Passo a passo da montagem da Franzininho DIY"},sidebar:"docs",previous:{title:"Identificando os componentes",permalink:"/docs/franzininho-diy/identificando-componentes"},next:{title:"Bootloader",permalink:"/docs/franzininho-diy/bootloader"}},d={},l=[{value:"Antes de colocar a m\xe3o na massa",id:"antes-de-colocar-a-m\xe3o-na-massa",level:3},{value:"Montando a sua Franzininho DIY",id:"montando-a-sua-franzininho-diy",level:3},{value:"Diodo 1N1448",id:"diodo-1n1448",level:3},{value:"Diodos Zener (3V6)",id:"diodos-zener-3v6",level:3},{value:"Resistores de 68R",id:"resistores-de-68r",level:3},{value:"Resistor 1k5",id:"resistor-1k5",level:3},{value:"Resistores 1k",id:"resistores-1k",level:3},{value:"Soquete 8 pinos",id:"soquete-8-pinos",level:3},{value:"Chave t\xe1ctil",id:"chave-t\xe1ctil",level:3},{value:"Capacitor Cer\xe2mico",id:"capacitor-cer\xe2mico",level:3},{value:"LED Verde",id:"led-verde",level:3},{value:"LED Amarelo",id:"led-amarelo",level:3},{value:"Regulador de tens\xe3o",id:"regulador-de-tens\xe3o",level:3},{value:"Barra de 3 pinos",id:"barra-de-3-pinos",level:3},{value:"Barra de 8 pinos",id:"barra-de-8-pinos",level:3},{value:"Capacitor eletrol\xedtico",id:"capacitor-eletrol\xedtico",level:3},{value:"Conector USB",id:"conector-usb",level:3},{value:"ATtiny85",id:"attiny85",level:3}],c={toc:l},p="wrapper";function m(e){let{components:a,...i}=e;return(0,n.kt)(p,(0,t.Z)({},c,i,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Passo a passo da montagem da Franzininho DIY V2RV2"),(0,n.kt)("h3",{id:"antes-de-colocar-a-m\xe3o-na-massa"},"Antes de colocar a m\xe3o na massa"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(831).Z,width:"571",height:"370"})),(0,n.kt)("p",null,"Antes de tudo voc\xea deve preparar o ambiente, separando as ferramentas necess\xe1rias para a soldagem. Vamos precisar de:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Ferro de solda;"),(0,n.kt)("li",{parentName:"ul"},"Estanho;"),(0,n.kt)("li",{parentName:"ul"},"Alicate de corte diagonal para eletr\xf4nica;"),(0,n.kt)("li",{parentName:"ul"},"\xd3culos de prote\xe7\xe3o;")),(0,n.kt)("p",null,"Voc\xea tamb\xe9m deve separar os componentes para facilitar na hora de soldar. Voc\xea encontra os componentes na ",(0,n.kt)("a",{parentName:"p",href:"/docs/franzininho-diy/lista-de-materiais"},"lista de materiais"),". Tudo organizado? Ent\xe3o vamos l\xe1?!"),(0,n.kt)("h3",{id:"montando-a-sua-franzininho-diy"},"Montando a sua Franzininho DIY"),(0,n.kt)("p",null,"De in\xedcio voc\xea ter\xe1 uma placa sem componentes, conforme a imagem abaixo:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(7473).Z,width:"510",height:"301"})),(0,n.kt)("admonition",{title:"Sequ\xeancia de montagem",type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"Voc\xea deve sempre come\xe7ar pelos componentes baixos. Siga a sequ\xeancia recomendada abaixo.")),(0,n.kt)("h3",{id:"diodo-1n1448"},"Diodo 1N1448"),(0,n.kt)("p",null,"O primeiro componente a ser colocado \xe9 o diodo 1N4148 no ",(0,n.kt)("strong",{parentName:"p"},"D3"),"."),(0,n.kt)("admonition",{title:"Aten\xe7\xe3o",type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"Cuidando com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(2804).Z,width:"510",height:"301"})),(0,n.kt)("h3",{id:"diodos-zener-3v6"},"Diodos Zener (3V6)"),(0,n.kt)("p",null,"Temos dois diodos zeners que dever\xe3o ser colocados nas refer\xeancias ",(0,n.kt)("strong",{parentName:"p"},"D1")," e ",(0,n.kt)("strong",{parentName:"p"},"D2"),"."),(0,n.kt)("admonition",{title:"Aten\xe7\xe3o",type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"Cuidado com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(1920).Z,width:"510",height:"301"})),(0,n.kt)("h3",{id:"resistores-de-68r"},"Resistores de 68R"),(0,n.kt)("p",null,"Nas refer\xeancias ",(0,n.kt)("strong",{parentName:"p"},"R1")," e ",(0,n.kt)("strong",{parentName:"p"},"R2")," voc\xea ir\xe1 colocar os resistores de 68R que s\xe3o representado pelas cores (azul, cinza, preto e dourado)."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(1739).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"resistor-1k5"},"Resistor 1k5"),(0,n.kt)("p",null,"Em ",(0,n.kt)("strong",{parentName:"p"},"R3")," deve-se colocar o resistor de ",(0,n.kt)("strong",{parentName:"p"},"1k5")," que \xe9 representado nas cores (marrom, verde, vermelho e dourado)."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(4301).Z,width:"510",height:"301"})),(0,n.kt)("h3",{id:"resistores-1k"},"Resistores 1k"),(0,n.kt)("p",null,"Resistores de ",(0,n.kt)("strong",{parentName:"p"},"1k")," que s\xe3o representados nas cores (marrom, preto, vermelho e dourado) devem ser colocados em ",(0,n.kt)("strong",{parentName:"p"},"R4")," e ",(0,n.kt)("strong",{parentName:"p"},"R5"),"."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(7070).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"soquete-8-pinos"},"Soquete 8 pinos"),(0,n.kt)("p",null,"O soquete deve ser colocado no ",(0,n.kt)("strong",{parentName:"p"},"IC1")," que traz a facilidade do encaixe do ATtiny85."),(0,n.kt)("admonition",{title:"Aten\xe7\xe3o",type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"Verifique a posi\xe7\xe3o do soquete a meia lua deve ficar virada para o lado do barramento de pinos da placa.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(2914).Z,width:"510",height:"301"})),(0,n.kt)("h3",{id:"chave-t\xe1ctil"},"Chave t\xe1ctil"),(0,n.kt)("p",null," A chave voc\xea consegue colocar apenas em uma posi\xe7\xe3o, ent\xe3o \xe9 s\xf3 encaix\xe1-la onde est\xe1 localizada como ",(0,n.kt)("strong",{parentName:"p"},"RESET"),"."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(5691).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"capacitor-cer\xe2mico"},"Capacitor Cer\xe2mico"),(0,n.kt)("p",null,"No ",(0,n.kt)("strong",{parentName:"p"},"C1")," voc\xea ir\xe1 colocar o capacitor cer\xe2mico. "),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(9974).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"led-verde"},"LED Verde"),(0,n.kt)("p",null,"O LED verde deve ser colocado no ",(0,n.kt)("strong",{parentName:"p"},"ON"),". "),(0,n.kt)("admonition",{title:"Cuidado com polaridade dos terminais dos LED.",type:"caution"},(0,n.kt)("p",{parentName:"admonition"},(0,n.kt)("strong",{parentName:"p"},"Terminal maior (positivo) - Terminal menor (negativo)"))),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(1e3).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"led-amarelo"},"LED Amarelo"),(0,n.kt)("p",null,"O LED amarelo deve ser colocado no ",(0,n.kt)("strong",{parentName:"p"},"LED"),"."),(0,n.kt)("admonition",{title:"Cuidado com polaridade dos terminais dos LED.",type:"caution"},(0,n.kt)("p",{parentName:"admonition"},(0,n.kt)("strong",{parentName:"p"},"Terminal maior (positivo) - Terminal menor (negativo)"))),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(4262).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"regulador-de-tens\xe3o"},"Regulador de tens\xe3o"),(0,n.kt)("p",null,"No ",(0,n.kt)("strong",{parentName:"p"},"IC2")," voc\xea deve colocar o regulador. Ele tem 3 terminais e deve ser colocado conforme o desenho na placa."),(0,n.kt)("admonition",{title:"Siga o desenho do componente na placa para se orientar no encaixe.",type:"tip"}),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(9499).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"barra-de-3-pinos"},"Barra de 3 pinos"),(0,n.kt)("p",null,"Em ",(0,n.kt)("strong",{parentName:"p"},"J1"),", onde est\xe1 indicado com ",(0,n.kt)("strong",{parentName:"p"},"VIN, GND, VCC"),", voc\xea ir\xe1 colocar a barra com tr\xeas pinos."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(137).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"barra-de-8-pinos"},"Barra de 8 pinos"),(0,n.kt)("p",null,"Dever\xe1 ser colocada onde est\xe3o indicados ",(0,n.kt)("strong",{parentName:"p"},"(GND, VCC, P6, ..., P1,P0)")),(0,n.kt)("admonition",{title:"Apoie bem a barra. Solde apenas um terminal e verifique se ela ficou alinhada.",type:"tip"}),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(8178).Z,width:"510",height:"301"})),(0,n.kt)("h3",{id:"capacitor-eletrol\xedtico"},"Capacitor eletrol\xedtico"),(0,n.kt)("p",null,"Agora vamos colocar o capacitor eletrol\xedtico em ",(0,n.kt)("strong",{parentName:"p"},"C2"),"."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(761).Z,width:"510",height:"301"})),(0,n.kt)("h3",{id:"conector-usb"},"Conector USB"),(0,n.kt)("p",null,"Quase l\xe1! Iremos agora colocar o conector USB, conforme o encaixe dele."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(1889).Z,width:"635",height:"301"})),(0,n.kt)("h3",{id:"attiny85"},"ATtiny85"),(0,n.kt)("p",null,"Por \xfaltimo iremos colocar o microcontrolador ATtiny85 no soquete de 8 pinos."),(0,n.kt)("admonition",{title:"Tome cuidado com a posi\xe7\xe3o de encaixe do microcontrolador. Se oriente pelo desenho do soquete e fa\xe7a uma dupla checagem antes de ligar a placa.",type:"caution"}),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(7686).Z,width:"635",height:"301"})),(0,n.kt)("p",null,"Pronto!"),(0,n.kt)("p",null,"Sua Franzininho vers\xe3o V2RV2 est\xe1 montada, agora \xe9 s\xf3 programar e criar v\xe1rios projetos."))}m.isMDXComponent=!0},7473:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/00-pcb-82f9ed3365c7b53a5a09ce31390b9aad.png"},2804:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/01-diodo1N4148-b2575456f360ea73761834e767d72c90.png"},1920:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/02-diodos-zenners-945b4e54e78a4e6a5e051b27b8587e56.png"},1739:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/03-resistores68R-168a34f8fe2ec11adc19adbf84255ac7.png"},4301:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/04-resistor1k5-4b971ee05a02090bfb70dc89fcd8fe6b.png"},7070:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/05-resistores1k-1cfbefa2c32dbfcf52a48a6f886d6795.png"},2914:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/06-soquete-26bf7fe45959f19875edf8486ad5a9f3.png"},5691:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/07-chave-t\xe1ctil-97aa74515ede9e2c5f3777f089820d70.png"},9974:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/08-capacitor-cer\xe2mico-d06f66e30230ef812e368518847be12b.png"},1e3:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/09-led-verde-4fc27b760643f55b71ea8f8e146fce89.png"},4262:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/10-led-amarelo-ae1af4a364a24d972d5650d7359e4139.png"},9499:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/11-regulador-de-tens\xe3o-c63a573030e85e90c5d1df41a455d703.png"},137:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/12-barra-de-3-pinos-0d84ec73f936b9295267a4e5965bd110.png"},8178:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/13-barra-de-8-pinos-56009deec589f751a95aa31550079bd5.png"},761:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/14-capacitor-eletrolitico-4fbeebf62e259e5a3bcffcede9505afe.png"},1889:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/15-conector-usb-5ff829b25a93b25a5aedf3162622b78e.png"},7686:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/16-attiny85-e7ad18a24acc40ef1b94c343390b3cc6.png"},831:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/prepare-ambiente-7a1cd5b66f251000b207872ec322a3e2.png"}}]); \ No newline at end of file diff --git a/assets/js/9cf82e51.32b38b6c.js b/assets/js/9cf82e51.32b38b6c.js new file mode 100755 index 000000000..673128cc7 --- /dev/null +++ b/assets/js/9cf82e51.32b38b6c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6992],{16560:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>t,metadata:()=>l,toc:()=>s});var r=i(17624),o=i(95788);const t={id:"arduino-blink",title:"Blink",slug:"/franzininho-wifi/exemplos-arduino/blink",description:"Primeiro Hello World com a Franzininho WiFi no Arduino IDE",author:"Diana Santos"},a=void 0,l={id:"FranzininhoWifi/exemplos-arduino/arduino-blink",title:"Blink",description:"Primeiro Hello World com a Franzininho WiFi no Arduino IDE",source:"@site/docs/FranzininhoWifi/exemplos-arduino/blink.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/blink",permalink:"/docs/franzininho-wifi/exemplos-arduino/blink",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/blink.md",tags:[],version:"current",frontMatter:{id:"arduino-blink",title:"Blink",slug:"/franzininho-wifi/exemplos-arduino/blink",description:"Primeiro Hello World com a Franzininho WiFi no Arduino IDE",author:"Diana Santos"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/docs/franzininho-wifi/exemplos-arduino/primeiros-passos"},next:{title:"Neopixel RGB LED Onboard",permalink:"/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard"}},c={},s=[];function u(n){const e={admonition:"admonition",p:"p",...(0,o.MN)(),...n.components};return(0,r.jsx)(e.admonition,{type:"warning",children:(0,r.jsx)(e.p,{children:"TBD"})})}function p(n={}){const{wrapper:e}={...(0,o.MN)(),...n.components};return e?(0,r.jsx)(e,{...n,children:(0,r.jsx)(u,{...n})}):u(n)}},95788:(n,e,i)=>{i.d(e,{MN:()=>s});var r=i(11504);function o(n,e,i){return e in n?Object.defineProperty(n,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):n[e]=i,n}function t(n,e){var i=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),i.push.apply(i,r)}return i}function a(n){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?t(Object(i),!0).forEach((function(e){o(n,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(i)):t(Object(i)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(i,e))}))}return n}function l(n,e){if(null==n)return{};var i,r,o=function(n,e){if(null==n)return{};var i,r,o={},t=Object.keys(n);for(r=0;r<t.length;r++)i=t[r],e.indexOf(i)>=0||(o[i]=n[i]);return o}(n,e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);for(r=0;r<t.length;r++)i=t[r],e.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(n,i)&&(o[i]=n[i])}return o}var c=r.createContext({}),s=function(n){var e=r.useContext(c),i=e;return n&&(i="function"==typeof n?n(e):a(a({},e),n)),i},u={inlineCode:"code",wrapper:function(n){var e=n.children;return r.createElement(r.Fragment,{},e)}},p=r.forwardRef((function(n,e){var i=n.components,o=n.mdxType,t=n.originalType,c=n.parentName,p=l(n,["components","mdxType","originalType","parentName"]),d=s(i),f=o,m=d["".concat(c,".").concat(f)]||d[f]||u[f]||t;return i?r.createElement(m,a(a({ref:e},p),{},{components:i})):r.createElement(m,a({ref:e},p))}));p.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/9cf82e51.f0799621.js b/assets/js/9cf82e51.f0799621.js deleted file mode 100755 index 9a03fc09e..000000000 --- a/assets/js/9cf82e51.f0799621.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9966],{3905:(n,e,r)=>{r.d(e,{Zo:()=>s,kt:()=>m});var i=r(7294);function o(n,e,r){return e in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function t(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(n);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.push.apply(r,i)}return r}function a(n){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?t(Object(r),!0).forEach((function(e){o(n,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):t(Object(r)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))}))}return n}function l(n,e){if(null==n)return{};var r,i,o=function(n,e){if(null==n)return{};var r,i,o={},t=Object.keys(n);for(i=0;i<t.length;i++)r=t[i],e.indexOf(r)>=0||(o[r]=n[r]);return o}(n,e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);for(i=0;i<t.length;i++)r=t[i],e.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(n,r)&&(o[r]=n[r])}return o}var c=i.createContext({}),p=function(n){var e=i.useContext(c),r=e;return n&&(r="function"==typeof n?n(e):a(a({},e),n)),r},s=function(n){var e=p(n.components);return i.createElement(c.Provider,{value:e},n.children)},u="mdxType",d={inlineCode:"code",wrapper:function(n){var e=n.children;return i.createElement(i.Fragment,{},e)}},f=i.forwardRef((function(n,e){var r=n.components,o=n.mdxType,t=n.originalType,c=n.parentName,s=l(n,["components","mdxType","originalType","parentName"]),u=p(r),f=o,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||t;return r?i.createElement(m,a(a({ref:e},s),{},{components:r})):i.createElement(m,a({ref:e},s))}));function m(n,e){var r=arguments,o=e&&e.mdxType;if("string"==typeof n||o){var t=r.length,a=new Array(t);a[0]=f;var l={};for(var c in e)hasOwnProperty.call(e,c)&&(l[c]=e[c]);l.originalType=n,l[u]="string"==typeof n?n:o,a[1]=l;for(var p=2;p<t;p++)a[p]=r[p];return i.createElement.apply(null,a)}return i.createElement.apply(null,r)}f.displayName="MDXCreateElement"},4404:(n,e,r)=>{r.r(e),r.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>t,metadata:()=>l,toc:()=>p});var i=r(3117),o=(r(7294),r(3905));const t={id:"arduino-blink",title:"Blink",slug:"/franzininho-wifi/exemplos-arduino/blink",description:"Primeiro Hello World com a Franzininho WiFi no Arduino IDE",author:"Diana Santos"},a=void 0,l={unversionedId:"FranzininhoWifi/exemplos-arduino/arduino-blink",id:"FranzininhoWifi/exemplos-arduino/arduino-blink",title:"Blink",description:"Primeiro Hello World com a Franzininho WiFi no Arduino IDE",source:"@site/docs/FranzininhoWifi/exemplos-arduino/blink.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/blink",permalink:"/docs/franzininho-wifi/exemplos-arduino/blink",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/blink.md",tags:[],version:"current",frontMatter:{id:"arduino-blink",title:"Blink",slug:"/franzininho-wifi/exemplos-arduino/blink",description:"Primeiro Hello World com a Franzininho WiFi no Arduino IDE",author:"Diana Santos"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/docs/franzininho-wifi/exemplos-arduino/primeiros-passos"},next:{title:"Neopixel RGB LED Onboard",permalink:"/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard"}},c={},p=[],s={toc:p},u="wrapper";function d(n){let{components:e,...r}=n;return(0,o.kt)(u,(0,i.Z)({},s,r,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("admonition",{type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"TBD")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.8937d11c.js b/assets/js/9e4087bc.8937d11c.js new file mode 100755 index 000000000..4f531b3fa --- /dev/null +++ b/assets/js/9e4087bc.8937d11c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7028],{56140:(e,r,t)=>{t.r(r),t.d(r,{default:()=>m});t(11504);var a=t(10867),n=t(84357),s=t(68900),i=t(93852),c=t(99012),l=t(56448),o=t(17624);function d(e){let{year:r,posts:t}=e;const n=(0,i.y)({day:"numeric",month:"long",timeZone:"UTC"});return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(l.c,{as:"h3",id:r,children:r}),(0,o.jsx)("ul",{children:t.map((e=>{return(0,o.jsx)("li",{children:(0,o.jsxs)(a.c,{to:e.metadata.permalink,children:[(r=e.metadata.date,n.format(new Date(r)))," - ",e.metadata.title]})},e.metadata.date);var r}))})]})}function h(e){let{years:r}=e;return(0,o.jsx)("section",{className:"margin-vert--lg",children:(0,o.jsx)("div",{className:"container",children:(0,o.jsx)("div",{className:"row",children:r.map(((e,r)=>(0,o.jsx)("div",{className:"col col--4 margin-vert--lg",children:(0,o.jsx)(d,{...e})},r)))})})})}function m(e){let{archive:r}=e;const t=(0,n.G)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),a=(0,n.G)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),i=function(e){const r=e.reduce(((e,r)=>{const t=r.metadata.date.split("-")[0],a=e.get(t)??[];return e.set(t,[r,...a])}),new Map);return Array.from(r,(e=>{let[r,t]=e;return{year:r,posts:t}}))}(r.blogPosts);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.U7,{title:t,description:a}),(0,o.jsxs)(c.c,{children:[(0,o.jsx)("header",{className:"hero hero--primary",children:(0,o.jsxs)("div",{className:"container",children:[(0,o.jsx)(l.c,{as:"h1",className:"hero__title",children:t}),(0,o.jsx)("p",{className:"hero__subtitle",children:a})]})}),(0,o.jsx)("main",{children:i.length>0&&(0,o.jsx)(h,{years:i})})]})]})}},93852:(e,r,t)=>{t.d(r,{y:()=>n});var a=t(28264);function n(e){void 0===e&&(e={});const{i18n:{currentLocale:r}}=(0,a.c)(),t=function(){const{i18n:{currentLocale:e,localeConfigs:r}}=(0,a.c)();return r[e].calendar}();return new Intl.DateTimeFormat(r,{calendar:t,...e})}}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.9685659e.js b/assets/js/9e4087bc.9685659e.js deleted file mode 100755 index 0a407af96..000000000 --- a/assets/js/9e4087bc.9685659e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3608],{3169:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var r=a(7294),n=a(9960),l=a(5999),c=a(1944),i=a(7961);function m(e){let{year:t,posts:a}=e;return r.createElement(r.Fragment,null,r.createElement("h3",null,t),r.createElement("ul",null,a.map((e=>r.createElement("li",{key:e.metadata.date},r.createElement(n.Z,{to:e.metadata.permalink},e.metadata.formattedDate," - ",e.metadata.title))))))}function s(e){let{years:t}=e;return r.createElement("section",{className:"margin-vert--lg"},r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},t.map(((e,t)=>r.createElement("div",{key:t,className:"col col--4 margin-vert--lg"},r.createElement(m,e)))))))}function o(e){let{archive:t}=e;const a=(0,l.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),n=(0,l.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),m=function(e){const t=e.reduceRight(((e,t)=>{const a=t.metadata.date.split("-")[0],r=e.get(a)??[];return e.set(a,[t,...r])}),new Map);return Array.from(t,(e=>{let[t,a]=e;return{year:t,posts:a}}))}(t.blogPosts);return r.createElement(r.Fragment,null,r.createElement(c.d,{title:a,description:n}),r.createElement(i.Z,null,r.createElement("header",{className:"hero hero--primary"},r.createElement("div",{className:"container"},r.createElement("h1",{className:"hero__title"},a),r.createElement("p",{className:"hero__subtitle"},n))),r.createElement("main",null,m.length>0&&r.createElement(s,{years:m}))))}}}]); \ No newline at end of file diff --git a/assets/js/a34fb63a.04161524.js b/assets/js/a34fb63a.04161524.js deleted file mode 100755 index dc30bae0f..000000000 --- a/assets/js/a34fb63a.04161524.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1982],{3905:(e,a,o)=>{o.d(a,{Zo:()=>m,kt:()=>b});var n=o(7294);function r(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function i(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function t(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?i(Object(o),!0).forEach((function(a){r(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function l(e,a){if(null==e)return{};var o,n,r=function(e,a){if(null==e)return{};var o,n,r={},i=Object.keys(e);for(n=0;n<i.length;n++)o=i[n],a.indexOf(o)>=0||(r[o]=e[o]);return r}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)o=i[n],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var s=n.createContext({}),p=function(e){var a=n.useContext(s),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},m=function(e){var a=p(e.components);return n.createElement(s.Provider,{value:a},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},d=n.forwardRef((function(e,a){var o=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),c=p(o),d=r,b=c["".concat(s,".").concat(d)]||c[d]||u[d]||i;return o?n.createElement(b,t(t({ref:a},m),{},{components:o})):n.createElement(b,t({ref:a},m))}));function b(e,a){var o=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var i=o.length,t=new Array(i);t[0]=d;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[c]="string"==typeof e?e:r,t[1]=l;for(var p=2;p<i;p++)t[p]=o[p];return n.createElement.apply(null,t)}return n.createElement.apply(null,o)}d.displayName="MDXCreateElement"},4553:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>s,contentTitle:()=>t,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var n=o(3117),r=(o(7294),o(3905));const i={id:"picsimlab-intro",title:"Franzininho DIY no PICSimLab",slug:"/franzininho-diy/picsimlab/primeiros-passos",description:"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY"},t=void 0,l={unversionedId:"FranzininhoDIY/picsimlab/picsimlab-intro",id:"FranzininhoDIY/picsimlab/picsimlab-intro",title:"Franzininho DIY no PICSimLab",description:"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY",source:"@site/docs/FranzininhoDIY/picsimlab/franzininho-picsimlab.md",sourceDirName:"FranzininhoDIY/picsimlab",slug:"/franzininho-diy/picsimlab/primeiros-passos",permalink:"/docs/franzininho-diy/picsimlab/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/picsimlab/franzininho-picsimlab.md",tags:[],version:"current",frontMatter:{id:"picsimlab-intro",title:"Franzininho DIY no PICSimLab",slug:"/franzininho-diy/picsimlab/primeiros-passos",description:"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY"},sidebar:"docs",previous:{title:"Como simular a Franzininho DIY no Wokwi",permalink:"/docs/franzininho-diy/wokwi/primeiros-passos"},next:{title:"Placa FranzMakey",permalink:"/docs/FranzMakey/franzmakey"}},s={},p=[{value:"Timeline do video",id:"timeline-do-video",level:3},{value:"Links",id:"links",level:2},{value:"Observa\xe7\xe3o",id:"observa\xe7\xe3o",level:2},{value:"Downloads",id:"downloads",level:2}],m={toc:p},c="wrapper";function u(e){let{components:a,...o}=e;return(0,r.kt)(c,(0,n.Z)({},m,o,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"PICSimLab \xe9 um emulador em tempo real de placas de desenvolvimento com depurador MPLABX/avr-gdb integrado. O PICSimLab suporta alguns microcontroladores PIC e AVR (outros em breve). "),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Fa\xe7a o Download do PICSimLab: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/lcgamboa/picsimlab/releases"},"https://github.com/lcgamboa/picsimlab/releases"))),(0,r.kt)("p",null,"A placa Franzininho DIY est\xe1 dispon\xedvel para simula\xe7\xe3o no PICSimLab,"),(0,r.kt)("p",null,"Veja no video abaixo os passos para grava\xe7\xe3o e depura\xe7\xe3o da Franzininho DIY no PICSimLab:"),(0,r.kt)("iframe",{width:"100%",height:"480",src:"https://www.youtube.com/embed/OemWGwXNxE4",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,r.kt)("h3",{id:"timeline-do-video"},"Timeline do video"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"00:00 Introdu\xe7\xe3o"),(0,r.kt)("li",{parentName:"ul"},"02:23 Arduino IDE (grava\xe7\xe3o)"),(0,r.kt)("li",{parentName:"ul"},"05:45 Arduino IDE tinyDebug (mensagens pela serial virtual)"),(0,r.kt)("li",{parentName:"ul"},"11:20 Sloeber IDE (eclipse) (grava\xe7\xe3o/depura\xe7\xe3o)"),(0,r.kt)("li",{parentName:"ul"},"27:55 avr gcc e gdb no terminal (grava\xe7\xe3o/depura\xe7\xe3o) "),(0,r.kt)("li",{parentName:"ul"},"37:52 MPLABX IDE (grava\xe7\xe3o/depura\xe7\xe3o)")),(0,r.kt)("h2",{id:"links"},"Links"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Adicionar suporte da placa Franzininho na IDE Arduino (e Sloeber): ",(0,r.kt)("a",{parentName:"li",href:"https://raw.githubusercontent.com/lcgamboa/franzininho-arduino-package/master/package_franzininho_lcgamboa_index.json"},"https://raw.githubusercontent.com/lcgamboa/franzininho-arduino-package/master/package_franzininho_lcgamboa_index.json")),(0,r.kt)("li",{parentName:"ul"},"Exemplos AVR libc: ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/exemplos-avr-libc"},"https://github.com/Franzininho/exemplos-avr-libc")),(0,r.kt)("li",{parentName:"ul"},"Donwload do Sloeber IDE (Eclipse): ",(0,r.kt)("a",{parentName:"li",href:"https://eclipse.baeyens.it/"},"https://eclipse.baeyens.it/"))),(0,r.kt)("h2",{id:"observa\xe7\xe3o"},"Observa\xe7\xe3o"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'Para instalar o suporte ao GDB instalar o suporte ao "arduino megaAVR boards" no Sloeber (passo que deu errado no v\xeddeo)'),(0,r.kt)("li",{parentName:"ul"},"O caminho do GDB dentro da pasta do Sloeber: ",(0,r.kt)("strong",{parentName:"li"},"Sloeber/arduinoPlugin/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-gdb"))),(0,r.kt)("h2",{id:"downloads"},"Downloads"),(0,r.kt)("p",null,"Download do PICSimLab: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/lcgamboa/picsimlab/releases"},"https://github.com/lcgamboa/picsimlab/releases"),"\nDownload do MPLABX: ",(0,r.kt)("a",{parentName:"p",href:"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide"},"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide"),"\nDownload do XC8:",(0,r.kt)("a",{parentName:"p",href:"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers"},"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a34fb63a.9214a7f9.js b/assets/js/a34fb63a.9214a7f9.js new file mode 100755 index 000000000..35cb9dbe0 --- /dev/null +++ b/assets/js/a34fb63a.9214a7f9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8336],{70676:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>a,metadata:()=>t,toc:()=>c});var o=i(17624),r=i(95788);const a={id:"picsimlab-intro",title:"Franzininho DIY no PICSimLab",slug:"/franzininho-diy/picsimlab/primeiros-passos",description:"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY"},s=void 0,t={id:"FranzininhoDIY/picsimlab/picsimlab-intro",title:"Franzininho DIY no PICSimLab",description:"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY",source:"@site/docs/FranzininhoDIY/picsimlab/franzininho-picsimlab.md",sourceDirName:"FranzininhoDIY/picsimlab",slug:"/franzininho-diy/picsimlab/primeiros-passos",permalink:"/docs/franzininho-diy/picsimlab/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/picsimlab/franzininho-picsimlab.md",tags:[],version:"current",frontMatter:{id:"picsimlab-intro",title:"Franzininho DIY no PICSimLab",slug:"/franzininho-diy/picsimlab/primeiros-passos",description:"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY"},sidebar:"docs",previous:{title:"Como simular a Franzininho DIY no Wokwi",permalink:"/docs/franzininho-diy/wokwi/primeiros-passos"},next:{title:"Placa FranzMakey",permalink:"/docs/FranzMakey/franzmakey"}},l={},c=[{value:"Timeline do video",id:"timeline-do-video",level:3},{value:"Links",id:"links",level:2},{value:"Observa\xe7\xe3o",id:"observa\xe7\xe3o",level:2},{value:"Downloads",id:"downloads",level:2}];function d(e){const n={a:"a",admonition:"admonition",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"PICSimLab \xe9 um emulador em tempo real de placas de desenvolvimento com depurador MPLABX/avr-gdb integrado. O PICSimLab suporta alguns microcontroladores PIC e AVR (outros em breve)."}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsxs)(n.p,{children:["Fa\xe7a o Download do PICSimLab: ",(0,o.jsx)(n.a,{href:"https://github.com/lcgamboa/picsimlab/releases",children:"https://github.com/lcgamboa/picsimlab/releases"})]})}),"\n",(0,o.jsx)(n.p,{children:"A placa Franzininho DIY est\xe1 dispon\xedvel para simula\xe7\xe3o no PICSimLab,"}),"\n",(0,o.jsx)(n.p,{children:"Veja no video abaixo os passos para grava\xe7\xe3o e depura\xe7\xe3o da Franzininho DIY no PICSimLab:"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"480",src:"https://www.youtube.com/embed/OemWGwXNxE4",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,o.jsx)(n.h3,{id:"timeline-do-video",children:"Timeline do video"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"00:00 Introdu\xe7\xe3o"}),"\n",(0,o.jsx)(n.li,{children:"02:23 Arduino IDE (grava\xe7\xe3o)"}),"\n",(0,o.jsx)(n.li,{children:"05:45 Arduino IDE tinyDebug (mensagens pela serial virtual)"}),"\n",(0,o.jsx)(n.li,{children:"11:20 Sloeber IDE (eclipse) (grava\xe7\xe3o/depura\xe7\xe3o)"}),"\n",(0,o.jsx)(n.li,{children:"27:55 avr gcc e gdb no terminal (grava\xe7\xe3o/depura\xe7\xe3o)"}),"\n",(0,o.jsx)(n.li,{children:"37:52 MPLABX IDE (grava\xe7\xe3o/depura\xe7\xe3o)"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"links",children:"Links"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Adicionar suporte da placa Franzininho na IDE Arduino (e Sloeber): ",(0,o.jsx)(n.a,{href:"https://raw.githubusercontent.com/lcgamboa/franzininho-arduino-package/master/package_franzininho_lcgamboa_index.json",children:"https://raw.githubusercontent.com/lcgamboa/franzininho-arduino-package/master/package_franzininho_lcgamboa_index.json"})]}),"\n",(0,o.jsxs)(n.li,{children:["Exemplos AVR libc: ",(0,o.jsx)(n.a,{href:"https://github.com/Franzininho/exemplos-avr-libc",children:"https://github.com/Franzininho/exemplos-avr-libc"})]}),"\n",(0,o.jsxs)(n.li,{children:["Donwload do Sloeber IDE (Eclipse): ",(0,o.jsx)(n.a,{href:"https://eclipse.baeyens.it/",children:"https://eclipse.baeyens.it/"})]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"observa\xe7\xe3o",children:"Observa\xe7\xe3o"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:'Para instalar o suporte ao GDB instalar o suporte ao "arduino megaAVR boards" no Sloeber (passo que deu errado no v\xeddeo)'}),"\n",(0,o.jsxs)(n.li,{children:["O caminho do GDB dentro da pasta do Sloeber: ",(0,o.jsx)(n.strong,{children:"Sloeber/arduinoPlugin/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-gdb"})]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"downloads",children:"Downloads"}),"\n",(0,o.jsxs)(n.p,{children:["Download do PICSimLab: ",(0,o.jsx)(n.a,{href:"https://github.com/lcgamboa/picsimlab/releases",children:"https://github.com/lcgamboa/picsimlab/releases"}),"\nDownload do MPLABX: ",(0,o.jsx)(n.a,{href:"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide",children:"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide"}),"\nDownload do XC8:",(0,o.jsx)(n.a,{href:"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers",children:"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers"})]})]})}function p(e={}){const{wrapper:n}={...(0,r.MN)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},95788:(e,n,i)=>{i.d(n,{MN:()=>c});var o=i(11504);function r(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function a(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,o)}return i}function s(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?a(Object(i),!0).forEach((function(n){r(e,n,i[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):a(Object(i)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(i,n))}))}return e}function t(e,n){if(null==e)return{};var i,o,r=function(e,n){if(null==e)return{};var i,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)i=a[o],n.indexOf(i)>=0||(r[i]=e[i]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)i=a[o],n.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var l=o.createContext({}),c=function(e){var n=o.useContext(l),i=n;return e&&(i="function"==typeof e?e(n):s(s({},n),e)),i},d={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},p=o.forwardRef((function(e,n){var i=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),m=c(i),h=r,u=m["".concat(l,".").concat(h)]||m[h]||d[h]||a;return i?o.createElement(u,s(s({ref:n},p),{},{components:i})):o.createElement(u,s({ref:n},p))}));p.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/a47310cc.24424866.js b/assets/js/a47310cc.24424866.js deleted file mode 100755 index f0b7c982f..000000000 --- a/assets/js/a47310cc.24424866.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8615],{3905:(e,r,n)=>{n.d(r,{Zo:()=>d,kt:()=>f});var o=n(7294);function t(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function i(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?i(Object(n),!0).forEach((function(r){t(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function l(e,r){if(null==e)return{};var n,o,t=function(e,r){if(null==e)return{};var n,o,t={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],r.indexOf(n)>=0||(t[n]=e[n]);return t}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(t[n]=e[n])}return t}var m=o.createContext({}),s=function(e){var r=o.useContext(m),n=r;return e&&(n="function"==typeof e?e(r):a(a({},r),e)),n},d=function(e){var r=s(e.components);return o.createElement(m.Provider,{value:r},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},p=o.forwardRef((function(e,r){var n=e.components,t=e.mdxType,i=e.originalType,m=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=s(n),p=t,f=c["".concat(m,".").concat(p)]||c[p]||u[p]||i;return n?o.createElement(f,a(a({ref:r},d),{},{components:n})):o.createElement(f,a({ref:r},d))}));function f(e,r){var n=arguments,t=r&&r.mdxType;if("string"==typeof e||t){var i=n.length,a=new Array(i);a[0]=p;var l={};for(var m in r)hasOwnProperty.call(r,m)&&(l[m]=r[m]);l.originalType=e,l[c]="string"==typeof e?e:t,a[1]=l;for(var s=2;s<i;s++)a[s]=n[s];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}p.displayName="MDXCreateElement"},101:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>m,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var o=n(3117),t=(n(7294),n(3905));const i={id:"semaforo",title:"Sem\xe1foro",slug:"/franzininho-diy/semaforo",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},a=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/semaforo",id:"FranzininhoDIY/exemplos-arduino/semaforo",title:"Sem\xe1foro",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/semaforo.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/semaforo",permalink:"/docs/franzininho-diy/semaforo",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/semaforo.md",tags:[],version:"current",frontMatter:{id:"semaforo",title:"Sem\xe1foro",slug:"/franzininho-diy/semaforo",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},sidebar:"docs",previous:{title:"Sensor de luz com LDR",permalink:"/docs/franzininho-diy/sensor-luz-ldr"},next:{title:"Theremim",permalink:"/docs/franzininho-diy/theremim"}},m={},s=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],d={toc:s},c="wrapper";function u(e){let{components:r,...i}=e;return(0,t.kt)(c,(0,o.Z)({},d,i,{components:r,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY."),(0,t.kt)("h2",{id:"materiais"},"Materiais"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Placa Franzininho;"),(0,t.kt)("li",{parentName:"ul"},"Protoboard;"),(0,t.kt)("li",{parentName:"ul"},"LED vermelho"),(0,t.kt)("li",{parentName:"ul"},"LED amarelo"),(0,t.kt)("li",{parentName:"ul"},"LED verde"),(0,t.kt)("li",{parentName:"ul"},"3 Resistores 330 R"),(0,t.kt)("li",{parentName:"ul"},"Jumpers")),(0,t.kt)("h2",{id:"circuito"},"Circuito"),(0,t.kt)("p",null,"Fa\xe7a a seguinte liga\xe7\xe3o no protoboard:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"circuito semaforo",src:n(8787).Z,width:"573",height:"242"})),(0,t.kt)("p",null,"Sketch"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-cpp"},"/*\n Franzininho\n Exemplo: Sem\xe1foro\nNesse exemplo vamos fazer um sem\xe1foro de uma via.\n*/\nint vermelho = 2; //LED Vermelho\nint amarelo = 1; //LED Amarelo\nint verde = 0; //LED Verde\n\nvoid setup() {\n pinMode(vermelho,OUTPUT); //define LED vermelho como Sa\xedda\n pinMode(verde,OUTPUT); //define LED verde como Sa\xedda\n pinMode(amarelo,OUTPUT); //define LED Amarelo como Sa\xedda\n}\n\nvoid loop() {\n //fase 1\n digitalWrite(vermelho,HIGH);\n digitalWrite(amarelo,LOW);\n digitalWrite(verde,LOW);\n delay(5000);\n //fase 2\n digitalWrite(vermelho,LOW);\n digitalWrite(amarelo,HIGH);\n digitalWrite(verde,LOW);\n delay(1000);\n //fase 3\n digitalWrite(vermelho,LOW);\n digitalWrite(amarelo,LOW);\n digitalWrite(verde,HIGH);\n delay(5000);\n}\n")),(0,t.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,t.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311444144703668800?view=diagram"}),(0,t.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,t.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/jdFRHqfmzik",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}u.isMDXComponent=!0},8787:(e,r,n)=>{n.d(r,{Z:()=>o});const o=n.p+"assets/images/semaforo-circuito-ad8d502f56ebf8aee34751edba36b634.png"}}]); \ No newline at end of file diff --git a/assets/js/a47310cc.d6691628.js b/assets/js/a47310cc.d6691628.js new file mode 100755 index 000000000..8e2f9e1aa --- /dev/null +++ b/assets/js/a47310cc.d6691628.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2976],{38568:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>m,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var i=r(17624),o=r(95788);const t={id:"semaforo",title:"Sem\xe1foro",slug:"/franzininho-diy/semaforo",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},a=void 0,l={id:"FranzininhoDIY/exemplos-arduino/semaforo",title:"Sem\xe1foro",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/semaforo.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/semaforo",permalink:"/docs/franzininho-diy/semaforo",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/semaforo.md",tags:[],version:"current",frontMatter:{id:"semaforo",title:"Sem\xe1foro",slug:"/franzininho-diy/semaforo",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},sidebar:"docs",previous:{title:"Sensor de luz com LDR",permalink:"/docs/franzininho-diy/sensor-luz-ldr"},next:{title:"Theremim",permalink:"/docs/franzininho-diy/theremim"}},s={},d=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function c(e){const n={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY."}),"\n",(0,i.jsx)(n.h2,{id:"materiais",children:"Materiais"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Placa Franzininho;"}),"\n",(0,i.jsx)(n.li,{children:"Protoboard;"}),"\n",(0,i.jsx)(n.li,{children:"LED vermelho"}),"\n",(0,i.jsx)(n.li,{children:"LED amarelo"}),"\n",(0,i.jsx)(n.li,{children:"LED verde"}),"\n",(0,i.jsx)(n.li,{children:"3 Resistores 330 R"}),"\n",(0,i.jsx)(n.li,{children:"Jumpers"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,i.jsx)(n.p,{children:"Fa\xe7a a seguinte liga\xe7\xe3o no protoboard:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"circuito semaforo",src:r(64344).c+"",width:"573",height:"242"})}),"\n",(0,i.jsx)(n.p,{children:"Sketch"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-cpp",children:"/*\n Franzininho\n Exemplo: Sem\xe1foro\nNesse exemplo vamos fazer um sem\xe1foro de uma via.\n*/\nint vermelho = 2; //LED Vermelho\nint amarelo = 1; //LED Amarelo\nint verde = 0; //LED Verde\n\nvoid setup() {\n pinMode(vermelho,OUTPUT); //define LED vermelho como Sa\xedda\n pinMode(verde,OUTPUT); //define LED verde como Sa\xedda\n pinMode(amarelo,OUTPUT); //define LED Amarelo como Sa\xedda\n}\n\nvoid loop() {\n //fase 1\n digitalWrite(vermelho,HIGH);\n digitalWrite(amarelo,LOW);\n digitalWrite(verde,LOW);\n delay(5000);\n //fase 2\n digitalWrite(vermelho,LOW);\n digitalWrite(amarelo,HIGH);\n digitalWrite(verde,LOW);\n delay(1000);\n //fase 3\n digitalWrite(vermelho,LOW);\n digitalWrite(amarelo,LOW);\n digitalWrite(verde,HIGH);\n delay(5000);\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311444144703668800?view=diagram"}),"\n",(0,i.jsx)(n.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/jdFRHqfmzik",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function m(e={}){const{wrapper:n}={...(0,o.MN)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},95788:(e,n,r)=>{r.d(n,{MN:()=>d});var i=r(11504);function o(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function t(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,i)}return r}function a(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?t(Object(r),!0).forEach((function(n){o(e,n,r[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):t(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))}))}return e}function l(e,n){if(null==e)return{};var r,i,o=function(e,n){if(null==e)return{};var r,i,o={},t=Object.keys(e);for(i=0;i<t.length;i++)r=t[i],n.indexOf(r)>=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(i=0;i<t.length;i++)r=t[i],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=i.createContext({}),d=function(e){var n=i.useContext(s),r=n;return e&&(r="function"==typeof e?e(n):a(a({},n),e)),r},c={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},m=i.forwardRef((function(e,n){var r=e.components,o=e.mdxType,t=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=d(r),p=o,f=u["".concat(s,".").concat(p)]||u[p]||c[p]||t;return r?i.createElement(f,a(a({ref:n},m),{},{components:r})):i.createElement(f,a({ref:n},m))}));m.displayName="MDXCreateElement"},64344:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/semaforo-circuito-ad8d502f56ebf8aee34751edba36b634.png"}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.15a76870.js b/assets/js/a6aa9e1f.15a76870.js deleted file mode 100755 index e86bbf88a..000000000 --- a/assets/js/a6aa9e1f.15a76870.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3089],{46:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var n=a(7294),r=a(4334),l=a(2263),i=a(1944),o=a(5281),s=a(9058),m=a(9703),c=a(197),g=a(9985);function p(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,l.Z)(),{blogDescription:r,blogTitle:o,permalink:s}=t,m="/"===s?a:o;return n.createElement(n.Fragment,null,n.createElement(i.d,{title:m,description:r}),n.createElement(c.Z,{tag:"blog_posts_list"}))}function d(e){const{metadata:t,items:a,sidebar:r}=e;return n.createElement(s.Z,{sidebar:r},n.createElement(g.Z,{items:a}),n.createElement(m.Z,{metadata:t}))}function u(e){return n.createElement(i.FG,{className:(0,r.Z)(o.k.wrapper.blogPages,o.k.page.blogListPage)},n.createElement(p,e),n.createElement(d,e))}},9703:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(7294),r=a(5999),l=a(2244);function i(e){const{metadata:t}=e,{previousPage:a,nextPage:i}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,r.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(l.Z,{permalink:a,title:n.createElement(r.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),i&&n.createElement(l.Z,{permalink:i,title:n.createElement(r.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},9985:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(7294),r=a(9460),l=a(390);function i(e){let{items:t,component:a=l.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(r.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.d18b185f.js b/assets/js/a6aa9e1f.d18b185f.js new file mode 100755 index 000000000..8518d281a --- /dev/null +++ b/assets/js/a6aa9e1f.d18b185f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4976],{16960:(e,t,a)=>{a.r(t),a.d(t,{default:()=>f});a(11504);var n=a(34064),i=a(28264),r=a(68900),o=a(45864),s=a(9452),l=a(22687),c=a(48712),d=a(60992),g=a(56952),p=a(35388),u=a(17624);function m(e){const t=(0,p.Q)(e);return(0,u.jsx)(g.c,{children:(0,u.jsx)("script",{type:"application/ld+json",children:JSON.stringify(t)})})}function h(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,i.c)(),{blogDescription:n,blogTitle:o,permalink:s}=t,l="/"===s?a:o;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(r.U7,{title:l,description:n}),(0,u.jsx)(c.c,{tag:"blog_posts_list"})]})}function b(e){const{metadata:t,items:a,sidebar:n}=e;return(0,u.jsxs)(s.c,{sidebar:n,children:[(0,u.jsx)(d.c,{items:a}),(0,u.jsx)(l.c,{metadata:t})]})}function f(e){return(0,u.jsxs)(r.cr,{className:(0,n.c)(o.W.wrapper.blogPages,o.W.page.blogListPage),children:[(0,u.jsx)(h,{...e}),(0,u.jsx)(m,{...e}),(0,u.jsx)(b,{...e})]})}},22687:(e,t,a)=>{a.d(t,{c:()=>o});a(11504);var n=a(84357),i=a(70308),r=a(17624);function o(e){const{metadata:t}=e,{previousPage:a,nextPage:o}=t;return(0,r.jsxs)("nav",{className:"pagination-nav","aria-label":(0,n.G)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[a&&(0,r.jsx)(i.c,{permalink:a,title:(0,r.jsx)(n.c,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),o&&(0,r.jsx)(i.c,{permalink:o,title:(0,r.jsx)(n.c,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},60992:(e,t,a)=>{a.d(t,{c:()=>o});a(11504);var n=a(83152),i=a(47590),r=a(17624);function o(e){let{items:t,component:a=i.c}=e;return(0,r.jsx)(r.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,r.jsx)(n.E,{content:t,children:(0,r.jsx)(a,{children:(0,r.jsx)(t,{})})},t.metadata.permalink)}))})}},35388:(e,t,a)=>{a.d(t,{Q:()=>d,C:()=>g});var n=a(70964),i=a(28264),r=a(85308);var o=a(83152);const s=e=>new Date(e).toISOString();function l(e){const t=e.map(p);return{author:1===t.length?t[0]:t}}function c(e,t,a){return e?{image:u({imageUrl:t(e,{absolute:!0}),caption:`title image for the blog post: ${a}`})}:{}}function d(e){const{siteConfig:t}=(0,i.c)(),{withBaseUrl:a}=(0,n.E)(),{metadata:{blogDescription:r,blogTitle:o,permalink:d}}=e,g=`${t.url}${d}`;return{"@context":"https://schema.org","@type":"Blog","@id":g,mainEntityOfPage:g,headline:o,description:r,blogPost:e.items.map((e=>function(e,t,a){const{assets:n,frontMatter:i,metadata:r}=e,{date:o,title:d,description:g,lastUpdatedAt:p}=r,u=n.image??i.image,m=i.keywords??[],h=`${t.url}${r.permalink}`,b=p?s(p):void 0;return{"@type":"BlogPosting","@id":h,mainEntityOfPage:h,url:h,headline:d,name:d,description:g,datePublished:o,...b?{dateModified:b}:{},...l(r.authors),...c(u,a,d),...m?{keywords:m}:{}}}(e.content,t,a)))}}function g(){const e=function(){const e=(0,r.c)(),t=e?.data?.blogMetadata;if(!t)throw new Error("useBlogMetadata() can't be called on the current route because the blog metadata could not be found in route context");return t}(),{assets:t,metadata:a}=(0,o.g)(),{siteConfig:d}=(0,i.c)(),{withBaseUrl:g}=(0,n.E)(),{date:p,title:u,description:m,frontMatter:h,lastUpdatedAt:b}=a,f=t.image??h.image,x=h.keywords??[],j=b?s(b):void 0,k=`${d.url}${a.permalink}`;return{"@context":"https://schema.org","@type":"BlogPosting","@id":k,mainEntityOfPage:k,url:k,headline:u,name:u,description:m,datePublished:p,...j?{dateModified:j}:{},...l(a.authors),...c(f,g,u),...x?{keywords:x}:{},isPartOf:{"@type":"Blog","@id":`${d.url}${e.blogBasePath}`,name:e.blogTitle}}}function p(e){return{"@type":"Person",...e.name?{name:e.name}:{},...e.title?{description:e.title}:{},...e.url?{url:e.url}:{},...e.email?{email:e.email}:{},...e.imageURL?{image:e.imageURL}:{}}}function u(e){let{imageUrl:t,caption:a}=e;return{"@type":"ImageObject","@id":t,url:t,contentUrl:t,caption:a}}}}]); \ No newline at end of file diff --git a/assets/js/a7023ddc.8878d9c3.js b/assets/js/a7023ddc.8878d9c3.js new file mode 100755 index 000000000..e1c0f8570 --- /dev/null +++ b/assets/js/a7023ddc.8878d9c3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9112],{61568:l=>{l.exports=JSON.parse('[{"label":"facebook","permalink":"/blog/tags/facebook","count":1},{"label":"hello","permalink":"/blog/tags/hello","count":2},{"label":"docusaurus","permalink":"/blog/tags/docusaurus","count":3},{"label":"hola","permalink":"/blog/tags/hola","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/a7023ddc.f2391359.js b/assets/js/a7023ddc.f2391359.js deleted file mode 100755 index 4b106283d..000000000 --- a/assets/js/a7023ddc.f2391359.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1713],{3457:l=>{l.exports=JSON.parse('[{"label":"facebook","permalink":"/blog/tags/facebook","count":1},{"label":"hello","permalink":"/blog/tags/hello","count":2},{"label":"docusaurus","permalink":"/blog/tags/docusaurus","count":3},{"label":"hola","permalink":"/blog/tags/hola","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.65a9f5e3.js b/assets/js/a7bd4aaa.65a9f5e3.js new file mode 100755 index 000000000..720dda4ea --- /dev/null +++ b/assets/js/a7bd4aaa.65a9f5e3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6500],{22e3:(n,e,s)=>{s.r(e),s.d(e,{default:()=>x});s(11504);var r=s(68900),o=s(14456),i=s(69920),t=s(85464),c=s(48712),a=s(17624);function u(n){const{version:e}=n;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.c,{version:e.version,tag:(0,o.SE)(e.pluginId,e.version)}),(0,a.jsx)(r.U7,{children:e.noIndex&&(0,a.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(n){const{version:e,route:s}=n;return(0,a.jsx)(r.cr,{className:e.className,children:(0,a.jsx)(i.Q,{version:e,children:(0,t.k)(s.routes)})})}function x(n){return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(u,{...n}),(0,a.jsx)(l,{...n})]})}}}]); \ No newline at end of file diff --git a/assets/js/a80da1cf.3d666c94.js b/assets/js/a80da1cf.3d666c94.js deleted file mode 100755 index cdf7757bb..000000000 --- a/assets/js/a80da1cf.3d666c94.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3205],{4863:a=>{a.exports=JSON.parse('{"label":"docusaurus","permalink":"/blog/tags/docusaurus","allTagsPath":"/blog/tags","count":3}')}}]); \ No newline at end of file diff --git a/assets/js/a80da1cf.98f39837.js b/assets/js/a80da1cf.98f39837.js new file mode 100755 index 000000000..9621f9a2a --- /dev/null +++ b/assets/js/a80da1cf.98f39837.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8600],{92338:s=>{s.exports=JSON.parse('{"label":"docusaurus","permalink":"/blog/tags/docusaurus","allTagsPath":"/blog/tags","count":3,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.7519b2d0.js b/assets/js/a94703ab.7519b2d0.js new file mode 100755 index 000000000..244d0cf34 --- /dev/null +++ b/assets/js/a94703ab.7519b2d0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4666],{20996:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(11504),o=n(34064),i=n(68900),s=n(45864),c=n(79940),l=n(46192),r=n(84357),d=n(53943),u=n(27124);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(17624);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:c}=(0,d.yI)();return(0,d.SM)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(c(),o(!1)):a<t?o(!1):a+window.innerHeight<document.documentElement.scrollHeight&&o(!0))})),(0,u.c)((e=>{e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,r.G)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.c)("clean-btn",s.W.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(13856),x=n(55592),j=n(11432),f=n(21824),v=n(68164);function _(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const g={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function S(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,r.G)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,r.G)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.c)("button button--secondary button--outline",g.collapseSidebarButton),onClick:t,children:(0,b.jsx)(_,{className:g.collapseSidebarButtonIcon})})}var k=n(43868),C=n(91100);const I=Symbol("EmptyContext"),N=a.createContext(I);function T(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(N.Provider,{value:i,children:t})}var B=n(58448),y=n(13376),A=n(10867),W=n(93664);function w(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,r.G)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,r.G)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),"aria-expanded":!t,type:"button",className:"clean-btn menu__caret",onClick:a})}function L(e){let{item:t,onItemClick:n,activePath:i,level:l,index:r,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:j}}}=(0,f.y)(),v=function(e){const t=(0,W.c)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,c.Gw)(e):void 0),[e,t])}(t),_=(0,c.Md)(t,i),g=(0,y.Sc)(x,i),{collapsed:S,setCollapsed:k}=(0,B.a)({initialState:()=>!!h&&(!_&&t.collapsed)}),{expandedItem:T,setExpandedItem:L}=function(){const e=(0,a.useContext)(N);if(e===I)throw new C.AH("DocSidebarItemsExpandedStateProvider");return e}(),E=function(e){void 0===e&&(e=!S),L(e?null:r),k(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,C.i0)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:_,collapsed:S,updateCollapsed:E}),(0,a.useEffect)((()=>{h&&null!=T&&T!==r&&j&&k(!0)}),[h,T,r,k,j]),(0,b.jsxs)("li",{className:(0,o.c)(s.W.docs.docSidebarItemCategory,s.W.docs.docSidebarItemCategoryLevel(l),"menu__list-item",{"menu__list-item--collapsed":S},p),children:[(0,b.jsxs)("div",{className:(0,o.c)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":g}),children:[(0,b.jsx)(A.c,{className:(0,o.c)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":_}),onClick:h?e=>{n?.(t),x?E(!1):(e.preventDefault(),E())}:()=>{n?.(t)},"aria-current":g?"page":void 0,role:h&&!x?"button":void 0,"aria-expanded":h&&!x?!S:void 0,href:h?v??"#":v,...d,children:m}),x&&h&&(0,b.jsx)(w,{collapsed:S,categoryLabel:m,onClick:e=>{e.preventDefault(),E()}})]}),(0,b.jsx)(B.U,{lazy:!0,as:"ul",className:"menu__list",collapsed:S,children:(0,b.jsx)(U,{items:u,tabIndex:S?-1:0,onItemClick:n,activePath:i,level:l+1})})]})}var E=n(18136),M=n(3232);const H={menuExternalLink:"menuExternalLink_NmtK"};function P(e){let{item:t,onItemClick:n,activePath:a,level:i,index:l,...r}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,c.Md)(t,a),x=(0,E.c)(d);return(0,b.jsx)("li",{className:(0,o.c)(s.W.docs.docSidebarItemLink,s.W.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(A.c,{className:(0,o.c)("menu__link",!x&&H.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...r,children:[u,!x&&(0,b.jsx)(M.c,{})]})},u)}const R={menuHtmlItem:"menuHtmlItem_M9Kj"};function G(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:c,className:l}=t;return(0,b.jsx)("li",{className:(0,o.c)(s.W.docs.docSidebarItemLink,s.W.docs.docSidebarItemLinkLevel(n),c&&[R.menuHtmlItem,"menu__list-item"],l),dangerouslySetInnerHTML:{__html:i}},a)}function D(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(L,{item:t,...n});case"html":return(0,b.jsx)(G,{item:t,...n});default:return(0,b.jsx)(P,{item:t,...n})}}function F(e){let{items:t,...n}=e;const a=(0,c.mg)(t,n.activePath);return(0,b.jsx)(T,{children:a.map(((e,t)=>(0,b.jsx)(D,{item:e,index:t,...n},t)))})}const U=(0,a.memo)(F),z={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function K(e){let{path:t,sidebar:n,className:i}=e;const c=function(){const{isActive:e}=(0,k.el)(),[t,n]=(0,a.useState)(e);return(0,d.SM)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,r.G)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.c)("menu thin-scrollbar",z.menu,c&&z.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.c)(s.W.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(U,{items:n,activePath:t,level:1})})})}const V="sidebar_njMd",Y="sidebarWithHideableNavbar_wUlq",q="sidebarHidden_VK0M",O="sidebarLogo_isFc";function J(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:c}}}=(0,f.y)();return(0,b.jsxs)("div",{className:(0,o.c)(V,s&&Y,i&&q),children:[s&&(0,b.jsx)(v.c,{tabIndex:-1,className:O}),(0,b.jsx)(K,{path:t,sidebar:n}),c&&(0,b.jsx)(S,{onClick:a})]})}const Q=a.memo(J);var X=n(45168),Z=n(41336);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,Z.q)();return(0,b.jsx)("ul",{className:(0,o.c)(s.W.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(U,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(X.Mx,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,j.U)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(Q,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,r.G)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,r.G)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(_,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function se(e){let{children:t}=e;const n=(0,l.m)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function ce(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:c}=(0,x.IT)(),[l,r]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{l&&r(!1),!l&&(0,p.I)()&&r(!0),i((e=>!e))}),[i,l]);return(0,b.jsx)("aside",{className:(0,o.c)(s.W.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&r(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.c)(ie.sidebarViewport,l&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:c,onCollapse:d,isHidden:l}),l&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const le={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function re(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,l.m)();return(0,b.jsx)("main",{className:(0,o.c)(le.docMainContainer,(t||!a)&&le.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.c)("container padding-top--md padding-bottom--lg",le.docItemWrapper,t&&le.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function ue(e){let{children:t}=e;const n=(0,l.m)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(ce,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(re,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(96592);function be(e){const t=(0,c.Uj)(e);if(!t)return(0,b.jsx)(me.c,{});const{docElement:n,sidebarName:a,sidebarItems:r}=t;return(0,b.jsx)(i.cr,{className:(0,o.c)(s.W.page.docsDocPage),children:(0,b.jsx)(l.y,{name:a,items:r,children:(0,b.jsx)(ue,{children:n})})})}},96592:(e,t,n)=>{n.d(t,{c:()=>c});n(11504);var a=n(34064),o=n(84357),i=n(56448),s=n(17624);function c(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.c)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.c,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.c,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.c,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.c,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/assets/js/acecf23e.59c08d62.js b/assets/js/acecf23e.59c08d62.js new file mode 100755 index 000000000..47396642e --- /dev/null +++ b/assets/js/acecf23e.59c08d62.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6360],{81112:e=>{e.exports=JSON.parse('{"blogBasePath":"/blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/af172acd.0dcfbf19.js b/assets/js/af172acd.0dcfbf19.js deleted file mode 100755 index a34b2e519..000000000 --- a/assets/js/af172acd.0dcfbf19.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1449],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),c=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=c(e.components);return n.createElement(i.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=c(r),m=o,f=p["".concat(i,".").concat(m)]||p[m]||g[m]||a;return r?n.createElement(f,l(l({ref:t},s),{},{components:r})):n.createElement(f,l({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var u={};for(var i in t)hasOwnProperty.call(t,i)&&(u[i]=t[i]);u.originalType=e,u[p]="string"==typeof e?e:o,l[1]=u;for(var c=2;c<a;c++)l[c]=r[c];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},7498:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>g,frontMatter:()=>a,metadata:()=>u,toc:()=>c});var n=r(3117),o=(r(7294),r(3905));const a={slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},l=void 0,u={permalink:"/blog/welcome",source:"@site/blog/2019-05-30-welcome.md",title:"Welcome",description:"Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!",date:"2019-05-30T00:00:00.000Z",formattedDate:"30 de maio de 2019",tags:[{label:"facebook",permalink:"/blog/tags/facebook"},{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.175,hasTruncateMarker:!1,authors:[{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4"}],frontMatter:{slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},nextItem:{title:"Hello",permalink:"/blog/hello-world"}},i={authorsImageUrls:[void 0]},c=[],s={toc:c},p="wrapper";function g(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Blog features are powered by the blog plugin. Simply add files to the ",(0,o.kt)("inlineCode",{parentName:"p"},"blog")," directory. It supports tags as well!"),(0,o.kt)("p",null,"Delete the whole directory if you don't want the blog features. As simple as that!"))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/af172acd.b01e1b24.js b/assets/js/af172acd.b01e1b24.js new file mode 100755 index 000000000..2a746de9c --- /dev/null +++ b/assets/js/af172acd.b01e1b24.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1560],{92368:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>u});var n=r(17624),o=r(95788);const a={slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},l=void 0,c={permalink:"/blog/welcome",source:"@site/blog/2019-05-30-welcome.md",title:"Welcome",description:"Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!",date:"2019-05-30T00:00:00.000Z",tags:[{label:"facebook",permalink:"/blog/tags/facebook"},{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.175,hasTruncateMarker:!1,authors:[{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4"}],frontMatter:{slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},unlisted:!1,nextItem:{title:"Hello",permalink:"/blog/hello-world"}},s={authorsImageUrls:[void 0]},u=[];function i(e){const t={code:"code",p:"p",...(0,o.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["Blog features are powered by the blog plugin. Simply add files to the ",(0,n.jsx)(t.code,{children:"blog"})," directory. It supports tags as well!"]}),"\n",(0,n.jsx)(t.p,{children:"Delete the whole directory if you don't want the blog features. As simple as that!"})]})}function p(e={}){const{wrapper:t}={...(0,o.MN)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(i,{...e})}):i(e)}},95788:(e,t,r)=>{r.d(t,{MN:()=>u});var n=r(11504);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},i={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),g=u(r),h=o,b=g["".concat(s,".").concat(h)]||g[h]||i[h]||a;return r?n.createElement(b,l(l({ref:t},p),{},{components:r})):n.createElement(b,l({ref:t},p))}));p.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/af2b9553.40ff3afa.js b/assets/js/af2b9553.40ff3afa.js new file mode 100755 index 000000000..11cdf3324 --- /dev/null +++ b/assets/js/af2b9553.40ff3afa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2660],{68240:(e,i,o)=>{o.r(i),o.d(i,{assets:()=>t,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var n=o(17624),s=o(95788);const a={id:"franzininho-wifi-espidf-05",title:"Primeiros passos com a AWS",slug:"/franzininho-wifi/exemplos-espidf/aws",description:"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.",author:"Ana Carolina Cabral (ana.cpmelo95@gmail.com)"},r=void 0,c={id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05",title:"Primeiros passos com a AWS",description:"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x05-AWS-IoT-Core.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/aws",permalink:"/docs/franzininho-wifi/exemplos-espidf/aws",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x05-AWS-IoT-Core.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-05",title:"Primeiros passos com a AWS",slug:"/franzininho-wifi/exemplos-espidf/aws",description:"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.",author:"Ana Carolina Cabral (ana.cpmelo95@gmail.com)"},sidebar:"docs",previous:{title:"PWM com LEDC",permalink:"/docs/franzininho-wifi/exemplos-espidf/ledc"},next:{title:"Primeiros Passos",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos"}},t={},d=[{value:"Introdu\xe7\xe3o",id:"introdu\xe7\xe3o",level:3},{value:"AWS IOT Core",id:"aws-iot-core",level:3},{value:"Parte 1 - Criando a Franzininho na AWS",id:"parte-1---criando-a-franzininho-na-aws",level:3},{value:"Parte 2 - Conectando a Franzininho com ESP-IDF",id:"parte-2---conectando-a-franzininho-com-esp-idf",level:3},{value:"Parte 3 - Monitorando a Franzininho",id:"parte-3---monitorando-a-franzininho",level:3}];function l(e){const i={a:"a",code:"code",em:"em",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h3,{id:"introdu\xe7\xe3o",children:"Introdu\xe7\xe3o"}),"\n",(0,n.jsxs)(i.p,{children:["Neste tutorial exploraremos a utiliza\xe7\xe3o do AWS IoT Core para conectar a placa Franzininho WiFi \xe0 nuvem utilizando o ESP-IDF. Al\xe9m do IoT Core, a AWS oferece v\xe1rias outras formas de conectar um dispositivo, como AWS IoT Greengrass Stream Manager ou AWS IoT SiteWise. Esses outros servi\xe7os para ingest\xe3o e visualiza\xe7\xe3o de dados podem ser vistos nesse ",(0,n.jsx)(i.a,{href:"https://aws.amazon.com/pt/blogs/iot/7-patterns-for-iot-data-ingestion-and-visualization-how-to-decide-what-works-best-for-your-use-case/",children:"link"}),"."]}),"\n",(0,n.jsx)(i.h3,{id:"aws-iot-core",children:"AWS IOT Core"}),"\n",(0,n.jsx)(i.p,{children:"O AWS IoT Core \xe9 o broker de mensagens que permite conectar dispositivos IoT com a nuvem AWS e seus diversos servi\xe7os. Atrav\xe9s dele, podemos criar, configurar e gerenciar nossos dispositivos."}),"\n",(0,n.jsx)(i.p,{children:"Atualmente suporta os seguintes protocolos de comunica\xe7\xe3o:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"MQTT"}),"\n",(0,n.jsx)(i.li,{children:"MQTT over WSS (Websockets Secure)"}),"\n",(0,n.jsx)(i.li,{children:"HTTPS"}),"\n",(0,n.jsx)(i.li,{children:"LoRaWAN"}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"Resumidamente, o servi\xe7o se baseia em:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Things:"})," Dispositivos (\u201ccoisas\u201d) que queremos conectar;"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Jobs:"})," A\xe7\xf5es remotas que voc\xea pode agendar para realizar opera\xe7\xf5es nos seus dispositivos, como atualiza\xe7\xf5es de firmware;"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Rules:"})," Regras atrav\xe9s das quais podemos direcionar as mensagens recebidas pelo broker para outros servi\xe7os da AWS, por exemplo, para armazenar dados no DynamoDB."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Seguran\xe7a:"})," onde \xe9 poss\xedvel gerenciar os certificados de autoriza\xe7\xe3o, pol\xedticas (policies) e papeis (roles) de autentica\xe7\xe3o."]}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"parte-1---criando-a-franzininho-na-aws",children:"Parte 1 - Criando a Franzininho na AWS"}),"\n",(0,n.jsx)(i.p,{children:"Para seguir o tutorial, voc\xea deve ter acesso ao console da AWS. Para come\xe7ar, vamos criar uma nova \u201ccoisa\u201d (thing) para representar nossa Franzininho na nuvem. Certifique-se que voc\xea est\xe1 na regi\xe3o mais pr\xf3xima antes de come\xe7ar, selecionando-a no menu do canto superior direito. Para o Brasil, a regi\xe3o \xe9 sa-east-1."}),"\n",(0,n.jsxs)(i.ol,{children:["\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Na AWS, procure pelo servi\xe7o IoT Core (",(0,n.jsx)(i.code,{children:"Service > Internet of Things > IoT core"}),") e crie uma nova \u201ccoisa\u201d em ",(0,n.jsx)(i.code,{children:"Manage > All devices > Things > Create new thing"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Vamos criar apenas um dispositivo (",(0,n.jsx)(i.em,{children:"Create a single thing"}),"), mas saiba que tamb\xe9m \xe9 poss\xedvel criar v\xe1rios de uma vez (",(0,n.jsx)(i.em,{children:"Create many things"}),"). Voc\xea precisar\xe1 especificar as propriedades desse dispositivo:"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"Thing name: o nome do seu dispositivo para identific\xe1-lo de forma \xfanica. Escolha sabiamente, pois essa propriedade n\xe3o pode ser alterada depois que o dispositivo \xe9 criado."}),"\n",(0,n.jsx)(i.li,{children:"Configura\xe7\xf5es adicionais: podem ser utilizadas para detalhar, organizar, gerenciar e pesquisar os dispositivos, como tipo, atributos ou grupos."}),"\n",(0,n.jsx)(i.li,{children:"Device shadow permite que o estado do seu dispositivo fique dispon\xedvel para outros servi\xe7os mesmo que ele n\xe3o esteja conectado."}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"Por enquanto, basta preencher o nome e prosseguir. Chamarei o meu carinhosamente de Franz."}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"Criar thing",src:o(49976).c+"",width:"808",height:"808"})}),"\n",(0,n.jsxs)(i.ol,{start:"3",children:["\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Para conseguir se autenticar ao seriv\xe7o da AWS, cada dispositivo deve ter um certificado. Utilizaremos o gerado automaticamente (",(0,n.jsx)(i.em,{children:"Auto-generate a new certificate"}),"), mas voc\xea tamb\xe9m tem a op\xe7\xe3o de utilizar certificados pr\xf3prios."]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Para gerenciar o n\xedvel de acesso desse certificado aos recursos, \xe9 preciso criar uma pol\xedtica de autoriza\xe7\xe3o (",(0,n.jsx)(i.em,{children:"policy"}),"), que \xe9 uma lista de a\xe7\xf5es permitidas ou proibidas para aquele certificado. Voc\xea pode criar uma pol\xedtica direto dessa aba, em ",(0,n.jsx)(i.em,{children:"Create policy"}),", ou pela barra de navega\xe7\xe3o do IoT Core em ",(0,n.jsx)(i.em,{children:"Security > Policies"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:["Uma ",(0,n.jsx)(i.em,{children:"policy"})," deve ter um nome e uma ou mais declara\xe7\xf5es (",(0,n.jsx)(i.em,{children:"statements"}),"). Cada declara\xe7\xe3o \xe9 composta por um ",(0,n.jsx)(i.strong,{children:"efeito"})," de uma ",(0,n.jsx)(i.strong,{children:"a\xe7\xe3o"})," \xe0 um ",(0,n.jsx)(i.strong,{children:"recurso"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["O ",(0,n.jsx)(i.strong,{children:"efeito"})," pode ser de permiss\xe3o (",(0,n.jsx)(i.em,{children:"allow"}),") ou proibi\xe7\xe3o (",(0,n.jsx)(i.em,{children:"deny"}),")."]}),"\n",(0,n.jsxs)(i.p,{children:["As poss\xedveis ",(0,n.jsx)(i.strong,{children:"a\xe7\xf5es"})," desse servi\xe7o s\xe3o v\xe1rias, mas utilizaremos as seguintes principais:"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.em,{children:"iot:Connect:"})," permite a conex\xe3o do dispositivo ao servi\xe7o;"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.em,{children:"iot:Publish:"})," permite que o dispositivo publique mensagens no broker;"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.em,{children:"iot:Receive:"})," permite que o dispositivo receba mensagem do broker;"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.em,{children:"iot:Subscribe:"})," permite que o dispositivo se inscreva nos t\xf3picos do broker."]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:["E o ",(0,n.jsx)(i.strong,{children:"recurso"})," \xe9 o nome do servi\xe7o da AWS que a a\xe7\xe3o vai se utilizar, neste caso ",(0,n.jsxs)(i.em,{children:["arn:aws:iot:",(0,n.jsx)(i.strong,{children:"region"}),":",(0,n.jsx)(i.strong,{children:"account-id"})]}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["Voc\xea pode adicionar policies j\xe1 existentes utilizando a aba ",(0,n.jsx)(i.em,{children:"Policy Examples"})," ou cri\xe1-las manualmente. Para este exemplo, utilizei as seguintes pol\xedticas:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Effect": "Allow",\n "Action": "iot:Connect",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Publish",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Subscribe",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:topicfilter/${iot:Connection.Thing.ThingName}/*"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Publish",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Receive",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"\n }\n ]\n}\n'})}),"\n",(0,n.jsxs)(i.p,{children:["Altere o ",(0,n.jsx)(i.code,{children:"<account-id>"})," para o n\xfamero da sua conta, dispon\xedvel no menu do canto superior direito."]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"Account ID",src:o(74868).c+"",width:"317",height:"423"})}),"\n",(0,n.jsxs)(i.ol,{start:"5",children:["\n",(0,n.jsx)(i.li,{children:"Por fim, baixe os arquivos de certificados e chaves que a AWS criou automaticamente para autenticar esse dispositivo. Este \xe9 o \xfanico momento que voc\xea conseguir\xe1 baixar as chaves para esse certificado, ent\xe3o guarde-as com carinho para utiliz\xe1-los no pr\xf3ximo passo."}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"parte-2---conectando-a-franzininho-com-esp-idf",children:"Parte 2 - Conectando a Franzininho com ESP-IDF"}),"\n",(0,n.jsx)(i.p,{children:"Agora que temos nosso dispositivo configurado, precisamos escrever o firmware para conect\xe1-lo. A pr\xf3pria Espressif disponibiliza um SDK para comunica\xe7\xe3o com AWS IoT baseada no FreeRTOS. Para utilizar, basta clonar o reposit\xf3rio, preferencialmente direto na pasta de componentes do seu diret\xf3rio de instala\xe7\xe3o."}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:"git clone https://github.com/espressif/esp-aws-iot <esp-dir-path>/esp-idf/components\n"})}),"\n",(0,n.jsxs)(i.p,{children:["Dentro desse componente, j\xe1 s\xe3o disponibilizados alguns exemplos para utilizar com a AWS. Vamos come\xe7ar utilizando o exemplo b\xe1sico de MQTT em ",(0,n.jsx)(i.code,{children:"examples/mqtt/tls_mutual_auth"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["Para configurar, utilizaremos o ",(0,n.jsx)(i.em,{children:"menuconfig"}),":"]}),"\n",(0,n.jsxs)(i.ol,{children:["\n",(0,n.jsxs)(i.li,{children:["Nas configura\xe7\xf5es do exemplo (",(0,n.jsx)(i.em,{children:"Example Configuration"}),"), insira o nome do dispositivo exatamente como foi criado na AWS (Franz, no meu caso) e o endpoint do broker MQTT, que est\xe1 dispon\xedvel no menu ",(0,n.jsx)(i.code,{children:"AWS IoT > Settings > Device endpoint"})," na sua conta do AWS. As demais configura\xe7\xf5es podem ser deixadas como padr\xe3o."]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.img,{alt:"Device Endpoint",src:o(57664).c+"",width:"1136",height:"919"}),"\n",(0,n.jsx)(i.img,{alt:"Menuconfig",src:o(51516).c+"",width:"719",height:"146"})]}),"\n",(0,n.jsxs)(i.ol,{start:"2",children:["\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Nas configura\xe7\xf5es de rede (",(0,n.jsx)(i.em,{children:"Example Connection Configuration"}),"), insira as configura\xe7\xf5es da sua rede Wi-Fi (SSID e senha)"]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["O m\xe9todo padr\xe3o de autentica\xe7\xe3o com a AWS \xe9 utilizando credenciais PKI embarcadas no diret\xf3rio certs/. Lembra dos certificados que foram gerados automaticamente ao criar um dispositivo? \xc9 aqui que voc\xea vai coloc\xe1-los para embarcar no dispositivo. Copie o certificado, a chave ",(0,n.jsx)(i.strong,{children:"privada"})," e um dos certificados de root que voc\xea tinha armazenado anteriormente."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:"cp certificate.pem.crt main/certs/client.crt\ncp private.pem.key main/certs/client.key\ncp AmazonRootCAx.pem main/certs/root_cert_auth.pem\n"})}),"\n",(0,n.jsxs)(i.p,{children:["Com tudo configurado, \xe9 s\xf3 buildar e passar pra placa (siga o tutorial em ",(0,n.jsx)(i.a,{href:"https://docs.franzininho.com.br/docs/franzininho-wifi/exemplos-espidf/primeiros-passos",children:"Primeiros passos"}),"). Este exemplo se conecta ao broker MQTT, se sobrescreve no t\xf3pico ",(0,n.jsx)(i.code,{children:'CLIENT_IDENTIFIER "/example/topic\u201d'})," (Franz/example/topic, por exemplo) e publica mensagens de Hello World."]}),"\n",(0,n.jsx)(i.p,{children:"Sua conex\xe3o foi estabelecida com sucesso caso receba a mensagem a seguir:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:"I (7329) coreMQTT: Connection accepted.\nI (7339) coreMQTT: Received MQTT CONNACK successfully from broker.\nI (7349) coreMQTT: MQTT connection established with the broker.\nI (7349) coreMQTT: MQTT connection successfully established with broker.\n"})}),"\n",(0,n.jsx)(i.h3,{id:"parte-3---monitorando-a-franzininho",children:"Parte 3 - Monitorando a Franzininho"}),"\n",(0,n.jsx)(i.p,{children:"Agora que a Franzininho est\xe1 conectado, podemos monitorar sua atividade pelo console da AWS."}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:["Voc\xea pode ver as mensagens mais recentes em ",(0,n.jsx)(i.code,{children:"Manage > Things > Nome do seu dispositivo > Activity"}),"."]}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"Menu Activity",src:o(6804).c+"",width:"1847",height:"858"})}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:["E voc\xea tamb\xe9m pode interagir atrav\xe9s do MQTT Test Client, por exemplo, publicando no t\xf3pico ",(0,n.jsx)(i.code,{children:'CLIENT_IDENTIFIER "/example/topic\u201d'})," que estamos inscritos."]}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"MQTT Test Client",src:o(24020).c+"",width:"1486",height:"818"})}),"\n",(0,n.jsx)(i.p,{children:"A mensagem recebida pode ser vista na Franzininho:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:'I (17668) coreMQTT: Packet received. ReceivedBytes=66.\nI (17668) coreMQTT: De-serialized incoming PUBLISH packet: DeserializerResult=MQTTSuccess.\nI (17668) coreMQTT: State record updated. New state=MQTTPublishDone.\nI (17678) coreMQTT: Incoming QOS : 0.\nI (17678) coreMQTT: Incoming Publish Topic Name: Franz/example/topic matches subscribed topic.\nIncoming Publish message Packet Id is 0.\nIncoming Publish Message : {\n "message": "Hello from AWS IoT console"\n}.\n'})}),"\n",(0,n.jsx)(i.p,{children:"E \xe9 isso, agora voc\xea pode brincar de Internet das Coisas com sua Franzininho WiFi utilizando a AWS!"}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Autora"}),(0,n.jsx)(i.th,{children:(0,n.jsx)(i.a,{href:"https://github.com/carolcabral",children:"Ana Carolina Cabral "})})]})}),(0,n.jsx)(i.tbody,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"Data:"}),(0,n.jsx)(i.td,{children:"07/01/2023"})]})})]})]})}function p(e={}){const{wrapper:i}={...(0,s.MN)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},95788:(e,i,o)=>{o.d(i,{MN:()=>d});var n=o(11504);function s(e,i,o){return i in e?Object.defineProperty(e,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[i]=o,e}function a(e,i){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);i&&(n=n.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var i=1;i<arguments.length;i++){var o=null!=arguments[i]?arguments[i]:{};i%2?a(Object(o),!0).forEach((function(i){s(e,i,o[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):a(Object(o)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(o,i))}))}return e}function c(e,i){if(null==e)return{};var o,n,s=function(e,i){if(null==e)return{};var o,n,s={},a=Object.keys(e);for(n=0;n<a.length;n++)o=a[n],i.indexOf(o)>=0||(s[o]=e[o]);return s}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)o=a[n],i.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(s[o]=e[o])}return s}var t=n.createContext({}),d=function(e){var i=n.useContext(t),o=i;return e&&(o="function"==typeof e?e(i):r(r({},i),e)),o},l={inlineCode:"code",wrapper:function(e){var i=e.children;return n.createElement(n.Fragment,{},i)}},p=n.forwardRef((function(e,i){var o=e.components,s=e.mdxType,a=e.originalType,t=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),m=d(o),h=s,u=m["".concat(t,".").concat(h)]||m[h]||l[h]||a;return o?n.createElement(u,r(r({ref:i},p),{},{components:o})):n.createElement(u,r({ref:i},p))}));p.displayName="MDXCreateElement"},49976:(e,i,o)=>{o.d(i,{c:()=>n});const n=o.p+"assets/images/1-Create-thing-38ca8a9bbe949f6fd7bb29c1746f3175.png"},74868:(e,i,o)=>{o.d(i,{c:()=>n});const n=o.p+"assets/images/2-Account-id-4ac0bcea28543803571a6f1211af4495.png"},57664:(e,i,o)=>{o.d(i,{c:()=>n});const n=o.p+"assets/images/3.1-Device-endpoint-7109151e8d06555b5a4e706dc26d9d2f.png"},51516:(e,i,o)=>{o.d(i,{c:()=>n});const n=o.p+"assets/images/3.2-Menuconfig-49a52cb36a4edc9b1e00093697627052.png"},6804:(e,i,o)=>{o.d(i,{c:()=>n});const n=o.p+"assets/images/4-MenuActivity-37174ab453b4c48389ee792525762a0f.png"},24020:(e,i,o)=>{o.d(i,{c:()=>n});const n=o.p+"assets/images/5-MQTTTestClient-921841744c6883b3a1f1f80db1081d19.png"}}]); \ No newline at end of file diff --git a/assets/js/af2b9553.d6aeb105.js b/assets/js/af2b9553.d6aeb105.js deleted file mode 100755 index fd49d2b9a..000000000 --- a/assets/js/af2b9553.d6aeb105.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8560],{3905:(e,a,o)=>{o.d(a,{Zo:()=>l,kt:()=>f});var i=o(7294);function t(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function n(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,i)}return o}function r(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?n(Object(o),!0).forEach((function(a){t(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function s(e,a){if(null==e)return{};var o,i,t=function(e,a){if(null==e)return{};var o,i,t={},n=Object.keys(e);for(i=0;i<n.length;i++)o=n[i],a.indexOf(o)>=0||(t[o]=e[o]);return t}(e,a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i<n.length;i++)o=n[i],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var p=i.createContext({}),c=function(e){var a=i.useContext(p),o=a;return e&&(o="function"==typeof e?e(a):r(r({},a),e)),o},l=function(e){var a=c(e.components);return i.createElement(p.Provider,{value:a},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return i.createElement(i.Fragment,{},a)}},u=i.forwardRef((function(e,a){var o=e.components,t=e.mdxType,n=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),m=c(o),u=t,f=m["".concat(p,".").concat(u)]||m[u]||d[u]||n;return o?i.createElement(f,r(r({ref:a},l),{},{components:o})):i.createElement(f,r({ref:a},l))}));function f(e,a){var o=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var n=o.length,r=new Array(n);r[0]=u;var s={};for(var p in a)hasOwnProperty.call(a,p)&&(s[p]=a[p]);s.originalType=e,s[m]="string"==typeof e?e:t,r[1]=s;for(var c=2;c<n;c++)r[c]=o[c];return i.createElement.apply(null,r)}return i.createElement.apply(null,o)}u.displayName="MDXCreateElement"},641:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>p,contentTitle:()=>r,default:()=>d,frontMatter:()=>n,metadata:()=>s,toc:()=>c});var i=o(3117),t=(o(7294),o(3905));const n={id:"franzininho-wifi-espidf-05",title:"Primeiros passos com a AWS",slug:"/franzininho-wifi/exemplos-espidf/aws",description:"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.",author:"Ana Carolina Cabral (ana.cpmelo95@gmail.com)"},r=void 0,s={unversionedId:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05",id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05",title:"Primeiros passos com a AWS",description:"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x05-AWS-IoT-Core.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/aws",permalink:"/docs/franzininho-wifi/exemplos-espidf/aws",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x05-AWS-IoT-Core.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-05",title:"Primeiros passos com a AWS",slug:"/franzininho-wifi/exemplos-espidf/aws",description:"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.",author:"Ana Carolina Cabral (ana.cpmelo95@gmail.com)"},sidebar:"docs",previous:{title:"PWM com LEDC",permalink:"/docs/franzininho-wifi/exemplos-espidf/ledc"},next:{title:"Primeiros Passos",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos"}},p={},c=[{value:"Introdu\xe7\xe3o",id:"introdu\xe7\xe3o",level:3},{value:"AWS IOT Core",id:"aws-iot-core",level:3},{value:"Parte 1 - Criando a Franzininho na AWS",id:"parte-1---criando-a-franzininho-na-aws",level:3},{value:"Parte 2 - Conectando a Franzininho com ESP-IDF",id:"parte-2---conectando-a-franzininho-com-esp-idf",level:3},{value:"Parte 3 - Monitorando a Franzininho",id:"parte-3---monitorando-a-franzininho",level:3}],l={toc:c},m="wrapper";function d(e){let{components:a,...n}=e;return(0,t.kt)(m,(0,i.Z)({},l,n,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("h3",{id:"introdu\xe7\xe3o"},"Introdu\xe7\xe3o"),(0,t.kt)("p",null,"Neste tutorial exploraremos a utiliza\xe7\xe3o do AWS IoT Core para conectar a placa Franzininho WiFi \xe0 nuvem utilizando o ESP-IDF. Al\xe9m do IoT Core, a AWS oferece v\xe1rias outras formas de conectar um dispositivo, como AWS IoT Greengrass Stream Manager ou AWS IoT SiteWise. Esses outros servi\xe7os para ingest\xe3o e visualiza\xe7\xe3o de dados podem ser vistos nesse ",(0,t.kt)("a",{parentName:"p",href:"https://aws.amazon.com/pt/blogs/iot/7-patterns-for-iot-data-ingestion-and-visualization-how-to-decide-what-works-best-for-your-use-case/"},"link"),"."),(0,t.kt)("h3",{id:"aws-iot-core"},"AWS IOT Core"),(0,t.kt)("p",null,"O AWS IoT Core \xe9 o broker de mensagens que permite conectar dispositivos IoT com a nuvem AWS e seus diversos servi\xe7os. Atrav\xe9s dele, podemos criar, configurar e gerenciar nossos dispositivos."),(0,t.kt)("p",null,"Atualmente suporta os seguintes protocolos de comunica\xe7\xe3o:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"MQTT"),(0,t.kt)("li",{parentName:"ul"},"MQTT over WSS (Websockets Secure)"),(0,t.kt)("li",{parentName:"ul"},"HTTPS"),(0,t.kt)("li",{parentName:"ul"},"LoRaWAN")),(0,t.kt)("p",null,"Resumidamente, o servi\xe7o se baseia em:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Things:")," Dispositivos (\u201ccoisas\u201d) que queremos conectar;"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Jobs:")," A\xe7\xf5es remotas que voc\xea pode agendar para realizar opera\xe7\xf5es nos seus dispositivos, como atualiza\xe7\xf5es de firmware;"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Rules:")," Regras atrav\xe9s das quais podemos direcionar as mensagens recebidas pelo broker para outros servi\xe7os da AWS, por exemplo, para armazenar dados no DynamoDB."),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Seguran\xe7a:")," onde \xe9 poss\xedvel gerenciar os certificados de autoriza\xe7\xe3o, pol\xedticas (policies) e papeis (roles) de autentica\xe7\xe3o.")),(0,t.kt)("h3",{id:"parte-1---criando-a-franzininho-na-aws"},"Parte 1 - Criando a Franzininho na AWS"),(0,t.kt)("p",null,"Para seguir o tutorial, voc\xea deve ter acesso ao console da AWS. Para come\xe7ar, vamos criar uma nova \u201ccoisa\u201d (thing) para representar nossa Franzininho na nuvem. Certifique-se que voc\xea est\xe1 na regi\xe3o mais pr\xf3xima antes de come\xe7ar, selecionando-a no menu do canto superior direito. Para o Brasil, a regi\xe3o \xe9 sa-east-1."),(0,t.kt)("ol",null,(0,t.kt)("li",{parentName:"ol"},(0,t.kt)("p",{parentName:"li"},"Na AWS, procure pelo servi\xe7o IoT Core (",(0,t.kt)("inlineCode",{parentName:"p"},"Service > Internet of Things > IoT core"),") e crie uma nova \u201ccoisa\u201d em ",(0,t.kt)("inlineCode",{parentName:"p"},"Manage > All devices > Things > Create new thing"),".")),(0,t.kt)("li",{parentName:"ol"},(0,t.kt)("p",{parentName:"li"},"Vamos criar apenas um dispositivo (",(0,t.kt)("em",{parentName:"p"},"Create a single thing"),"), mas saiba que tamb\xe9m \xe9 poss\xedvel criar v\xe1rios de uma vez (",(0,t.kt)("em",{parentName:"p"},"Create many things"),"). Voc\xea precisar\xe1 especificar as propriedades desse dispositivo:"))),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Thing name: o nome do seu dispositivo para identific\xe1-lo de forma \xfanica. Escolha sabiamente, pois essa propriedade n\xe3o pode ser alterada depois que o dispositivo \xe9 criado."),(0,t.kt)("li",{parentName:"ul"},"Configura\xe7\xf5es adicionais: podem ser utilizadas para detalhar, organizar, gerenciar e pesquisar os dispositivos, como tipo, atributos ou grupos."),(0,t.kt)("li",{parentName:"ul"},"Device shadow permite que o estado do seu dispositivo fique dispon\xedvel para outros servi\xe7os mesmo que ele n\xe3o esteja conectado.")),(0,t.kt)("p",null,"Por enquanto, basta preencher o nome e prosseguir. Chamarei o meu carinhosamente de Franz."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Criar thing",src:o(34).Z,width:"808",height:"808"})),(0,t.kt)("ol",{start:3},(0,t.kt)("li",{parentName:"ol"},(0,t.kt)("p",{parentName:"li"},"Para conseguir se autenticar ao seriv\xe7o da AWS, cada dispositivo deve ter um certificado. Utilizaremos o gerado automaticamente (",(0,t.kt)("em",{parentName:"p"},"Auto-generate a new certificate"),"), mas voc\xea tamb\xe9m tem a op\xe7\xe3o de utilizar certificados pr\xf3prios.")),(0,t.kt)("li",{parentName:"ol"},(0,t.kt)("p",{parentName:"li"},"Para gerenciar o n\xedvel de acesso desse certificado aos recursos, \xe9 preciso criar uma pol\xedtica de autoriza\xe7\xe3o (",(0,t.kt)("em",{parentName:"p"},"policy"),"), que \xe9 uma lista de a\xe7\xf5es permitidas ou proibidas para aquele certificado. Voc\xea pode criar uma pol\xedtica direto dessa aba, em ",(0,t.kt)("em",{parentName:"p"},"Create policy"),", ou pela barra de navega\xe7\xe3o do IoT Core em ",(0,t.kt)("em",{parentName:"p"},"Security > Policies"),"."))),(0,t.kt)("p",null,"Uma ",(0,t.kt)("em",{parentName:"p"},"policy")," deve ter um nome e uma ou mais declara\xe7\xf5es (",(0,t.kt)("em",{parentName:"p"},"statements"),"). Cada declara\xe7\xe3o \xe9 composta por um ",(0,t.kt)("strong",{parentName:"p"},"efeito")," de uma ",(0,t.kt)("strong",{parentName:"p"},"a\xe7\xe3o")," \xe0 um ",(0,t.kt)("strong",{parentName:"p"},"recurso"),"."),(0,t.kt)("p",null,"O ",(0,t.kt)("strong",{parentName:"p"},"efeito")," pode ser de permiss\xe3o (",(0,t.kt)("em",{parentName:"p"},"allow"),") ou proibi\xe7\xe3o (",(0,t.kt)("em",{parentName:"p"},"deny"),")."),(0,t.kt)("p",null,"As poss\xedveis ",(0,t.kt)("strong",{parentName:"p"},"a\xe7\xf5es")," desse servi\xe7o s\xe3o v\xe1rias, mas utilizaremos as seguintes principais:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("em",{parentName:"li"},"iot:Connect:")," permite a conex\xe3o do dispositivo ao servi\xe7o;"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("em",{parentName:"li"},"iot:Publish:")," permite que o dispositivo publique mensagens no broker;"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("em",{parentName:"li"},"iot:Receive:")," permite que o dispositivo receba mensagem do broker;"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("em",{parentName:"li"},"iot:Subscribe:")," permite que o dispositivo se inscreva nos t\xf3picos do broker.")),(0,t.kt)("p",null,"E o ",(0,t.kt)("strong",{parentName:"p"},"recurso")," \xe9 o nome do servi\xe7o da AWS que a a\xe7\xe3o vai se utilizar, neste caso ",(0,t.kt)("em",{parentName:"p"},"arn:aws:iot:",(0,t.kt)("strong",{parentName:"em"},"region"),":",(0,t.kt)("strong",{parentName:"em"},"account-id")),"."),(0,t.kt)("p",null,"Voc\xea pode adicionar policies j\xe1 existentes utilizando a aba ",(0,t.kt)("em",{parentName:"p"},"Policy Examples")," ou cri\xe1-las manualmente. Para este exemplo, utilizei as seguintes pol\xedticas:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-bash"},'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Effect": "Allow",\n "Action": "iot:Connect",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Publish",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Subscribe",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:topicfilter/${iot:Connection.Thing.ThingName}/*"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Publish",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Receive",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"\n }\n ]\n}\n')),(0,t.kt)("p",null,"Altere o ",(0,t.kt)("inlineCode",{parentName:"p"},"<account-id>")," para o n\xfamero da sua conta, dispon\xedvel no menu do canto superior direito."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Account ID",src:o(1118).Z,width:"317",height:"423"})),(0,t.kt)("ol",{start:5},(0,t.kt)("li",{parentName:"ol"},"Por fim, baixe os arquivos de certificados e chaves que a AWS criou automaticamente para autenticar esse dispositivo. Este \xe9 o \xfanico momento que voc\xea conseguir\xe1 baixar as chaves para esse certificado, ent\xe3o guarde-as com carinho para utiliz\xe1-los no pr\xf3ximo passo.")),(0,t.kt)("h3",{id:"parte-2---conectando-a-franzininho-com-esp-idf"},"Parte 2 - Conectando a Franzininho com ESP-IDF"),(0,t.kt)("p",null,"Agora que temos nosso dispositivo configurado, precisamos escrever o firmware para conect\xe1-lo. A pr\xf3pria Espressif disponibiliza um SDK para comunica\xe7\xe3o com AWS IoT baseada no FreeRTOS. Para utilizar, basta clonar o reposit\xf3rio, preferencialmente direto na pasta de componentes do seu diret\xf3rio de instala\xe7\xe3o."),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/espressif/esp-aws-iot <esp-dir-path>/esp-idf/components\n")),(0,t.kt)("p",null,"Dentro desse componente, j\xe1 s\xe3o disponibilizados alguns exemplos para utilizar com a AWS. Vamos come\xe7ar utilizando o exemplo b\xe1sico de MQTT em ",(0,t.kt)("inlineCode",{parentName:"p"},"examples/mqtt/tls_mutual_auth"),"."),(0,t.kt)("p",null,"Para configurar, utilizaremos o ",(0,t.kt)("em",{parentName:"p"},"menuconfig"),":"),(0,t.kt)("ol",null,(0,t.kt)("li",{parentName:"ol"},"Nas configura\xe7\xf5es do exemplo (",(0,t.kt)("em",{parentName:"li"},"Example Configuration"),"), insira o nome do dispositivo exatamente como foi criado na AWS (Franz, no meu caso) e o endpoint do broker MQTT, que est\xe1 dispon\xedvel no menu ",(0,t.kt)("inlineCode",{parentName:"li"},"AWS IoT > Settings > Device endpoint")," na sua conta do AWS. As demais configura\xe7\xf5es podem ser deixadas como padr\xe3o.")),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Device Endpoint",src:o(6749).Z,width:"1136",height:"919"}),"\n",(0,t.kt)("img",{alt:"Menuconfig",src:o(7964).Z,width:"719",height:"146"})),(0,t.kt)("ol",{start:2},(0,t.kt)("li",{parentName:"ol"},(0,t.kt)("p",{parentName:"li"},"Nas configura\xe7\xf5es de rede (",(0,t.kt)("em",{parentName:"p"},"Example Connection Configuration"),"), insira as configura\xe7\xf5es da sua rede Wi-Fi (SSID e senha)")),(0,t.kt)("li",{parentName:"ol"},(0,t.kt)("p",{parentName:"li"},"O m\xe9todo padr\xe3o de autentica\xe7\xe3o com a AWS \xe9 utilizando credenciais PKI embarcadas no diret\xf3rio certs/. Lembra dos certificados que foram gerados automaticamente ao criar um dispositivo? \xc9 aqui que voc\xea vai coloc\xe1-los para embarcar no dispositivo. Copie o certificado, a chave ",(0,t.kt)("strong",{parentName:"p"},"privada")," e um dos certificados de root que voc\xea tinha armazenado anteriormente."))),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-bash"},"cp certificate.pem.crt main/certs/client.crt\ncp private.pem.key main/certs/client.key\ncp AmazonRootCAx.pem main/certs/root_cert_auth.pem\n")),(0,t.kt)("p",null,"Com tudo configurado, \xe9 s\xf3 buildar e passar pra placa (siga o tutorial em ",(0,t.kt)("a",{parentName:"p",href:"https://docs.franzininho.com.br/docs/franzininho-wifi/exemplos-espidf/primeiros-passos"},"Primeiros passos"),"). Este exemplo se conecta ao broker MQTT, se sobrescreve no t\xf3pico ",(0,t.kt)("inlineCode",{parentName:"p"},'CLIENT_IDENTIFIER "/example/topic\u201d')," (Franz/example/topic, por exemplo) e publica mensagens de Hello World."),(0,t.kt)("p",null,"Sua conex\xe3o foi estabelecida com sucesso caso receba a mensagem a seguir:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-bash"},"I (7329) coreMQTT: Connection accepted.\nI (7339) coreMQTT: Received MQTT CONNACK successfully from broker.\nI (7349) coreMQTT: MQTT connection established with the broker.\nI (7349) coreMQTT: MQTT connection successfully established with broker.\n")),(0,t.kt)("h3",{id:"parte-3---monitorando-a-franzininho"},"Parte 3 - Monitorando a Franzininho"),(0,t.kt)("p",null,"Agora que a Franzininho est\xe1 conectado, podemos monitorar sua atividade pelo console da AWS."),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Voc\xea pode ver as mensagens mais recentes em ",(0,t.kt)("inlineCode",{parentName:"li"},"Manage > Things > Nome do seu dispositivo > Activity"),".")),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Menu Activity",src:o(3135).Z,width:"1847",height:"858"})),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"E voc\xea tamb\xe9m pode interagir atrav\xe9s do MQTT Test Client, por exemplo, publicando no t\xf3pico ",(0,t.kt)("inlineCode",{parentName:"li"},'CLIENT_IDENTIFIER "/example/topic\u201d')," que estamos inscritos.")),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"MQTT Test Client",src:o(7316).Z,width:"1486",height:"818"})),(0,t.kt)("p",null,"A mensagem recebida pode ser vista na Franzininho:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-bash"},'I (17668) coreMQTT: Packet received. ReceivedBytes=66.\nI (17668) coreMQTT: De-serialized incoming PUBLISH packet: DeserializerResult=MQTTSuccess.\nI (17668) coreMQTT: State record updated. New state=MQTTPublishDone.\nI (17678) coreMQTT: Incoming QOS : 0.\nI (17678) coreMQTT: Incoming Publish Topic Name: Franz/example/topic matches subscribed topic.\nIncoming Publish message Packet Id is 0.\nIncoming Publish Message : {\n "message": "Hello from AWS IoT console"\n}.\n')),(0,t.kt)("p",null,"E \xe9 isso, agora voc\xea pode brincar de Internet das Coisas com sua Franzininho WiFi utilizando a AWS!"),(0,t.kt)("table",null,(0,t.kt)("thead",{parentName:"table"},(0,t.kt)("tr",{parentName:"thead"},(0,t.kt)("th",{parentName:"tr",align:null},"Autora"),(0,t.kt)("th",{parentName:"tr",align:null},(0,t.kt)("a",{parentName:"th",href:"https://github.com/carolcabral"},"Ana Carolina Cabral ")))),(0,t.kt)("tbody",{parentName:"table"},(0,t.kt)("tr",{parentName:"tbody"},(0,t.kt)("td",{parentName:"tr",align:null},"Data:"),(0,t.kt)("td",{parentName:"tr",align:null},"07/01/2023")))))}d.isMDXComponent=!0},34:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/1-Create-thing-38ca8a9bbe949f6fd7bb29c1746f3175.png"},1118:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/2-Account-id-4ac0bcea28543803571a6f1211af4495.png"},6749:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/3.1-Device-endpoint-7109151e8d06555b5a4e706dc26d9d2f.png"},7964:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/3.2-Menuconfig-49a52cb36a4edc9b1e00093697627052.png"},3135:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/4-MenuActivity-37174ab453b4c48389ee792525762a0f.png"},7316:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/5-MQTTTestClient-921841744c6883b3a1f1f80db1081d19.png"}}]); \ No newline at end of file diff --git a/assets/js/b0d3cd30.2800b4c0.js b/assets/js/b0d3cd30.2800b4c0.js deleted file mode 100755 index 633d44a4a..000000000 --- a/assets/js/b0d3cd30.2800b4c0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4669],{3905:(e,o,i)=>{i.d(o,{Zo:()=>c,kt:()=>f});var t=i(7294);function n(e,o,i){return o in e?Object.defineProperty(e,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[o]=i,e}function r(e,o){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),i.push.apply(i,t)}return i}function a(e){for(var o=1;o<arguments.length;o++){var i=null!=arguments[o]?arguments[o]:{};o%2?r(Object(i),!0).forEach((function(o){n(e,o,i[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):r(Object(i)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(i,o))}))}return e}function l(e,o){if(null==e)return{};var i,t,n=function(e,o){if(null==e)return{};var i,t,n={},r=Object.keys(e);for(t=0;t<r.length;t++)i=r[t],o.indexOf(i)>=0||(n[i]=e[i]);return n}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t<r.length;t++)i=r[t],o.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var s=t.createContext({}),p=function(e){var o=t.useContext(s),i=o;return e&&(i="function"==typeof e?e(o):a(a({},o),e)),i},c=function(e){var o=p(e.components);return t.createElement(s.Provider,{value:o},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var o=e.children;return t.createElement(t.Fragment,{},o)}},d=t.forwardRef((function(e,o){var i=e.components,n=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(i),d=n,f=u["".concat(s,".").concat(d)]||u[d]||m[d]||r;return i?t.createElement(f,a(a({ref:o},c),{},{components:i})):t.createElement(f,a({ref:o},c))}));function f(e,o){var i=arguments,n=o&&o.mdxType;if("string"==typeof e||n){var r=i.length,a=new Array(r);a[0]=d;var l={};for(var s in o)hasOwnProperty.call(o,s)&&(l[s]=o[s]);l.originalType=e,l[u]="string"==typeof e?e:n,a[1]=l;for(var p=2;p<r;p++)a[p]=i[p];return t.createElement.apply(null,a)}return t.createElement.apply(null,i)}d.displayName="MDXCreateElement"},7779:(e,o,i)=>{i.r(o),i.d(o,{assets:()=>s,contentTitle:()=>a,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var t=i(3117),n=(i(7294),i(3905));const r={id:"circuitpython-hello-world",title:"Hello World!",slug:"/franzininho-wifi/exemplos-circuitpython/hello-world",description:"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi",author:"Diana Santos"},a=void 0,l={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world",title:"Hello World!",description:"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/hello-world.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/hello-world",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/hello-world",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/hello-world.md",tags:[],version:"current",frontMatter:{id:"circuitpython-hello-world",title:"Hello World!",slug:"/franzininho-wifi/exemplos-circuitpython/hello-world",description:"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Instalando as ferramentas",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/ferramentas"},next:{title:"Serial Console",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/serial-console"}},s={},p=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],c={toc:p},u="wrapper";function m(e){let{components:o,...r}=e;return(0,n.kt)(u,(0,t.Z)({},c,r,{components:o,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Nesse primeiro exemplo faremos um blink LED, nosso \u201cHello, World!\u201d com a placa Franzininho WiFi programada em CircuitPython. Assim, aquecemos os motores para explorar diversas aplica\xe7\xf5es com CircuitPython na Franzininho WiFi."),(0,n.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"1 Placa Franzininho Wifi com CircuitPython;"),(0,n.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,n.kt)("li",{parentName:"ul"},"1 LED vermelho 3 mm;"),(0,n.kt)("li",{parentName:"ul"},"1 resistor 330 \u03a9;"),(0,n.kt)("li",{parentName:"ul"},"Jumpers.")),(0,n.kt)("h2",{id:"circuito"},"Circuito"),(0,n.kt)("p",null,"Nosso primeiro circuito \xe9 bem simples. Realize a seguinte montagem:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"franzininho-wifi-hello-world",src:i(6129).Z,width:"1728",height:"702"})),(0,n.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,n.kt)("p",null,"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 no diret\xf3rio CIRCUITPY e salve o arquivo:"),(0,n.kt)("p",null,"Obs. Provavelmente voc\xea encontrar\xe1 outro c\xf3digo no arquivo code.py. Apague-o e insira o c\xf3digo novo."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},'""" Hello, World! (Pisca LED)"""\nimport board\nimport time\nfrom digitalio import DigitalInOut, Direction\n\n# Configurando o pino do LED, o led que configurei foi o pino 4 = IO4\nled = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n\n#loop infinito - executando sempre\nwhile True: \n led.value = True\n time.sleep(0.5)\n led.value = False\n time.sleep(0.5)\n')),(0,n.kt)("p",null,"Finalizando a edi\xe7\xe3o do arquivo, salve-o.\nAp\xf3s salvar o arquivo o LED pisca em intervalos de 0,5 segundos. (Blink LED)"),(0,n.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},"An\xe1lise do c\xf3digo"),(0,n.kt)("p",null,"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,n.kt)("p",null,"Como precisaremos de intervalos de temporiza\xe7\xe3o importamos o m\xf3dulo sleep:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"import time\n")),(0,n.kt)("p",null,"O LED foi conectado ao pino 4(IO4) da Franzininho WiFi. Como o LED \xe9 um atuador, preciamos configurar o pino como uma sa\xedda digital. Para isso, precisamos importar os seguintes m\xf3dulos:\nfrom digitalio import DigitalInOut, Direction"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"from digitalio import DigitalInOut, Direction\n")),(0,n.kt)("p",null,"Com os m\xf3dulos importados podemos acessar as fun\xe7\xf5es de configura\xe7\xe3o do pino digital:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"led = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n")),(0,n.kt)("p",null,"Note que primeiro mapeamos o pino e depois configuramos a dire\xe7\xe3o."),(0,n.kt)("p",null,"Para que o LED fique piscando infinitamente em intervalos de 500 ms, fazemos um loop infinito com o la\xe7o while. O valor do LED \xe9 invertido a cada 0,5 s loop:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"while True: \n led.value = True\n time.sleep(0.5)\n led.value = False\n time.sleep(0.5)\n")),(0,n.kt)("admonition",{title:"Sugest\xe3o",type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"Altere o tempo de intervalo para 0.1 e 1 e observe o efeito.")),(0,n.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,n.kt)("p",null,"Neste primeiro exemplo de programa\xe7\xe3o da Franzininho WiFi com o CircuitPython fizemos um c\xf3digo simples em Python para piscar o LED em intervalos de 0,5 segundos. Esse exemplo serviu para nos ensinar como importar as bibliotecas, configurar o pino como sa\xedda digital e criar um loop infinito para piscar o LED. Voc\xea pode alterar o intervalo de tempo alterando o par\xe2metro na fun\xe7\xe3o sleep."),(0,n.kt)("p",null,"Com esse exemplo dominado, podemos passar para a pr\xf3xima etapa."),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Autor"),(0,n.kt)("th",{parentName:"tr",align:null},"Diana Santos"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Autor"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Data:"),(0,n.kt)("td",{parentName:"tr",align:null},"16/09/2021")))))}m.isMDXComponent=!0},6129:(e,o,i)=>{i.d(o,{Z:()=>t});const t=i.p+"assets/images/0x00-Hello_world-6a2d3444f01a16a485a1084d37794f5d.png"}}]); \ No newline at end of file diff --git a/assets/js/b0d3cd30.a376875a.js b/assets/js/b0d3cd30.a376875a.js new file mode 100755 index 000000000..187dc9415 --- /dev/null +++ b/assets/js/b0d3cd30.a376875a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5632],{73412:(e,i,o)=>{o.r(i),o.d(i,{assets:()=>l,contentTitle:()=>a,default:()=>p,frontMatter:()=>t,metadata:()=>s,toc:()=>c});var n=o(17624),r=o(95788);const t={id:"circuitpython-hello-world",title:"Hello World!",slug:"/franzininho-wifi/exemplos-circuitpython/hello-world",description:"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi",author:"Diana Santos"},a=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world",title:"Hello World!",description:"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/hello-world.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/hello-world",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/hello-world",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/hello-world.md",tags:[],version:"current",frontMatter:{id:"circuitpython-hello-world",title:"Hello World!",slug:"/franzininho-wifi/exemplos-circuitpython/hello-world",description:"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Instalando as ferramentas",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/ferramentas"},next:{title:"Serial Console",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/serial-console"}},l={},c=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function d(e){const i={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.p,{children:"Nesse primeiro exemplo faremos um blink LED, nosso \u201cHello, World!\u201d com a placa Franzininho WiFi programada em CircuitPython. Assim, aquecemos os motores para explorar diversas aplica\xe7\xf5es com CircuitPython na Franzininho WiFi."}),"\n",(0,n.jsx)(i.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"1 Placa Franzininho Wifi com CircuitPython;"}),"\n",(0,n.jsx)(i.li,{children:"1 Protoboard;"}),"\n",(0,n.jsx)(i.li,{children:"1 LED vermelho 3 mm;"}),"\n",(0,n.jsx)(i.li,{children:"1 resistor 330 \u03a9;"}),"\n",(0,n.jsx)(i.li,{children:"Jumpers."}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,n.jsx)(i.p,{children:"Nosso primeiro circuito \xe9 bem simples. Realize a seguinte montagem:"}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"franzininho-wifi-hello-world",src:o(8688).c+"",width:"1728",height:"702"})}),"\n",(0,n.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,n.jsx)(i.p,{children:"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 no diret\xf3rio CIRCUITPY e salve o arquivo:"}),"\n",(0,n.jsx)(i.p,{children:"Obs. Provavelmente voc\xea encontrar\xe1 outro c\xf3digo no arquivo code.py. Apague-o e insira o c\xf3digo novo."}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-python",children:'""" Hello, World! (Pisca LED)"""\nimport board\nimport time\nfrom digitalio import DigitalInOut, Direction\n\n# Configurando o pino do LED, o led que configurei foi o pino 4 = IO4\nled = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n\n#loop infinito - executando sempre\nwhile True: \n led.value = True\n time.sleep(0.5)\n led.value = False\n time.sleep(0.5)\n'})}),"\n",(0,n.jsx)(i.p,{children:"Finalizando a edi\xe7\xe3o do arquivo, salve-o.\nAp\xf3s salvar o arquivo o LED pisca em intervalos de 0,5 segundos. (Blink LED)"}),"\n",(0,n.jsx)(i.h2,{id:"an\xe1lise-do-c\xf3digo",children:"An\xe1lise do c\xf3digo"}),"\n",(0,n.jsx)(i.p,{children:"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-python",children:"import board\n"})}),"\n",(0,n.jsx)(i.p,{children:"Como precisaremos de intervalos de temporiza\xe7\xe3o importamos o m\xf3dulo sleep:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{children:"import time\n"})}),"\n",(0,n.jsx)(i.p,{children:"O LED foi conectado ao pino 4(IO4) da Franzininho WiFi. Como o LED \xe9 um atuador, preciamos configurar o pino como uma sa\xedda digital. Para isso, precisamos importar os seguintes m\xf3dulos:\nfrom digitalio import DigitalInOut, Direction"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{children:"from digitalio import DigitalInOut, Direction\n"})}),"\n",(0,n.jsx)(i.p,{children:"Com os m\xf3dulos importados podemos acessar as fun\xe7\xf5es de configura\xe7\xe3o do pino digital:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-python",children:"led = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n"})}),"\n",(0,n.jsx)(i.p,{children:"Note que primeiro mapeamos o pino e depois configuramos a dire\xe7\xe3o."}),"\n",(0,n.jsx)(i.p,{children:"Para que o LED fique piscando infinitamente em intervalos de 500 ms, fazemos um loop infinito com o la\xe7o while. O valor do LED \xe9 invertido a cada 0,5 s loop:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-python",children:"while True: \n led.value = True\n time.sleep(0.5)\n led.value = False\n time.sleep(0.5)\n"})}),"\n",(0,n.jsx)(i.admonition,{title:"Sugest\xe3o",type:"tip",children:(0,n.jsx)(i.p,{children:"Altere o tempo de intervalo para 0.1 e 1 e observe o efeito."})}),"\n",(0,n.jsx)(i.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,n.jsx)(i.p,{children:"Neste primeiro exemplo de programa\xe7\xe3o da Franzininho WiFi com o CircuitPython fizemos um c\xf3digo simples em Python para piscar o LED em intervalos de 0,5 segundos. Esse exemplo serviu para nos ensinar como importar as bibliotecas, configurar o pino como sa\xedda digital e criar um loop infinito para piscar o LED. Voc\xea pode alterar o intervalo de tempo alterando o par\xe2metro na fun\xe7\xe3o sleep."}),"\n",(0,n.jsx)(i.p,{children:"Com esse exemplo dominado, podemos passar para a pr\xf3xima etapa."}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Autor"}),(0,n.jsx)(i.th,{children:"Diana Santos"})]})}),(0,n.jsxs)(i.tbody,{children:[(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"Autor"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"Data:"}),(0,n.jsx)(i.td,{children:"16/09/2021"})]})]})]})]})}function p(e={}){const{wrapper:i}={...(0,r.MN)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},95788:(e,i,o)=>{o.d(i,{MN:()=>c});var n=o(11504);function r(e,i,o){return i in e?Object.defineProperty(e,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[i]=o,e}function t(e,i){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);i&&(n=n.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),o.push.apply(o,n)}return o}function a(e){for(var i=1;i<arguments.length;i++){var o=null!=arguments[i]?arguments[i]:{};i%2?t(Object(o),!0).forEach((function(i){r(e,i,o[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):t(Object(o)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(o,i))}))}return e}function s(e,i){if(null==e)return{};var o,n,r=function(e,i){if(null==e)return{};var o,n,r={},t=Object.keys(e);for(n=0;n<t.length;n++)o=t[n],i.indexOf(o)>=0||(r[o]=e[o]);return r}(e,i);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n<t.length;n++)o=t[n],i.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=n.createContext({}),c=function(e){var i=n.useContext(l),o=i;return e&&(o="function"==typeof e?e(i):a(a({},i),e)),o},d={inlineCode:"code",wrapper:function(e){var i=e.children;return n.createElement(n.Fragment,{},i)}},p=n.forwardRef((function(e,i){var o=e.components,r=e.mdxType,t=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=c(o),u=r,h=m["".concat(l,".").concat(u)]||m[u]||d[u]||t;return o?n.createElement(h,a(a({ref:i},p),{},{components:o})):n.createElement(h,a({ref:i},p))}));p.displayName="MDXCreateElement"},8688:(e,i,o)=>{o.d(i,{c:()=>n});const n=o.p+"assets/images/0x00-Hello_world-6a2d3444f01a16a485a1084d37794f5d.png"}}]); \ No newline at end of file diff --git a/assets/js/b2b675dd.6fd10bd0.js b/assets/js/b2b675dd.6fd10bd0.js new file mode 100755 index 000000000..fe45fac53 --- /dev/null +++ b/assets/js/b2b675dd.6fd10bd0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6292],{76180:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b2b675dd.f91c9c3c.js b/assets/js/b2b675dd.f91c9c3c.js deleted file mode 100755 index 40c58b148..000000000 --- a/assets/js/b2b675dd.f91c9c3c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[533],{8017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.8de24a10.js b/assets/js/b2f554cd.8de24a10.js deleted file mode 100755 index 0962f9e4b..000000000 --- a/assets/js/b2f554cd.8de24a10.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1477],{10:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"welcome","metadata":{"permalink":"/blog/welcome","source":"@site/blog/2019-05-30-welcome.md","title":"Welcome","description":"Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!","date":"2019-05-30T00:00:00.000Z","formattedDate":"30 de maio de 2019","tags":[{"label":"facebook","permalink":"/blog/tags/facebook"},{"label":"hello","permalink":"/blog/tags/hello"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.175,"hasTruncateMarker":false,"authors":[{"name":"Yangshun Tay","title":"Front End Engineer @ Facebook","url":"https://github.com/yangshun","imageURL":"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4"}],"frontMatter":{"slug":"welcome","title":"Welcome","author":"Yangshun Tay","author_title":"Front End Engineer @ Facebook","author_url":"https://github.com/yangshun","author_image_url":"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4","tags":["facebook","hello","docusaurus"]},"nextItem":{"title":"Hello","permalink":"/blog/hello-world"}},"content":"Blog features are powered by the blog plugin. Simply add files to the `blog` directory. It supports tags as well!\\n\\nDelete the whole directory if you don\'t want the blog features. As simple as that!"},{"id":"hello-world","metadata":{"permalink":"/blog/hello-world","source":"@site/blog/2019-05-29-hello-world.md","title":"Hello","description":"Welcome to this blog. This blog is created with Docusaurus 2 alpha.","date":"2019-05-29T00:00:00.000Z","formattedDate":"29 de maio de 2019","tags":[{"label":"hello","permalink":"/blog/tags/hello"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.12,"hasTruncateMarker":true,"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4"}],"frontMatter":{"slug":"hello-world","title":"Hello","author":"Endilie Yacop Sucipto","author_title":"Maintainer of Docusaurus","author_url":"https://github.com/endiliey","author_image_url":"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4","tags":["hello","docusaurus"]},"prevItem":{"title":"Welcome","permalink":"/blog/welcome"},"nextItem":{"title":"Hola","permalink":"/blog/hola"}},"content":"Welcome to this blog. This blog is created with [**Docusaurus 2 alpha**](https://v2.docusaurus.io/).\\n\\n\x3c!--truncate--\x3e\\n\\nThis is a test post.\\n\\nA whole bunch of other information."},{"id":"hola","metadata":{"permalink":"/blog/hola","source":"@site/blog/2019-05-28-hola.md","title":"Hola","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","date":"2019-05-28T00:00:00.000Z","formattedDate":"28 de maio de 2019","tags":[{"label":"hola","permalink":"/blog/tags/hola"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.12,"hasTruncateMarker":false,"authors":[{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","imageURL":"https://avatars1.githubusercontent.com/u/2055384?v=4"}],"frontMatter":{"slug":"hola","title":"Hola","author":"Gao Wei","author_title":"Docusaurus Core Team","author_url":"https://github.com/wgao19","author_image_url":"https://avatars1.githubusercontent.com/u/2055384?v=4","tags":["hola","docusaurus"]},"prevItem":{"title":"Hello","permalink":"/blog/hello-world"}},"content":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}]}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.ad32e1fc.js b/assets/js/b2f554cd.ad32e1fc.js new file mode 100755 index 000000000..aab2edee3 --- /dev/null +++ b/assets/js/b2f554cd.ad32e1fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6880],{38256:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"welcome","metadata":{"permalink":"/blog/welcome","source":"@site/blog/2019-05-30-welcome.md","title":"Welcome","description":"Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!","date":"2019-05-30T00:00:00.000Z","tags":[{"label":"facebook","permalink":"/blog/tags/facebook"},{"label":"hello","permalink":"/blog/tags/hello"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.175,"hasTruncateMarker":false,"authors":[{"name":"Yangshun Tay","title":"Front End Engineer @ Facebook","url":"https://github.com/yangshun","imageURL":"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4"}],"frontMatter":{"slug":"welcome","title":"Welcome","author":"Yangshun Tay","author_title":"Front End Engineer @ Facebook","author_url":"https://github.com/yangshun","author_image_url":"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4","tags":["facebook","hello","docusaurus"]},"unlisted":false,"nextItem":{"title":"Hello","permalink":"/blog/hello-world"}},"content":"Blog features are powered by the blog plugin. Simply add files to the `blog` directory. It supports tags as well!\\n\\nDelete the whole directory if you don\'t want the blog features. As simple as that!"},{"id":"hello-world","metadata":{"permalink":"/blog/hello-world","source":"@site/blog/2019-05-29-hello-world.md","title":"Hello","description":"Welcome to this blog. This blog is created with Docusaurus 2 alpha.","date":"2019-05-29T00:00:00.000Z","tags":[{"label":"hello","permalink":"/blog/tags/hello"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.12,"hasTruncateMarker":true,"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4"}],"frontMatter":{"slug":"hello-world","title":"Hello","author":"Endilie Yacop Sucipto","author_title":"Maintainer of Docusaurus","author_url":"https://github.com/endiliey","author_image_url":"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4","tags":["hello","docusaurus"]},"unlisted":false,"prevItem":{"title":"Welcome","permalink":"/blog/welcome"},"nextItem":{"title":"Hola","permalink":"/blog/hola"}},"content":"Welcome to this blog. This blog is created with [**Docusaurus 2 alpha**](https://v2.docusaurus.io/).\\n\\n\x3c!--truncate--\x3e\\n\\nThis is a test post.\\n\\nA whole bunch of other information."},{"id":"hola","metadata":{"permalink":"/blog/hola","source":"@site/blog/2019-05-28-hola.md","title":"Hola","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","date":"2019-05-28T00:00:00.000Z","tags":[{"label":"hola","permalink":"/blog/tags/hola"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.12,"hasTruncateMarker":false,"authors":[{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","imageURL":"https://avatars1.githubusercontent.com/u/2055384?v=4"}],"frontMatter":{"slug":"hola","title":"Hola","author":"Gao Wei","author_title":"Docusaurus Core Team","author_url":"https://github.com/wgao19","author_image_url":"https://avatars1.githubusercontent.com/u/2055384?v=4","tags":["hola","docusaurus"]},"unlisted":false,"prevItem":{"title":"Hello","permalink":"/blog/hello-world"}},"content":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}]}')}}]); \ No newline at end of file diff --git a/assets/js/b311b2c7.0e44b966.js b/assets/js/b311b2c7.0e44b966.js deleted file mode 100755 index fb8e00970..000000000 --- a/assets/js/b311b2c7.0e44b966.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6631],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var d=r.createContext({}),p=function(e){var t=r.useContext(d),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},c=function(e){var t=p(e.components);return r.createElement(d.Provider,{value:t},e.children)},l="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,d=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),l=p(a),u=n,k=l["".concat(d,".").concat(u)]||l[u]||m[u]||o;return a?r.createElement(k,i(i({ref:t},c),{},{components:a})):r.createElement(k,i({ref:t},c))}));function k(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,i=new Array(o);i[0]=u;var s={};for(var d in t)hasOwnProperty.call(t,d)&&(s[d]=t[d]);s.originalType=e,s[l]="string"==typeof e?e:n,i[1]=s;for(var p=2;p<o;p++)i[p]=a[p];return r.createElement.apply(null,i)}return r.createElement.apply(null,a)}u.displayName="MDXCreateElement"},1933:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var r=a(3117),n=(a(7294),a(3905));const o={id:"laboratorio-sistemas-iot",title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",slug:"LaboratorioSistemasIot",description:"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},i=void 0,s={unversionedId:"LaboratorioSistemasIot/laboratorio-sistemas-iot",id:"LaboratorioSistemasIot/laboratorio-sistemas-iot",title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",description:"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT",source:"@site/docs/LaboratorioSistemasIot/laboratorio-sistemas-iot.md",sourceDirName:"LaboratorioSistemasIot",slug:"/LaboratorioSistemasIot/LaboratorioSistemasIot",permalink:"/docs/LaboratorioSistemasIot/LaboratorioSistemasIot",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/laboratorio-sistemas-iot.md",tags:[],version:"current",frontMatter:{id:"laboratorio-sistemas-iot",title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",slug:"LaboratorioSistemasIot",description:"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},sidebar:"docs",previous:{title:"Badge - Aprenda a soldar",permalink:"/docs/badge/badge"},next:{title:"Adaptador Arduino Uno",permalink:"/docs/LaboratorioSistemasIot/adaptadores/arduino-uno"}},d={},p=[{value:"Perif\xe9ricos dispon\xedveis na placa",id:"perif\xe9ricos-dispon\xedveis-na-placa",level:2},{value:"Ativa\xe7\xe3o dos perif\xe9ricos",id:"ativa\xe7\xe3o-dos-perif\xe9ricos",level:2},{value:"Perif\xe9ricos e pinos de ativa\xe7\xe3o",id:"perif\xe9ricos-e-pinos-de-ativa\xe7\xe3o",level:2}],c={toc:p},l="wrapper";function m(e){let{components:t,...o}=e;return(0,n.kt)(l,(0,r.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"placa Laborat\xf3rio de Sistemas Embarcados e IoT",src:a(6155).Z,width:"1055",height:"812"})),(0,n.kt)("p",null,"A placa ",(0,n.kt)("em",{parentName:"p"},"Laborat\xf3rio de Sistemas Embarcados e IoT"),' \xe9 uma placa de circuito impresso para o ensino de programa\xe7\xe3o em placas microcontroladas. Esta placa cont\xe9m uma s\xe9rie de perif\xe9ricos que permitem a explora\xe7\xe3o de conceitos relacionados ao uso de placas microcontroladas. A conex\xe3o desses perif\xe9ricos j\xe1 est\xe1 de certa forma "embutida" na placa sendo necess\xe1ria apenas a ativa\xe7\xe3o dos componentes atrav\xe9s da conex\xe3o de pinos de ativa\xe7\xe3o associados ao perif\xe9rico.'),(0,n.kt)("p",null,"Esta placa foi desevolvida para ser usada em conjunto com a placa Franzininho Wifi. Sendo assim, foram adicionadas na placa barras de pinos que permitam a conex\xe3o desta placa com facilidade. No entanto, \xe9 poss\xedvel tamb\xe9m utilizar a placa com outras placas microcontroladas, como a placa Arduino Uno atrav\xe9s de um adaptador."),(0,n.kt)("p",null,"Al\xe9m dos perif\xe9ricos padr\xe3o, tamb\xe9m est\xe3o dispon\xedveis na placa conectores extra que permitem a utiliza\xe7\xe3o das portas da Franzininho Wifi para fazer conex\xf5es externas caso os perif\xe9ricos da placa n\xe3o sejam satisfat\xf3rios."),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/laboratorio-SEIoT-Franzininho-Wifi"},"Clique aqui")," para acessar o projeto da placa de circuito impresso no Github."),(0,n.kt)("h2",{id:"perif\xe9ricos-dispon\xedveis-na-placa"},"Perif\xe9ricos dispon\xedveis na placa"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"4 LEDs coloridos difusos"),(0,n.kt)("li",{parentName:"ul"},"4 chaves t\xe1teis 6X6mm"),(0,n.kt)("li",{parentName:"ul"},"1 Teclado Matricial 4X4 (composto de chaves t\xe1teis 6X6mm)"),(0,n.kt)("li",{parentName:"ul"},"1 LED RGB Endere\xe7\xe1vel 5050"),(0,n.kt)("li",{parentName:"ul"},"1 Sensor DHT11"),(0,n.kt)("li",{parentName:"ul"},"1 Display de 7 segmentos c\xe1todo comum"),(0,n.kt)("li",{parentName:"ul"},"1 Sensor LDR de 5mm"),(0,n.kt)("li",{parentName:"ul"},"1 Joystick (tamb\xe9m conhecido como Thumb Joystick)"),(0,n.kt)("li",{parentName:"ul"},"1 LED RGB c\xe1todo comum"),(0,n.kt)("li",{parentName:"ul"},"1 Potenci\xf4metro"),(0,n.kt)("li",{parentName:"ul"},"1 Piezo Buzzer"),(0,n.kt)("li",{parentName:"ul"},"1 Display OLED 128X64 Pixels"),(0,n.kt)("li",{parentName:"ul"},"2 Conectores f\xeamea de 4 pinos para conex\xe3o de sensores externos"),(0,n.kt)("li",{parentName:"ul"},"2 Conectores Grove para conex\xe3o de sensores externos"),(0,n.kt)("li",{parentName:"ul"},"1 Transistor NPN")),(0,n.kt)("h2",{id:"ativa\xe7\xe3o-dos-perif\xe9ricos"},"Ativa\xe7\xe3o dos perif\xe9ricos"),(0,n.kt)("p",null,"Os pinos de ativa\xe7\xe3o dispon\xedveis na placa s\xe3o dois pinos macho localizados nas trilhas entre um pino de um componente e o pino onde este componente se conecta no socket da placa microcontrolada. Para ativar um pino de ativa\xe7\xe3o, basta fazer a liga\xe7\xe3o dos dois pinos macho atrav\xe9s de um conector, o que permite que as conex\xf5es corretas sejam realizadas rapidamente."),(0,n.kt)("p",null,"Estes pinos possuem uma codifica\xe7\xe3o baseada no sistema hexadecimal que se encontra do lado do pino de ativa\xe7\xe3o onde o primeiro algorismo indica a fun\xe7\xe3o do pino, e o segundo indica a numera\xe7\xe3o dele. A lista de pinos e fun\xe7\xf5es pode ser vista na tabela abaixo:"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"center"},"Letra"),(0,n.kt)("th",{parentName:"tr",align:"center"},"Significado"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"0"),(0,n.kt)("td",{parentName:"tr",align:"center"},"GND")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"3"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Alimenta\xe7\xe3o de 3.3V")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"5"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Alimenta\xe7\xe3o de 5V")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"A"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Pinos ligados em portas Anal\xf3gicas")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"B"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Pinos ligados nas mesmas portas que A")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"C"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Especiais")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"D"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Pinos ligados em portas Digitais")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"E"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Pinos ligados nas mesmas portas que D")))),(0,n.kt)("p",null,"Devido \xe0 essa codifica\xe7\xe3o, os pinos de ativa\xe7\xe3o acabaram com numera\xe7\xf5es que n\xe3o possuem rela\xe7\xe3o com os pinos da Franzininho Wifi. Visando sanar eventuais problemas ligados a essa rela\xe7\xe3o, a correpond\xeancia entre os pinos de ativa\xe7\xe3o e os pinos da Franzininho Wifi se encontra impressa na PCB."),(0,n.kt)("p",null,"Al\xe9m disso, tamb\xe9m \xe9 poss\xedvel usar a biblioteca laboratorioFW, que faz o mapeamento dos pinos da placa Franzininho Wifi para os c\xf3digos dos pinos de ativa\xe7\xe3o, facilitando assim ainda mais o uso desta ferramenta."),(0,n.kt)("h2",{id:"perif\xe9ricos-e-pinos-de-ativa\xe7\xe3o"},"Perif\xe9ricos e pinos de ativa\xe7\xe3o"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"lab-numerado",src:a(5822).Z,width:"954",height:"681"})),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"center"},"Periferico"),(0,n.kt)("th",{parentName:"tr",align:"center"},"Pinos de Ativa\xe7\xe3o"),(0,n.kt)("th",{parentName:"tr",align:"center"},"C\xf3digo na imagem"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"LEDs difusos"),(0,n.kt)("td",{parentName:"tr",align:"center"},"A0, A1, A2, A3 (dependendo do LED escolhido)"),(0,n.kt)("td",{parentName:"tr",align:"center"},"1")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Bot\xf5es"),(0,n.kt)("td",{parentName:"tr",align:"center"},"A4 e 31, A5 e 32, A6 e 33, A7 e 34 (dependendo do bot\xe3o escolhido)"),(0,n.kt)("td",{parentName:"tr",align:"center"},"7")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Buzzer"),(0,n.kt)("td",{parentName:"tr",align:"center"},"E2"),(0,n.kt)("td",{parentName:"tr",align:"center"},"6")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"LED RGB"),(0,n.kt)("td",{parentName:"tr",align:"center"},"AC, AB, AA, 00"),(0,n.kt)("td",{parentName:"tr",align:"center"},"12")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Potenci\xf4metro"),(0,n.kt)("td",{parentName:"tr",align:"center"},"B8, 35"),(0,n.kt)("td",{parentName:"tr",align:"center"},"5")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Sensor de luminosidade"),(0,n.kt)("td",{parentName:"tr",align:"center"},"A8, 36"),(0,n.kt)("td",{parentName:"tr",align:"center"},"10")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Sensor de umidade e temperatura DTH11"),(0,n.kt)("td",{parentName:"tr",align:"center"},"A9, 51"),(0,n.kt)("td",{parentName:"tr",align:"center"},"14")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Display de 7 segmentos"),(0,n.kt)("td",{parentName:"tr",align:"center"},"D0, D1, D2, D3, D4, D5, D6, D7, 01"),(0,n.kt)("td",{parentName:"tr",align:"center"},"8")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Transistor NPN"),(0,n.kt)("td",{parentName:"tr",align:"center"},"E9"),(0,n.kt)("td",{parentName:"tr",align:"center"},"9")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Display OLED"),(0,n.kt)("td",{parentName:"tr",align:"center"},"C0, C1, 30"),(0,n.kt)("td",{parentName:"tr",align:"center"},"2")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Teclado Matricial"),(0,n.kt)("td",{parentName:"tr",align:"center"},"DA, DB, DC, DD, E6, E4, E3"),(0,n.kt)("td",{parentName:"tr",align:"center"},"3")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Conex\xe3o para Servo Motor"),(0,n.kt)("td",{parentName:"tr",align:"center"},"B5, 54, 02"),(0,n.kt)("td",{parentName:"tr",align:"center"},"11")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"LED RGB endere\xe7\xe1vel"),(0,n.kt)("td",{parentName:"tr",align:"center"},"D9, 37"),(0,n.kt)("td",{parentName:"tr",align:"center"},"13")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"M\xf3dulo Joystick"),(0,n.kt)("td",{parentName:"tr",align:"center"},"D8, B1, B0, 38"),(0,n.kt)("td",{parentName:"tr",align:"center"},"4")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Conectores f\xeamea de 4 pinos"),(0,n.kt)("td",{parentName:"tr",align:"center"},"(BA, BB, 3A) ou (B3, B2, 54) dependendo do conector escolhido"),(0,n.kt)("td",{parentName:"tr",align:"center"},"17 e 15")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Conectores Grove"),(0,n.kt)("td",{parentName:"tr",align:"center"},"(B7, 39) ou (52, B6) dependendo do conector escolhido"),(0,n.kt)("td",{parentName:"tr",align:"center"},"16 e 18")))),(0,n.kt)("admonition",{title:"Obs.",type:"info"},(0,n.kt)("p",{parentName:"admonition"},"A placa ",(0,n.kt)("em",{parentName:"p"},"Laborat\xf3rio de Sistemas Embarcados e IoT")," foi desenvolvida como o Trabalho de Conclus\xe3o de Curso de ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/LelePG"},"Let\xedcia Pegoraro Garcez"),".")))}m.isMDXComponent=!0},6155:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/3d-lab-9d288bc68d87ae585237ebe566c324ba.png"},5822:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/lab-numerado-19cab7ce05128fcd34f82dd6897dd1ff.png"}}]); \ No newline at end of file diff --git a/assets/js/b311b2c7.ccb44955.js b/assets/js/b311b2c7.ccb44955.js new file mode 100755 index 000000000..e2b9952c9 --- /dev/null +++ b/assets/js/b311b2c7.ccb44955.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3183],{70512:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>x,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var s=i(17624),n=i(95788);const r={id:"laboratorio-sistemas-iot",title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",slug:"LaboratorioSistemasIot",description:"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},o=void 0,a={id:"LaboratorioSistemasIot/laboratorio-sistemas-iot",title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",description:"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT",source:"@site/docs/LaboratorioSistemasIot/laboratorio-sistemas-iot.md",sourceDirName:"LaboratorioSistemasIot",slug:"/LaboratorioSistemasIot/LaboratorioSistemasIot",permalink:"/docs/LaboratorioSistemasIot/LaboratorioSistemasIot",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/laboratorio-sistemas-iot.md",tags:[],version:"current",frontMatter:{id:"laboratorio-sistemas-iot",title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",slug:"LaboratorioSistemasIot",description:"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},sidebar:"docs",previous:{title:"Badge - Aprenda a soldar",permalink:"/docs/badge/badge"},next:{title:"Adaptador Arduino Uno",permalink:"/docs/LaboratorioSistemasIot/adaptadores/arduino-uno"}},l={},c=[{value:"Perif\xe9ricos dispon\xedveis na placa",id:"perif\xe9ricos-dispon\xedveis-na-placa",level:2},{value:"Ativa\xe7\xe3o dos perif\xe9ricos",id:"ativa\xe7\xe3o-dos-perif\xe9ricos",level:2},{value:"Perif\xe9ricos e pinos de ativa\xe7\xe3o",id:"perif\xe9ricos-e-pinos-de-ativa\xe7\xe3o",level:2}];function d(e){const t={a:"a",admonition:"admonition",em:"em",h2:"h2",img:"img",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.MN)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"placa Laborat\xf3rio de Sistemas Embarcados e IoT",src:i(61772).c+"",width:"1055",height:"812"})}),"\n",(0,s.jsxs)(t.p,{children:["A placa ",(0,s.jsx)(t.em,{children:"Laborat\xf3rio de Sistemas Embarcados e IoT"}),' \xe9 uma placa de circuito impresso para o ensino de programa\xe7\xe3o em placas microcontroladas. Esta placa cont\xe9m uma s\xe9rie de perif\xe9ricos que permitem a explora\xe7\xe3o de conceitos relacionados ao uso de placas microcontroladas. A conex\xe3o desses perif\xe9ricos j\xe1 est\xe1 de certa forma "embutida" na placa sendo necess\xe1ria apenas a ativa\xe7\xe3o dos componentes atrav\xe9s da conex\xe3o de pinos de ativa\xe7\xe3o associados ao perif\xe9rico.']}),"\n",(0,s.jsx)(t.p,{children:"Esta placa foi desevolvida para ser usada em conjunto com a placa Franzininho Wifi. Sendo assim, foram adicionadas na placa barras de pinos que permitam a conex\xe3o desta placa com facilidade. No entanto, \xe9 poss\xedvel tamb\xe9m utilizar a placa com outras placas microcontroladas, como a placa Arduino Uno atrav\xe9s de um adaptador."}),"\n",(0,s.jsx)(t.p,{children:"Al\xe9m dos perif\xe9ricos padr\xe3o, tamb\xe9m est\xe3o dispon\xedveis na placa conectores extra que permitem a utiliza\xe7\xe3o das portas da Franzininho Wifi para fazer conex\xf5es externas caso os perif\xe9ricos da placa n\xe3o sejam satisfat\xf3rios."}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://github.com/Franzininho/laboratorio-SEIoT-Franzininho-Wifi",children:"Clique aqui"})," para acessar o projeto da placa de circuito impresso no Github."]}),"\n",(0,s.jsx)(t.h2,{id:"perif\xe9ricos-dispon\xedveis-na-placa",children:"Perif\xe9ricos dispon\xedveis na placa"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"4 LEDs coloridos difusos"}),"\n",(0,s.jsx)(t.li,{children:"4 chaves t\xe1teis 6X6mm"}),"\n",(0,s.jsx)(t.li,{children:"1 Teclado Matricial 4X4 (composto de chaves t\xe1teis 6X6mm)"}),"\n",(0,s.jsx)(t.li,{children:"1 LED RGB Endere\xe7\xe1vel 5050"}),"\n",(0,s.jsx)(t.li,{children:"1 Sensor DHT11"}),"\n",(0,s.jsx)(t.li,{children:"1 Display de 7 segmentos c\xe1todo comum"}),"\n",(0,s.jsx)(t.li,{children:"1 Sensor LDR de 5mm"}),"\n",(0,s.jsx)(t.li,{children:"1 Joystick (tamb\xe9m conhecido como Thumb Joystick)"}),"\n",(0,s.jsx)(t.li,{children:"1 LED RGB c\xe1todo comum"}),"\n",(0,s.jsx)(t.li,{children:"1 Potenci\xf4metro"}),"\n",(0,s.jsx)(t.li,{children:"1 Piezo Buzzer"}),"\n",(0,s.jsx)(t.li,{children:"1 Display OLED 128X64 Pixels"}),"\n",(0,s.jsx)(t.li,{children:"2 Conectores f\xeamea de 4 pinos para conex\xe3o de sensores externos"}),"\n",(0,s.jsx)(t.li,{children:"2 Conectores Grove para conex\xe3o de sensores externos"}),"\n",(0,s.jsx)(t.li,{children:"1 Transistor NPN"}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"ativa\xe7\xe3o-dos-perif\xe9ricos",children:"Ativa\xe7\xe3o dos perif\xe9ricos"}),"\n",(0,s.jsx)(t.p,{children:"Os pinos de ativa\xe7\xe3o dispon\xedveis na placa s\xe3o dois pinos macho localizados nas trilhas entre um pino de um componente e o pino onde este componente se conecta no socket da placa microcontrolada. Para ativar um pino de ativa\xe7\xe3o, basta fazer a liga\xe7\xe3o dos dois pinos macho atrav\xe9s de um conector, o que permite que as conex\xf5es corretas sejam realizadas rapidamente."}),"\n",(0,s.jsx)(t.p,{children:"Estes pinos possuem uma codifica\xe7\xe3o baseada no sistema hexadecimal que se encontra do lado do pino de ativa\xe7\xe3o onde o primeiro algorismo indica a fun\xe7\xe3o do pino, e o segundo indica a numera\xe7\xe3o dele. A lista de pinos e fun\xe7\xf5es pode ser vista na tabela abaixo:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"Letra"}),(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"Significado"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"0"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"GND"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"3"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Alimenta\xe7\xe3o de 3.3V"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"5"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Alimenta\xe7\xe3o de 5V"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"A"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Pinos ligados em portas Anal\xf3gicas"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"B"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Pinos ligados nas mesmas portas que A"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"C"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Especiais"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"D"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Pinos ligados em portas Digitais"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"E"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Pinos ligados nas mesmas portas que D"})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"Devido \xe0 essa codifica\xe7\xe3o, os pinos de ativa\xe7\xe3o acabaram com numera\xe7\xf5es que n\xe3o possuem rela\xe7\xe3o com os pinos da Franzininho Wifi. Visando sanar eventuais problemas ligados a essa rela\xe7\xe3o, a correpond\xeancia entre os pinos de ativa\xe7\xe3o e os pinos da Franzininho Wifi se encontra impressa na PCB."}),"\n",(0,s.jsx)(t.p,{children:"Al\xe9m disso, tamb\xe9m \xe9 poss\xedvel usar a biblioteca laboratorioFW, que faz o mapeamento dos pinos da placa Franzininho Wifi para os c\xf3digos dos pinos de ativa\xe7\xe3o, facilitando assim ainda mais o uso desta ferramenta."}),"\n",(0,s.jsx)(t.h2,{id:"perif\xe9ricos-e-pinos-de-ativa\xe7\xe3o",children:"Perif\xe9ricos e pinos de ativa\xe7\xe3o"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"lab-numerado",src:i(70812).c+"",width:"954",height:"681"})}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"Periferico"}),(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"Pinos de Ativa\xe7\xe3o"}),(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"C\xf3digo na imagem"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"LEDs difusos"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"A0, A1, A2, A3 (dependendo do LED escolhido)"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"1"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Bot\xf5es"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"A4 e 31, A5 e 32, A6 e 33, A7 e 34 (dependendo do bot\xe3o escolhido)"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"7"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Buzzer"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"E2"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"6"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"LED RGB"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"AC, AB, AA, 00"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"12"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Potenci\xf4metro"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"B8, 35"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"5"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Sensor de luminosidade"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"A8, 36"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"10"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Sensor de umidade e temperatura DTH11"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"A9, 51"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"14"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Display de 7 segmentos"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"D0, D1, D2, D3, D4, D5, D6, D7, 01"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"8"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Transistor NPN"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"E9"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"9"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Display OLED"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"C0, C1, 30"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"2"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Teclado Matricial"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"DA, DB, DC, DD, E6, E4, E3"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"3"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Conex\xe3o para Servo Motor"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"B5, 54, 02"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"11"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"LED RGB endere\xe7\xe1vel"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"D9, 37"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"13"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"M\xf3dulo Joystick"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"D8, B1, B0, 38"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"4"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Conectores f\xeamea de 4 pinos"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"(BA, BB, 3A) ou (B3, B2, 54) dependendo do conector escolhido"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"17 e 15"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Conectores Grove"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"(B7, 39) ou (52, B6) dependendo do conector escolhido"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"16 e 18"})]})]})]}),"\n",(0,s.jsx)(t.admonition,{title:"Obs.",type:"info",children:(0,s.jsxs)(t.p,{children:["A placa ",(0,s.jsx)(t.em,{children:"Laborat\xf3rio de Sistemas Embarcados e IoT"})," foi desenvolvida como o Trabalho de Conclus\xe3o de Curso de ",(0,s.jsx)(t.a,{href:"https://github.com/LelePG",children:"Let\xedcia Pegoraro Garcez"}),"."]})})]})}function x(e={}){const{wrapper:t}={...(0,n.MN)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},95788:(e,t,i)=>{i.d(t,{MN:()=>c});var s=i(11504);function n(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,s)}return i}function o(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?r(Object(i),!0).forEach((function(t){n(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):r(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function a(e,t){if(null==e)return{};var i,s,n=function(e,t){if(null==e)return{};var i,s,n={},r=Object.keys(e);for(s=0;s<r.length;s++)i=r[s],t.indexOf(i)>=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(s=0;s<r.length;s++)i=r[s],t.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var l=s.createContext({}),c=function(e){var t=s.useContext(l),i=t;return e&&(i="function"==typeof e?e(t):o(o({},t),e)),i},d={inlineCode:"code",wrapper:function(e){var t=e.children;return s.createElement(s.Fragment,{},t)}},x=s.forwardRef((function(e,t){var i=e.components,n=e.mdxType,r=e.originalType,l=e.parentName,x=a(e,["components","mdxType","originalType","parentName"]),h=c(i),p=n,m=h["".concat(l,".").concat(p)]||h[p]||d[p]||r;return i?s.createElement(m,o(o({ref:t},x),{},{components:i})):s.createElement(m,o({ref:t},x))}));x.displayName="MDXCreateElement"},61772:(e,t,i)=>{i.d(t,{c:()=>s});const s=i.p+"assets/images/3d-lab-9d288bc68d87ae585237ebe566c324ba.png"},70812:(e,t,i)=>{i.d(t,{c:()=>s});const s=i.p+"assets/images/lab-numerado-19cab7ce05128fcd34f82dd6897dd1ff.png"}}]); \ No newline at end of file diff --git a/assets/js/b55e0f56.19070d8f.js b/assets/js/b55e0f56.19070d8f.js deleted file mode 100755 index 8839b1967..000000000 --- a/assets/js/b55e0f56.19070d8f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9821],{3905:(e,a,o)=>{o.d(a,{Zo:()=>p,kt:()=>g});var r=o(7294);function n(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function t(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,r)}return o}function i(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?t(Object(o),!0).forEach((function(a){n(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):t(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function l(e,a){if(null==e)return{};var o,r,n=function(e,a){if(null==e)return{};var o,r,n={},t=Object.keys(e);for(r=0;r<t.length;r++)o=t[r],a.indexOf(o)>=0||(n[o]=e[o]);return n}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(r=0;r<t.length;r++)o=t[r],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var s=r.createContext({}),m=function(e){var a=r.useContext(s),o=a;return e&&(o="function"==typeof e?e(a):i(i({},a),e)),o},p=function(e){var a=m(e.components);return r.createElement(s.Provider,{value:a},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},d=r.forwardRef((function(e,a){var o=e.components,n=e.mdxType,t=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=m(o),d=n,g=c["".concat(s,".").concat(d)]||c[d]||u[d]||t;return o?r.createElement(g,i(i({ref:a},p),{},{components:o})):r.createElement(g,i({ref:a},p))}));function g(e,a){var o=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var t=o.length,i=new Array(t);i[0]=d;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[c]="string"==typeof e?e:n,i[1]=l;for(var m=2;m<t;m++)i[m]=o[m];return r.createElement.apply(null,i)}return r.createElement.apply(null,o)}d.displayName="MDXCreateElement"},2403:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>t,metadata:()=>l,toc:()=>m});var r=o(3117),n=(o(7294),o(3905));const t={id:"hello-world",title:"Hello, World!",slug:"/franzininho-diy/exemplos-avr-libc/hello-world",description:"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},i=void 0,l={unversionedId:"FranzininhoDIY/exemplos-avr-libc/hello-world",id:"FranzininhoDIY/exemplos-avr-libc/hello-world",title:"Hello, World!",description:"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/hello-world.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/hello-world",permalink:"/docs/franzininho-diy/exemplos-avr-libc/hello-world",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/hello-world.md",tags:[],version:"current",frontMatter:{id:"hello-world",title:"Hello, World!",slug:"/franzininho-diy/exemplos-avr-libc/hello-world",description:"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos"},next:{title:"Sa\xedda Digital",permalink:"/docs/franzininho-diy/exemplos-avr-libc/saida-digital"}},s={},m=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Hello, World em linguagem C",id:"hello-world-em-linguagem-c",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o e upload",id:"compila\xe7\xe3o-e-upload",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],p={toc:m},c="wrapper";function u(e){let{components:a,...o}=e;return(0,n.kt)(c,(0,r.Z)({},p,o,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Nesse exemplo vamos dar os nossos primeiros passos na programa\xe7\xe3o da Franzininho DIY usando a ",(0,n.kt)("a",{parentName:"p",href:"https://nongnu.org/avr-libc/"},"AVR Libc"),"."),(0,n.kt)("p",null,'Como de costume o nosso "Hello, World!" na eletr\xf4nica ser\xe1 um blink LED. Ao final desse experimento voc\xea ter\xe1 uma estrutura m\xednima para desenvolver aplica\xe7\xf5es para o ATtiny85 em C.'),(0,n.kt)("p",null,"Bora, colocar em pr\xe1tica!"),(0,n.kt)("h2",{id:"recursos-necess\xe1rios"},"Recursos Necess\xe1rios"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Placa Franzininho DIY(com Micronucleus)"),(0,n.kt)("li",{parentName:"ul"},"Computador com as ferramentas de software instaladas(link)")),(0,n.kt)("h2",{id:"hello-world-em-linguagem-c"},"Hello, World em linguagem C"),(0,n.kt)("p",null,"Esse exemplo b\xe1sico nos dar\xe1 estrutura para todos nossos exemplos daqui pra frente. Como j\xe1 mencionado, vamos usar a linguagem C em conjunto com a biblioteca AVR Libc. Para esse exemplo voc\xea s\xf3 precisar\xe1 da placa Franzininho DIY e as ferramentas de softwares."),(0,n.kt)("p",null,"O c\xf3digo exibe a estrutura m\xednima de um programa em linguagem C para microcontroladores. Se voc\xea tem dificuldades com a linguagem C, recomendo que confira os seguintes materiais:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=l9ZdS8kph0A&list=PLqY1DITQ0sB_5yUBqhnm37J5PxsjrVPKT"},"Playlist Linguagem C")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://www.slideshare.net/FabioSouza9/resumo-linguagem-c-para-microcontroladores-pic-usando-mikroc"},"Slideshare"))),(0,n.kt)("p",null,"Nesse momento \xe9 importante que voc\xea se atente a estrutura do c\xf3digo. Vamos usar alguns registradores para acionar o LED, mas n\xe3o ser\xe3o o foco da explica\xe7\xe3o. Confira os coment\xe1rios no c\xf3digo a seguir:"),(0,n.kt)("h3",{id:"c\xf3digo"},"C\xf3digo"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-c"},"#include <avr/io.h> // Biblioteca para acesso aos registradores do MCU\n#include <util/delay.h> // Biblioteca para fun\xe7\xf5es de delay\n\n#define F_CPU 16500000L // Frequencia de clock que o mcu est\xe1 trabalhando\n\n/**\n Essa \xe9 a fun\xe7\xe3o principal onde \xe9 iniciada aplica\xe7\xe3o\n*/\nint main(void)\n{\n DDRB |= (1 << PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n // O programar ficar\xe1 nesse loop enquanto a placa estiver ligada\n while (1)\n {\n PORTB |= (1 << PB1); // Liga LED\n _delay_ms(500); // Aguarda 500 ms\n\n PORTB &= ~(1 << PB1); // Desliga LED\n _delay_ms(500); // Aguarda 500 ms\n }\n\n return (0); // Necess\xe1rio um retorno (pois a fun\xe7\xe3o retorna int) mesmo que a fun\xe7\xe3o nunca retornar\xe1\n}\n")),(0,n.kt)("h3",{id:"compila\xe7\xe3o-e-upload"},"Compila\xe7\xe3o e upload"),(0,n.kt)("p",null,"para compilar o programa, acesse a pasta do exemplo e em seguida o comando ",(0,n.kt)("inlineCode",{parentName:"p"},"make"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"exemplos-avr-libc/exemplos/hello$ make\n")),(0,n.kt)("p",null,"J\xe1 temos o makefile configurado na pasta, assim, ser\xe1 feita a compila\xe7\xe3o e em seguida aparecer\xe1 a mensagem para conectar a placa:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n")),(0,n.kt)("p",null,"Conecte a placa no PC ou pressione o bot\xe3o de RESET se ela j\xe1 estiver conectada."),(0,n.kt)("p",null,"Ser\xe1 iniciado o upload."),(0,n.kt)("h3",{id:"resultados"},"Resultados"),(0,n.kt)("p",null,"Nesse exemplo o LED ir\xe1 piscar em intervalos de 500 ms (on) e 500 ms (off)."),(0,n.kt)("p",null,"No pr\xf3ximo exemplo vamos detalhar sobre os registradores de IO. Nesse momento, al\xe9m da estrutura inicial \xe9 importante que voc\xea entenda como usar a fun\xe7\xe3o ",(0,n.kt)("inlineCode",{parentName:"p"},"_delay_ms()"),"."),(0,n.kt)("p",null,"Essa fun\xe7\xe3o espera o tempo passado em milissegundos."),(0,n.kt)("p",null,"Altere o c\xf3digo para que o led fique 100 ms(on) e 1000 ms (off), veja o efeito."),(0,n.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,n.kt)("p",null,"Nesse exemplo tivemos o primeiro contato com a programa\xe7\xe3o em linguagem C para microcontroladores. Notamos que devemos incluir as bibliotecas externas atrav\xe9s do ",(0,n.kt)("inlineCode",{parentName:"p"},"#include")," e que o programa precisa necessariamente ter a fun\xe7\xe3o ",(0,n.kt)("inlineCode",{parentName:"p"},"int main(void)"),"."),(0,n.kt)("p",null,"Dentro da fun\xe7\xe3o main temos um loop infinito onde os comandos se repetir\xe3o enquanto a placa estiver ligada."),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Autor"),(0,n.kt)("th",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"th",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza")))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Data:"),(0,n.kt)("td",{parentName:"tr",align:null},"24/04/2021")))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b55e0f56.7a44c2a0.js b/assets/js/b55e0f56.7a44c2a0.js new file mode 100755 index 000000000..4909d5c5b --- /dev/null +++ b/assets/js/b55e0f56.7a44c2a0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[576],{56068:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>t,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var r=n(17624),a=n(95788);const i={id:"hello-world",title:"Hello, World!",slug:"/franzininho-diy/exemplos-avr-libc/hello-world",description:"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},s=void 0,l={id:"FranzininhoDIY/exemplos-avr-libc/hello-world",title:"Hello, World!",description:"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/hello-world.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/hello-world",permalink:"/docs/franzininho-diy/exemplos-avr-libc/hello-world",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/hello-world.md",tags:[],version:"current",frontMatter:{id:"hello-world",title:"Hello, World!",slug:"/franzininho-diy/exemplos-avr-libc/hello-world",description:"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos"},next:{title:"Sa\xedda Digital",permalink:"/docs/franzininho-diy/exemplos-avr-libc/saida-digital"}},t={},c=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Hello, World em linguagem C",id:"hello-world-em-linguagem-c",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o e upload",id:"compila\xe7\xe3o-e-upload",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function d(e){const o={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(o.p,{children:["Nesse exemplo vamos dar os nossos primeiros passos na programa\xe7\xe3o da Franzininho DIY usando a ",(0,r.jsx)(o.a,{href:"https://nongnu.org/avr-libc/",children:"AVR Libc"}),"."]}),"\n",(0,r.jsx)(o.p,{children:'Como de costume o nosso "Hello, World!" na eletr\xf4nica ser\xe1 um blink LED. Ao final desse experimento voc\xea ter\xe1 uma estrutura m\xednima para desenvolver aplica\xe7\xf5es para o ATtiny85 em C.'}),"\n",(0,r.jsx)(o.p,{children:"Bora, colocar em pr\xe1tica!"}),"\n",(0,r.jsx)(o.h2,{id:"recursos-necess\xe1rios",children:"Recursos Necess\xe1rios"}),"\n",(0,r.jsxs)(o.ul,{children:["\n",(0,r.jsx)(o.li,{children:"Placa Franzininho DIY(com Micronucleus)"}),"\n",(0,r.jsx)(o.li,{children:"Computador com as ferramentas de software instaladas(link)"}),"\n"]}),"\n",(0,r.jsx)(o.h2,{id:"hello-world-em-linguagem-c",children:"Hello, World em linguagem C"}),"\n",(0,r.jsx)(o.p,{children:"Esse exemplo b\xe1sico nos dar\xe1 estrutura para todos nossos exemplos daqui pra frente. Como j\xe1 mencionado, vamos usar a linguagem C em conjunto com a biblioteca AVR Libc. Para esse exemplo voc\xea s\xf3 precisar\xe1 da placa Franzininho DIY e as ferramentas de softwares."}),"\n",(0,r.jsx)(o.p,{children:"O c\xf3digo exibe a estrutura m\xednima de um programa em linguagem C para microcontroladores. Se voc\xea tem dificuldades com a linguagem C, recomendo que confira os seguintes materiais:"}),"\n",(0,r.jsxs)(o.ul,{children:["\n",(0,r.jsx)(o.li,{children:(0,r.jsx)(o.a,{href:"https://www.youtube.com/watch?v=l9ZdS8kph0A&list=PLqY1DITQ0sB_5yUBqhnm37J5PxsjrVPKT",children:"Playlist Linguagem C"})}),"\n",(0,r.jsx)(o.li,{children:(0,r.jsx)(o.a,{href:"https://www.slideshare.net/FabioSouza9/resumo-linguagem-c-para-microcontroladores-pic-usando-mikroc",children:"Slideshare"})}),"\n"]}),"\n",(0,r.jsx)(o.p,{children:"Nesse momento \xe9 importante que voc\xea se atente a estrutura do c\xf3digo. Vamos usar alguns registradores para acionar o LED, mas n\xe3o ser\xe3o o foco da explica\xe7\xe3o. Confira os coment\xe1rios no c\xf3digo a seguir:"}),"\n",(0,r.jsx)(o.h3,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,r.jsx)(o.pre,{children:(0,r.jsx)(o.code,{className:"language-c",children:"#include <avr/io.h> // Biblioteca para acesso aos registradores do MCU\n#include <util/delay.h> // Biblioteca para fun\xe7\xf5es de delay\n\n#define F_CPU 16500000L // Frequencia de clock que o mcu est\xe1 trabalhando\n\n/**\n Essa \xe9 a fun\xe7\xe3o principal onde \xe9 iniciada aplica\xe7\xe3o\n*/\nint main(void)\n{\n DDRB |= (1 << PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n // O programar ficar\xe1 nesse loop enquanto a placa estiver ligada\n while (1)\n {\n PORTB |= (1 << PB1); // Liga LED\n _delay_ms(500); // Aguarda 500 ms\n\n PORTB &= ~(1 << PB1); // Desliga LED\n _delay_ms(500); // Aguarda 500 ms\n }\n\n return (0); // Necess\xe1rio um retorno (pois a fun\xe7\xe3o retorna int) mesmo que a fun\xe7\xe3o nunca retornar\xe1\n}\n"})}),"\n",(0,r.jsx)(o.h3,{id:"compila\xe7\xe3o-e-upload",children:"Compila\xe7\xe3o e upload"}),"\n",(0,r.jsxs)(o.p,{children:["para compilar o programa, acesse a pasta do exemplo e em seguida o comando ",(0,r.jsx)(o.code,{children:"make"}),":"]}),"\n",(0,r.jsx)(o.pre,{children:(0,r.jsx)(o.code,{children:"exemplos-avr-libc/exemplos/hello$ make\n"})}),"\n",(0,r.jsx)(o.p,{children:"J\xe1 temos o makefile configurado na pasta, assim, ser\xe1 feita a compila\xe7\xe3o e em seguida aparecer\xe1 a mensagem para conectar a placa:"}),"\n",(0,r.jsx)(o.pre,{children:(0,r.jsx)(o.code,{className:"language-shell",children:"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n"})}),"\n",(0,r.jsx)(o.p,{children:"Conecte a placa no PC ou pressione o bot\xe3o de RESET se ela j\xe1 estiver conectada."}),"\n",(0,r.jsx)(o.p,{children:"Ser\xe1 iniciado o upload."}),"\n",(0,r.jsx)(o.h3,{id:"resultados",children:"Resultados"}),"\n",(0,r.jsx)(o.p,{children:"Nesse exemplo o LED ir\xe1 piscar em intervalos de 500 ms (on) e 500 ms (off)."}),"\n",(0,r.jsxs)(o.p,{children:["No pr\xf3ximo exemplo vamos detalhar sobre os registradores de IO. Nesse momento, al\xe9m da estrutura inicial \xe9 importante que voc\xea entenda como usar a fun\xe7\xe3o ",(0,r.jsx)(o.code,{children:"_delay_ms()"}),"."]}),"\n",(0,r.jsx)(o.p,{children:"Essa fun\xe7\xe3o espera o tempo passado em milissegundos."}),"\n",(0,r.jsx)(o.p,{children:"Altere o c\xf3digo para que o led fique 100 ms(on) e 1000 ms (off), veja o efeito."}),"\n",(0,r.jsx)(o.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,r.jsxs)(o.p,{children:["Nesse exemplo tivemos o primeiro contato com a programa\xe7\xe3o em linguagem C para microcontroladores. Notamos que devemos incluir as bibliotecas externas atrav\xe9s do ",(0,r.jsx)(o.code,{children:"#include"})," e que o programa precisa necessariamente ter a fun\xe7\xe3o ",(0,r.jsx)(o.code,{children:"int main(void)"}),"."]}),"\n",(0,r.jsx)(o.p,{children:"Dentro da fun\xe7\xe3o main temos um loop infinito onde os comandos se repetir\xe3o enquanto a placa estiver ligada."}),"\n",(0,r.jsxs)(o.table,{children:[(0,r.jsx)(o.thead,{children:(0,r.jsxs)(o.tr,{children:[(0,r.jsx)(o.th,{children:"Autor"}),(0,r.jsx)(o.th,{children:(0,r.jsx)(o.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]})}),(0,r.jsx)(o.tbody,{children:(0,r.jsxs)(o.tr,{children:[(0,r.jsx)(o.td,{children:"Data:"}),(0,r.jsx)(o.td,{children:"24/04/2021"})]})})]})]})}function m(e={}){const{wrapper:o}={...(0,a.MN)(),...e.components};return o?(0,r.jsx)(o,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},95788:(e,o,n)=>{n.d(o,{MN:()=>c});var r=n(11504);function a(e,o,n){return o in e?Object.defineProperty(e,o,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[o]=n,e}function i(e,o){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);o&&(r=r.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var o=1;o<arguments.length;o++){var n=null!=arguments[o]?arguments[o]:{};o%2?i(Object(n),!0).forEach((function(o){a(e,o,n[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(n,o))}))}return e}function l(e,o){if(null==e)return{};var n,r,a=function(e,o){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],o.indexOf(n)>=0||(a[n]=e[n]);return a}(e,o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],o.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var t=r.createContext({}),c=function(e){var o=r.useContext(t),n=o;return e&&(n="function"==typeof e?e(o):s(s({},o),e)),n},d={inlineCode:"code",wrapper:function(e){var o=e.children;return r.createElement(r.Fragment,{},o)}},m=r.forwardRef((function(e,o){var n=e.components,a=e.mdxType,i=e.originalType,t=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),p=c(n),u=a,h=p["".concat(t,".").concat(u)]||p[u]||d[u]||i;return n?r.createElement(h,s(s({ref:o},m),{},{components:n})):r.createElement(h,s({ref:o},m))}));m.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/b677b176.15604a3b.js b/assets/js/b677b176.15604a3b.js deleted file mode 100755 index 9156315cd..000000000 --- a/assets/js/b677b176.15604a3b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[367],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>f});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),c=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},u=function(e){var n=c(e.components);return r.createElement(s.Provider,{value:n},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(t),m=o,f=p["".concat(s,".").concat(m)]||p[m]||d[m]||i;return t?r.createElement(f,a(a({ref:n},u),{},{components:t})):r.createElement(f,a({ref:n},u))}));function f(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,a=new Array(i);a[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[p]="string"==typeof e?e:o,a[1]=l;for(var c=2;c<i;c++)a[c]=t[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,t)}m.displayName="MDXCreateElement"},7255:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var r=t(3117),o=(t(7294),t(3905));const i={id:"int-externa",title:"Interrup\xe7\xe3o externa",slug:"/franzininho-diy/exemplos-avr-libc/int-ext",description:"Exemplo para uso da interrup\xe7\xe3o externa",authors:"F\xe1bio Souza",date:"05/02/2023",some_url:"https://github.com/FBSeletronica"},a=void 0,l={unversionedId:"FranzininhoDIY/exemplos-avr-libc/int-externa",id:"FranzininhoDIY/exemplos-avr-libc/int-externa",title:"Interrup\xe7\xe3o externa",description:"Exemplo para uso da interrup\xe7\xe3o externa",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/int-externa.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/int-ext",permalink:"/docs/franzininho-diy/exemplos-avr-libc/int-ext",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/int-externa.md",tags:[],version:"current",frontMatter:{id:"int-externa",title:"Interrup\xe7\xe3o externa",slug:"/franzininho-diy/exemplos-avr-libc/int-ext",description:"Exemplo para uso da interrup\xe7\xe3o externa",authors:"F\xe1bio Souza",date:"05/02/2023",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Instrumento musical com Buzzer",permalink:"/docs/franzininho-diy/exemplos-avr-libc/buzzer"},next:{title:"TODO",permalink:"/docs/franzininho-diy/exemplos-avr-libc/todo"}},s={},c=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Desafio",id:"desafio",level:2}],u={toc:c},p="wrapper";function d(e){let{components:n,...i}=e;return(0,o.kt)(p,(0,r.Z)({},u,i,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"As interrup\xe7\xf5es externas permitem que o microcontrolador interrompa sua execu\xe7\xe3o de tarefas regulares para executar uma tarefa de prioridade mais alta quando ocorre um evento externo. Isso pode ser \xfatil em aplica\xe7\xf5es que requerem resposta r\xe1pida a eventos externos, como pressionar um bot\xe3o ou receber um sinal de outro dispositivo."),(0,o.kt)("p",null,"A configura\xe7\xe3o de uma interrup\xe7\xe3o externa no ATTINY85 envolve a defini\xe7\xe3o do pino que ser\xe1 usado como fonte de interrup\xe7\xe3o, a configura\xe7\xe3o do n\xedvel l\xf3gico que causar\xe1 a interrup\xe7\xe3o e a defini\xe7\xe3o da rotina de interrup\xe7\xe3o que ser\xe1 executada quando a interrup\xe7\xe3o for acionada."),(0,o.kt)("p",null,"Ao programar a Franzininho DIY (ATTINY85) com a biblioteca avrlibc, voc\xea pode facilmente configurar interrup\xe7\xf5es externas usando fun\xe7\xf5es da biblioteca como sei() e cli(). Al\xe9m disso, a avrlibc oferece muitas outras bibliotecas \xfateis para o ATTINY85, tornando o processo de programa\xe7\xe3o mais f\xe1cil e eficiente."),(0,o.kt)("h2",{id:"recursos-necess\xe1rios"},"Recursos Necess\xe1rios"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Placa Franzininho DIY(com Micronucleus)"),(0,o.kt)("li",{parentName:"ul"},"Chave Tactil"),(0,o.kt)("li",{parentName:"ul"},"Jumpers"),(0,o.kt)("li",{parentName:"ul"},"Computador com as ferramentas de software instaladas")),(0,o.kt)("h2",{id:"circuito"},"Circuito"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"circuito",src:t(4089).Z,width:"750",height:"432"})),(0,o.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-c"},'/**\n * \n * @file main.c\n * @author F\xe1bio Souza\n * @brief Exemplo para leitura de bot\xe3o e acionamento de LED\n * @version 0.1\n * @date 2021-02-03\n * \n * @copyright Franzininho \n * This example code is in the Public Domain (or CC0 licensed, at your option.)\n * Unless required by applicable law or agreed to in writing, this\n * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied.\n * \n */\n\n#include <avr/io.h>\n#include <avr/interrupt.h>\n\n#define F_CPU 16500000L\n \n//Macro auxiliares para manipula\xe7\xe3o de bits \n#define setBit(valor,bit) (valor |= (1<<bit))\n#define clearBit(valor,bit) (valor &= ~(1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n#define testBit(valor,bit) (valor & (1<<bit))\n\n// define o pino que o bot\xe3o est\xe1 conectado\n#define BUTTON_PIN PB2\n// define o pino que o LED est\xe1 conectado\n#define LED_PIN PB1\n\n\nISR (INT0_vect) // Interrupt service routine \n{\n toogleBit(PORTB,LED_PIN);\n}\n\nint main()\n{\n setBit(DDRB,LED_PIN); // Configura Pino PB1 como sa\xedda (Pino do LED)\n clearBit(DDRB,BUTTON_PIN); //configura pino PB0 como entrada (pino do Bot\xe3o)\n setBit(PORTB,BUTTON_PIN); //habilita pull up para a entrada PB0 - garante nivel \n // l\xf3gico 1 quando bot\xe3o n\xe3o estiver pressionado\n \n setBit(GIMSK,INT0); // Ativa a interrup\xe7\xe3o externa INT0\n setBit(MCUCR,ISC01); //configura borda de descida\n sei(); // Habilita as interrup\xe7\xf5es globais\n\n while(1)\n {\n\n }\n \n return 0;\n}\n')),(0,o.kt)("h1",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,o.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/projects/355838633796327425?view=diagram"}),(0,o.kt)("h2",{id:"desafio"},"Desafio"),(0,o.kt)("p",null,"Fa\xe7a com com que o LED ligue ao pressionar o botao e desligue quando soltar. Para isso voc\xea preciar\xe1 configurar a interru\xe7\xe3o na borda de subinda."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Autor"),(0,o.kt)("th",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"th",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza")))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Data:"),(0,o.kt)("td",{parentName:"tr",align:null},"05/02/2023")))))}d.isMDXComponent=!0},4089:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/circuito-int-externa-6910e6a2cd69b62f2f1f59385f317e32.png"}}]); \ No newline at end of file diff --git a/assets/js/b677b176.42603278.js b/assets/js/b677b176.42603278.js new file mode 100755 index 000000000..51c951f11 --- /dev/null +++ b/assets/js/b677b176.42603278.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7296],{94024:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>s,toc:()=>l});var i=r(17624),o=r(95788);const t={id:"int-externa",title:"Interrup\xe7\xe3o externa",slug:"/franzininho-diy/exemplos-avr-libc/int-ext",description:"Exemplo para uso da interrup\xe7\xe3o externa",authors:"F\xe1bio Souza",date:"05/02/2023",some_url:"https://github.com/FBSeletronica"},a=void 0,s={id:"FranzininhoDIY/exemplos-avr-libc/int-externa",title:"Interrup\xe7\xe3o externa",description:"Exemplo para uso da interrup\xe7\xe3o externa",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/int-externa.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/int-ext",permalink:"/docs/franzininho-diy/exemplos-avr-libc/int-ext",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/int-externa.md",tags:[],version:"current",frontMatter:{id:"int-externa",title:"Interrup\xe7\xe3o externa",slug:"/franzininho-diy/exemplos-avr-libc/int-ext",description:"Exemplo para uso da interrup\xe7\xe3o externa",authors:"F\xe1bio Souza",date:"05/02/2023",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Instrumento musical com Buzzer",permalink:"/docs/franzininho-diy/exemplos-avr-libc/buzzer"},next:{title:"TODO",permalink:"/docs/franzininho-diy/exemplos-avr-libc/todo"}},c={},l=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Desafio",id:"desafio",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"As interrup\xe7\xf5es externas permitem que o microcontrolador interrompa sua execu\xe7\xe3o de tarefas regulares para executar uma tarefa de prioridade mais alta quando ocorre um evento externo. Isso pode ser \xfatil em aplica\xe7\xf5es que requerem resposta r\xe1pida a eventos externos, como pressionar um bot\xe3o ou receber um sinal de outro dispositivo."}),"\n",(0,i.jsx)(n.p,{children:"A configura\xe7\xe3o de uma interrup\xe7\xe3o externa no ATTINY85 envolve a defini\xe7\xe3o do pino que ser\xe1 usado como fonte de interrup\xe7\xe3o, a configura\xe7\xe3o do n\xedvel l\xf3gico que causar\xe1 a interrup\xe7\xe3o e a defini\xe7\xe3o da rotina de interrup\xe7\xe3o que ser\xe1 executada quando a interrup\xe7\xe3o for acionada."}),"\n",(0,i.jsx)(n.p,{children:"Ao programar a Franzininho DIY (ATTINY85) com a biblioteca avrlibc, voc\xea pode facilmente configurar interrup\xe7\xf5es externas usando fun\xe7\xf5es da biblioteca como sei() e cli(). Al\xe9m disso, a avrlibc oferece muitas outras bibliotecas \xfateis para o ATTINY85, tornando o processo de programa\xe7\xe3o mais f\xe1cil e eficiente."}),"\n",(0,i.jsx)(n.h2,{id:"recursos-necess\xe1rios",children:"Recursos Necess\xe1rios"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Placa Franzininho DIY(com Micronucleus)"}),"\n",(0,i.jsx)(n.li,{children:"Chave Tactil"}),"\n",(0,i.jsx)(n.li,{children:"Jumpers"}),"\n",(0,i.jsx)(n.li,{children:"Computador com as ferramentas de software instaladas"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"circuito",src:r(1293).c+"",width:"750",height:"432"})}),"\n",(0,i.jsx)(n.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-c",children:'/**\n * \n * @file main.c\n * @author F\xe1bio Souza\n * @brief Exemplo para leitura de bot\xe3o e acionamento de LED\n * @version 0.1\n * @date 2021-02-03\n * \n * @copyright Franzininho \n * This example code is in the Public Domain (or CC0 licensed, at your option.)\n * Unless required by applicable law or agreed to in writing, this\n * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied.\n * \n */\n\n#include <avr/io.h>\n#include <avr/interrupt.h>\n\n#define F_CPU 16500000L\n \t\n//Macro auxiliares para manipula\xe7\xe3o de bits \n#define setBit(valor,bit) (valor |= (1<<bit))\n#define clearBit(valor,bit) (valor &= ~(1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n#define testBit(valor,bit) (valor & (1<<bit))\n\n// define o pino que o bot\xe3o est\xe1 conectado\n#define BUTTON_PIN PB2\n// define o pino que o LED est\xe1 conectado\n#define LED_PIN PB1\n\n\nISR (INT0_vect) // Interrupt service routine \n{\n toogleBit(PORTB,LED_PIN);\n}\n\nint main()\n{\n setBit(DDRB,LED_PIN); \t // Configura Pino PB1 como sa\xedda (Pino do LED)\n clearBit(DDRB,BUTTON_PIN); //configura pino PB0 como entrada (pino do Bot\xe3o)\n setBit(PORTB,BUTTON_PIN); //habilita pull up para a entrada PB0 - garante nivel \n // l\xf3gico 1 quando bot\xe3o n\xe3o estiver pressionado\n \n setBit(GIMSK,INT0); // Ativa a interrup\xe7\xe3o externa INT0\n setBit(MCUCR,ISC01); //configura borda de descida\n sei(); // Habilita as interrup\xe7\xf5es globais\n\n while(1)\n {\n\n }\n \n return 0;\n}\n'})}),"\n",(0,i.jsx)(n.h1,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/projects/355838633796327425?view=diagram"}),"\n",(0,i.jsx)(n.h2,{id:"desafio",children:"Desafio"}),"\n",(0,i.jsx)(n.p,{children:"Fa\xe7a com com que o LED ligue ao pressionar o botao e desligue quando soltar. Para isso voc\xea preciar\xe1 configurar a interru\xe7\xe3o na borda de subinda."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Autor"}),(0,i.jsx)(n.th,{children:(0,i.jsx)(n.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]})}),(0,i.jsx)(n.tbody,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Data:"}),(0,i.jsx)(n.td,{children:"05/02/2023"})]})})]})]})}function u(e={}){const{wrapper:n}={...(0,o.MN)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},95788:(e,n,r)=>{r.d(n,{MN:()=>l});var i=r(11504);function o(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function t(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,i)}return r}function a(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?t(Object(r),!0).forEach((function(n){o(e,n,r[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):t(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))}))}return e}function s(e,n){if(null==e)return{};var r,i,o=function(e,n){if(null==e)return{};var r,i,o={},t=Object.keys(e);for(i=0;i<t.length;i++)r=t[i],n.indexOf(r)>=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(i=0;i<t.length;i++)r=t[i],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=i.createContext({}),l=function(e){var n=i.useContext(c),r=n;return e&&(r="function"==typeof e?e(n):a(a({},n),e)),r},d={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},u=i.forwardRef((function(e,n){var r=e.components,o=e.mdxType,t=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(r),m=o,h=p["".concat(c,".").concat(m)]||p[m]||d[m]||t;return r?i.createElement(h,a(a({ref:n},u),{},{components:r})):i.createElement(h,a({ref:n},u))}));u.displayName="MDXCreateElement"},1293:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/circuito-int-externa-6910e6a2cd69b62f2f1f59385f317e32.png"}}]); \ No newline at end of file diff --git a/assets/js/bb7fee19.78d2b3a2.js b/assets/js/bb7fee19.78d2b3a2.js new file mode 100755 index 000000000..732208963 --- /dev/null +++ b/assets/js/bb7fee19.78d2b3a2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1392],{6567:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>t,metadata:()=>s,toc:()=>c});var o=n(17624),i=n(95788);const t={id:"timer0-int",title:"Timer 0 - Interrup\xe7\xe3o",slug:"/franzininho-diy/exemplos-avr-libc/timer0-int",description:"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},a=void 0,s={id:"FranzininhoDIY/exemplos-avr-libc/timer0-int",title:"Timer 0 - Interrup\xe7\xe3o",description:"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0-int.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/timer0-int",permalink:"/docs/franzininho-diy/exemplos-avr-libc/timer0-int",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/timer0-int.md",tags:[],version:"current",frontMatter:{id:"timer0-int",title:"Timer 0 - Interrup\xe7\xe3o",slug:"/franzininho-diy/exemplos-avr-libc/timer0-int",description:"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Timer 0",permalink:"/docs/franzininho-diy/exemplos-avr-libc/timer0"},next:{title:"Contador de pulsos externos",permalink:"/docs/franzininho-diy/exemplos-avr-libc/contadores"}},l={},c=[{value:"Interrup\xe7\xe3o do Timer0",id:"interrup\xe7\xe3o-do-timer0",level:2},{value:"Usando o Timer0 como temporizador com sua interrup\xe7\xe3o",id:"usando-o-timer0-como-temporizador-com-sua-interrup\xe7\xe3o",level:2},{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:3},{value:"C\xf3digo exemplo",id:"c\xf3digo-exemplo",level:3},{value:"Simula\xe7\xe3o do exemplo",id:"simula\xe7\xe3o-do-exemplo",level:3}];function d(e){const r={admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.p,{children:"Nesse exemplo vamos entender como usar a interrup\xe7\xe3o do Timer0 para verificar o seu overflow. Dessa forma n\xe3o precisaremos ficar monitorando o flag de overflow no loop principal da aplica\xe7\xe3o."}),"\n",(0,o.jsx)(r.h2,{id:"interrup\xe7\xe3o-do-timer0",children:"Interrup\xe7\xe3o do Timer0"}),"\n",(0,o.jsx)(r.p,{children:"No exemplo anterior configuramos o Timer0 para operar no modo normal. Para monitora a sua contagem monitoramos o flag TOV0 dentro do loop. Como o Timer \xe9 um perif\xe9rico que funciona independente da CPU podemos habilitar a sua contagem e verificar o overflow atrav\xe9s da sua interrup\xe7\xe3o."}),"\n",(0,o.jsxs)(r.p,{children:["Para habilitar a interrup\xe7\xe3o do Timer0 devermos colocar 1 no bit ",(0,o.jsx)(r.strong,{children:"TOIE0"})," no registrador ",(0,o.jsx)(r.strong,{children:"TIMSK"}),":"]}),"\n",(0,o.jsx)(r.p,{children:(0,o.jsx)(r.img,{alt:"TIMSK",src:n(62336).c+"",width:"836",height:"158"})}),"\n",(0,o.jsx)(r.p,{children:"Ap\xf3s isso, para que a interrup\xe7\xe3o realmente ocorra, devemos habilitar a chave global de interrup\xe7\xe3o atrav\xe9s da fun\xe7\xe3o sei();"}),"\n",(0,o.jsx)(r.h2,{id:"usando-o-timer0-como-temporizador-com-sua-interrup\xe7\xe3o",children:"Usando o Timer0 como temporizador com sua interrup\xe7\xe3o"}),"\n",(0,o.jsx)(r.p,{children:"Vamos fazer a mesma aplica\xe7\xe3o do exemplo anterior, que \xe9 inverter o estado lo LED em intervalos de 1 s. A diferen\xe7a aqui \xe9 que vamos monitorar os overflows do timer atrav\xe9s da rotina de interrup\xe7\xe3o."}),"\n",(0,o.jsx)(r.p,{children:"A configura\xe7\xe3o do timer segue a mesma, j\xe1 que queremos gerar um delay de 1 segundo."}),"\n",(0,o.jsx)(r.p,{children:"Assim, precisaremos contar a quantidade de interrup\xe7\xf5es e quando atingir 63, inverteremos o estado do LED."}),"\n",(0,o.jsx)(r.h3,{id:"recursos-necess\xe1rios",children:"Recursos necess\xe1rios"}),"\n",(0,o.jsxs)(r.ul,{children:["\n",(0,o.jsx)(r.li,{children:"Placa Franzininho DIY(com Micronucleus);"}),"\n",(0,o.jsx)(r.li,{children:"LED;"}),"\n",(0,o.jsx)(r.li,{children:"Resistor de 470 Ohm;"}),"\n",(0,o.jsx)(r.li,{children:"Jumpers;"}),"\n",(0,o.jsx)(r.li,{children:"Computador com as ferramentas de software instaladas."}),"\n"]}),"\n",(0,o.jsx)(r.h3,{id:"c\xf3digo-exemplo",children:"C\xf3digo exemplo"}),"\n",(0,o.jsx)(r.pre,{children:(0,o.jsx)(r.code,{className:"language-c",children:'/**\n * \n * @file main.c\n * @author F\xe1bio Souza\n * @brief Exibe como usar a interrup\xe7\xe3o do timer 0 para temporiza\xe7\xe3o\n * @version 0.1\n * @date 2021-02-13\n * \n * @copyright Franzininho \n * This example code is in the Public Domain (or CC0 licensed, at your option.)\n * Unless required by applicable law or agreed to in writing, this\n * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied.\n * \n */\n\n#include <avr/io.h>\n#include <util/delay.h> \n#include <avr/interrupt.h>\n\n#define F_CPU 16500000L\n\n \t\n#define setBit(valor,bit) (valor |= (1<<bit))\n#define clearBit(valor,bit) (valor &= ~(1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n#define testBit(valor,bit) (valor & (1<<bit))\n\nunsigned char tempo = 0; //contador auxiliar\n\n\nISR (TIMER0_OVF_vect) //vetor de interrup\xe7\xe3o para o timer 0\n{\n tempo++; //incrementa contador auxiliar\n if(tempo >=63) //se passaram-se 63 x 15,89 ms = 1 s\n {\n toogleBit(PORTB,PB1); //inverte LED\n tempo = 0; //reinicia contador\n }\n}\n\n/**\n * @brief Fun\xe7\xe3o main\n * \n * @return int \n */\nint main(void) \n{\n \n setBit(DDRB,PB1); \t// Configura Pino PB1 como sa\xedda (Pino do LED)\n\n //configura\xe7\xe3o do timer0 para overflow a aproximadamente 15,89 ms\n //t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms\n TCCR0A=0x00; //Modo Normal\n TCCR0B=0x00;\n TCCR0B |= (1<<CS00)|(1<<CS02); //prescaler de 1024\n TCNT0=0; //inicia timer com 0\n setBit(TIMSK,TOIE0); //habilita interrup\xe7\xe3o do timer0 \n sei(); //habilita interrup\xe7\xe3o global\n \n /**\n * @brief loop infinito\n * \n */\n while (1)\n {\n //n\xe3o faz nada no loop \n } \n return (0); \n}\n'})}),"\n",(0,o.jsx)(r.admonition,{title:"Informa\xe7\xe3o",type:"note",children:(0,o.jsx)(r.p,{children:"Note que no loop principal n\xe3o fizemos nada. Todo o tratamento ficou na interrup\xe7\xe3o do Timer0."})}),"\n",(0,o.jsx)(r.h3,{id:"simula\xe7\xe3o-do-exemplo",children:"Simula\xe7\xe3o do exemplo"}),"\n",(0,o.jsxs)(r.ul,{children:["\n",(0,o.jsx)(r.li,{children:"**Wokwi: **"}),"\n"]}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/306143631949955648?view=diagram"})]})}function m(e={}){const{wrapper:r}={...(0,i.MN)(),...e.components};return r?(0,o.jsx)(r,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},95788:(e,r,n)=>{n.d(r,{MN:()=>c});var o=n(11504);function i(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function t(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?t(Object(n),!0).forEach((function(r){i(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):t(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function s(e,r){if(null==e)return{};var n,o,i=function(e,r){if(null==e)return{};var n,o,i={},t=Object.keys(e);for(o=0;o<t.length;o++)n=t[o],r.indexOf(n)>=0||(i[n]=e[n]);return i}(e,r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(o=0;o<t.length;o++)n=t[o],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=o.createContext({}),c=function(e){var r=o.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):a(a({},r),e)),n},d={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},m=o.forwardRef((function(e,r){var n=e.components,i=e.mdxType,t=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),p=c(n),u=i,h=p["".concat(l,".").concat(u)]||p[u]||d[u]||t;return n?o.createElement(h,a(a({ref:r},m),{},{components:n})):o.createElement(h,a({ref:r},m))}));m.displayName="MDXCreateElement"},62336:(e,r,n)=>{n.d(r,{c:()=>o});const o=n.p+"assets/images/TIMSK-a059550570192a069297e5ea900b71ef.png"}}]); \ No newline at end of file diff --git a/assets/js/bb7fee19.c389ea7a.js b/assets/js/bb7fee19.c389ea7a.js deleted file mode 100755 index 07334d7e9..000000000 --- a/assets/js/bb7fee19.c389ea7a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1832],{3905:(e,r,o)=>{o.d(r,{Zo:()=>p,kt:()=>f});var n=o(7294);function t(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}function i(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,n)}return o}function a(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?i(Object(o),!0).forEach((function(r){t(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}function l(e,r){if(null==e)return{};var o,n,t=function(e,r){if(null==e)return{};var o,n,t={},i=Object.keys(e);for(n=0;n<i.length;n++)o=i[n],r.indexOf(o)>=0||(t[o]=e[o]);return t}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)o=i[n],r.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var s=n.createContext({}),m=function(e){var r=n.useContext(s),o=r;return e&&(o="function"==typeof e?e(r):a(a({},r),e)),o},p=function(e){var r=m(e.components);return n.createElement(s.Provider,{value:r},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},d=n.forwardRef((function(e,r){var o=e.components,t=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=m(o),d=t,f=u["".concat(s,".").concat(d)]||u[d]||c[d]||i;return o?n.createElement(f,a(a({ref:r},p),{},{components:o})):n.createElement(f,a({ref:r},p))}));function f(e,r){var o=arguments,t=r&&r.mdxType;if("string"==typeof e||t){var i=o.length,a=new Array(i);a[0]=d;var l={};for(var s in r)hasOwnProperty.call(r,s)&&(l[s]=r[s]);l.originalType=e,l[u]="string"==typeof e?e:t,a[1]=l;for(var m=2;m<i;m++)a[m]=o[m];return n.createElement.apply(null,a)}return n.createElement.apply(null,o)}d.displayName="MDXCreateElement"},3386:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>s,contentTitle:()=>a,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>m});var n=o(3117),t=(o(7294),o(3905));const i={id:"timer0-int",title:"Timer 0 - Interrup\xe7\xe3o",slug:"/franzininho-diy/exemplos-avr-libc/timer0-int",description:"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},a=void 0,l={unversionedId:"FranzininhoDIY/exemplos-avr-libc/timer0-int",id:"FranzininhoDIY/exemplos-avr-libc/timer0-int",title:"Timer 0 - Interrup\xe7\xe3o",description:"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0-int.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/timer0-int",permalink:"/docs/franzininho-diy/exemplos-avr-libc/timer0-int",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/timer0-int.md",tags:[],version:"current",frontMatter:{id:"timer0-int",title:"Timer 0 - Interrup\xe7\xe3o",slug:"/franzininho-diy/exemplos-avr-libc/timer0-int",description:"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Timer 0",permalink:"/docs/franzininho-diy/exemplos-avr-libc/timer0"},next:{title:"Contador de pulsos externos",permalink:"/docs/franzininho-diy/exemplos-avr-libc/contadores"}},s={},m=[{value:"Interrup\xe7\xe3o do Timer0",id:"interrup\xe7\xe3o-do-timer0",level:2},{value:"Usando o Timer0 como temporizador com sua interrup\xe7\xe3o",id:"usando-o-timer0-como-temporizador-com-sua-interrup\xe7\xe3o",level:2},{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:3},{value:"C\xf3digo exemplo",id:"c\xf3digo-exemplo",level:3},{value:"Simula\xe7\xe3o do exemplo",id:"simula\xe7\xe3o-do-exemplo",level:3}],p={toc:m},u="wrapper";function c(e){let{components:r,...i}=e;return(0,t.kt)(u,(0,n.Z)({},p,i,{components:r,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Nesse exemplo vamos entender como usar a interrup\xe7\xe3o do Timer0 para verificar o seu overflow. Dessa forma n\xe3o precisaremos ficar monitorando o flag de overflow no loop principal da aplica\xe7\xe3o."),(0,t.kt)("h2",{id:"interrup\xe7\xe3o-do-timer0"},"Interrup\xe7\xe3o do Timer0"),(0,t.kt)("p",null,"No exemplo anterior configuramos o Timer0 para operar no modo normal. Para monitora a sua contagem monitoramos o flag TOV0 dentro do loop. Como o Timer \xe9 um perif\xe9rico que funciona independente da CPU podemos habilitar a sua contagem e verificar o overflow atrav\xe9s da sua interrup\xe7\xe3o. "),(0,t.kt)("p",null,"Para habilitar a interrup\xe7\xe3o do Timer0 devermos colocar 1 no bit ",(0,t.kt)("strong",{parentName:"p"},"TOIE0")," no registrador ",(0,t.kt)("strong",{parentName:"p"},"TIMSK"),":"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"TIMSK",src:o(1827).Z,width:"836",height:"158"})),(0,t.kt)("p",null,"Ap\xf3s isso, para que a interrup\xe7\xe3o realmente ocorra, devemos habilitar a chave global de interrup\xe7\xe3o atrav\xe9s da fun\xe7\xe3o sei();"),(0,t.kt)("h2",{id:"usando-o-timer0-como-temporizador-com-sua-interrup\xe7\xe3o"},"Usando o Timer0 como temporizador com sua interrup\xe7\xe3o"),(0,t.kt)("p",null,"Vamos fazer a mesma aplica\xe7\xe3o do exemplo anterior, que \xe9 inverter o estado lo LED em intervalos de 1 s. A diferen\xe7a aqui \xe9 que vamos monitorar os overflows do timer atrav\xe9s da rotina de interrup\xe7\xe3o. "),(0,t.kt)("p",null,"A configura\xe7\xe3o do timer segue a mesma, j\xe1 que queremos gerar um delay de 1 segundo. "),(0,t.kt)("p",null,"Assim, precisaremos contar a quantidade de interrup\xe7\xf5es e quando atingir 63, inverteremos o estado do LED."),(0,t.kt)("h3",{id:"recursos-necess\xe1rios"},"Recursos necess\xe1rios"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Placa Franzininho DIY(com Micronucleus);"),(0,t.kt)("li",{parentName:"ul"},"LED;"),(0,t.kt)("li",{parentName:"ul"},"Resistor de 470 Ohm;"),(0,t.kt)("li",{parentName:"ul"},"Jumpers;"),(0,t.kt)("li",{parentName:"ul"},"Computador com as ferramentas de software instaladas.")),(0,t.kt)("h3",{id:"c\xf3digo-exemplo"},"C\xf3digo exemplo"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},'/**\n * \n * @file main.c\n * @author F\xe1bio Souza\n * @brief Exibe como usar a interrup\xe7\xe3o do timer 0 para temporiza\xe7\xe3o\n * @version 0.1\n * @date 2021-02-13\n * \n * @copyright Franzininho \n * This example code is in the Public Domain (or CC0 licensed, at your option.)\n * Unless required by applicable law or agreed to in writing, this\n * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied.\n * \n */\n\n#include <avr/io.h>\n#include <util/delay.h> \n#include <avr/interrupt.h>\n\n#define F_CPU 16500000L\n\n \n#define setBit(valor,bit) (valor |= (1<<bit))\n#define clearBit(valor,bit) (valor &= ~(1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n#define testBit(valor,bit) (valor & (1<<bit))\n\nunsigned char tempo = 0; //contador auxiliar\n\n\nISR (TIMER0_OVF_vect) //vetor de interrup\xe7\xe3o para o timer 0\n{\n tempo++; //incrementa contador auxiliar\n if(tempo >=63) //se passaram-se 63 x 15,89 ms = 1 s\n {\n toogleBit(PORTB,PB1); //inverte LED\n tempo = 0; //reinicia contador\n }\n}\n\n/**\n * @brief Fun\xe7\xe3o main\n * \n * @return int \n */\nint main(void) \n{\n \n setBit(DDRB,PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n //configura\xe7\xe3o do timer0 para overflow a aproximadamente 15,89 ms\n //t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms\n TCCR0A=0x00; //Modo Normal\n TCCR0B=0x00;\n TCCR0B |= (1<<CS00)|(1<<CS02); //prescaler de 1024\n TCNT0=0; //inicia timer com 0\n setBit(TIMSK,TOIE0); //habilita interrup\xe7\xe3o do timer0 \n sei(); //habilita interrup\xe7\xe3o global\n \n /**\n * @brief loop infinito\n * \n */\n while (1)\n {\n //n\xe3o faz nada no loop \n } \n return (0); \n}\n')),(0,t.kt)("admonition",{title:"Informa\xe7\xe3o",type:"note"},(0,t.kt)("p",{parentName:"admonition"},"Note que no loop principal n\xe3o fizemos nada. Todo o tratamento ficou na interrup\xe7\xe3o do Timer0.")),(0,t.kt)("h3",{id:"simula\xe7\xe3o-do-exemplo"},"Simula\xe7\xe3o do exemplo"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Wokwi: "))),(0,t.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/306143631949955648?view=diagram"}))}c.isMDXComponent=!0},1827:(e,r,o)=>{o.d(r,{Z:()=>n});const n=o.p+"assets/images/TIMSK-a059550570192a069297e5ea900b71ef.png"}}]); \ No newline at end of file diff --git a/assets/js/bc0ca366.39f9de61.js b/assets/js/bc0ca366.39f9de61.js deleted file mode 100755 index baa3b30f2..000000000 --- a/assets/js/bc0ca366.39f9de61.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4679],{3905:(e,a,r)=>{r.d(a,{Zo:()=>l,kt:()=>f});var n=r(7294);function t(e,a,r){return a in e?Object.defineProperty(e,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[a]=r,e}function o(e,a){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var a=1;a<arguments.length;a++){var r=null!=arguments[a]?arguments[a]:{};a%2?o(Object(r),!0).forEach((function(a){t(e,a,r[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(r,a))}))}return e}function i(e,a){if(null==e)return{};var r,n,t=function(e,a){if(null==e)return{};var r,n,t={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],a.indexOf(r)>=0||(t[r]=e[r]);return t}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],a.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(t[r]=e[r])}return t}var c=n.createContext({}),p=function(e){var a=n.useContext(c),r=a;return e&&(r="function"==typeof e?e(a):s(s({},a),e)),r},l=function(e){var a=p(e.components);return n.createElement(c.Provider,{value:a},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},m=n.forwardRef((function(e,a){var r=e.components,t=e.mdxType,o=e.originalType,c=e.parentName,l=i(e,["components","mdxType","originalType","parentName"]),u=p(r),m=t,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||o;return r?n.createElement(f,s(s({ref:a},l),{},{components:r})):n.createElement(f,s({ref:a},l))}));function f(e,a){var r=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var o=r.length,s=new Array(o);s[0]=m;var i={};for(var c in a)hasOwnProperty.call(a,c)&&(i[c]=a[c]);i.originalType=e,i[u]="string"==typeof e?e:t,s[1]=i;for(var p=2;p<o;p++)s[p]=r[p];return n.createElement.apply(null,s)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},9991:(e,a,r)=>{r.r(a),r.d(a,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=r(3117),t=(r(7294),r(3905));const o={id:"primeiros-passos",title:"Primeiros Passos",slug:"/FranzMakey/primeiros-passos",description:"Primeiros passos com a placa FranzMakey"},s=void 0,i={unversionedId:"FranzMakey/primeiros-passos",id:"FranzMakey/primeiros-passos",title:"Primeiros Passos",description:"Primeiros passos com a placa FranzMakey",source:"@site/docs/FranzMakey/primeiros-passos.md",sourceDirName:"FranzMakey",slug:"/FranzMakey/primeiros-passos",permalink:"/docs/FranzMakey/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzMakey/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"primeiros-passos",title:"Primeiros Passos",slug:"/FranzMakey/primeiros-passos",description:"Primeiros passos com a placa FranzMakey"},sidebar:"docs",previous:{title:"Placa FranzMakey",permalink:"/docs/FranzMakey/franzmakey"},next:{title:"Placa Franzininho Tiny",permalink:"/docs/franzininho-tiny/franzininho-tiny"}},c={},p=[{value:"Teste de funcionamento da placa",id:"teste-de-funcionamento-da-placa",level:2}],l={toc:p},u="wrapper";function d(e){let{components:a,...o}=e;return(0,t.kt)(u,(0,n.Z)({},l,o,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Plaquinha em m\xe3o, agora chegou a hora de conhec\xea-la!"),(0,t.kt)("p",null,"Os pinos do FRANZmakey equivalem as setas do nosso computador, confira na imagem:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzmakey Pinos",src:r(8515).Z,width:"2384",height:"884"})),(0,t.kt)("h2",{id:"teste-de-funcionamento-da-placa"},"Teste de funcionamento da placa"),(0,t.kt)("p",null,"Pegue duas garrinhas de jacar\xe9 e fa\xe7a as seguintes liga\xe7\xf5es:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"GND = Terra"),(0,t.kt)("li",{parentName:"ul"},"Pino 0 = Tecla espa\xe7o")),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzmakey Pinos",src:r(27).Z,width:"1578",height:"1000"})),(0,t.kt)("p",null,"Agora ligue o cabo USB A/B no FranzMakey e a outro conector no USB do computador."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzmakey Pinos",src:r(3425).Z,width:"2520",height:"1245"})),(0,t.kt)("p",null,"*por op\xe7\xe3o voc\xea pode inserir frutas nas pontas das garrinhas para o teste."),(0,t.kt)("p",null,"Agora abra seu navegador e deixe o cursos piscando, conforme a imagem abaixo:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzmakey Pinos",src:r(9920).Z,width:"4257",height:"102"})),(0,t.kt)("p",null,"Fa\xe7a o teste: Segure as duas garrinhas de jacar\xe9, mantenha seu dedo enconstado na parte met\xe1lica da garrinha no GND segurando sempre e a outra garrinha voc\xea deve tocar e tirar, como se voc\xea estivesse dando input do teclado."),(0,t.kt)("p",null,"Se o cursor come\xe7ou a andar na barra do seu navegador, sua placa FranzMakey est\xe1 prontinho!"))}d.isMDXComponent=!0},3425:(e,a,r)=>{r.d(a,{Z:()=>n});const n=r.p+"assets/images/computador-franzmakey-d1756f35220008b39fab12cadf0f7285.png"},9920:(e,a,r)=>{r.d(a,{Z:()=>n});const n=r.p+"assets/images/cursor-67c2d27acc98d2f3404f03e2dd3d829c.gif"},27:(e,a,r)=>{r.d(a,{Z:()=>n});const n=r.p+"assets/images/franzmakey-m\xe3os-4ee757cacfdff3d8fc20e249dfff106a.png"},8515:(e,a,r)=>{r.d(a,{Z:()=>n});const n=r.p+"assets/images/franzmakey-pinos-8f6fd90b39fb1007b76b175a896533a1.png"}}]); \ No newline at end of file diff --git a/assets/js/bc0ca366.528f158f.js b/assets/js/bc0ca366.528f158f.js new file mode 100755 index 000000000..05b9d8eae --- /dev/null +++ b/assets/js/bc0ca366.528f158f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9628],{60108:(e,a,r)=>{r.r(a),r.d(a,{assets:()=>c,contentTitle:()=>t,default:()=>l,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=r(17624),s=r(95788);const o={id:"primeiros-passos",title:"Primeiros Passos",slug:"/FranzMakey/primeiros-passos",description:"Primeiros passos com a placa FranzMakey"},t=void 0,i={id:"FranzMakey/primeiros-passos",title:"Primeiros Passos",description:"Primeiros passos com a placa FranzMakey",source:"@site/docs/FranzMakey/primeiros-passos.md",sourceDirName:"FranzMakey",slug:"/FranzMakey/primeiros-passos",permalink:"/docs/FranzMakey/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzMakey/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"primeiros-passos",title:"Primeiros Passos",slug:"/FranzMakey/primeiros-passos",description:"Primeiros passos com a placa FranzMakey"},sidebar:"docs",previous:{title:"Placa FranzMakey",permalink:"/docs/FranzMakey/franzmakey"},next:{title:"Placa Franzininho Tiny",permalink:"/docs/franzininho-tiny/franzininho-tiny"}},c={},p=[{value:"Teste de funcionamento da placa",id:"teste-de-funcionamento-da-placa",level:2}];function d(e){const a={h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,s.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Plaquinha em m\xe3o, agora chegou a hora de conhec\xea-la!"}),"\n",(0,n.jsx)(a.p,{children:"Os pinos do FRANZmakey equivalem as setas do nosso computador, confira na imagem:"}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Franzmakey Pinos",src:r(32724).c+"",width:"2384",height:"884"})}),"\n",(0,n.jsx)(a.h2,{id:"teste-de-funcionamento-da-placa",children:"Teste de funcionamento da placa"}),"\n",(0,n.jsx)(a.p,{children:"Pegue duas garrinhas de jacar\xe9 e fa\xe7a as seguintes liga\xe7\xf5es:"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"GND = Terra"}),"\n",(0,n.jsx)(a.li,{children:"Pino 0 = Tecla espa\xe7o"}),"\n"]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Franzmakey Pinos",src:r(76200).c+"",width:"1578",height:"1000"})}),"\n",(0,n.jsx)(a.p,{children:"Agora ligue o cabo USB A/B no FranzMakey e a outro conector no USB do computador."}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Franzmakey Pinos",src:r(37823).c+"",width:"2520",height:"1245"})}),"\n",(0,n.jsx)(a.p,{children:"*por op\xe7\xe3o voc\xea pode inserir frutas nas pontas das garrinhas para o teste."}),"\n",(0,n.jsx)(a.p,{children:"Agora abra seu navegador e deixe o cursos piscando, conforme a imagem abaixo:"}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Franzmakey Pinos",src:r(71192).c+"",width:"4257",height:"102"})}),"\n",(0,n.jsx)(a.p,{children:"Fa\xe7a o teste: Segure as duas garrinhas de jacar\xe9, mantenha seu dedo enconstado na parte met\xe1lica da garrinha no GND segurando sempre e a outra garrinha voc\xea deve tocar e tirar, como se voc\xea estivesse dando input do teclado."}),"\n",(0,n.jsx)(a.p,{children:"Se o cursor come\xe7ou a andar na barra do seu navegador, sua placa FranzMakey est\xe1 prontinho!"})]})}function l(e={}){const{wrapper:a}={...(0,s.MN)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},95788:(e,a,r)=>{r.d(a,{MN:()=>p});var n=r(11504);function s(e,a,r){return a in e?Object.defineProperty(e,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[a]=r,e}function o(e,a){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),r.push.apply(r,n)}return r}function t(e){for(var a=1;a<arguments.length;a++){var r=null!=arguments[a]?arguments[a]:{};a%2?o(Object(r),!0).forEach((function(a){s(e,a,r[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(r,a))}))}return e}function i(e,a){if(null==e)return{};var r,n,s=function(e,a){if(null==e)return{};var r,n,s={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],a.indexOf(r)>=0||(s[r]=e[r]);return s}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],a.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}var c=n.createContext({}),p=function(e){var a=n.useContext(c),r=a;return e&&(r="function"==typeof e?e(a):t(t({},a),e)),r},d={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},l=n.forwardRef((function(e,a){var r=e.components,s=e.mdxType,o=e.originalType,c=e.parentName,l=i(e,["components","mdxType","originalType","parentName"]),m=p(r),u=s,f=m["".concat(c,".").concat(u)]||m[u]||d[u]||o;return r?n.createElement(f,t(t({ref:a},l),{},{components:r})):n.createElement(f,t({ref:a},l))}));l.displayName="MDXCreateElement"},37823:(e,a,r)=>{r.d(a,{c:()=>n});const n=r.p+"assets/images/computador-franzmakey-d1756f35220008b39fab12cadf0f7285.png"},71192:(e,a,r)=>{r.d(a,{c:()=>n});const n=r.p+"assets/images/cursor-67c2d27acc98d2f3404f03e2dd3d829c.gif"},76200:(e,a,r)=>{r.d(a,{c:()=>n});const n=r.p+"assets/images/franzmakey-m\xe3os-4ee757cacfdff3d8fc20e249dfff106a.png"},32724:(e,a,r)=>{r.d(a,{c:()=>n});const n=r.p+"assets/images/franzmakey-pinos-8f6fd90b39fb1007b76b175a896533a1.png"}}]); \ No newline at end of file diff --git a/assets/js/bc0f2708.d12dcd0d.js b/assets/js/bc0f2708.d12dcd0d.js deleted file mode 100755 index 212034b79..000000000 --- a/assets/js/bc0f2708.d12dcd0d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7835],{3905:(r,n,e)=>{e.d(n,{Zo:()=>p,kt:()=>f});var o=e(7294);function t(r,n,e){return n in r?Object.defineProperty(r,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):r[n]=e,r}function a(r,n){var e=Object.keys(r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(r);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable}))),e.push.apply(e,o)}return e}function i(r){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?a(Object(e),!0).forEach((function(n){t(r,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(e)):a(Object(e)).forEach((function(n){Object.defineProperty(r,n,Object.getOwnPropertyDescriptor(e,n))}))}return r}function c(r,n){if(null==r)return{};var e,o,t=function(r,n){if(null==r)return{};var e,o,t={},a=Object.keys(r);for(o=0;o<a.length;o++)e=a[o],n.indexOf(e)>=0||(t[e]=r[e]);return t}(r,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(r);for(o=0;o<a.length;o++)e=a[o],n.indexOf(e)>=0||Object.prototype.propertyIsEnumerable.call(r,e)&&(t[e]=r[e])}return t}var u=o.createContext({}),d=function(r){var n=o.useContext(u),e=n;return r&&(e="function"==typeof r?r(n):i(i({},n),r)),e},p=function(r){var n=d(r.components);return o.createElement(u.Provider,{value:n},r.children)},l="mdxType",s={inlineCode:"code",wrapper:function(r){var n=r.children;return o.createElement(o.Fragment,{},n)}},m=o.forwardRef((function(r,n){var e=r.components,t=r.mdxType,a=r.originalType,u=r.parentName,p=c(r,["components","mdxType","originalType","parentName"]),l=d(e),m=t,f=l["".concat(u,".").concat(m)]||l[m]||s[m]||a;return e?o.createElement(f,i(i({ref:n},p),{},{components:e})):o.createElement(f,i({ref:n},p))}));function f(r,n){var e=arguments,t=n&&n.mdxType;if("string"==typeof r||t){var a=e.length,i=new Array(a);i[0]=m;var c={};for(var u in n)hasOwnProperty.call(n,u)&&(c[u]=n[u]);c.originalType=r,c[l]="string"==typeof r?r:t,i[1]=c;for(var d=2;d<a;d++)i[d]=e[d];return o.createElement.apply(null,i)}return o.createElement.apply(null,e)}m.displayName="MDXCreateElement"},3887:(r,n,e)=>{e.r(n),e.d(n,{assets:()=>u,contentTitle:()=>i,default:()=>s,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var o=e(3117),t=(e(7294),e(3905));const a={id:"tutoriais-introducao",title:"Introdu\xe7\xe3o",slug:"/programacao/tutoriais-introducao",description:"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho"},i=void 0,c={unversionedId:"FranzininhoDIY/exemplos-arduino/tutoriais-introducao",id:"FranzininhoDIY/exemplos-arduino/tutoriais-introducao",title:"Introdu\xe7\xe3o",description:"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho",source:"@site/docs/FranzininhoDIY/exemplos-arduino/introducao.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/programacao/tutoriais-introducao",permalink:"/docs/programacao/tutoriais-introducao",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/introducao.md",tags:[],version:"current",frontMatter:{id:"tutoriais-introducao",title:"Introdu\xe7\xe3o",slug:"/programacao/tutoriais-introducao",description:"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho"}},u={},d=[{value:"Configura\xe7\xe3o da Arduino IDE",id:"configura\xe7\xe3o-da-arduino-ide",level:2}],p={toc:d},l="wrapper";function s(r){let{components:n,...e}=r;return(0,t.kt)(l,(0,o.Z)({},p,e,{components:n,mdxType:"MDXLayout"}),(0,t.kt)("h2",{id:"configura\xe7\xe3o-da-arduino-ide"},"Configura\xe7\xe3o da Arduino IDE"),(0,t.kt)("p",null,"Para a correta compila\xe7\xe3o e grava\xe7\xe3o da placa Franzininho DIY na IDE do Arduino, \xe9 necess\xe1rio a correta configura\xe7\xe3o da IDE. "),(0,t.kt)("admonition",{type:"warning"},(0,t.kt)("p",{parentName:"admonition"},"TBD")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bc0f2708.faf18d40.js b/assets/js/bc0f2708.faf18d40.js new file mode 100755 index 000000000..76a270e63 --- /dev/null +++ b/assets/js/bc0f2708.faf18d40.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[148],{37092:(r,n,o)=>{o.r(n),o.d(n,{assets:()=>u,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var e=o(17624),t=o(95788);const a={id:"tutoriais-introducao",title:"Introdu\xe7\xe3o",slug:"/programacao/tutoriais-introducao",description:"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho"},i=void 0,c={id:"FranzininhoDIY/exemplos-arduino/tutoriais-introducao",title:"Introdu\xe7\xe3o",description:"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho",source:"@site/docs/FranzininhoDIY/exemplos-arduino/introducao.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/programacao/tutoriais-introducao",permalink:"/docs/programacao/tutoriais-introducao",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/introducao.md",tags:[],version:"current",frontMatter:{id:"tutoriais-introducao",title:"Introdu\xe7\xe3o",slug:"/programacao/tutoriais-introducao",description:"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho"}},u={},d=[{value:"Configura\xe7\xe3o da Arduino IDE",id:"configura\xe7\xe3o-da-arduino-ide",level:2}];function s(r){const n={admonition:"admonition",h2:"h2",p:"p",...(0,t.MN)(),...r.components};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(n.h2,{id:"configura\xe7\xe3o-da-arduino-ide",children:"Configura\xe7\xe3o da Arduino IDE"}),"\n",(0,e.jsx)(n.p,{children:"Para a correta compila\xe7\xe3o e grava\xe7\xe3o da placa Franzininho DIY na IDE do Arduino, \xe9 necess\xe1rio a correta configura\xe7\xe3o da IDE."}),"\n",(0,e.jsx)(n.admonition,{type:"warning",children:(0,e.jsx)(n.p,{children:"TBD"})})]})}function p(r={}){const{wrapper:n}={...(0,t.MN)(),...r.components};return n?(0,e.jsx)(n,{...r,children:(0,e.jsx)(s,{...r})}):s(r)}},95788:(r,n,o)=>{o.d(n,{MN:()=>d});var e=o(11504);function t(r,n,o){return n in r?Object.defineProperty(r,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[n]=o,r}function a(r,n){var o=Object.keys(r);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(r);n&&(e=e.filter((function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable}))),o.push.apply(o,e)}return o}function i(r){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?a(Object(o),!0).forEach((function(n){t(r,n,o[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):a(Object(o)).forEach((function(n){Object.defineProperty(r,n,Object.getOwnPropertyDescriptor(o,n))}))}return r}function c(r,n){if(null==r)return{};var o,e,t=function(r,n){if(null==r)return{};var o,e,t={},a=Object.keys(r);for(e=0;e<a.length;e++)o=a[e],n.indexOf(o)>=0||(t[o]=r[o]);return t}(r,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(r);for(e=0;e<a.length;e++)o=a[e],n.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(r,o)&&(t[o]=r[o])}return t}var u=e.createContext({}),d=function(r){var n=e.useContext(u),o=n;return r&&(o="function"==typeof r?r(n):i(i({},n),r)),o},s={inlineCode:"code",wrapper:function(r){var n=r.children;return e.createElement(e.Fragment,{},n)}},p=e.forwardRef((function(r,n){var o=r.components,t=r.mdxType,a=r.originalType,u=r.parentName,p=c(r,["components","mdxType","originalType","parentName"]),l=d(o),m=t,f=l["".concat(u,".").concat(m)]||l[m]||s[m]||a;return o?e.createElement(f,i(i({ref:n},p),{},{components:o})):e.createElement(f,i({ref:n},p))}));p.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/bc475886.044d5a76.js b/assets/js/bc475886.044d5a76.js deleted file mode 100755 index c122f0562..000000000 --- a/assets/js/bc475886.044d5a76.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5534],{3905:(e,a,o)=>{o.d(a,{Zo:()=>m,kt:()=>g});var i=o(7294);function n(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function r(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,i)}return o}function t(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?r(Object(o),!0).forEach((function(a){n(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function s(e,a){if(null==e)return{};var o,i,n=function(e,a){if(null==e)return{};var o,i,n={},r=Object.keys(e);for(i=0;i<r.length;i++)o=r[i],a.indexOf(o)>=0||(n[o]=e[o]);return n}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i<r.length;i++)o=r[i],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var l=i.createContext({}),p=function(e){var a=i.useContext(l),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},m=function(e){var a=p(e.components);return i.createElement(l.Provider,{value:a},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return i.createElement(i.Fragment,{},a)}},u=i.forwardRef((function(e,a){var o=e.components,n=e.mdxType,r=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=p(o),u=n,g=c["".concat(l,".").concat(u)]||c[u]||d[u]||r;return o?i.createElement(g,t(t({ref:a},m),{},{components:o})):i.createElement(g,t({ref:a},m))}));function g(e,a){var o=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var r=o.length,t=new Array(r);t[0]=u;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[c]="string"==typeof e?e:n,t[1]=s;for(var p=2;p<r;p++)t[p]=o[p];return i.createElement.apply(null,t)}return i.createElement.apply(null,o)}u.displayName="MDXCreateElement"},9908:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>l,contentTitle:()=>t,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var i=o(3117),n=(o(7294),o(3905));const r={id:"primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-diy/exemplos-avr-libc/primeiros-passos",description:"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc"},t=void 0,s={unversionedId:"FranzininhoDIY/exemplos-avr-libc/primeiros-passos",id:"FranzininhoDIY/exemplos-avr-libc/primeiros-passos",title:"Primeiros Passos",description:"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/primeiros-passos.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/primeiros-passos",permalink:"/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-diy/exemplos-avr-libc/primeiros-passos",description:"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc"},sidebar:"docs",previous:{title:"Girassol Automatizado",permalink:"/docs/franzininho-diy/girassol-automatizado"},next:{title:"Hello, World!",permalink:"/docs/franzininho-diy/exemplos-avr-libc/hello-world"}},l={},p=[{value:"Ferramentas necess\xe1rias",id:"ferramentas-necess\xe1rias",level:2},{value:"Instala\xe7\xe3o das ferramentas necess\xe1rias (Linux):",id:"instala\xe7\xe3o-das-ferramentas-necess\xe1rias-linux",level:3},{value:"Compila\xe7\xe3o no Linux",id:"compila\xe7\xe3o-no-linux",level:3},{value:"Arduino IDE",id:"arduino-ide",level:3},{value:"wokwi_logo Wokwi",id:"wokwi_logo-wokwi",level:3},{value:"PICSimLab",id:"picsimlab",level:3},{value:"Reposit\xf3rios e materiais de apoio",id:"reposit\xf3rios-e-materiais-de-apoio",level:2},{value:"Saiba mais",id:"saiba-mais",level:2}],m={toc:p},c="wrapper";function d(e){let{components:a,...r}=e;return(0,n.kt)(c,(0,i.Z)({},m,r,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Esse material tem o objetivo de mostrar os primeiros passos para programa\xe7\xe3o de microcontroladores usando linguagem C e com abordagem mais pr\xf3xima ao hardware. Ser\xe3o apresentados uma s\xe9rie de exemplos (com explica\xe7\xe3o detalhadas sobre a Arquitetura do ATtiny85) para programa\xe7\xe3o da Franzininho DIY usando a ",(0,n.kt)("a",{parentName:"p",href:"https://nongnu.org/avr-libc/"},"AVR Libc"),"."),(0,n.kt)("p",null,"\xc9 importante que voc\xea tenha o ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/imagens-franzininho/blob/main/franzininho_diy/Pinagem-completa-Franzininho-DIY-V2RV2.png"},"pinout da Franzininho DIY")," para fazer as liga\xe7\xf5es conforme orienta\xe7\xf5es nos exemplos."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"pinout Franzininho DIY",src:o(8706).Z,width:"1630",height:"1122"})),(0,n.kt)("h2",{id:"ferramentas-necess\xe1rias"},"Ferramentas necess\xe1rias"),(0,n.kt)("p",null,"Voc\xea n\xe3o precisar\xe1 de um compilador espec\xedfico ou IDE para compilar os exemplos apresentados. Por\xe9m \xe9 importante que tenha as seguintes ferramentas instaladas na sua m\xe1quina:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"GCC AVR"),(0,n.kt)("li",{parentName:"ul"},"avr libc"),(0,n.kt)("li",{parentName:"ul"},"binutils-avr"),(0,n.kt)("li",{parentName:"ul"},"make")),(0,n.kt)("h3",{id:"instala\xe7\xe3o-das-ferramentas-necess\xe1rias-linux"},"Instala\xe7\xe3o das ferramentas necess\xe1rias (Linux):"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"sudo apt install gcc-avr\nsudo apt install avr-libc\nsudo apt install binutils-avr\nsudo apt install make\n")),(0,n.kt)("p",null,"A placa Franzininho deve estar com o bootloader Micronucleus( bootloader oficial para a Franzininho DIY)."),(0,n.kt)("h3",{id:"compila\xe7\xe3o-no-linux"},"Compila\xe7\xe3o no Linux"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"cd ../exemplos-avr-libc/exemplos/01-hello\nmake all\n")),(0,n.kt)("h3",{id:"arduino-ide"},"Arduino IDE"),(0,n.kt)("p",null,"Voc\xea tamb\xe9m poder\xe1 reproduzir todos os exemplos apresentados diretamente na IDE Arduino (sem usar o framework Arduino). Isso facilitar\xe1 no processo de instala\xe7\xe3o e configura\xe7\xe3o das ferramentas e tamb\xe9m no upload."),(0,n.kt)("h3",{id:"wokwi_logo-wokwi"},(0,n.kt)("img",{alt:"wokwi_logo",src:o(2558).Z,width:"58",height:"48"})," Wokwi"),(0,n.kt)("p",null,"Voc\xea tamb\xe9m pode usar o ",(0,n.kt)("a",{parentName:"p",href:"https://wokwi.com/arduino/new?template=franzininho"},"Simulador Online do Wokwi")," para reproduzir os projetos apresentados nessa s\xe9rie."),(0,n.kt)("h3",{id:"picsimlab"},"PICSimLab"),(0,n.kt)("p",null,"Caso n\xe3o tenha acesso a Internet ou uma boa conex\xe3o, uma outra op\xe7\xe3o dispon\xedvel para reproduzir os exemplos na sua m\xe1quina \xe9 o simulador ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/lcgamboa/picsimlab/releases"},"PICSimLab")," que possu\xed suporte ao Franzininho DIY."),(0,n.kt)("h2",{id:"reposit\xf3rios-e-materiais-de-apoio"},"Reposit\xf3rios e materiais de apoio"),(0,n.kt)("p",null,"Todos os exemplos ser\xe3o hospedados no ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/exemplos-avr-libc/"},"github do projeto Franzininho"),". \xc9 importante que voc\xea use o datasheet do Attiny85 como material de apoio, assim como a documenta\xe7\xe3o da ",(0,n.kt)("a",{parentName:"p",href:"https://nongnu.org/avr-libc/"},"AVR Libc")),(0,n.kt)("p",null,"Aproveite essa jornada."),(0,n.kt)("h2",{id:"saiba-mais"},"Saiba mais"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.embarcados.com.br/franzininho/"},"Franzininho \u2013 Um Arduino para todos")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Autor"),(0,n.kt)("th",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"th",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza")))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Data:"),(0,n.kt)("td",{parentName:"tr",align:null},"24/04/2021")))))}d.isMDXComponent=!0},8706:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/Pinagem-Franzininho-DIY-V2RV2-42a18903012c4dc223f9d4c774730625.png"},2558:(e,a,o)=>{o.d(a,{Z:()=>i});const i="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAAAwCAYAAABAIGlOAAAEsmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjU4IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iNDgiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSI1OCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iNDgiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjEtMDct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"}}]); \ No newline at end of file diff --git a/assets/js/bc475886.a9f952b3.js b/assets/js/bc475886.a9f952b3.js new file mode 100755 index 000000000..f46658933 --- /dev/null +++ b/assets/js/bc475886.a9f952b3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6974],{50308:(e,i,a)=>{a.r(i),a.d(i,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var n=a(17624),o=a(95788);const r={id:"primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-diy/exemplos-avr-libc/primeiros-passos",description:"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc"},s=void 0,t={id:"FranzininhoDIY/exemplos-avr-libc/primeiros-passos",title:"Primeiros Passos",description:"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/primeiros-passos.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/primeiros-passos",permalink:"/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-diy/exemplos-avr-libc/primeiros-passos",description:"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc"},sidebar:"docs",previous:{title:"Girassol Automatizado",permalink:"/docs/franzininho-diy/girassol-automatizado"},next:{title:"Hello, World!",permalink:"/docs/franzininho-diy/exemplos-avr-libc/hello-world"}},l={},c=[{value:"Ferramentas necess\xe1rias",id:"ferramentas-necess\xe1rias",level:2},{value:"Instala\xe7\xe3o das ferramentas necess\xe1rias (Linux):",id:"instala\xe7\xe3o-das-ferramentas-necess\xe1rias-linux",level:3},{value:"Compila\xe7\xe3o no Linux",id:"compila\xe7\xe3o-no-linux",level:3},{value:"Arduino IDE",id:"arduino-ide",level:3},{value:"wokwi_logo Wokwi",id:"wokwi_logo-wokwi",level:3},{value:"PICSimLab",id:"picsimlab",level:3},{value:"Reposit\xf3rios e materiais de apoio",id:"reposit\xf3rios-e-materiais-de-apoio",level:2},{value:"Saiba mais",id:"saiba-mais",level:2}];function d(e){const i={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(i.p,{children:["Esse material tem o objetivo de mostrar os primeiros passos para programa\xe7\xe3o de microcontroladores usando linguagem C e com abordagem mais pr\xf3xima ao hardware. Ser\xe3o apresentados uma s\xe9rie de exemplos (com explica\xe7\xe3o detalhadas sobre a Arquitetura do ATtiny85) para programa\xe7\xe3o da Franzininho DIY usando a ",(0,n.jsx)(i.a,{href:"https://nongnu.org/avr-libc/",children:"AVR Libc"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["\xc9 importante que voc\xea tenha o ",(0,n.jsx)(i.a,{href:"https://github.com/Franzininho/imagens-franzininho/blob/main/franzininho_diy/Pinagem-completa-Franzininho-DIY-V2RV2.png",children:"pinout da Franzininho DIY"})," para fazer as liga\xe7\xf5es conforme orienta\xe7\xf5es nos exemplos."]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"pinout Franzininho DIY",src:a(12296).c+"",width:"1630",height:"1122"})}),"\n",(0,n.jsx)(i.h2,{id:"ferramentas-necess\xe1rias",children:"Ferramentas necess\xe1rias"}),"\n",(0,n.jsx)(i.p,{children:"Voc\xea n\xe3o precisar\xe1 de um compilador espec\xedfico ou IDE para compilar os exemplos apresentados. Por\xe9m \xe9 importante que tenha as seguintes ferramentas instaladas na sua m\xe1quina:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"GCC AVR"}),"\n",(0,n.jsx)(i.li,{children:"avr libc"}),"\n",(0,n.jsx)(i.li,{children:"binutils-avr"}),"\n",(0,n.jsx)(i.li,{children:"make"}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"instala\xe7\xe3o-das-ferramentas-necess\xe1rias-linux",children:"Instala\xe7\xe3o das ferramentas necess\xe1rias (Linux):"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-shell",children:"sudo apt install gcc-avr\nsudo apt install avr-libc\nsudo apt install binutils-avr\nsudo apt install make\n"})}),"\n",(0,n.jsx)(i.p,{children:"A placa Franzininho deve estar com o bootloader Micronucleus( bootloader oficial para a Franzininho DIY)."}),"\n",(0,n.jsx)(i.h3,{id:"compila\xe7\xe3o-no-linux",children:"Compila\xe7\xe3o no Linux"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-shell",children:"cd ../exemplos-avr-libc/exemplos/01-hello\nmake all\n"})}),"\n",(0,n.jsx)(i.h3,{id:"arduino-ide",children:"Arduino IDE"}),"\n",(0,n.jsx)(i.p,{children:"Voc\xea tamb\xe9m poder\xe1 reproduzir todos os exemplos apresentados diretamente na IDE Arduino (sem usar o framework Arduino). Isso facilitar\xe1 no processo de instala\xe7\xe3o e configura\xe7\xe3o das ferramentas e tamb\xe9m no upload."}),"\n",(0,n.jsxs)(i.h3,{id:"wokwi_logo-wokwi",children:[(0,n.jsx)(i.img,{alt:"wokwi_logo",src:a(92356).c+"",width:"58",height:"48"})," Wokwi"]}),"\n",(0,n.jsxs)(i.p,{children:["Voc\xea tamb\xe9m pode usar o ",(0,n.jsx)(i.a,{href:"https://wokwi.com/arduino/new?template=franzininho",children:"Simulador Online do Wokwi"})," para reproduzir os projetos apresentados nessa s\xe9rie."]}),"\n",(0,n.jsx)(i.h3,{id:"picsimlab",children:"PICSimLab"}),"\n",(0,n.jsxs)(i.p,{children:["Caso n\xe3o tenha acesso a Internet ou uma boa conex\xe3o, uma outra op\xe7\xe3o dispon\xedvel para reproduzir os exemplos na sua m\xe1quina \xe9 o simulador ",(0,n.jsx)(i.a,{href:"https://github.com/lcgamboa/picsimlab/releases",children:"PICSimLab"})," que possu\xed suporte ao Franzininho DIY."]}),"\n",(0,n.jsx)(i.h2,{id:"reposit\xf3rios-e-materiais-de-apoio",children:"Reposit\xf3rios e materiais de apoio"}),"\n",(0,n.jsxs)(i.p,{children:["Todos os exemplos ser\xe3o hospedados no ",(0,n.jsx)(i.a,{href:"https://github.com/Franzininho/exemplos-avr-libc/",children:"github do projeto Franzininho"}),". \xc9 importante que voc\xea use o datasheet do Attiny85 como material de apoio, assim como a documenta\xe7\xe3o da ",(0,n.jsx)(i.a,{href:"https://nongnu.org/avr-libc/",children:"AVR Libc"})]}),"\n",(0,n.jsx)(i.p,{children:"Aproveite essa jornada."}),"\n",(0,n.jsx)(i.h2,{id:"saiba-mais",children:"Saiba mais"}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.a,{href:"https://www.embarcados.com.br/franzininho/",children:"Franzininho \u2013 Um Arduino para todos"})}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Autor"}),(0,n.jsx)(i.th,{children:(0,n.jsx)(i.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]})}),(0,n.jsx)(i.tbody,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"Data:"}),(0,n.jsx)(i.td,{children:"24/04/2021"})]})})]})]})}function p(e={}){const{wrapper:i}={...(0,o.MN)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},95788:(e,i,a)=>{a.d(i,{MN:()=>c});var n=a(11504);function o(e,i,a){return i in e?Object.defineProperty(e,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[i]=a,e}function r(e,i){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);i&&(n=n.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var i=1;i<arguments.length;i++){var a=null!=arguments[i]?arguments[i]:{};i%2?r(Object(a),!0).forEach((function(i){o(e,i,a[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))}))}return e}function t(e,i){if(null==e)return{};var a,n,o=function(e,i){if(null==e)return{};var a,n,o={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],i.indexOf(a)>=0||(o[a]=e[a]);return o}(e,i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],i.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),c=function(e){var i=n.useContext(l),a=i;return e&&(a="function"==typeof e?e(i):s(s({},i),e)),a},d={inlineCode:"code",wrapper:function(e){var i=e.children;return n.createElement(n.Fragment,{},i)}},p=n.forwardRef((function(e,i){var a=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),m=c(a),h=o,u=m["".concat(l,".").concat(h)]||m[h]||d[h]||r;return a?n.createElement(u,s(s({ref:i},p),{},{components:a})):n.createElement(u,s({ref:i},p))}));p.displayName="MDXCreateElement"},12296:(e,i,a)=>{a.d(i,{c:()=>n});const n=a.p+"assets/images/Pinagem-Franzininho-DIY-V2RV2-42a18903012c4dc223f9d4c774730625.png"},92356:(e,i,a)=>{a.d(i,{c:()=>n});const n="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAAAwCAYAAABAIGlOAAAEsmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjU4IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iNDgiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSI1OCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iNDgiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjEtMDctMjNUMTE6Mjg6MjEtMDM6MDAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMDctMjNUMTE6Mjg6MjEtMDM6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJwcm9kdWNlZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWZmaW5pdHkgRGVzaWduZXIgMS45LjIiCiAgICAgIHN0RXZ0OndoZW49IjIwMjEtMDctMjNUMTE6Mjg6MjEtMDM6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PvF85ZIAAAGCaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRzytEURTHPwaN/BpFkSwmYTWjMTKxsRj5VVjMjDLYzLz5pebH672ZJFtlqyix8WvBX8BWWStFpGSnrIkN03PezNRI5tzOPZ/7vfec7j0XLIGkktJrXJBKZzXfpNe+EFy0W1+w0k4znQyFFF2d9U8EqGif91SZ8dZp1qp87l9riER1BarqhEcVVcsKTwnPrGZVk3eE25REKCJ8JuzQ5ILCd6YeLvKryfEif5usBXxjYGkRtsd/cfgXKwktJSwvpyeVzCml+5gvaYym5/0Su8W70PExiRc704wzhocBRmT24MRNv6yokO8q5M+RkVxFZpU1NFaIkyCLQ9ScVI9KjIkelZFkzez/377qsUF3sXqjF2qfDeO9F6zbkN8yjK8jw8gfQ/UTXKbL+ZlDGP4Qfaus9RyAbQPOr8paeBcuNqHjUQ1poYJULW6JxeDtFJqC0HoD9UvFnpX2OXmAwLp81TXs7UOfnLct/wCgWWgAwxy6uwAAAAlwSFlzAAALEwAACxMBAJqcGAAABURJREFUaIHVmmlsVUUUx3+0ttS2loriEqkL7gsxtqIkVgyIRD6AxkQT4wJWjRLBxLgkCmqMGyYGQS2gYkATJSaiH9xXrBKjpDYGi9XiUhdwSVCKUiu1fX4476XX887cO3PfJcg/OQncM///nNN5d+bMzIU9GyOAi4A3gC3AdmAdcDtQtxvjyhS1wBog57AeYPLuCm4fYDwwCRhTotZTuJOM2ikl9hOEU4HngH9UEO3AuSn0zsQvyRzwvCVQA1wFLAVeApYDs4GRKYIpoIXiBLXdFKj5iKGxCUlqreE7MUqeC/zuCKQH+SuG4myHnmUhI/u+4r4H1Od91UYe8wvE+zwC6QOaw/Jkg6HzI7DeeL4hQFcnOkP59ST1IsDEmOS0bQT28gxmrMF/GqhEloUVhn+sp/bjitcG7J33NQBblf8HK/scsBKYCbxj+KZ7BjNV8YaAfSP+JkN7qqf2dIP7EzJyvxq+FSALbfTh8ojg/hRPJPd6BmMlckHEf5ThP81TuxLYZvAt20z+/e1VjllK9DPlf8gzmFrgD8UdBFqB84BnlK+f/454EnzW0Tbg8AKhSzl7gMa8rxr4RflvCwhmmUcwBVsdoAvwaIzW38iSVR4l3O1o3A58aTw/KSCY/YCvPROdEpjoaofON8DJFuEQ3OuntvWBwQAcD3Qn6H6HzMQh+NTQ2QwcFEeahrw/SYm2BAZTQDWwBJl5Ld2OQL1xDp3LfciTkGGPS/SwwIA0JiKjp3W/CNS52dDoAMp8BWqBxbj/8g2BAVloRGZYre1bLAB8ZPBnpQlmpiGUA85KI2bAKjmv9eRaFVcvsiFJhfsNwQfTiilY79grntzrDe7SUoIZTfFPrLsUQQVdXvbjNyptFCfaGMvwwLOG6LGliuZxsaF9fgLnQIrnj0+yCGaKEUzoJtmFKuA3pf1kAucaI545WQRTRvGS05aFcB4PK+2fiV8i3lTt+4BRWQUzX4kPIqVdFphN8Qi5NvejgQHVdlVGcQBSIuqq6dISNSuR7Z5Vja10cFqMtmeUGEcRXlYdvFaC1nHIhsFVfe3A/jnq2baL8Po4EReqToaAQ1PoXIm8V64kXcXDkUabW1P0n4g6YKfq6M4A/gjkp5qUYMHaFf8uo824dKkk4y3V0feoja0DFch7ZyU0CCwCnjB8hRP2MuQwIOpLs130hlV6JZ3F1gCvGrwcsttoyrebZvhb877Jhu/GLBJywapP18S0HwN8bHAKM2tFpO1Iis+XtiH72FUGP4tdVCw2qg4HkLJM4wjcpwoLsWdL69h1MfCnerYus2xi8IARzB2qzXiKj1ALdkOM9hwHR9u8bFKJR7PR8QDDC3cz9vnTAHBJgvZlBk/bEHBwZtnEYJQjgF7kWvAvw9eH3wXSXId21DaxC4oEC3UewWi72lP7Q0+967JJJR7WMhBnr+M3AkcHaPYjZ1u7DNbCHWe9+B94LVDcHciNwGPIWa3WXpBBPk5cYXQYZ2sDtPWp+z0R3wnI1yZR/9uhwXufgwK3GM+2I/ccFkI+xqhU/98a+ffnwLvK3xWgHYQqikesE3n/6inenOeAbwP0lyhuO1IVgVwlam2vE/k0aDA662Z4ojnG4ffFDIO/BdmD6l3TToa/V8gc9din963ABGQHon0LA/SrkDXS591fVHI2CdAXwkkW+iHTObivQgq2jLB5JRXmJQQRtRdS9jEB+5ilA6mcUicZUk6VI9uupoR2XcgHTLmUMZUDpyNVWA1yGd2ZUis1DgA+wB7FIeS6vcLJ3sNQiVQmnchJ+1fIJ2vmdfr/Bf8CoPmNm23+OvQAAAAASUVORK5CYII="}}]); \ No newline at end of file diff --git a/assets/js/bdb4d3e5.24058297.js b/assets/js/bdb4d3e5.24058297.js new file mode 100755 index 000000000..f4fbd4970 --- /dev/null +++ b/assets/js/bdb4d3e5.24058297.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9484],{41828:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>t,toc:()=>c});var a=n(17624),r=n(95788);const i={id:"contadores",title:"Contador de pulsos externos",slug:"/franzininho-diy/exemplos-avr-libc/contadores",description:"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/05/2021",some_url:"https://github.com/EduardoDuenas"},s=void 0,t={id:"FranzininhoDIY/exemplos-avr-libc/contadores",title:"Contador de pulsos externos",description:"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/contadores.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/contadores",permalink:"/docs/franzininho-diy/exemplos-avr-libc/contadores",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/contadores.md",tags:[],version:"current",frontMatter:{id:"contadores",title:"Contador de pulsos externos",slug:"/franzininho-diy/exemplos-avr-libc/contadores",description:"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/05/2021",some_url:"https://github.com/EduardoDuenas"},sidebar:"docs",previous:{title:"Timer 0 - Interrup\xe7\xe3o",permalink:"/docs/franzininho-diy/exemplos-avr-libc/timer0-int"},next:{title:"Instrumento musical com Buzzer",permalink:"/docs/franzininho-diy/exemplos-avr-libc/buzzer"}},d={},c=[{value:"<strong>Recursos necess\xe1rios</strong>",id:"recursos-necess\xe1rios",level:2},{value:"<strong>Contadores</strong>",id:"contadores",level:2},{value:"<strong>Contador_v1</strong>",id:"contador_v1",level:3},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo",level:4},{value:"<strong>Montagem</strong>",id:"montagem",level:4},{value:"<strong>Compila\xe7\xe3o e upload</strong>",id:"compila\xe7\xe3o-e-upload",level:4},{value:"<strong>Resultado</strong>",id:"resultado",level:4},{value:"<strong>An\xe1lise</strong>",id:"an\xe1lise",level:4},{value:"<strong>Contador_v2</strong>",id:"contador_v2",level:3},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo-1",level:4},{value:"<strong>Montagem</strong>",id:"montagem-1",level:4},{value:"<strong>Compila\xe7\xe3o e upload</strong>",id:"compila\xe7\xe3o-e-upload-1",level:4},{value:"<strong>Resultado</strong>",id:"resultado-1",level:4},{value:"<strong>An\xe1lise</strong>",id:"an\xe1lise-1",level:4},{value:"<strong>Contador_v3</strong>",id:"contador_v3",level:3},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo-2",level:4},{value:"<strong>Montagem</strong>",id:"montagem-2",level:4},{value:"<strong>Compila\xe7\xe3o e upload</strong>",id:"compila\xe7\xe3o-e-upload-2",level:4},{value:"<strong>Resultado</strong>",id:"resultado-2",level:4},{value:"<strong>An\xe1lise</strong>",id:"an\xe1lise-2",level:4},{value:"<strong>Conclus\xe3o</strong>",id:"conclus\xe3o",level:2},{value:"Gloss\xe1rio",id:"gloss\xe1rio",level:2}];function l(e){const o={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.p,{children:"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY. Vamos explorar as formas mais simples e as mais complexas de contar eventos e as vantagens de cada uma. Nesses exemplos vamos aprender a usar o timer e a fazer debounce, necess\xe1rio para lermos apenas eventos v\xe1lidos e n\xe3o ler o mesmo evento mais de uma vez."}),"\n",(0,a.jsx)(o.p,{children:"Boa pr\xe1tica!"}),"\n",(0,a.jsx)(o.h2,{id:"recursos-necess\xe1rios",children:(0,a.jsx)(o.strong,{children:"Recursos necess\xe1rios"})}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"Franzininho DIY (com Micronucleos)"}),"\n",(0,a.jsx)(o.li,{children:"4 LEDs de 3mm"}),"\n",(0,a.jsx)(o.li,{children:"4 resistores de 200\u03a9"}),"\n",(0,a.jsx)(o.li,{children:"1 resistor de 10k\u03a9"}),"\n",(0,a.jsx)(o.li,{children:"1 chave tactil"}),"\n",(0,a.jsx)(o.li,{children:"7 jumpers macho-f\xeamea"}),"\n",(0,a.jsx)(o.li,{children:"7 jumpers macho-macho"}),"\n"]}),"\n",(0,a.jsx)(o.h2,{id:"contadores",children:(0,a.jsx)(o.strong,{children:"Contadores"})}),"\n",(0,a.jsx)(o.p,{children:"Temos tr\xeas exemplos de contadores da vers\xe3o 1 a 3, e aumentando a complexidade do c\xf3digo e dos recursos utilizados."}),"\n",(0,a.jsx)(o.h3,{id:"contador_v1",children:(0,a.jsx)(o.strong,{children:"Contador_v1"})}),"\n",(0,a.jsx)(o.p,{children:"Nesse exemplo vamos utilizar loops para fazer a verifica\xe7\xe3o de eventos. Essa forma de se fazer a contagem, apesar de ser mais simples de se entender e criar, \xe9 pouco eficiente, tanto a n\xedvel de processamento, quanto ao de energia."}),"\n",(0,a.jsxs)(o.p,{children:["O programa \xe9 um c\xf3digo em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca ",(0,a.jsx)(o.code,{children:"avr/io.h"}),". Para melhor entendimento recomendo ler os coment\xe1rios do c\xf3digo e o datasheet do ATtiny85."]}),"\n",(0,a.jsx)(o.h4,{id:"c\xf3digo",children:(0,a.jsx)(o.strong,{children:"C\xf3digo"})}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-c",children:"/**\n * @file main.c\n * @author Eduardo Due\xf1as\n * @brief Exemplo de contador de eventos\n * @version 1.0\n * @date 06/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 05/05/2021\n */\n#include <avr/io.h>\n\n#define F_CPU 16500000L // Frequ\xeancia de CLK\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\n// Debounce da chave t\xe1ctil para desconsiderarmos ru\xeddo e bouncing do bot\xe3o\nchar debounce(int pino) {\n unsigned int i;\n for (i = 0; i < 20000; i++) { // Testa o pino v\xe1rias vezes para evitar leituras erradas\n if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1\n return 0; // Se sim, retorna falso\n }\n }\n return 1; // Retorna verdadeiro\n}\n\nint main(void) {\n // Configura\xe7\xe3o de PORTB\n clearBit(DDRB, PB0); // Configura PB0 como entrada\n setBit(DDRB, PB1); // Configura PB1 como saida\n setBit(DDRB, PB2); // Configura PB2 como saida\n setBit(DDRB, PB3); // Configura PB3 como saida\n setBit(DDRB, PB4); // Configura PB4 como saida\n\n PORTB &= 0xE1; // Manda 0 para PB[4:1]\n\n unsigned char count = 0;\n\n for (;;) { // loop infinito\n if (testBit(PINB, PB0)) { // Testa se PB0 \xe9 1\n if (debounce(PB0)) { // Verifica se realmente foi um aperto de bot\xe3o\n count++; // Se sim, incrementa o contador\n while (testBit(PINB, PB0)) {} // Espera o bot\xe3o parar de ser pressionado\n }\n }\n count = count % 0x10; // Limpa o overflow do contador\n PORTB = ((PORTB & 0xE1) | (count << 1)); // Manda o contador para PB[4:1]\n }\n}\n"})}),"\n",(0,a.jsx)(o.h4,{id:"montagem",children:(0,a.jsx)(o.strong,{children:"Montagem"})}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"circuito contador",src:n(44663).c+"",width:"2589",height:"1152"})}),"\n",(0,a.jsx)(o.p,{children:"Como mostrado na imagem, os LEDs s\xe3o ligados nas sa\xeddas PortB[4:1] e o bot\xe3o no PortB[0]."}),"\n",(0,a.jsx)(o.h4,{id:"compila\xe7\xe3o-e-upload",children:(0,a.jsx)(o.strong,{children:"Compila\xe7\xe3o e upload"})}),"\n",(0,a.jsxs)(o.p,{children:["Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando ",(0,a.jsx)(o.code,{children:"make"}),":"]}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{children:"exemplos-avr-libc/exemplos/contador$ make\n"})}),"\n",(0,a.jsx)(o.p,{children:"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{children:"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n"})}),"\n",(0,a.jsx)(o.p,{children:"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."}),"\n",(0,a.jsx)(o.h4,{id:"resultado",children:(0,a.jsx)(o.strong,{children:"Resultado"})}),"\n",(0,a.jsx)(o.p,{children:"Os LEDs devem mostrar a contagem de apertos do bot\xe3o de forma bin\xe1ria resetando em 0x10 ou quando resetada a placa."}),"\n",(0,a.jsx)(o.h4,{id:"an\xe1lise",children:(0,a.jsx)(o.strong,{children:"An\xe1lise"})}),"\n",(0,a.jsxs)(o.p,{children:["Esse c\xf3digo \xe9 de simples compreens\xe3o usando apenas um ",(0,a.jsx)(o.code,{children:"for"})," para checar continuamente se o bot\xe3o foi apertado, chamando uma fun\xe7\xe3o debounce caso a leitura seja 1, incrementando o contador se for confirmado que a leitura \xe9 v\xe1lida, esperando o bot\xe3o ser solto e mandando o valor para as sa\xeddas."]}),"\n",(0,a.jsx)(o.p,{children:"De forma geral esse c\xf3digo funciona, mas h\xe1 muito desperd\xedcio de processamento, pois h\xe1 muitos momentos que o processador n\xe3o est\xe1 fazendo nada, apenas esperando algo acontecer ou um certo tempo passar, nesse tempo ele poderia estar fazendo outra tarefas ou ficar em modo econ\xf4mico de energia, que veremos nos pr\xf3ximos exemplos."}),"\n",(0,a.jsx)(o.h3,{id:"contador_v2",children:(0,a.jsx)(o.strong,{children:"Contador_v2"})}),"\n",(0,a.jsx)(o.p,{children:"Nesse exemplo vamos come\xe7ar a usar interrup\xe7\xf5es para ler os pulsos. Vamos ver quais s\xe3o as vantagens desse m\xe9todo e o que pode ser melhorado."}),"\n",(0,a.jsxs)(o.p,{children:["O programa \xe9 um c\xf3digo em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca ",(0,a.jsx)(o.code,{children:"avr/io.h"})," e a biblioteca ",(0,a.jsx)(o.code,{children:"avr/interrupt.h"}),". Para melhor entendimento recomendo ler os coment\xe1rios do c\xf3digo e o datasheet do ATtiny85."]}),"\n",(0,a.jsx)(o.h4,{id:"c\xf3digo-1",children:(0,a.jsx)(o.strong,{children:"C\xf3digo"})}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-c",children:"/**\n * @file main.c\n * @author Eduardo Due\xf1as\n * @brief Exemplo de contador de eventos com tratamento por interrup\xe7\xe3o\n * @version 1.0\n * @date 19/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 05/05/2021\n *\n * O programa \xe9 um desenvolvimento em cima do contador uma com altera\xe7\xf5es na leitura do pulso para leitura por interrup\xe7\xe3o,\n * possibilitando o uso do microcontrolador para outras fun\xe7\xf5es junto do contador\n */\n#include <avr/io.h>\n#include <avr/interrupt.h>\n\n#define F_CPU 16500000L // Frequ\xeancia de CLK\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\nvolatile unsigned char count = 0; // Contador\n\nISR(INT0_vect) {\n cli(); // Desabilita interrup\xe7\xf5es globais durante o tratamento da interrup\xe7\xe3o\n if (debounce(PB2)) { // Se o bot\xe3o foi realmente apertado incrementa cont e manda para os LEDs\n count++; // Incrementa o contador\n count %= 0x10; // Limpa o excesso\n PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]\n PORTB = ((PORTB & 0xFC) | (count & 0x03)); // Manda os dois bits menos significativos de cont para PB[1:0]\n }\n sei(); // Reabilita interrup\xe7\xf5es globais\n}\n\n// Debounce da chave tactil para desconsiderarmos ru\xeddo e bouncing do bot\xe3o\nchar debounce(int pino) {\n unsigned int i;\n\n for (i = 0; i < 20000; i++) { // Testa o pino v\xe1rias vezes para evitar leituras erradas\n if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1\n return 0; // Se sim, retorna falso\n }\n }\n\n return 1; // Retorna verdadeiro\n}\n\nint main(void) {\n // Configura\xe7\xe3o de PORTB\n clearBit(DDRB, PB2); // Configura PB2 como entrada\n setBit(DDRB, PB0); // Configura PB0 como sa\xedda\n setBit(DDRB, PB1); // Configura PB1 como sa\xedda\n setBit(DDRB, PB3); // Configura PB3 como sa\xedda\n setBit(DDRB, PB4); // Configura PB4 como sa\xedda\n\n PORTB &= 0xE4; // Manda 0 para PB[4:3] e PB[1:0]\n\n //Configura\xe7\xe3o de Interrup\xe7\xe3o externa\n GIMSK |= (1 << INT0); // Habilita interrup\xe7\xf5es externas no INT0\n MCUCR |= 0x03; // Seta interrup\xe7\xf5es para borda de subida\n sei(); // Habilita interrup\xe7\xf5es globais\n\n\n for (;;) { // Loop infinito\n // Aqui voc\xea pode colocar outra aplica\xe7\xe3o para rodar simultaneamente ao contador\n }\n}\n"})}),"\n",(0,a.jsx)(o.h4,{id:"montagem-1",children:(0,a.jsx)(o.strong,{children:"Montagem"})}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Circuito contador V2",src:n(1424).c+"",width:"2589",height:"1185"})}),"\n",(0,a.jsx)(o.p,{children:"Como mostrado na imagem, os LEDs s\xe3o ligados nas sa\xeddas PORTB[4:3] e [1:0] e o bot\xe3o na entrada PORTB[2]."}),"\n",(0,a.jsx)(o.h4,{id:"compila\xe7\xe3o-e-upload-1",children:(0,a.jsx)(o.strong,{children:"Compila\xe7\xe3o e upload"})}),"\n",(0,a.jsxs)(o.p,{children:["Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando ",(0,a.jsx)(o.code,{children:"make"}),":"]}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{children:"exemplos-avr-libc/exemplos/contador_v2$ make\n"})}),"\n",(0,a.jsx)(o.p,{children:"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{children:"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n"})}),"\n",(0,a.jsx)(o.p,{children:"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."}),"\n",(0,a.jsx)(o.h4,{id:"resultado-1",children:(0,a.jsx)(o.strong,{children:"Resultado"})}),"\n",(0,a.jsx)(o.p,{children:"Assim como no \xfaltimo exemplo, os LEDs devem mostrar a contagem de eventos, mostrando em bin\xe1rio at\xe9 15."}),"\n",(0,a.jsx)(o.h4,{id:"an\xe1lise-1",children:(0,a.jsx)(o.strong,{children:"An\xe1lise"})}),"\n",(0,a.jsx)(o.p,{children:"Esse exemplo tem um c\xf3digo um pouco mais complexo, podendo fazer diferentes tarefas ao mesmo tempo com o uso de interrup\xe7\xf5es."}),"\n",(0,a.jsx)(o.p,{children:"Interrup\xe7\xf5es s\xe3o, de forma simples, instru\xe7\xf5es de alta prioridade, que fazem o processador parar o que est\xe1 fazendo, guardar o estado atual, executar as instru\xe7\xf5es da interrup\xe7\xe3o e voltar para o estado anterior, continuando normalmente com o programa. Elas s\xe3o extremamente \xfateis para tarefas que precisam de uma precis\xe3o de tempo alta ou eventos ass\xedncronos."}),"\n",(0,a.jsxs)(o.p,{children:["Por\xe9m, apesar do exemplo dois fazer uso de interrup\xe7\xf5es, ele passa muito tempo nela, o que atrasa o andamento de um poss\xedvel outro programa que estaria rodando na ",(0,a.jsx)(o.code,{children:"main"}),". Por\xe9m, grande parte do tempo que \xe9 gasto na interrup\xe7\xe3o est\xe1 atrelado ao debounce, que consiste basicamente de checagens em certos per\xedodos de tempo. Podemos ent\xe3o otimizar o uso do processador saindo da interrup\xe7\xe3o entre as checagens, uma vez que ele est\xe1 apenas esperando para fazer o pr\xf3ximo teste. Veremos isso e o modo de economia de energia no contador_v3."]}),"\n",(0,a.jsx)(o.h3,{id:"contador_v3",children:(0,a.jsx)(o.strong,{children:"Contador_v3"})}),"\n",(0,a.jsx)(o.p,{children:"Nesse exemplo vamos otimizar o processamento no c\xf3digo utilizando interrup\xe7\xf5es para as esperas do debounce, tamb\xe9m veremos uma alternativa para diminuir o consumo de energia em momentos em que o processador est\xe1 esperando algum evento, caso voc\xea n\xe3o precise de outra rotina."}),"\n",(0,a.jsxs)(o.p,{children:["Esse programa \xe9 um c\xf3digo em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca ",(0,a.jsx)(o.code,{children:"avr/io.h"})," e a biblioteca ",(0,a.jsx)(o.code,{children:"avr/interrupt.h"}),". Para melhor entendimento recomendo ler os coment\xe1rios do c\xf3digo e o datasheet do ATtiny85."]}),"\n",(0,a.jsx)(o.h4,{id:"c\xf3digo-2",children:(0,a.jsx)(o.strong,{children:"C\xf3digo"})}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-c",children:"/**\n * @file main.c\n * @author Eduardo Due\xf1as\n * @brief Exemplo de contador de eventos com tratamento por interrup\xe7\xe3o\n * @version 1.0\n * @date 20/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 05/05/2021\n *\n * O programa \xe9 um desenvolvimento em cima do contador_v2 uma com altera\xe7\xf5es no loop infinito que\n * havia ficado em aberto para outras aplica\xe7\xf5es para o modo sleep para diminuir o gasto de energia e\n * alterar o debounce para interrup\xe7\xe3o, aumentando a efici\xeancia do c\xf3digo. O c\xf3digo pode ser usado com\n * outras aplica\xe7\xf5es no lugar do sleep.\n */\n\n#include <avr/io.h>\n#include <avr/interrupt.h>\n#include <avr/sleep.h>\n\n#define F_CPU 16500000L // Frequ\xeancia de CLK\n\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\nvolatile unsigned char count = 0; // Contador\nvolatile unsigned char test = 0; // Quantidade de testes do debounce\n\nunsigned int pin = 0; // Pino do debounce\n\n// Debounce da chave tactil para desconsiderarmos ruido e bouncing do bot\xe3o\nchar debounce(int pino) {\n pin = pino;\n // Coloca um timer para cada 1000 ciclos de clk para testar a chave tactil\n TCNT0 = 131; // Overflow-(ciclos/Prescaler)=256-(1000/8)=131\n setBit(TIMSK, TOIE0); // Habilita interrup\xe7\xf5es por timer overflow\n test = 0; // Limpa test\n}\n\nISR(INT0_vect) { // Tratamento de interrup\xe7\xf5es de pulso externo\n clearBit(GIMSK, INT0); // Desabilita interrup\xe7\xf5es do INT0 durante o tratamento da interrup\xe7\xe3o\n debounce(PB2);\n}\n\nISR(TIMER0_OVF_vect) { // Tratamento de interrup\xe7\xf5es de timer overflow\n TCNT0 = 131; // Seta denovo o timer para 131\n if (testBit(PINB, pin)) { // Se o bot\xe3o continua apertado\n test++; // Incrementa test\n if (test >= 20) { // Se testou o suficiente (no caso 20 vezes)\n count++; // Incrementa o contador\n count %= 0x10; // Limpa o excesso\n PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]\n PORTB = ((PORTB & 0xFC) | (count & 0x03)); // Manda os dois bits menos significativos de cont para PB[1:0]\n clearBit(TIMSK, TOIE0); // Desabilita interrup\xe7\xf5es por timer overflow\n setBit(GIMSK, INT0); // Reabilita interrup\xe7\xf5es externas no INT0\n }\n }\n else {\n clearBit(TIMSK, TOIE0); // Desabilita interrup\xe7\xf5es por timer overflow\n setBit(GIMSK, INT0); // Reabilita interrup\xe7\xf5es externas no INT0\n }\n}\n\nint main(void) {\n // Configura\xe7\xe3o de PORTB\n clearBit(DDRB, PB2); // Configura PB2 como entrada\n setBit(DDRB, PB0); // Configura PB0 como saida\n setBit(DDRB, PB1); // Configura PB1 como saida\n setBit(DDRB, PB3); // Configura PB3 como saida\n setBit(DDRB, PB4); // Configura PB4 como saida\n\n PORTB &= 0xE4; // Manda 0 para PB[4:3] e PB[1:0]\n\n // Configura\xe7\xe3o do timer\n TCCR0A = 0x00; // Modo Normal\n TCCR0B = 0x00;\n TCCR0B |= 0x02; // Prescaler de 8\n\n\n // Configura\xe7\xe3o do modo sleep\n clearBit(MCUCR, SM0); // Configura sleep mode como idle\n clearBit(MCUCR, SM1);\n\n // Configura\xe7\xe3o de Interrup\xe7\xe3o externa\n setBit(GIMSK, INT0); // Habilita interrup\xe7\xf5es externas no INT0\n MCUCR |= 0x03; // Seta interrup\xe7\xf5es para borda de subida\n sei(); // Habilita interrup\xe7\xf5es globais\n\n for (;;) { // Loop infinito\n // Aqui voc\xea pode colocar outra aplica\xe7\xe3o para rodar simultaneamente ao contador no lugar do sleep\n sleep_mode(); // Entra no sleep mode\n }\n}\n"})}),"\n",(0,a.jsx)(o.h4,{id:"montagem-2",children:(0,a.jsx)(o.strong,{children:"Montagem"})}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Circuito contador V3",src:n(48276).c+"",width:"2589",height:"1185"})}),"\n",(0,a.jsx)(o.p,{children:"Como mostrado na imagem, os LEDs s\xe3o ligados nas sa\xeddas PORTB[4:3] e [1:0] e o bot\xe3o na entrada PORTB[2], assim como no exemplo dois."}),"\n",(0,a.jsx)(o.h4,{id:"compila\xe7\xe3o-e-upload-2",children:(0,a.jsx)(o.strong,{children:"Compila\xe7\xe3o e upload"})}),"\n",(0,a.jsxs)(o.p,{children:["Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando ",(0,a.jsx)(o.code,{children:"make"}),":"]}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{children:"exemplos-avr-libc/exemplos/contador_v3$ make\n"})}),"\n",(0,a.jsx)(o.p,{children:"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{children:"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n"})}),"\n",(0,a.jsx)(o.p,{children:"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."}),"\n",(0,a.jsx)(o.h4,{id:"resultado-2",children:(0,a.jsx)(o.strong,{children:"Resultado"})}),"\n",(0,a.jsx)(o.p,{children:"Assim como nos exemplos anteriores, os LEDs do circuito devem mostrar a contagem de pulsos at\xe9 15 em bin\xe1rio."}),"\n",(0,a.jsx)(o.h4,{id:"an\xe1lise-2",children:(0,a.jsx)(o.strong,{children:"An\xe1lise"})}),"\n",(0,a.jsx)(o.p,{children:"Neste c\xf3digo adicionamos um pouco mais de complexidade, aumentando o uso de interrup\xe7\xf5es, al\xe9m do uso do timer e do modo Sleep."}),"\n",(0,a.jsx)(o.p,{children:"O modo Sleep \xe9 um mode de opera\xe7\xe3o no qual, de forma b\xe1sica, se desliga alguns m\xf3dulos do microcontrolador at\xe9 que alguma interrup\xe7\xe3o ocorra, o que pode diminuir o consumo de energia de forma dr\xe1stica. No caso do c\xf3digo do exemplo, utilizamos o modo Idle que no ATtiny85 desliga os CLKs da CPU e FLASH, podendo se desligar opcionalmente o CLK do ADC."}),"\n",(0,a.jsxs)(o.p,{children:["O timer nesse exemplo est\xe1 configurado como em modo normal, com prescaler de 8, o que faz ele incrementar o timer uma vez a cada 8 ciclos de CLK. A forma adotada para a contagem do tempo foi a interrup\xe7\xe3o por timer overflow, ou seja, sempre que o valor m\xe1ximo do timer for atingido ele gera uma interrup\xe7\xe3o. Para conseguirmos os 1000 ciclos que queremos calculamos ",(0,a.jsx)(o.code,{children:"overflow -(ciclos/Prescaler)"}),", que nos d\xe1 ",(0,a.jsx)(o.code,{children:"256 -(1000/8) = 131"}),", e setamos o valor do timer nesse valor para que falte o tempo que desejamos para a interrup\xe7\xe3o."]}),"\n",(0,a.jsx)(o.p,{children:"O uso de interrup\xe7\xf5es do timer para o debounce diminui consideravelmente o tempo que o processador consome em execu\xe7\xe3o do tratamento do evento, o que melhora o processamento das rotinas paralelas, ou no caso, permite que o processador fique mais tempo no modo Sleep, diminuindo o consumo de energia ou em caso de alimenta\xe7\xe3o por baterias, aumenta a vida \xfatil da da fonte."}),"\n",(0,a.jsx)(o.h2,{id:"conclus\xe3o",children:(0,a.jsx)(o.strong,{children:"Conclus\xe3o"})}),"\n",(0,a.jsx)(o.p,{children:"De forma geral, todas as tr\xeas formas de se fazer o c\xf3digo funcionam, e ao servirem seu prop\xf3sito n\xe3o est\xe3o erradas. Por\xe9m, como programadores, principalmente de sistemas embarcados, \xe9 uma \xf3tima pr\xe1tica conseguirmos fazer um c\xf3digo eficiente, de forma a n\xe3o se tornar um empecilho no futuro, seja por usarmos muita mem\xf3ria ou deixarmos o processador muito lento e termos que refazer algo pronto do zero. Por isso \xe9 importante saber quais s\xe3o as vantagens e desvantagens de cada m\xe9todo para podermos sempre utilizar o que melhor se adequa \xe0s nossas necessidades."}),"\n",(0,a.jsx)(o.h2,{id:"gloss\xe1rio",children:"Gloss\xe1rio"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"Setar: colocar um novo valor em um registrador. Para um bit \xe9 convencionado setar, muda-lo para valor 1, e clear (limpar), muda-lo para valor 0"}),"\n",(0,a.jsx)(o.li,{children:"Chave tactil/Push button: bot\xe3o"}),"\n",(0,a.jsx)(o.li,{children:"Debounce: corre\xe7\xe3o do efeito de bouncing (efeito que ocorre em chaves que fazem r\xe1pidas conex\xf5es e desconex\xf5es antes de se estabilizar)"}),"\n",(0,a.jsx)(o.li,{children:"Resetar: reiniciar"}),"\n",(0,a.jsx)(o.li,{children:"Timer: circuito eletr\xf4nico dedicado a contagem de tempo"}),"\n"]}),"\n",(0,a.jsxs)(o.table,{children:[(0,a.jsx)(o.thead,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.th,{children:"Autor"}),(0,a.jsx)(o.th,{children:(0,a.jsx)(o.a,{href:"https://github.com/EduardoDuenas",children:"Eduardo Due\xf1as"})})]})}),(0,a.jsx)(o.tbody,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"Data:"}),(0,a.jsx)(o.td,{children:"05/05/2020"})]})})]})]})}function m(e={}){const{wrapper:o}={...(0,r.MN)(),...e.components};return o?(0,a.jsx)(o,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},95788:(e,o,n)=>{n.d(o,{MN:()=>c});var a=n(11504);function r(e,o,n){return o in e?Object.defineProperty(e,o,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[o]=n,e}function i(e,o){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);o&&(a=a.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var o=1;o<arguments.length;o++){var n=null!=arguments[o]?arguments[o]:{};o%2?i(Object(n),!0).forEach((function(o){r(e,o,n[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(n,o))}))}return e}function t(e,o){if(null==e)return{};var n,a,r=function(e,o){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],o.indexOf(n)>=0||(r[n]=e[n]);return r}(e,o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],o.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var d=a.createContext({}),c=function(e){var o=a.useContext(d),n=o;return e&&(n="function"==typeof e?e(o):s(s({},o),e)),n},l={inlineCode:"code",wrapper:function(e){var o=e.children;return a.createElement(a.Fragment,{},o)}},m=a.forwardRef((function(e,o){var n=e.components,r=e.mdxType,i=e.originalType,d=e.parentName,m=t(e,["components","mdxType","originalType","parentName"]),u=c(n),p=r,g=u["".concat(d,".").concat(p)]||u[p]||l[p]||i;return n?a.createElement(g,s(s({ref:o},m),{},{components:n})):a.createElement(g,s({ref:o},m))}));m.displayName="MDXCreateElement"},44663:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/Exemplo_Contador_Circuito-a726ec616f1978417fe735405b5dadd9.png"},1424:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/Exemplo_Contador_Circuito_v2-cb27b793816afd0d2a3b33b95b9e734f.png"},48276:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/Exemplo_Contador_Circuito_v3-cb27b793816afd0d2a3b33b95b9e734f.png"}}]); \ No newline at end of file diff --git a/assets/js/bdb4d3e5.b72c15e9.js b/assets/js/bdb4d3e5.b72c15e9.js deleted file mode 100755 index 359712ade..000000000 --- a/assets/js/bdb4d3e5.b72c15e9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1524],{3905:(e,o,a)=>{a.d(o,{Zo:()=>m,kt:()=>g});var n=a(7294);function t(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function r(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?r(Object(a),!0).forEach((function(o){t(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function s(e,o){if(null==e)return{};var a,n,t=function(e,o){if(null==e)return{};var a,n,t={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],o.indexOf(a)>=0||(t[a]=e[a]);return t}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(t[a]=e[a])}return t}var d=n.createContext({}),l=function(e){var o=n.useContext(d),a=o;return e&&(a="function"==typeof e?e(o):i(i({},o),e)),a},m=function(e){var o=l(e.components);return n.createElement(d.Provider,{value:o},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var o=e.children;return n.createElement(n.Fragment,{},o)}},p=n.forwardRef((function(e,o){var a=e.components,t=e.mdxType,r=e.originalType,d=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=l(a),p=t,g=c["".concat(d,".").concat(p)]||c[p]||u[p]||r;return a?n.createElement(g,i(i({ref:o},m),{},{components:a})):n.createElement(g,i({ref:o},m))}));function g(e,o){var a=arguments,t=o&&o.mdxType;if("string"==typeof e||t){var r=a.length,i=new Array(r);i[0]=p;var s={};for(var d in o)hasOwnProperty.call(o,d)&&(s[d]=o[d]);s.originalType=e,s[c]="string"==typeof e?e:t,i[1]=s;for(var l=2;l<r;l++)i[l]=a[l];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}p.displayName="MDXCreateElement"},417:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var n=a(3117),t=(a(7294),a(3905));const r={id:"contadores",title:"Contador de pulsos externos",slug:"/franzininho-diy/exemplos-avr-libc/contadores",description:"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/05/2021",some_url:"https://github.com/EduardoDuenas"},i=void 0,s={unversionedId:"FranzininhoDIY/exemplos-avr-libc/contadores",id:"FranzininhoDIY/exemplos-avr-libc/contadores",title:"Contador de pulsos externos",description:"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/contadores.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/contadores",permalink:"/docs/franzininho-diy/exemplos-avr-libc/contadores",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/contadores.md",tags:[],version:"current",frontMatter:{id:"contadores",title:"Contador de pulsos externos",slug:"/franzininho-diy/exemplos-avr-libc/contadores",description:"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/05/2021",some_url:"https://github.com/EduardoDuenas"},sidebar:"docs",previous:{title:"Timer 0 - Interrup\xe7\xe3o",permalink:"/docs/franzininho-diy/exemplos-avr-libc/timer0-int"},next:{title:"Instrumento musical com Buzzer",permalink:"/docs/franzininho-diy/exemplos-avr-libc/buzzer"}},d={},l=[{value:"<strong>Recursos necess\xe1rios</strong>",id:"recursos-necess\xe1rios",level:2},{value:"<strong>Contadores</strong>",id:"contadores",level:2},{value:"<strong>Contador_v1</strong>",id:"contador_v1",level:3},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo",level:4},{value:"<strong>Montagem</strong>",id:"montagem",level:4},{value:"<strong>Compila\xe7\xe3o e upload</strong>",id:"compila\xe7\xe3o-e-upload",level:4},{value:"<strong>Resultado</strong>",id:"resultado",level:4},{value:"<strong>An\xe1lise</strong>",id:"an\xe1lise",level:4},{value:"<strong>Contador_v2</strong>",id:"contador_v2",level:3},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo-1",level:4},{value:"<strong>Montagem</strong>",id:"montagem-1",level:4},{value:"<strong>Compila\xe7\xe3o e upload</strong>",id:"compila\xe7\xe3o-e-upload-1",level:4},{value:"<strong>Resultado</strong>",id:"resultado-1",level:4},{value:"<strong>An\xe1lise</strong>",id:"an\xe1lise-1",level:4},{value:"<strong>Contador_v3</strong>",id:"contador_v3",level:3},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo-2",level:4},{value:"<strong>Montagem</strong>",id:"montagem-2",level:4},{value:"<strong>Compila\xe7\xe3o e upload</strong>",id:"compila\xe7\xe3o-e-upload-2",level:4},{value:"<strong>Resultado</strong>",id:"resultado-2",level:4},{value:"<strong>An\xe1lise</strong>",id:"an\xe1lise-2",level:4},{value:"<strong>Conclus\xe3o</strong>",id:"conclus\xe3o",level:2},{value:"Gloss\xe1rio",id:"gloss\xe1rio",level:2}],m={toc:l},c="wrapper";function u(e){let{components:o,...r}=e;return(0,t.kt)(c,(0,n.Z)({},m,r,{components:o,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY. Vamos explorar as formas mais simples e as mais complexas de contar eventos e as vantagens de cada uma. Nesses exemplos vamos aprender a usar o timer e a fazer debounce, necess\xe1rio para lermos apenas eventos v\xe1lidos e n\xe3o ler o mesmo evento mais de uma vez."),(0,t.kt)("p",null,"Boa pr\xe1tica!"),(0,t.kt)("h2",{id:"recursos-necess\xe1rios"},(0,t.kt)("strong",{parentName:"h2"},"Recursos necess\xe1rios")),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Franzininho DIY (com Micronucleos)"),(0,t.kt)("li",{parentName:"ul"},"4 LEDs de 3mm"),(0,t.kt)("li",{parentName:"ul"},"4 resistores de 200\u03a9"),(0,t.kt)("li",{parentName:"ul"},"1 resistor de 10k\u03a9"),(0,t.kt)("li",{parentName:"ul"},"1 chave tactil"),(0,t.kt)("li",{parentName:"ul"},"7 jumpers macho-f\xeamea"),(0,t.kt)("li",{parentName:"ul"},"7 jumpers macho-macho")),(0,t.kt)("h2",{id:"contadores"},(0,t.kt)("strong",{parentName:"h2"},"Contadores")),(0,t.kt)("p",null,"Temos tr\xeas exemplos de contadores da vers\xe3o 1 a 3, e aumentando a complexidade do c\xf3digo e dos recursos utilizados."),(0,t.kt)("h3",{id:"contador_v1"},(0,t.kt)("strong",{parentName:"h3"},"Contador_v1")),(0,t.kt)("p",null,"Nesse exemplo vamos utilizar loops para fazer a verifica\xe7\xe3o de eventos. Essa forma de se fazer a contagem, apesar de ser mais simples de se entender e criar, \xe9 pouco eficiente, tanto a n\xedvel de processamento, quanto ao de energia."),(0,t.kt)("p",null,"O programa \xe9 um c\xf3digo em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca ",(0,t.kt)("inlineCode",{parentName:"p"},"avr/io.h"),". Para melhor entendimento recomendo ler os coment\xe1rios do c\xf3digo e o datasheet do ATtiny85."),(0,t.kt)("h4",{id:"c\xf3digo"},(0,t.kt)("strong",{parentName:"h4"},"C\xf3digo")),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},"/**\n * @file main.c\n * @author Eduardo Due\xf1as\n * @brief Exemplo de contador de eventos\n * @version 1.0\n * @date 06/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 05/05/2021\n */\n#include <avr/io.h>\n\n#define F_CPU 16500000L // Frequ\xeancia de CLK\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\n// Debounce da chave t\xe1ctil para desconsiderarmos ru\xeddo e bouncing do bot\xe3o\nchar debounce(int pino) {\n unsigned int i;\n for (i = 0; i < 20000; i++) { // Testa o pino v\xe1rias vezes para evitar leituras erradas\n if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1\n return 0; // Se sim, retorna falso\n }\n }\n return 1; // Retorna verdadeiro\n}\n\nint main(void) {\n // Configura\xe7\xe3o de PORTB\n clearBit(DDRB, PB0); // Configura PB0 como entrada\n setBit(DDRB, PB1); // Configura PB1 como saida\n setBit(DDRB, PB2); // Configura PB2 como saida\n setBit(DDRB, PB3); // Configura PB3 como saida\n setBit(DDRB, PB4); // Configura PB4 como saida\n\n PORTB &= 0xE1; // Manda 0 para PB[4:1]\n\n unsigned char count = 0;\n\n for (;;) { // loop infinito\n if (testBit(PINB, PB0)) { // Testa se PB0 \xe9 1\n if (debounce(PB0)) { // Verifica se realmente foi um aperto de bot\xe3o\n count++; // Se sim, incrementa o contador\n while (testBit(PINB, PB0)) {} // Espera o bot\xe3o parar de ser pressionado\n }\n }\n count = count % 0x10; // Limpa o overflow do contador\n PORTB = ((PORTB & 0xE1) | (count << 1)); // Manda o contador para PB[4:1]\n }\n}\n")),(0,t.kt)("h4",{id:"montagem"},(0,t.kt)("strong",{parentName:"h4"},"Montagem")),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"circuito contador",src:a(1090).Z,width:"2589",height:"1152"})),(0,t.kt)("p",null,"Como mostrado na imagem, os LEDs s\xe3o ligados nas sa\xeddas PortB","[4:1]"," e o bot\xe3o no PortB","[0]","."),(0,t.kt)("h4",{id:"compila\xe7\xe3o-e-upload"},(0,t.kt)("strong",{parentName:"h4"},"Compila\xe7\xe3o e upload")),(0,t.kt)("p",null,"Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando ",(0,t.kt)("inlineCode",{parentName:"p"},"make"),":"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"exemplos-avr-libc/exemplos/contador$ make\n")),(0,t.kt)("p",null,"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n")),(0,t.kt)("p",null,"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."),(0,t.kt)("h4",{id:"resultado"},(0,t.kt)("strong",{parentName:"h4"},"Resultado")),(0,t.kt)("p",null,"Os LEDs devem mostrar a contagem de apertos do bot\xe3o de forma bin\xe1ria resetando em 0x10 ou quando resetada a placa."),(0,t.kt)("h4",{id:"an\xe1lise"},(0,t.kt)("strong",{parentName:"h4"},"An\xe1lise")),(0,t.kt)("p",null,"Esse c\xf3digo \xe9 de simples compreens\xe3o usando apenas um ",(0,t.kt)("inlineCode",{parentName:"p"},"for")," para checar continuamente se o bot\xe3o foi apertado, chamando uma fun\xe7\xe3o debounce caso a leitura seja 1, incrementando o contador se for confirmado que a leitura \xe9 v\xe1lida, esperando o bot\xe3o ser solto e mandando o valor para as sa\xeddas."),(0,t.kt)("p",null,"De forma geral esse c\xf3digo funciona, mas h\xe1 muito desperd\xedcio de processamento, pois h\xe1 muitos momentos que o processador n\xe3o est\xe1 fazendo nada, apenas esperando algo acontecer ou um certo tempo passar, nesse tempo ele poderia estar fazendo outra tarefas ou ficar em modo econ\xf4mico de energia, que veremos nos pr\xf3ximos exemplos."),(0,t.kt)("h3",{id:"contador_v2"},(0,t.kt)("strong",{parentName:"h3"},"Contador_v2")),(0,t.kt)("p",null,"Nesse exemplo vamos come\xe7ar a usar interrup\xe7\xf5es para ler os pulsos. Vamos ver quais s\xe3o as vantagens desse m\xe9todo e o que pode ser melhorado."),(0,t.kt)("p",null,"O programa \xe9 um c\xf3digo em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca ",(0,t.kt)("inlineCode",{parentName:"p"},"avr/io.h")," e a biblioteca ",(0,t.kt)("inlineCode",{parentName:"p"},"avr/interrupt.h"),". Para melhor entendimento recomendo ler os coment\xe1rios do c\xf3digo e o datasheet do ATtiny85."),(0,t.kt)("h4",{id:"c\xf3digo-1"},(0,t.kt)("strong",{parentName:"h4"},"C\xf3digo")),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},"/**\n * @file main.c\n * @author Eduardo Due\xf1as\n * @brief Exemplo de contador de eventos com tratamento por interrup\xe7\xe3o\n * @version 1.0\n * @date 19/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 05/05/2021\n *\n * O programa \xe9 um desenvolvimento em cima do contador uma com altera\xe7\xf5es na leitura do pulso para leitura por interrup\xe7\xe3o,\n * possibilitando o uso do microcontrolador para outras fun\xe7\xf5es junto do contador\n */\n#include <avr/io.h>\n#include <avr/interrupt.h>\n\n#define F_CPU 16500000L // Frequ\xeancia de CLK\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\nvolatile unsigned char count = 0; // Contador\n\nISR(INT0_vect) {\n cli(); // Desabilita interrup\xe7\xf5es globais durante o tratamento da interrup\xe7\xe3o\n if (debounce(PB2)) { // Se o bot\xe3o foi realmente apertado incrementa cont e manda para os LEDs\n count++; // Incrementa o contador\n count %= 0x10; // Limpa o excesso\n PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]\n PORTB = ((PORTB & 0xFC) | (count & 0x03)); // Manda os dois bits menos significativos de cont para PB[1:0]\n }\n sei(); // Reabilita interrup\xe7\xf5es globais\n}\n\n// Debounce da chave tactil para desconsiderarmos ru\xeddo e bouncing do bot\xe3o\nchar debounce(int pino) {\n unsigned int i;\n\n for (i = 0; i < 20000; i++) { // Testa o pino v\xe1rias vezes para evitar leituras erradas\n if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1\n return 0; // Se sim, retorna falso\n }\n }\n\n return 1; // Retorna verdadeiro\n}\n\nint main(void) {\n // Configura\xe7\xe3o de PORTB\n clearBit(DDRB, PB2); // Configura PB2 como entrada\n setBit(DDRB, PB0); // Configura PB0 como sa\xedda\n setBit(DDRB, PB1); // Configura PB1 como sa\xedda\n setBit(DDRB, PB3); // Configura PB3 como sa\xedda\n setBit(DDRB, PB4); // Configura PB4 como sa\xedda\n\n PORTB &= 0xE4; // Manda 0 para PB[4:3] e PB[1:0]\n\n //Configura\xe7\xe3o de Interrup\xe7\xe3o externa\n GIMSK |= (1 << INT0); // Habilita interrup\xe7\xf5es externas no INT0\n MCUCR |= 0x03; // Seta interrup\xe7\xf5es para borda de subida\n sei(); // Habilita interrup\xe7\xf5es globais\n\n\n for (;;) { // Loop infinito\n // Aqui voc\xea pode colocar outra aplica\xe7\xe3o para rodar simultaneamente ao contador\n }\n}\n")),(0,t.kt)("h4",{id:"montagem-1"},(0,t.kt)("strong",{parentName:"h4"},"Montagem")),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Circuito contador V2",src:a(7891).Z,width:"2589",height:"1185"})),(0,t.kt)("p",null,"Como mostrado na imagem, os LEDs s\xe3o ligados nas sa\xeddas PORTB","[4:3]"," e ","[1:0]"," e o bot\xe3o na entrada PORTB","[2]","."),(0,t.kt)("h4",{id:"compila\xe7\xe3o-e-upload-1"},(0,t.kt)("strong",{parentName:"h4"},"Compila\xe7\xe3o e upload")),(0,t.kt)("p",null,"Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando ",(0,t.kt)("inlineCode",{parentName:"p"},"make"),":"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"exemplos-avr-libc/exemplos/contador_v2$ make\n")),(0,t.kt)("p",null,"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n")),(0,t.kt)("p",null,"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."),(0,t.kt)("h4",{id:"resultado-1"},(0,t.kt)("strong",{parentName:"h4"},"Resultado")),(0,t.kt)("p",null,"Assim como no \xfaltimo exemplo, os LEDs devem mostrar a contagem de eventos, mostrando em bin\xe1rio at\xe9 15."),(0,t.kt)("h4",{id:"an\xe1lise-1"},(0,t.kt)("strong",{parentName:"h4"},"An\xe1lise")),(0,t.kt)("p",null,"Esse exemplo tem um c\xf3digo um pouco mais complexo, podendo fazer diferentes tarefas ao mesmo tempo com o uso de interrup\xe7\xf5es."),(0,t.kt)("p",null,"Interrup\xe7\xf5es s\xe3o, de forma simples, instru\xe7\xf5es de alta prioridade, que fazem o processador parar o que est\xe1 fazendo, guardar o estado atual, executar as instru\xe7\xf5es da interrup\xe7\xe3o e voltar para o estado anterior, continuando normalmente com o programa. Elas s\xe3o extremamente \xfateis para tarefas que precisam de uma precis\xe3o de tempo alta ou eventos ass\xedncronos."),(0,t.kt)("p",null,"Por\xe9m, apesar do exemplo dois fazer uso de interrup\xe7\xf5es, ele passa muito tempo nela, o que atrasa o andamento de um poss\xedvel outro programa que estaria rodando na ",(0,t.kt)("inlineCode",{parentName:"p"},"main"),". Por\xe9m, grande parte do tempo que \xe9 gasto na interrup\xe7\xe3o est\xe1 atrelado ao debounce, que consiste basicamente de checagens em certos per\xedodos de tempo. Podemos ent\xe3o otimizar o uso do processador saindo da interrup\xe7\xe3o entre as checagens, uma vez que ele est\xe1 apenas esperando para fazer o pr\xf3ximo teste. Veremos isso e o modo de economia de energia no contador_v3."),(0,t.kt)("h3",{id:"contador_v3"},(0,t.kt)("strong",{parentName:"h3"},"Contador_v3")),(0,t.kt)("p",null,"Nesse exemplo vamos otimizar o processamento no c\xf3digo utilizando interrup\xe7\xf5es para as esperas do debounce, tamb\xe9m veremos uma alternativa para diminuir o consumo de energia em momentos em que o processador est\xe1 esperando algum evento, caso voc\xea n\xe3o precise de outra rotina."),(0,t.kt)("p",null,"Esse programa \xe9 um c\xf3digo em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca ",(0,t.kt)("inlineCode",{parentName:"p"},"avr/io.h")," e a biblioteca ",(0,t.kt)("inlineCode",{parentName:"p"},"avr/interrupt.h"),". Para melhor entendimento recomendo ler os coment\xe1rios do c\xf3digo e o datasheet do ATtiny85."),(0,t.kt)("h4",{id:"c\xf3digo-2"},(0,t.kt)("strong",{parentName:"h4"},"C\xf3digo")),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},"/**\n * @file main.c\n * @author Eduardo Due\xf1as\n * @brief Exemplo de contador de eventos com tratamento por interrup\xe7\xe3o\n * @version 1.0\n * @date 20/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 05/05/2021\n *\n * O programa \xe9 um desenvolvimento em cima do contador_v2 uma com altera\xe7\xf5es no loop infinito que\n * havia ficado em aberto para outras aplica\xe7\xf5es para o modo sleep para diminuir o gasto de energia e\n * alterar o debounce para interrup\xe7\xe3o, aumentando a efici\xeancia do c\xf3digo. O c\xf3digo pode ser usado com\n * outras aplica\xe7\xf5es no lugar do sleep.\n */\n\n#include <avr/io.h>\n#include <avr/interrupt.h>\n#include <avr/sleep.h>\n\n#define F_CPU 16500000L // Frequ\xeancia de CLK\n\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\nvolatile unsigned char count = 0; // Contador\nvolatile unsigned char test = 0; // Quantidade de testes do debounce\n\nunsigned int pin = 0; // Pino do debounce\n\n// Debounce da chave tactil para desconsiderarmos ruido e bouncing do bot\xe3o\nchar debounce(int pino) {\n pin = pino;\n // Coloca um timer para cada 1000 ciclos de clk para testar a chave tactil\n TCNT0 = 131; // Overflow-(ciclos/Prescaler)=256-(1000/8)=131\n setBit(TIMSK, TOIE0); // Habilita interrup\xe7\xf5es por timer overflow\n test = 0; // Limpa test\n}\n\nISR(INT0_vect) { // Tratamento de interrup\xe7\xf5es de pulso externo\n clearBit(GIMSK, INT0); // Desabilita interrup\xe7\xf5es do INT0 durante o tratamento da interrup\xe7\xe3o\n debounce(PB2);\n}\n\nISR(TIMER0_OVF_vect) { // Tratamento de interrup\xe7\xf5es de timer overflow\n TCNT0 = 131; // Seta denovo o timer para 131\n if (testBit(PINB, pin)) { // Se o bot\xe3o continua apertado\n test++; // Incrementa test\n if (test >= 20) { // Se testou o suficiente (no caso 20 vezes)\n count++; // Incrementa o contador\n count %= 0x10; // Limpa o excesso\n PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]\n PORTB = ((PORTB & 0xFC) | (count & 0x03)); // Manda os dois bits menos significativos de cont para PB[1:0]\n clearBit(TIMSK, TOIE0); // Desabilita interrup\xe7\xf5es por timer overflow\n setBit(GIMSK, INT0); // Reabilita interrup\xe7\xf5es externas no INT0\n }\n }\n else {\n clearBit(TIMSK, TOIE0); // Desabilita interrup\xe7\xf5es por timer overflow\n setBit(GIMSK, INT0); // Reabilita interrup\xe7\xf5es externas no INT0\n }\n}\n\nint main(void) {\n // Configura\xe7\xe3o de PORTB\n clearBit(DDRB, PB2); // Configura PB2 como entrada\n setBit(DDRB, PB0); // Configura PB0 como saida\n setBit(DDRB, PB1); // Configura PB1 como saida\n setBit(DDRB, PB3); // Configura PB3 como saida\n setBit(DDRB, PB4); // Configura PB4 como saida\n\n PORTB &= 0xE4; // Manda 0 para PB[4:3] e PB[1:0]\n\n // Configura\xe7\xe3o do timer\n TCCR0A = 0x00; // Modo Normal\n TCCR0B = 0x00;\n TCCR0B |= 0x02; // Prescaler de 8\n\n\n // Configura\xe7\xe3o do modo sleep\n clearBit(MCUCR, SM0); // Configura sleep mode como idle\n clearBit(MCUCR, SM1);\n\n // Configura\xe7\xe3o de Interrup\xe7\xe3o externa\n setBit(GIMSK, INT0); // Habilita interrup\xe7\xf5es externas no INT0\n MCUCR |= 0x03; // Seta interrup\xe7\xf5es para borda de subida\n sei(); // Habilita interrup\xe7\xf5es globais\n\n for (;;) { // Loop infinito\n // Aqui voc\xea pode colocar outra aplica\xe7\xe3o para rodar simultaneamente ao contador no lugar do sleep\n sleep_mode(); // Entra no sleep mode\n }\n}\n")),(0,t.kt)("h4",{id:"montagem-2"},(0,t.kt)("strong",{parentName:"h4"},"Montagem")),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Circuito contador V3",src:a(6713).Z,width:"2589",height:"1185"})),(0,t.kt)("p",null,"Como mostrado na imagem, os LEDs s\xe3o ligados nas sa\xeddas PORTB","[4:3]"," e ","[1:0]"," e o bot\xe3o na entrada PORTB","[2]",", assim como no exemplo dois."),(0,t.kt)("h4",{id:"compila\xe7\xe3o-e-upload-2"},(0,t.kt)("strong",{parentName:"h4"},"Compila\xe7\xe3o e upload")),(0,t.kt)("p",null,"Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando ",(0,t.kt)("inlineCode",{parentName:"p"},"make"),":"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"exemplos-avr-libc/exemplos/contador_v3$ make\n")),(0,t.kt)("p",null,"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n")),(0,t.kt)("p",null,"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."),(0,t.kt)("h4",{id:"resultado-2"},(0,t.kt)("strong",{parentName:"h4"},"Resultado")),(0,t.kt)("p",null,"Assim como nos exemplos anteriores, os LEDs do circuito devem mostrar a contagem de pulsos at\xe9 15 em bin\xe1rio."),(0,t.kt)("h4",{id:"an\xe1lise-2"},(0,t.kt)("strong",{parentName:"h4"},"An\xe1lise")),(0,t.kt)("p",null,"Neste c\xf3digo adicionamos um pouco mais de complexidade, aumentando o uso de interrup\xe7\xf5es, al\xe9m do uso do timer e do modo Sleep."),(0,t.kt)("p",null,"O modo Sleep \xe9 um mode de opera\xe7\xe3o no qual, de forma b\xe1sica, se desliga alguns m\xf3dulos do microcontrolador at\xe9 que alguma interrup\xe7\xe3o ocorra, o que pode diminuir o consumo de energia de forma dr\xe1stica. No caso do c\xf3digo do exemplo, utilizamos o modo Idle que no ATtiny85 desliga os CLKs da CPU e FLASH, podendo se desligar opcionalmente o CLK do ADC."),(0,t.kt)("p",null,"O timer nesse exemplo est\xe1 configurado como em modo normal, com prescaler de 8, o que faz ele incrementar o timer uma vez a cada 8 ciclos de CLK. A forma adotada para a contagem do tempo foi a interrup\xe7\xe3o por timer overflow, ou seja, sempre que o valor m\xe1ximo do timer for atingido ele gera uma interrup\xe7\xe3o. Para conseguirmos os 1000 ciclos que queremos calculamos ",(0,t.kt)("inlineCode",{parentName:"p"},"overflow -(ciclos/Prescaler)"),", que nos d\xe1 ",(0,t.kt)("inlineCode",{parentName:"p"},"256 -(1000/8) = 131"),", e setamos o valor do timer nesse valor para que falte o tempo que desejamos para a interrup\xe7\xe3o."),(0,t.kt)("p",null,"O uso de interrup\xe7\xf5es do timer para o debounce diminui consideravelmente o tempo que o processador consome em execu\xe7\xe3o do tratamento do evento, o que melhora o processamento das rotinas paralelas, ou no caso, permite que o processador fique mais tempo no modo Sleep, diminuindo o consumo de energia ou em caso de alimenta\xe7\xe3o por baterias, aumenta a vida \xfatil da da fonte."),(0,t.kt)("h2",{id:"conclus\xe3o"},(0,t.kt)("strong",{parentName:"h2"},"Conclus\xe3o")),(0,t.kt)("p",null,"De forma geral, todas as tr\xeas formas de se fazer o c\xf3digo funcionam, e ao servirem seu prop\xf3sito n\xe3o est\xe3o erradas. Por\xe9m, como programadores, principalmente de sistemas embarcados, \xe9 uma \xf3tima pr\xe1tica conseguirmos fazer um c\xf3digo eficiente, de forma a n\xe3o se tornar um empecilho no futuro, seja por usarmos muita mem\xf3ria ou deixarmos o processador muito lento e termos que refazer algo pronto do zero. Por isso \xe9 importante saber quais s\xe3o as vantagens e desvantagens de cada m\xe9todo para podermos sempre utilizar o que melhor se adequa \xe0s nossas necessidades."),(0,t.kt)("h2",{id:"gloss\xe1rio"},"Gloss\xe1rio"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Setar: colocar um novo valor em um registrador. Para um bit \xe9 convencionado setar, muda-lo para valor 1, e clear (limpar), muda-lo para valor 0"),(0,t.kt)("li",{parentName:"ul"},"Chave tactil/Push button: bot\xe3o"),(0,t.kt)("li",{parentName:"ul"},"Debounce: corre\xe7\xe3o do efeito de bouncing (efeito que ocorre em chaves que fazem r\xe1pidas conex\xf5es e desconex\xf5es antes de se estabilizar)"),(0,t.kt)("li",{parentName:"ul"},"Resetar: reiniciar"),(0,t.kt)("li",{parentName:"ul"},"Timer: circuito eletr\xf4nico dedicado a contagem de tempo")),(0,t.kt)("table",null,(0,t.kt)("thead",{parentName:"table"},(0,t.kt)("tr",{parentName:"thead"},(0,t.kt)("th",{parentName:"tr",align:null},"Autor"),(0,t.kt)("th",{parentName:"tr",align:null},(0,t.kt)("a",{parentName:"th",href:"https://github.com/EduardoDuenas"},"Eduardo Due\xf1as")))),(0,t.kt)("tbody",{parentName:"table"},(0,t.kt)("tr",{parentName:"tbody"},(0,t.kt)("td",{parentName:"tr",align:null},"Data:"),(0,t.kt)("td",{parentName:"tr",align:null},"05/05/2020")))))}u.isMDXComponent=!0},1090:(e,o,a)=>{a.d(o,{Z:()=>n});const n=a.p+"assets/images/Exemplo_Contador_Circuito-a726ec616f1978417fe735405b5dadd9.png"},7891:(e,o,a)=>{a.d(o,{Z:()=>n});const n=a.p+"assets/images/Exemplo_Contador_Circuito_v2-cb27b793816afd0d2a3b33b95b9e734f.png"},6713:(e,o,a)=>{a.d(o,{Z:()=>n});const n=a.p+"assets/images/Exemplo_Contador_Circuito_v3-cb27b793816afd0d2a3b33b95b9e734f.png"}}]); \ No newline at end of file diff --git a/assets/js/bdd709f1.661db721.js b/assets/js/bdd709f1.661db721.js deleted file mode 100755 index a7a0f701c..000000000 --- a/assets/js/bdd709f1.661db721.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4694],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),s=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):u(u({},t),e)),r},c=function(e){var t=s(e.components);return o.createElement(l.Provider,{value:t},e.children)},m="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},g=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=s(r),g=n,h=m["".concat(l,".").concat(g)]||m[g]||p[g]||a;return r?o.createElement(h,u(u({ref:t},c),{},{components:r})):o.createElement(h,u({ref:t},c))}));function h(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,u=new Array(a);u[0]=g;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[m]="string"==typeof e?e:n,u[1]=i;for(var s=2;s<a;s++)u[s]=r[s];return o.createElement.apply(null,u)}return o.createElement.apply(null,r)}g.displayName="MDXCreateElement"},6724:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var o=r(3117),n=(r(7294),r(3905));const a={slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},u=void 0,i={permalink:"/blog/hola",source:"@site/blog/2019-05-28-hola.md",title:"Hola",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet",date:"2019-05-28T00:00:00.000Z",formattedDate:"28 de maio de 2019",tags:[{label:"hola",permalink:"/blog/tags/hola"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!1,authors:[{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",imageURL:"https://avatars1.githubusercontent.com/u/2055384?v=4"}],frontMatter:{slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},prevItem:{title:"Hello",permalink:"/blog/hello-world"}},l={authorsImageUrls:[void 0]},s=[],c={toc:s},m="wrapper";function p(e){let{components:t,...r}=e;return(0,n.kt)(m,(0,o.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bdd709f1.b8420fe4.js b/assets/js/bdd709f1.b8420fe4.js new file mode 100755 index 000000000..28c310f65 --- /dev/null +++ b/assets/js/bdd709f1.b8420fe4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2760],{59436:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>u,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var o=r(17624),n=r(95788);const a={slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},u=void 0,i={permalink:"/blog/hola",source:"@site/blog/2019-05-28-hola.md",title:"Hola",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet",date:"2019-05-28T00:00:00.000Z",tags:[{label:"hola",permalink:"/blog/tags/hola"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!1,authors:[{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",imageURL:"https://avatars1.githubusercontent.com/u/2055384?v=4"}],frontMatter:{slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},unlisted:!1,prevItem:{title:"Hello",permalink:"/blog/hello-world"}},s={authorsImageUrls:[void 0]},l=[];function c(e){const t={p:"p",...(0,n.MN)(),...e.components};return(0,o.jsx)(t.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"})}function m(e={}){const{wrapper:t}={...(0,n.MN)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},95788:(e,t,r)=>{r.d(t,{MN:()=>l});var o=r(11504);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=o.createContext({}),l=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):u(u({},t),e)),r},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),p=l(r),h=n,g=p["".concat(s,".").concat(h)]||p[h]||c[h]||a;return r?o.createElement(g,u(u({ref:t},m),{},{components:r})):o.createElement(g,u({ref:t},m))}));m.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/be54388e.58e80a44.js b/assets/js/be54388e.58e80a44.js deleted file mode 100755 index f237fbcb5..000000000 --- a/assets/js/be54388e.58e80a44.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[969],{3905:(e,a,n)=>{n.d(a,{Zo:()=>c,kt:()=>f});var o=n(7294);function t(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function r(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);a&&(o=o.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{};a%2?r(Object(n),!0).forEach((function(a){t(e,a,n[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(n,a))}))}return e}function s(e,a){if(null==e)return{};var n,o,t=function(e,a){if(null==e)return{};var n,o,t={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],a.indexOf(n)>=0||(t[n]=e[n]);return t}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],a.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(t[n]=e[n])}return t}var l=o.createContext({}),d=function(e){var a=o.useContext(l),n=a;return e&&(n="function"==typeof e?e(a):i(i({},a),e)),n},c=function(e){var a=d(e.components);return o.createElement(l.Provider,{value:a},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return o.createElement(o.Fragment,{},a)}},m=o.forwardRef((function(e,a){var n=e.components,t=e.mdxType,r=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=d(n),m=t,f=p["".concat(l,".").concat(m)]||p[m]||u[m]||r;return n?o.createElement(f,i(i({ref:a},c),{},{components:n})):o.createElement(f,i({ref:a},c))}));function f(e,a){var n=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var r=n.length,i=new Array(r);i[0]=m;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[p]="string"==typeof e?e:t,i[1]=s;for(var d=2;d<r;d++)i[d]=n[d];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},7535:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>d});var o=n(3117),t=(n(7294),n(3905));const r={id:"saidas-pwm",title:"Sa\xeddas PWM",slug:"/franzininho-diy/saidas-pwm",description:"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY"},i=void 0,s={unversionedId:"FranzininhoDIY/exemplos-arduino/saidas-pwm",id:"FranzininhoDIY/exemplos-arduino/saidas-pwm",title:"Sa\xeddas PWM",description:"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/pwm.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/saidas-pwm",permalink:"/docs/franzininho-diy/saidas-pwm",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/pwm.md",tags:[],version:"current",frontMatter:{id:"saidas-pwm",title:"Sa\xeddas PWM",slug:"/franzininho-diy/saidas-pwm",description:"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY"},sidebar:"docs",previous:{title:"Entradas Anal\xf3gicas",permalink:"/docs/franzininho-diy/entradas-analogicas"},next:{title:"Pisca LED",permalink:"/docs/franzininho-diy/pisca-led"}},l={},d=[{value:"O que \xe9 PWM?",id:"o-que-\xe9-pwm",level:2},{value:"Fun\xe7\xe3o",id:"fun\xe7\xe3o",level:2},{value:"Sintaxe:",id:"sintaxe",level:3},{value:"Par\xe2metros:",id:"par\xe2metros",level:3},{value:"Exemplo",id:"exemplo",level:3},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:3}],c={toc:d},p="wrapper";function u(e){let{components:a,...r}=e;return(0,t.kt)(p,(0,o.Z)({},c,r,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("h2",{id:"o-que-\xe9-pwm"},"O que \xe9 PWM?"),(0,t.kt)("p",null,"PWM, do ingl\xeas Pulse Width Modulation, \xe9 uma t\xe9cnica utilizada por sistemas digitais para varia\xe7\xe3o do valor m\xe9dio de uma forma de onda peri\xf3dica. A t\xe9cnica consiste em manter a frequ\xeancia de uma onda quadrada fixa e variar o tempo que o sinal fica em n\xedvel l\xf3gico alto. Esse tempo \xe9 chamado de duty cycle, ou seja, o ciclo ativo da forma de onda. No gr\xe1fico abaixo s\xe3o exibidas algumas modula\xe7\xf5es PWM:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Sinal PWM",src:n(7053).Z,width:"400",height:"438"})),(0,t.kt)("p",null,"Analisando as formas de onda nota-se que a frequ\xeancia da forma de onda tem o mesmo valor e varia-se o duty cycle da forma de onda. Quando o duty cicle est\xe1 em 0% o valor m\xe9dio da sa\xedda encontra-se em 0 V e consequentemente para um duty cycle de 100% a sa\xedda assume seu valor m\xe1ximo, que no caso \xe9 5V. Para um duty cycle de 50% a sa\xedda assumir\xe1 50% do valor da tens\xe3o, 2,5 V, e assim sucessivamente para cada varia\xe7\xe3o no duty cycle. Portanto, para calcular o valor m\xe9dio da tens\xe3o de sa\xedda de um sinal PWM pode-se utilizar a seguinte equa\xe7\xe3o:"),(0,t.kt)("p",null,"Vout = ","(","duty cycle/100",")","*"," Vcc"),(0,t.kt)("p",null,"Onde:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Vout - tens\xe3o de sa\xedda em V;"),(0,t.kt)("li",{parentName:"ul"},"duty cycle - valor do ciclo ativo do PWM em %;"),(0,t.kt)("li",{parentName:"ul"},"Vcc - tens\xe3o de alimenta\xe7\xe3o em V.")),(0,t.kt)("p",null,"PWM pode ser usada para diversas aplica\xe7\xf5es, como por exemplo:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"controle de velocidade de motores;"),(0,t.kt)("li",{parentName:"ul"},"varia\xe7\xe3o da luminosidade de leds;"),(0,t.kt)("li",{parentName:"ul"},"gera\xe7\xe3o de sinais anal\xf3gicos;"),(0,t.kt)("li",{parentName:"ul"},"gera\xe7\xe3o de sinais de \xe1udio.")),(0,t.kt)("p",null,"Fonte: ",(0,t.kt)("a",{parentName:"p",href:"https://www.embarcados.com.br/pwm-do-arduino/"},"Usando as sa\xeddas PWM do Arduino")),(0,t.kt)("p",null,"Na Franzininho temos ",(0,t.kt)("strong",{parentName:"p"},"3 pinos")," que pode ser usado como saidas PWM","(","PWM0,PWM1 e PWM4",")"," conforme pinout:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Pinagem Franzininho DIY",src:n(4648).Z,width:"1209",height:"869"})),(0,t.kt)("blockquote",null,(0,t.kt)("p",{parentName:"blockquote"},(0,t.kt)("strong",{parentName:"p"},"Verificar limita\xe7\xf5es de uso dos pinos"))),(0,t.kt)("h2",{id:"fun\xe7\xe3o"},"Fun\xe7\xe3o"),(0,t.kt)("p",null,"A fun\xe7\xe3o analogWrite","(",")"," escreve um valor de PWM em um pino digital que possui a fun\xe7\xe3o PWM. Para usar o pino como sa\xedda PWM \xe9 necess\xe1rio configur\xe1-lo como sa\xedda digital."),(0,t.kt)("h3",{id:"sintaxe"},"Sintaxe:"),(0,t.kt)("p",null,(0,t.kt)("inlineCode",{parentName:"p"},"analogWrite(pino, valor);")),(0,t.kt)("h3",{id:"par\xe2metros"},"Par\xe2metros:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"pino:")," n\xfamero do pino onde ser\xe1 gerado o sinal PWM ","(","0,1,4 na Franzininho",")",";"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"valor:")," valor m\xe9dio da tens\xe3o de sa\xedda que ser\xe1 gerado por PWM, entre 0 e 255, onde 0 representa 0V e 255, 5V.")),(0,t.kt)("h3",{id:"exemplo"},"Exemplo"),(0,t.kt)("p",null,"Vamos controlar o brilho do LED conforme o valor lido no potenci\xf4metro:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Circuito",src:n(1426).Z,width:"1590",height:"1017"})),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-cpp"},"const byte LED = 1; //pino do LED\nconst byte POT = A1; //pino do Potenci\xf4metro\n\nvoid setup() {\n pinMode(LED,OUTPUT);\n}\n\nvoid loop() {\n\n int valor = analogRead(POT); // l\xea o valor do potenci\xf4metro\n analogWrite(LED,valor/4); //escreve no LED valor entre 0 e 255\n\n}\n")),(0,t.kt)("h3",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,t.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310740273604854336?view=diagram"}))}u.isMDXComponent=!0},4648:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/pinagem-V2-7047a8d5930175670acc131497791fcc.png"},1426:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/circuito-a6a0591bc42320cbe29b14bd9332f3c2.png"},7053:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/pwm-1a77c519e01b2cf6e365dd2e6e3a624e.jpg"}}]); \ No newline at end of file diff --git a/assets/js/be54388e.5c9a7930.js b/assets/js/be54388e.5c9a7930.js new file mode 100755 index 000000000..85c487ff4 --- /dev/null +++ b/assets/js/be54388e.5c9a7930.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8040],{24892:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var o=a(17624),i=a(95788);const r={id:"saidas-pwm",title:"Sa\xeddas PWM",slug:"/franzininho-diy/saidas-pwm",description:"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY"},s=void 0,t={id:"FranzininhoDIY/exemplos-arduino/saidas-pwm",title:"Sa\xeddas PWM",description:"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/pwm.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/saidas-pwm",permalink:"/docs/franzininho-diy/saidas-pwm",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/pwm.md",tags:[],version:"current",frontMatter:{id:"saidas-pwm",title:"Sa\xeddas PWM",slug:"/franzininho-diy/saidas-pwm",description:"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY"},sidebar:"docs",previous:{title:"Entradas Anal\xf3gicas",permalink:"/docs/franzininho-diy/entradas-analogicas"},next:{title:"Pisca LED",permalink:"/docs/franzininho-diy/pisca-led"}},d={},c=[{value:"O que \xe9 PWM?",id:"o-que-\xe9-pwm",level:2},{value:"Fun\xe7\xe3o",id:"fun\xe7\xe3o",level:2},{value:"Sintaxe:",id:"sintaxe",level:3},{value:"Par\xe2metros:",id:"par\xe2metros",level:3},{value:"Exemplo",id:"exemplo",level:3},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:3}];function l(e){const n={a:"a",blockquote:"blockquote",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h2,{id:"o-que-\xe9-pwm",children:"O que \xe9 PWM?"}),"\n",(0,o.jsx)(n.p,{children:"PWM, do ingl\xeas Pulse Width Modulation, \xe9 uma t\xe9cnica utilizada por sistemas digitais para varia\xe7\xe3o do valor m\xe9dio de uma forma de onda peri\xf3dica. A t\xe9cnica consiste em manter a frequ\xeancia de uma onda quadrada fixa e variar o tempo que o sinal fica em n\xedvel l\xf3gico alto. Esse tempo \xe9 chamado de duty cycle, ou seja, o ciclo ativo da forma de onda. No gr\xe1fico abaixo s\xe3o exibidas algumas modula\xe7\xf5es PWM:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Sinal PWM",src:a(87360).c+"",width:"400",height:"438"})}),"\n",(0,o.jsx)(n.p,{children:"Analisando as formas de onda nota-se que a frequ\xeancia da forma de onda tem o mesmo valor e varia-se o duty cycle da forma de onda. Quando o duty cicle est\xe1 em 0% o valor m\xe9dio da sa\xedda encontra-se em 0 V e consequentemente para um duty cycle de 100% a sa\xedda assume seu valor m\xe1ximo, que no caso \xe9 5V. Para um duty cycle de 50% a sa\xedda assumir\xe1 50% do valor da tens\xe3o, 2,5 V, e assim sucessivamente para cada varia\xe7\xe3o no duty cycle. Portanto, para calcular o valor m\xe9dio da tens\xe3o de sa\xedda de um sinal PWM pode-se utilizar a seguinte equa\xe7\xe3o:"}),"\n",(0,o.jsx)(n.p,{children:"Vout = (duty cycle/100)* Vcc"}),"\n",(0,o.jsx)(n.p,{children:"Onde:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Vout - tens\xe3o de sa\xedda em V;"}),"\n",(0,o.jsx)(n.li,{children:"duty cycle - valor do ciclo ativo do PWM em %;"}),"\n",(0,o.jsx)(n.li,{children:"Vcc - tens\xe3o de alimenta\xe7\xe3o em V."}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"PWM pode ser usada para diversas aplica\xe7\xf5es, como por exemplo:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"controle de velocidade de motores;"}),"\n",(0,o.jsx)(n.li,{children:"varia\xe7\xe3o da luminosidade de leds;"}),"\n",(0,o.jsx)(n.li,{children:"gera\xe7\xe3o de sinais anal\xf3gicos;"}),"\n",(0,o.jsx)(n.li,{children:"gera\xe7\xe3o de sinais de \xe1udio."}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Fonte: ",(0,o.jsx)(n.a,{href:"https://www.embarcados.com.br/pwm-do-arduino/",children:"Usando as sa\xeddas PWM do Arduino"})]}),"\n",(0,o.jsxs)(n.p,{children:["Na Franzininho temos ",(0,o.jsx)(n.strong,{children:"3 pinos"})," que pode ser usado como saidas PWM(PWM0,PWM1 e PWM4) conforme pinout:"]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Pinagem Franzininho DIY",src:a(4428).c+"",width:"1209",height:"869"})}),"\n",(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Verificar limita\xe7\xf5es de uso dos pinos"})}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"fun\xe7\xe3o",children:"Fun\xe7\xe3o"}),"\n",(0,o.jsx)(n.p,{children:"A fun\xe7\xe3o analogWrite() escreve um valor de PWM em um pino digital que possui a fun\xe7\xe3o PWM. Para usar o pino como sa\xedda PWM \xe9 necess\xe1rio configur\xe1-lo como sa\xedda digital."}),"\n",(0,o.jsx)(n.h3,{id:"sintaxe",children:"Sintaxe:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.code,{children:"analogWrite(pino, valor);"})}),"\n",(0,o.jsx)(n.h3,{id:"par\xe2metros",children:"Par\xe2metros:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"pino:"})," n\xfamero do pino onde ser\xe1 gerado o sinal PWM (0,1,4 na Franzininho);"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"valor:"})," valor m\xe9dio da tens\xe3o de sa\xedda que ser\xe1 gerado por PWM, entre 0 e 255, onde 0 representa 0V e 255, 5V."]}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"exemplo",children:"Exemplo"}),"\n",(0,o.jsx)(n.p,{children:"Vamos controlar o brilho do LED conforme o valor lido no potenci\xf4metro:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Circuito",src:a(90876).c+"",width:"1590",height:"1017"})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-cpp",children:"const byte LED = 1; //pino do LED\nconst byte POT = A1; //pino do Potenci\xf4metro\n\nvoid setup() {\n pinMode(LED,OUTPUT);\n}\n\nvoid loop() {\n\n int valor = analogRead(POT); // l\xea o valor do potenci\xf4metro\n analogWrite(LED,valor/4); //escreve no LED valor entre 0 e 255\n\n}\n"})}),"\n",(0,o.jsx)(n.h3,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310740273604854336?view=diagram"})]})}function m(e={}){const{wrapper:n}={...(0,i.MN)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},95788:(e,n,a)=>{a.d(n,{MN:()=>c});var o=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,o)}return a}function s(e){for(var n=1;n<arguments.length;n++){var a=null!=arguments[n]?arguments[n]:{};n%2?r(Object(a),!0).forEach((function(n){i(e,n,a[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))}))}return e}function t(e,n){if(null==e)return{};var a,o,i=function(e,n){if(null==e)return{};var a,o,i={},r=Object.keys(e);for(o=0;o<r.length;o++)a=r[o],n.indexOf(a)>=0||(i[a]=e[a]);return i}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)a=r[o],n.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var d=o.createContext({}),c=function(e){var n=o.useContext(d),a=n;return e&&(a="function"==typeof e?e(n):s(s({},n),e)),a},l={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},m=o.forwardRef((function(e,n){var a=e.components,i=e.mdxType,r=e.originalType,d=e.parentName,m=t(e,["components","mdxType","originalType","parentName"]),p=c(a),u=i,h=p["".concat(d,".").concat(u)]||p[u]||l[u]||r;return a?o.createElement(h,s(s({ref:n},m),{},{components:a})):o.createElement(h,s({ref:n},m))}));m.displayName="MDXCreateElement"},4428:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/pinagem-V2-7047a8d5930175670acc131497791fcc.png"},90876:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/circuito-a6a0591bc42320cbe29b14bd9332f3c2.png"},87360:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/pwm-1a77c519e01b2cf6e365dd2e6e3a624e.jpg"}}]); \ No newline at end of file diff --git a/assets/js/c397fa15.3860495d.js b/assets/js/c397fa15.3860495d.js new file mode 100755 index 000000000..5934ee28f --- /dev/null +++ b/assets/js/c397fa15.3860495d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5280],{18276:(i,o,e)=>{e.r(o),e.d(o,{assets:()=>c,contentTitle:()=>t,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var r=e(17624),n=e(95788);const a={id:"circuitpython-primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-circuitpython/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi",author:"Diana Santos"},t=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos",title:"Primeiros Passos",description:"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/circuitpython.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/primeiros-passos",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/circuitpython.md",tags:[],version:"current",frontMatter:{id:"circuitpython-primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-circuitpython/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Primeiros passos com a AWS",permalink:"/docs/franzininho-wifi/exemplos-espidf/aws"},next:{title:"Instalando as ferramentas",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/ferramentas"}},c={},p=[{value:"O que \xe9 CircuitPython?",id:"o-que-\xe9-circuitpython",level:2},{value:"Instala\xe7\xe3o",id:"instala\xe7\xe3o",level:2},{value:"Grava\xe7\xe3o do CircuitPython na Franzininho WiFi",id:"grava\xe7\xe3o-do-circuitpython-na-franzininho-wifi",level:2}];function d(i){const o={a:"a",admonition:"admonition",h2:"h2",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.MN)(),...i.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.p,{children:"Este documento pretende ajud\xe1-lo a configurar a placa Franzininho WiFi para ser programada usando o CircuitPython."}),"\n",(0,r.jsxs)(o.p,{children:["O CircuitPython \xe9 um fork do projeto MicroPython, realizado pela empresa Adafruit. A Adafruit vem desenvolvendo diversas bibliotecas e recursos para programa\xe7\xe3o de microcontroladores com Python. Saiba mais sobre o projeto em: ",(0,r.jsx)(o.a,{href:"https://circuitpython.org/",children:"CircuitPython"}),"."]}),"\n",(0,r.jsx)(o.p,{children:"A seguir apresentamos os passos para grava\xe7\xe3o do CircuitPython na Franzininho WiFi e preparar o ambiente."}),"\n",(0,r.jsx)(o.h2,{id:"o-que-\xe9-circuitpython",children:"O que \xe9 CircuitPython?"}),"\n",(0,r.jsx)(o.p,{children:"CircuitPython \xe9 uma linguagem de programa\xe7\xe3o projetada para simplificar a experimenta\xe7\xe3o e o aprendizado de programa\xe7\xe3o em placas com microcontroladores de baixo custo. Isso torna os primeiros passos mais f\xe1ceis do que nunca, sem a necessidade de downloads iniciais no computador de trabalho. Assim, ap\xf3s configurar a placa, abra qualquer editor de texto e comece a editar o c\xf3digo."}),"\n",(0,r.jsxs)(o.p,{children:["O CircuitPython traz o Python para dentro dos microcontroladores. Voc\xea pode saber mais sobre o projeto CircuitPython aqui: ",(0,r.jsx)(o.a,{href:"http://learn.adafruit.com/welcome-to-circuitpython/what-is-circuitpython",children:"learn.adafruit.com/circuitpython"})]}),"\n",(0,r.jsxs)(o.p,{children:["A placa Franzininho WiFi foi ",(0,r.jsx)(o.a,{href:"https://circuitpython.org/downloads?q=franzininho",children:"adicionada ao CircuitPython"})," e todas as releases do CircuitPyhton ser\xe3o compilados para ela. Esse foi um passo muito importante para o projeto e possibilitar\xe1 o desenvolvimento de aplica\xe7\xf5es com o ESP32-S2 usando a linguagem Python."]}),"\n",(0,r.jsx)(o.h2,{id:"instala\xe7\xe3o",children:"Instala\xe7\xe3o"}),"\n",(0,r.jsx)(o.p,{children:"Antes de come\xe7ar a divers\xe3o de programar a Franzininho WIFI com o CircuitPython, precisamos realizar alguns passos para configura\xe7\xe3o. Nesta etapa gravaremos o firmware do CircuitPython na Franzininho WiFi e prepararemos o ambiente para voc\xea usar sua placa."}),"\n",(0,r.jsx)(o.admonition,{type:"info",children:(0,r.jsx)(o.p,{children:"Se sua placa j\xe1 est\xe1 com o CircuitPython, voc\xea n\xe3o precisa fazer essa etapa. Para verificar se sua placa est\xe1 com CircuitPython plugue-a no computador e veja se \xe9 criado um dispositivo de armazenamento chamado CIRCUITPY. Caso contr\xe1rio, fa\xe7a o procedimento abaixo."})}),"\n",(0,r.jsx)(o.p,{children:"Nesse momento voc\xea precisar\xe1 apenas de um computador com o sistema operacional que voc\xea est\xe1 acostumado a usar e a placa Franzininho WiFi."}),"\n",(0,r.jsx)(o.p,{children:"Bora! Colocar a m\xe3o na massa?"}),"\n",(0,r.jsx)(o.h2,{id:"grava\xe7\xe3o-do-circuitpython-na-franzininho-wifi",children:"Grava\xe7\xe3o do CircuitPython na Franzininho WiFi"}),"\n",(0,r.jsx)("iframe",{width:"809",height:"455",src:"https://www.youtube.com/embed/wU7wvfxmcS0",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,r.jsxs)(o.p,{children:["Ferramenta de grava\xe7\xe3o: ",(0,r.jsx)(o.a,{href:"https://franzininho.github.io/webdfu-franzininho-wifi/dfu-util/",children:"https://franzininho.github.io/webdfu-franzininho-wifi/dfu-util/"})]}),"\n",(0,r.jsxs)(o.table,{children:[(0,r.jsx)(o.thead,{children:(0,r.jsxs)(o.tr,{children:[(0,r.jsx)(o.th,{children:"Autor"}),(0,r.jsx)(o.th,{children:(0,r.jsx)(o.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]})}),(0,r.jsx)(o.tbody,{children:(0,r.jsxs)(o.tr,{children:[(0,r.jsx)(o.td,{children:"Data:"}),(0,r.jsx)(o.td,{children:"16/09/2021"})]})})]})]})}function u(i={}){const{wrapper:o}={...(0,n.MN)(),...i.components};return o?(0,r.jsx)(o,{...i,children:(0,r.jsx)(d,{...i})}):d(i)}},95788:(i,o,e)=>{e.d(o,{MN:()=>p});var r=e(11504);function n(i,o,e){return o in i?Object.defineProperty(i,o,{value:e,enumerable:!0,configurable:!0,writable:!0}):i[o]=e,i}function a(i,o){var e=Object.keys(i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);o&&(r=r.filter((function(o){return Object.getOwnPropertyDescriptor(i,o).enumerable}))),e.push.apply(e,r)}return e}function t(i){for(var o=1;o<arguments.length;o++){var e=null!=arguments[o]?arguments[o]:{};o%2?a(Object(e),!0).forEach((function(o){n(i,o,e[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(i,Object.getOwnPropertyDescriptors(e)):a(Object(e)).forEach((function(o){Object.defineProperty(i,o,Object.getOwnPropertyDescriptor(e,o))}))}return i}function s(i,o){if(null==i)return{};var e,r,n=function(i,o){if(null==i)return{};var e,r,n={},a=Object.keys(i);for(r=0;r<a.length;r++)e=a[r],o.indexOf(e)>=0||(n[e]=i[e]);return n}(i,o);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(i);for(r=0;r<a.length;r++)e=a[r],o.indexOf(e)>=0||Object.prototype.propertyIsEnumerable.call(i,e)&&(n[e]=i[e])}return n}var c=r.createContext({}),p=function(i){var o=r.useContext(c),e=o;return i&&(e="function"==typeof i?i(o):t(t({},o),i)),e},d={inlineCode:"code",wrapper:function(i){var o=i.children;return r.createElement(r.Fragment,{},o)}},u=r.forwardRef((function(i,o){var e=i.components,n=i.mdxType,a=i.originalType,c=i.parentName,u=s(i,["components","mdxType","originalType","parentName"]),l=p(e),h=n,m=l["".concat(c,".").concat(h)]||l[h]||d[h]||a;return e?r.createElement(m,t(t({ref:o},u),{},{components:e})):r.createElement(m,t({ref:o},u))}));u.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/c397fa15.e2941658.js b/assets/js/c397fa15.e2941658.js deleted file mode 100755 index 8c659633d..000000000 --- a/assets/js/c397fa15.e2941658.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4253],{3905:(e,o,r)=>{r.d(o,{Zo:()=>u,kt:()=>h});var i=r(7294);function a(e,o,r){return o in e?Object.defineProperty(e,o,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[o]=r,e}function t(e,o){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);o&&(i=i.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),r.push.apply(r,i)}return r}function n(e){for(var o=1;o<arguments.length;o++){var r=null!=arguments[o]?arguments[o]:{};o%2?t(Object(r),!0).forEach((function(o){a(e,o,r[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):t(Object(r)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(r,o))}))}return e}function s(e,o){if(null==e)return{};var r,i,a=function(e,o){if(null==e)return{};var r,i,a={},t=Object.keys(e);for(i=0;i<t.length;i++)r=t[i],o.indexOf(r)>=0||(a[r]=e[r]);return a}(e,o);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(i=0;i<t.length;i++)r=t[i],o.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=i.createContext({}),c=function(e){var o=i.useContext(p),r=o;return e&&(r="function"==typeof e?e(o):n(n({},o),e)),r},u=function(e){var o=c(e.components);return i.createElement(p.Provider,{value:o},e.children)},l="mdxType",m={inlineCode:"code",wrapper:function(e){var o=e.children;return i.createElement(i.Fragment,{},o)}},d=i.forwardRef((function(e,o){var r=e.components,a=e.mdxType,t=e.originalType,p=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),l=c(r),d=a,h=l["".concat(p,".").concat(d)]||l[d]||m[d]||t;return r?i.createElement(h,n(n({ref:o},u),{},{components:r})):i.createElement(h,n({ref:o},u))}));function h(e,o){var r=arguments,a=o&&o.mdxType;if("string"==typeof e||a){var t=r.length,n=new Array(t);n[0]=d;var s={};for(var p in o)hasOwnProperty.call(o,p)&&(s[p]=o[p]);s.originalType=e,s[l]="string"==typeof e?e:a,n[1]=s;for(var c=2;c<t;c++)n[c]=r[c];return i.createElement.apply(null,n)}return i.createElement.apply(null,r)}d.displayName="MDXCreateElement"},1365:(e,o,r)=>{r.r(o),r.d(o,{assets:()=>p,contentTitle:()=>n,default:()=>m,frontMatter:()=>t,metadata:()=>s,toc:()=>c});var i=r(3117),a=(r(7294),r(3905));const t={id:"circuitpython-primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-circuitpython/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi",author:"Diana Santos"},n=void 0,s={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos",title:"Primeiros Passos",description:"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/circuitpython.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/primeiros-passos",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/circuitpython.md",tags:[],version:"current",frontMatter:{id:"circuitpython-primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-circuitpython/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Primeiros passos com a AWS",permalink:"/docs/franzininho-wifi/exemplos-espidf/aws"},next:{title:"Instalando as ferramentas",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/ferramentas"}},p={},c=[{value:"O que \xe9 CircuitPython?",id:"o-que-\xe9-circuitpython",level:2},{value:"Instala\xe7\xe3o",id:"instala\xe7\xe3o",level:2},{value:"Grava\xe7\xe3o do CircuitPython na Franzininho WiFi",id:"grava\xe7\xe3o-do-circuitpython-na-franzininho-wifi",level:2}],u={toc:c},l="wrapper";function m(e){let{components:o,...r}=e;return(0,a.kt)(l,(0,i.Z)({},u,r,{components:o,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Este documento pretende ajud\xe1-lo a configurar a placa Franzininho WiFi para ser programada usando o CircuitPython."),(0,a.kt)("p",null,"O CircuitPython \xe9 um fork do projeto MicroPython, realizado pela empresa Adafruit. A Adafruit vem desenvolvendo diversas bibliotecas e recursos para programa\xe7\xe3o de microcontroladores com Python. Saiba mais sobre o projeto em: ",(0,a.kt)("a",{parentName:"p",href:"https://circuitpython.org/"},"CircuitPython"),"."),(0,a.kt)("p",null,"A seguir apresentamos os passos para grava\xe7\xe3o do CircuitPython na Franzininho WiFi e preparar o ambiente."),(0,a.kt)("h2",{id:"o-que-\xe9-circuitpython"},"O que \xe9 CircuitPython?"),(0,a.kt)("p",null,"CircuitPython \xe9 uma linguagem de programa\xe7\xe3o projetada para simplificar a experimenta\xe7\xe3o e o aprendizado de programa\xe7\xe3o em placas com microcontroladores de baixo custo. Isso torna os primeiros passos mais f\xe1ceis do que nunca, sem a necessidade de downloads iniciais no computador de trabalho. Assim, ap\xf3s configurar a placa, abra qualquer editor de texto e comece a editar o c\xf3digo."),(0,a.kt)("p",null,"O CircuitPython traz o Python para dentro dos microcontroladores. Voc\xea pode saber mais sobre o projeto CircuitPython aqui: ",(0,a.kt)("a",{parentName:"p",href:"http://learn.adafruit.com/welcome-to-circuitpython/what-is-circuitpython"},"learn.adafruit.com/circuitpython")),(0,a.kt)("p",null,"A placa Franzininho WiFi foi ",(0,a.kt)("a",{parentName:"p",href:"https://circuitpython.org/downloads?q=franzininho"},"adicionada ao CircuitPython")," e todas as releases do CircuitPyhton ser\xe3o compilados para ela. Esse foi um passo muito importante para o projeto e possibilitar\xe1 o desenvolvimento de aplica\xe7\xf5es com o ESP32-S2 usando a linguagem Python."),(0,a.kt)("h2",{id:"instala\xe7\xe3o"},"Instala\xe7\xe3o"),(0,a.kt)("p",null,"Antes de come\xe7ar a divers\xe3o de programar a Franzininho WIFI com o CircuitPython, precisamos realizar alguns passos para configura\xe7\xe3o. Nesta etapa gravaremos o firmware do CircuitPython na Franzininho WiFi e prepararemos o ambiente para voc\xea usar sua placa."),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Se sua placa j\xe1 est\xe1 com o CircuitPython, voc\xea n\xe3o precisa fazer essa etapa. Para verificar se sua placa est\xe1 com CircuitPython plugue-a no computador e veja se \xe9 criado um dispositivo de armazenamento chamado CIRCUITPY. Caso contr\xe1rio, fa\xe7a o procedimento abaixo.")),(0,a.kt)("p",null,"Nesse momento voc\xea precisar\xe1 apenas de um computador com o sistema operacional que voc\xea est\xe1 acostumado a usar e a placa Franzininho WiFi."),(0,a.kt)("p",null,"Bora! Colocar a m\xe3o na massa?"),(0,a.kt)("h2",{id:"grava\xe7\xe3o-do-circuitpython-na-franzininho-wifi"},"Grava\xe7\xe3o do CircuitPython na Franzininho WiFi"),(0,a.kt)("iframe",{width:"809",height:"455",src:"https://www.youtube.com/embed/wU7wvfxmcS0",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,a.kt)("p",null,"Ferramenta de grava\xe7\xe3o: ",(0,a.kt)("a",{parentName:"p",href:"https://franzininho.github.io/webdfu-franzininho-wifi/dfu-util/"},"https://franzininho.github.io/webdfu-franzininho-wifi/dfu-util/")),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Autor"),(0,a.kt)("th",{parentName:"tr",align:null},(0,a.kt)("a",{parentName:"th",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza")))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Data:"),(0,a.kt)("td",{parentName:"tr",align:null},"16/09/2021")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c4380c1f.e102c5c5.js b/assets/js/c4380c1f.e102c5c5.js new file mode 100755 index 000000000..6818262ce --- /dev/null +++ b/assets/js/c4380c1f.e102c5c5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6776],{6580:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>l,contentTitle:()=>t,default:()=>m,frontMatter:()=>n,metadata:()=>s,toc:()=>d});var i=a(17624),r=a(95788);const n={id:"biblioteca-laboratorioFW",title:"laboratorioFW",slug:"biblioteca-laboratorioFW",description:"O que \xe9 a biblioteca laboratorioFW"},t=void 0,s={id:"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",title:"laboratorioFW",description:"O que \xe9 a biblioteca laboratorioFW",source:"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW.md",sourceDirName:"LaboratorioSistemasIot/bibliotecas",slug:"/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",permalink:"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW.md",tags:[],version:"current",frontMatter:{id:"biblioteca-laboratorioFW",title:"laboratorioFW",slug:"biblioteca-laboratorioFW",description:"O que \xe9 a biblioteca laboratorioFW"},sidebar:"docs",previous:{title:"Adaptador Arduino Uno",permalink:"/docs/LaboratorioSistemasIot/adaptadores/arduino-uno"},next:{title:"laboratorioFW_ARDUNO",permalink:"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO"}},l={},d=[{value:"Como instalar a biblioteca",id:"como-instalar-a-biblioteca",level:2},{value:"Como usar a biblioteca",id:"como-usar-a-biblioteca",level:2},{value:"Exemplo de utiliza\xe7\xe3o:",id:"exemplo-de-utiliza\xe7\xe3o",level:2},{value:"Exemplos implementados:",id:"exemplos-implementados",level:2},{value:"testes_completos.ino",id:"testes_completosino",level:3},{value:"adivinhe_a_senha.ino",id:"adivinhe_a_senhaino",level:3},{value:"ativar_led_RGB_com_potenciometro_e_botoes.ino",id:"ativar_led_rgb_com_potenciometro_e_botoesino",level:3},{value:"ativar_servo_motor_com_botoes.ino",id:"ativar_servo_motor_com_botoesino",level:3},{value:"contagem_display_7seg.ino",id:"contagem_display_7segino",level:3},{value:"controle_led_com_ldr.ino",id:"controle_led_com_ldrino",level:3},{value:"do_re_mi_fa.ino",id:"do_re_mi_faino",level:3},{value:"genio.ino",id:"genioino",level:3},{value:"leitura_do_teclado.ino",id:"leitura_do_tecladoino",level:3},{value:"leitura_sensores_externos.ino",id:"leitura_sensores_externosino",level:3},{value:"leitura_sensores_grove.ino",id:"leitura_sensores_groveino",level:3},{value:"leitura_umidade_temperatura_oled.ino",id:"leitura_umidade_temperatura_oledino",level:3},{value:"movimentar_elemento_oled_joystick.ino",id:"movimentar_elemento_oled_joystickino",level:3}];function c(e){const o={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,r.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(o.p,{children:["Nesta biblioteca \xe9 poss\xedvel encontrar o mapeamento entre a pinagem da placa ",(0,i.jsx)(o.strong,{children:"Franzininho Wifi"})," e a codifica\xe7\xe3o dos pinos de ativa\xe7\xe3o da placa Laborat\xf3rio de sistemas embarcados e IoT e exemplos de utiliza\xe7\xe3o dos perif\xe9ricos dispon\xedveis na placa."]}),"\n",(0,i.jsxs)(o.p,{children:[(0,i.jsx)(o.a,{href:"https://github.com/Franzininho/biblioteca-laboratorioFW",children:"Clique aqui"})," para acessar o reposit\xf3rio da biblioteca no Github."]}),"\n",(0,i.jsx)(o.h2,{id:"como-instalar-a-biblioteca",children:"Como instalar a biblioteca"}),"\n",(0,i.jsxs)(o.ol,{children:["\n",(0,i.jsxs)(o.li,{children:["Fa\xe7a o donwload da biblioteca em formato zip clicando em ",(0,i.jsx)(o.strong,{children:"Code"})," e depois em ",(0,i.jsx)(o.strong,{children:"Download ZIP"})]}),"\n"]}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{src:a(68160).c+"",width:"528",height:"398"})}),"\n",(0,i.jsxs)(o.ol,{start:"2",children:["\n",(0,i.jsx)(o.li,{children:"Abra a IDE do Arduino"}),"\n",(0,i.jsx)(o.li,{children:"V\xe1 em Sketch > Include Library > Add .ZIP Library"}),"\n"]}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{src:a(5056).c+"",width:"657",height:"378"})}),"\n",(0,i.jsxs)(o.ol,{start:"4",children:["\n",(0,i.jsx)(o.li,{children:"Selecione o arquivo zip baixado e clique em ok"}),"\n",(0,i.jsx)(o.li,{children:"Opcional: Procure pelos exemplos da biblioteca em File > Examples"}),"\n"]}),"\n",(0,i.jsx)(o.h2,{id:"como-usar-a-biblioteca",children:"Como usar a biblioteca"}),"\n",(0,i.jsxs)(o.p,{children:["Para utilizar a biblioteca basta inclu\xed-la no seu arquivo de c\xf3digo com a linha ",(0,i.jsx)(o.code,{children:"#include<laboratorioFW.h>"}),". Depois disso, voc\xea pode utilizar os c\xf3digos dos pinos de ativa\xe7\xe3o na placa dentro do seu c\xf3digo."]}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsxs)(o.strong,{children:["Importante : Os algorismos do c\xf3digo do pino de ativa\xe7\xe3o s\xe3o separados por um caractere de ",(0,i.jsx)(o.code,{children:"_"}),", ou seja o pino de ativa\xe7\xe3o C0 pode ser acessado no c\xf3digo atrav\xe9s do c\xf3digo C_0 e assim por diante."]})}),"\n",(0,i.jsx)(o.h2,{id:"exemplo-de-utiliza\xe7\xe3o",children:"Exemplo de utiliza\xe7\xe3o:"}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-c",children:"#include <laborarotioFW.h>\n\n#define led A_1\n\nvoid setup(){\n pinMode(led,OUTPUT);\n}\n\nvoid loop{\n digitalWrite(led,HIGH);\n delay(1000);\n digitalWrite(led,LOW);\n delay(1000);\n}\n"})}),"\n",(0,i.jsx)(o.h2,{id:"exemplos-implementados",children:"Exemplos implementados:"}),"\n",(0,i.jsx)(o.h3,{id:"testes_completosino",children:"testes_completos.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo temos todos os c\xf3digos necess\xe1rios para os testes de todos os perif\xe9ricos dispon\xedveis na placa. Este c\xf3digo \xe9 um c\xf3digo para a valida\xe7\xe3o da placa e n\xe3o para ser utilizado no cotidiano."}),"\n",(0,i.jsx)(o.h3,{id:"adivinhe_a_senhaino",children:"adivinhe_a_senha.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo implementamos um sistema de verifica\xe7\xe3o de senha utilizando o teclado matricial e a biblioteca ",(0,i.jsx)(o.code,{children:"Keypad"})," para fazer o mapeamento\ndo teclado. Neste sistema, o usu\xe1rio deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usu\xe1rio indica que terminou de digitar a senha apertando um o bot\xe3o correspondente ao caractere ",(0,i.jsx)(o.code,{children:"*"})," ou ",(0,i.jsx)(o.code,{children:"#"}),", essa sequ\xeancia \xe9 comparada com uma senha previamente definida no c\xf3digo. Um led \xe9 aceso para indicar se a senha est\xe1 correta ou n\xe3o e uma mensagem com essa informa\xe7\xe3o \xe9 impresso no monitor serial."]}),"\n",(0,i.jsx)(o.h3,{id:"ativar_led_rgb_com_potenciometro_e_botoesino",children:"ativar_led_RGB_com_potenciometro_e_botoes.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenci\xf4metro e tr\xeas bot\xf5es. Os tr\xeas bot\xf5es s\xe3o utilizados para selecionar qual cor do LED RGB ser\xe1 controlada (vermelho, verde e azul) e a leitura anal\xf3gica do potenci\xf4metro \xe9 usada para dosar a intensidade da cor do terminal."}),"\n",(0,i.jsx)(o.h3,{id:"ativar_servo_motor_com_botoesino",children:"ativar_servo_motor_com_botoes.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, utilizamos dois bot\xf5es para controlar a posi\xe7\xe3o de um servo motor. Os bot\xf5es s\xe3o associados no c\xf3digo \xe0s dire\xe7\xf5es esquerda e direita e alteram o \xe2ngulo do servo fazendo com que seja poss\xedvel moviment\xe1-lo nas duas dire\xe7\xf5es. Foi usada a biblioteca ESP32_S2_ISR_Servo."}),"\n",(0,i.jsx)(o.h3,{id:"contagem_display_7segino",children:"contagem_display_7seg.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos."}),"\n",(0,i.jsx)(o.h3,{id:"controle_led_com_ldrino",children:"controle_led_com_ldr.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura \xe9 mapeada e o valor resultante \xe9 usado para acender um LED. O exemplo tamb\xe9m conta com um bot\xe3o que controla um estado interno do programa e seleciona se a leitura ser\xe1 impressa como \xe9 lida ou com l\xf3gica complementar."}),"\n",(0,i.jsx)(o.h3,{id:"do_re_mi_faino",children:"do_re_mi_fa.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo uma m\xfasica \xe9 tocada pelo buzzer em conjunto com a ativa\xe7\xe3o\ndo LED RGB endere\xe7\xe1vel. O programa utiliza a biblioteca ",(0,i.jsx)(o.code,{children:"Adafruit_NeoPixel"})," para controlar o LED."]}),"\n",(0,i.jsx)(o.h3,{id:"genioino",children:"genio.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, implementamos o jogo Simon, tamb\xe9m conhecido como g\xeanio. Neste jogo, quatro LEDs s\xe3o ativados em uma sequ\xeancia gerada aleat\xf3riamente e essa sequ\xeancia \xe9 apresentada para o jogador, que deve repetir a sequ\xeancia na ordem correta pressionando os bot\xf5es correspondentes. Quando os LEDs acendem, um som correspondente \xe9 tocado no buzzer."}),"\n",(0,i.jsx)(o.h3,{id:"leitura_do_tecladoino",children:"leitura_do_teclado.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e\na imprimimos essa tecla no no monitor serial. A biblioteca ",(0,i.jsx)(o.code,{children:"Keypad"})," \xe9 utilizada para fazer o mapeamento do teclado."]}),"\n",(0,i.jsx)(o.h3,{id:"leitura_sensores_externosino",children:"leitura_sensores_externos.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets\npara conectores externos da placa e imprimimos os valores lidos no monitor serial."}),"\n",(0,i.jsx)(o.h3,{id:"leitura_sensores_groveino",children:"leitura_sensores_grove.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial."}),"\n",(0,i.jsx)(o.h3,{id:"leitura_umidade_temperatura_oledino",children:"leitura_umidade_temperatura_oled.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, s\xe3o utilizadas as bibliotecas ",(0,i.jsx)(o.code,{children:"DTH"})," e ",(0,i.jsx)(o.code,{children:"SSD1306Wire"}),"."]}),"\n",(0,i.jsx)(o.h3,{id:"movimentar_elemento_oled_joystickino",children:"movimentar_elemento_oled_joystick.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo utilizamos o display OLED para mostrar um asterisco que pode ser controlado pelo m\xf3dulo de joystick se movendo no display. Foi utilizada a biblioteca ",(0,i.jsx)(o.code,{children:"SSD1306Wire"}),"."]}),"\n",(0,i.jsx)(o.admonition,{title:"Obs.",type:"info",children:(0,i.jsxs)(o.p,{children:["Este projeto foi desenvolvido como parte do Trabalho de Conclus\xe3o de Curso de ",(0,i.jsx)(o.a,{href:"https://github.com/LelePG",children:"Let\xedcia Pegoraro Garcez"}),"."]})})]})}function m(e={}){const{wrapper:o}={...(0,r.MN)(),...e.components};return o?(0,i.jsx)(o,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},95788:(e,o,a)=>{a.d(o,{MN:()=>d});var i=a(11504);function r(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function n(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);o&&(i=i.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,i)}return a}function t(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?n(Object(a),!0).forEach((function(o){r(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function s(e,o){if(null==e)return{};var a,i,r=function(e,o){if(null==e)return{};var a,i,r={},n=Object.keys(e);for(i=0;i<n.length;i++)a=n[i],o.indexOf(a)>=0||(r[a]=e[a]);return r}(e,o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i<n.length;i++)a=n[i],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=i.createContext({}),d=function(e){var o=i.useContext(l),a=o;return e&&(a="function"==typeof e?e(o):t(t({},o),e)),a},c={inlineCode:"code",wrapper:function(e){var o=e.children;return i.createElement(i.Fragment,{},o)}},m=i.forwardRef((function(e,o){var a=e.components,r=e.mdxType,n=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),p=d(a),u=r,b=p["".concat(l,".").concat(u)]||p[u]||c[u]||n;return a?i.createElement(b,t(t({ref:o},m),{},{components:a})):i.createElement(b,t({ref:o},m))}));m.displayName="MDXCreateElement"},5056:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/add-zip-ce38fdcac233471a2c4ff935e87d70bd.png"},68160:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/download-zip-ba60fb48387d2208e3f003c8afe3db77.png"}}]); \ No newline at end of file diff --git a/assets/js/c4380c1f.f5b4cd1d.js b/assets/js/c4380c1f.f5b4cd1d.js deleted file mode 100755 index 5c9074106..000000000 --- a/assets/js/c4380c1f.f5b4cd1d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2976],{3905:(e,o,a)=>{a.d(o,{Zo:()=>c,kt:()=>b});var t=a(7294);function i(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function r(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,t)}return a}function n(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?r(Object(a),!0).forEach((function(o){i(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function l(e,o){if(null==e)return{};var a,t,i=function(e,o){if(null==e)return{};var a,t,i={},r=Object.keys(e);for(t=0;t<r.length;t++)a=r[t],o.indexOf(a)>=0||(i[a]=e[a]);return i}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t<r.length;t++)a=r[t],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=t.createContext({}),d=function(e){var o=t.useContext(s),a=o;return e&&(a="function"==typeof e?e(o):n(n({},o),e)),a},c=function(e){var o=d(e.components);return t.createElement(s.Provider,{value:o},e.children)},m="mdxType",p={inlineCode:"code",wrapper:function(e){var o=e.children;return t.createElement(t.Fragment,{},o)}},u=t.forwardRef((function(e,o){var a=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=d(a),u=i,b=m["".concat(s,".").concat(u)]||m[u]||p[u]||r;return a?t.createElement(b,n(n({ref:o},c),{},{components:a})):t.createElement(b,n({ref:o},c))}));function b(e,o){var a=arguments,i=o&&o.mdxType;if("string"==typeof e||i){var r=a.length,n=new Array(r);n[0]=u;var l={};for(var s in o)hasOwnProperty.call(o,s)&&(l[s]=o[s]);l.originalType=e,l[m]="string"==typeof e?e:i,n[1]=l;for(var d=2;d<r;d++)n[d]=a[d];return t.createElement.apply(null,n)}return t.createElement.apply(null,a)}u.displayName="MDXCreateElement"},2586:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>s,contentTitle:()=>n,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var t=a(3117),i=(a(7294),a(3905));const r={id:"biblioteca-laboratorioFW",title:"laboratorioFW",slug:"biblioteca-laboratorioFW",description:"O que \xe9 a biblioteca laboratorioFW"},n=void 0,l={unversionedId:"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",id:"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",title:"laboratorioFW",description:"O que \xe9 a biblioteca laboratorioFW",source:"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW.md",sourceDirName:"LaboratorioSistemasIot/bibliotecas",slug:"/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",permalink:"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW.md",tags:[],version:"current",frontMatter:{id:"biblioteca-laboratorioFW",title:"laboratorioFW",slug:"biblioteca-laboratorioFW",description:"O que \xe9 a biblioteca laboratorioFW"},sidebar:"docs",previous:{title:"Adaptador Arduino Uno",permalink:"/docs/LaboratorioSistemasIot/adaptadores/arduino-uno"},next:{title:"laboratorioFW_ARDUNO",permalink:"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO"}},s={},d=[{value:"Como instalar a biblioteca",id:"como-instalar-a-biblioteca",level:2},{value:"Como usar a biblioteca",id:"como-usar-a-biblioteca",level:2},{value:"Exemplo de utiliza\xe7\xe3o:",id:"exemplo-de-utiliza\xe7\xe3o",level:2},{value:"Exemplos implementados:",id:"exemplos-implementados",level:2},{value:"testes_completos.ino",id:"testes_completosino",level:3},{value:"adivinhe_a_senha.ino",id:"adivinhe_a_senhaino",level:3},{value:"ativar_led_RGB_com_potenciometro_e_botoes.ino",id:"ativar_led_rgb_com_potenciometro_e_botoesino",level:3},{value:"ativar_servo_motor_com_botoes.ino",id:"ativar_servo_motor_com_botoesino",level:3},{value:"contagem_display_7seg.ino",id:"contagem_display_7segino",level:3},{value:"controle_led_com_ldr.ino",id:"controle_led_com_ldrino",level:3},{value:"do_re_mi_fa.ino",id:"do_re_mi_faino",level:3},{value:"genio.ino",id:"genioino",level:3},{value:"leitura_do_teclado.ino",id:"leitura_do_tecladoino",level:3},{value:"leitura_sensores_externos.ino",id:"leitura_sensores_externosino",level:3},{value:"leitura_sensores_grove.ino",id:"leitura_sensores_groveino",level:3},{value:"leitura_umidade_temperatura_oled.ino",id:"leitura_umidade_temperatura_oledino",level:3},{value:"movimentar_elemento_oled_joystick.ino",id:"movimentar_elemento_oled_joystickino",level:3}],c={toc:d},m="wrapper";function p(e){let{components:o,...r}=e;return(0,i.kt)(m,(0,t.Z)({},c,r,{components:o,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Nesta biblioteca \xe9 poss\xedvel encontrar o mapeamento entre a pinagem da placa ",(0,i.kt)("strong",{parentName:"p"},"Franzininho Wifi")," e a codifica\xe7\xe3o dos pinos de ativa\xe7\xe3o da placa Laborat\xf3rio de sistemas embarcados e IoT e exemplos de utiliza\xe7\xe3o dos perif\xe9ricos dispon\xedveis na placa."),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/biblioteca-laboratorioFW"},"Clique aqui")," para acessar o reposit\xf3rio da biblioteca no Github."),(0,i.kt)("h2",{id:"como-instalar-a-biblioteca"},"Como instalar a biblioteca"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Fa\xe7a o donwload da biblioteca em formato zip clicando em ",(0,i.kt)("strong",{parentName:"li"},"Code")," e depois em ",(0,i.kt)("strong",{parentName:"li"},"Download ZIP"))),(0,i.kt)("p",null,(0,i.kt)("img",{src:a(2467).Z,width:"528",height:"398"})),(0,i.kt)("ol",{start:2},(0,i.kt)("li",{parentName:"ol"},"Abra a IDE do Arduino"),(0,i.kt)("li",{parentName:"ol"},"V\xe1 em Sketch > Include Library > Add .ZIP Library")),(0,i.kt)("p",null,(0,i.kt)("img",{src:a(3992).Z,width:"657",height:"378"})),(0,i.kt)("ol",{start:4},(0,i.kt)("li",{parentName:"ol"},"Selecione o arquivo zip baixado e clique em ok"),(0,i.kt)("li",{parentName:"ol"},"Opcional: Procure pelos exemplos da biblioteca em File > Examples")),(0,i.kt)("h2",{id:"como-usar-a-biblioteca"},"Como usar a biblioteca"),(0,i.kt)("p",null,"Para utilizar a biblioteca basta inclu\xed-la no seu arquivo de c\xf3digo com a linha ",(0,i.kt)("inlineCode",{parentName:"p"},"#include<laboratorioFW.h>"),". Depois disso, voc\xea pode utilizar os c\xf3digos dos pinos de ativa\xe7\xe3o na placa dentro do seu c\xf3digo."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Importante : Os algorismos do c\xf3digo do pino de ativa\xe7\xe3o s\xe3o separados por um caractere de ",(0,i.kt)("inlineCode",{parentName:"strong"},"_"),", ou seja o pino de ativa\xe7\xe3o C0 pode ser acessado no c\xf3digo atrav\xe9s do c\xf3digo C_0 e assim por diante.")),(0,i.kt)("h2",{id:"exemplo-de-utiliza\xe7\xe3o"},"Exemplo de utiliza\xe7\xe3o:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-c"},"#include <laborarotioFW.h>\n\n#define led A_1\n\nvoid setup(){\n pinMode(led,OUTPUT);\n}\n\nvoid loop{\n digitalWrite(led,HIGH);\n delay(1000);\n digitalWrite(led,LOW);\n delay(1000);\n}\n")),(0,i.kt)("h2",{id:"exemplos-implementados"},"Exemplos implementados:"),(0,i.kt)("h3",{id:"testes_completosino"},"testes_completos.ino"),(0,i.kt)("p",null,"Neste exemplo temos todos os c\xf3digos necess\xe1rios para os testes de todos os perif\xe9ricos dispon\xedveis na placa. Este c\xf3digo \xe9 um c\xf3digo para a valida\xe7\xe3o da placa e n\xe3o para ser utilizado no cotidiano."),(0,i.kt)("h3",{id:"adivinhe_a_senhaino"},"adivinhe_a_senha.ino"),(0,i.kt)("p",null,"Neste exemplo implementamos um sistema de verifica\xe7\xe3o de senha utilizando o teclado matricial e a biblioteca ",(0,i.kt)("inlineCode",{parentName:"p"},"Keypad")," para fazer o mapeamento\ndo teclado. Neste sistema, o usu\xe1rio deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usu\xe1rio indica que terminou de digitar a senha apertando um o bot\xe3o correspondente ao caractere ",(0,i.kt)("inlineCode",{parentName:"p"},"*")," ou ",(0,i.kt)("inlineCode",{parentName:"p"},"#"),", essa sequ\xeancia \xe9 comparada com uma senha previamente definida no c\xf3digo. Um led \xe9 aceso para indicar se a senha est\xe1 correta ou n\xe3o e uma mensagem com essa informa\xe7\xe3o \xe9 impresso no monitor serial."),(0,i.kt)("h3",{id:"ativar_led_rgb_com_potenciometro_e_botoesino"},"ativar_led_RGB_com_potenciometro_e_botoes.ino"),(0,i.kt)("p",null,"Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenci\xf4metro e tr\xeas bot\xf5es. Os tr\xeas bot\xf5es s\xe3o utilizados para selecionar qual cor do LED RGB ser\xe1 controlada (vermelho, verde e azul) e a leitura anal\xf3gica do potenci\xf4metro \xe9 usada para dosar a intensidade da cor do terminal."),(0,i.kt)("h3",{id:"ativar_servo_motor_com_botoesino"},"ativar_servo_motor_com_botoes.ino"),(0,i.kt)("p",null,"Neste exemplo, utilizamos dois bot\xf5es para controlar a posi\xe7\xe3o de um servo motor. Os bot\xf5es s\xe3o associados no c\xf3digo \xe0s dire\xe7\xf5es esquerda e direita e alteram o \xe2ngulo do servo fazendo com que seja poss\xedvel moviment\xe1-lo nas duas dire\xe7\xf5es. Foi usada a biblioteca ESP32_S2_ISR_Servo."),(0,i.kt)("h3",{id:"contagem_display_7segino"},"contagem_display_7seg.ino"),(0,i.kt)("p",null,"Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos."),(0,i.kt)("h3",{id:"controle_led_com_ldrino"},"controle_led_com_ldr.ino"),(0,i.kt)("p",null,"Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura \xe9 mapeada e o valor resultante \xe9 usado para acender um LED. O exemplo tamb\xe9m conta com um bot\xe3o que controla um estado interno do programa e seleciona se a leitura ser\xe1 impressa como \xe9 lida ou com l\xf3gica complementar."),(0,i.kt)("h3",{id:"do_re_mi_faino"},"do_re_mi_fa.ino"),(0,i.kt)("p",null,"Neste exemplo uma m\xfasica \xe9 tocada pelo buzzer em conjunto com a ativa\xe7\xe3o\ndo LED RGB endere\xe7\xe1vel. O programa utiliza a biblioteca ",(0,i.kt)("inlineCode",{parentName:"p"},"Adafruit_NeoPixel")," para controlar o LED."),(0,i.kt)("h3",{id:"genioino"},"genio.ino"),(0,i.kt)("p",null,"Neste exemplo, implementamos o jogo Simon, tamb\xe9m conhecido como g\xeanio. Neste jogo, quatro LEDs s\xe3o ativados em uma sequ\xeancia gerada aleat\xf3riamente e essa sequ\xeancia \xe9 apresentada para o jogador, que deve repetir a sequ\xeancia na ordem correta pressionando os bot\xf5es correspondentes. Quando os LEDs acendem, um som correspondente \xe9 tocado no buzzer."),(0,i.kt)("h3",{id:"leitura_do_tecladoino"},"leitura_do_teclado.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e\na imprimimos essa tecla no no monitor serial. A biblioteca ",(0,i.kt)("inlineCode",{parentName:"p"},"Keypad")," \xe9 utilizada para fazer o mapeamento do teclado."),(0,i.kt)("h3",{id:"leitura_sensores_externosino"},"leitura_sensores_externos.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets\npara conectores externos da placa e imprimimos os valores lidos no monitor serial."),(0,i.kt)("h3",{id:"leitura_sensores_groveino"},"leitura_sensores_grove.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial."),(0,i.kt)("h3",{id:"leitura_umidade_temperatura_oledino"},"leitura_umidade_temperatura_oled.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, s\xe3o utilizadas as bibliotecas ",(0,i.kt)("inlineCode",{parentName:"p"},"DTH")," e ",(0,i.kt)("inlineCode",{parentName:"p"},"SSD1306Wire"),"."),(0,i.kt)("h3",{id:"movimentar_elemento_oled_joystickino"},"movimentar_elemento_oled_joystick.ino"),(0,i.kt)("p",null,"Neste exemplo utilizamos o display OLED para mostrar um asterisco que pode ser controlado pelo m\xf3dulo de joystick se movendo no display. Foi utilizada a biblioteca ",(0,i.kt)("inlineCode",{parentName:"p"},"SSD1306Wire"),"."),(0,i.kt)("admonition",{title:"Obs.",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Este projeto foi desenvolvido como parte do Trabalho de Conclus\xe3o de Curso de ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/LelePG"},"Let\xedcia Pegoraro Garcez"),".")))}p.isMDXComponent=!0},3992:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/add-zip-ce38fdcac233471a2c4ff935e87d70bd.png"},2467:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/download-zip-ba60fb48387d2208e3f003c8afe3db77.png"}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.11f52a5e.js b/assets/js/c4f5d8e4.11f52a5e.js deleted file mode 100755 index 1a9e75384..000000000 --- a/assets/js/c4f5d8e4.11f52a5e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4195],{4338:(e,t,a)=>{a.r(t),a.d(t,{default:()=>f});var r=a(3117),n=a(7294);function o(e){var t,a,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(a=o(e[t]))&&(r&&(r+=" "),r+=a);else for(t in e)e[t]&&(r&&(r+=" "),r+=t);return r}function i(){for(var e,t,a=0,r="";a<arguments.length;)(e=arguments[a++])&&(t=o(e))&&(r&&(r+=" "),r+=t);return r}var s=a(7961),l=a(9960),c=a(2263),m=a(4996);const u={heroBanner:"heroBanner_UJJx",buttons:"buttons_pzbO",features:"features_keug",featureImage:"featureImage_yA8i"},d=[{title:"Open hardware",imageUrl:"img/openhardware_2.svg",description:n.createElement(n.Fragment,null,"Os projetos Franzininho s\xe3o open hardware, ou seja, s\xe3o disponibilizado ao p\xfablico de modo que qualquer um pode construir, modificar, distribuir e utilizar a partir dos arquivos.")},{title:"Open Source",imageUrl:"img/code_2.svg",description:n.createElement(n.Fragment,null,"Trabalhamos com softwares open source e todo os nossos materiais seguem esse formato.")},{title:"Educa\xe7\xe3o Aberta",imageUrl:"img/community_2.svg",description:n.createElement(n.Fragment,null,"Nossos materiais contribuem para uma educa\xe7\xe3o aberta e inclusiva. S\xe3o desenvolvidos de forma colaborativa e revisados pela comunidade.")}];function p(e){let{imageUrl:t,title:a,description:r}=e;const o=(0,m.Z)(t);return n.createElement("div",{className:i("col col--4",u.feature)},o&&n.createElement("div",{className:"text--center"},n.createElement("img",{className:u.featureImage,src:o,alt:a})),n.createElement("h3",null,a),n.createElement("p",null,r))}const f=function(){const e=(0,c.Z)(),{siteConfig:t={}}=e;return n.createElement(s.Z,{title:`Documenta\xe7\xe3o ${t.title}`,description:"Documenta\xe7\xe3o do projeto Franzininho <head />"},n.createElement("header",{className:i("hero hero--primary",u.heroBanner)},n.createElement("div",{className:"container"},n.createElement("h1",{className:"hero__title"},t.title),n.createElement("p",{className:"hero__subtitle"},t.tagline),n.createElement("div",{className:u.buttons},n.createElement(l.Z,{className:i("button button--secondary button--lg",u.getStarted),to:(0,m.Z)("docs/")},"Explore")))),n.createElement("main",null,d&&d.length>0&&n.createElement("section",{className:u.features},n.createElement("div",{className:"container"},n.createElement("div",{className:"row"},d.map(((e,t)=>n.createElement(p,(0,r.Z)({key:t},e)))))))))}}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.974a644b.js b/assets/js/c4f5d8e4.974a644b.js new file mode 100755 index 000000000..28d440ee2 --- /dev/null +++ b/assets/js/c4f5d8e4.974a644b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2632],{15908:(e,r,s)=>{s.r(r),s.d(r,{default:()=>h});s(11504);function a(e){var r,s,i="";if("string"==typeof e||"number"==typeof e)i+=e;else if("object"==typeof e)if(Array.isArray(e))for(r=0;r<e.length;r++)e[r]&&(s=a(e[r]))&&(i&&(i+=" "),i+=s);else for(r in e)e[r]&&(i&&(i+=" "),i+=r);return i}function i(){for(var e,r,s=0,i="";s<arguments.length;)(e=arguments[s++])&&(r=a(e))&&(i&&(i+=" "),i+=r);return i}var o=s(99012),t=s(10867),n=s(28264),c=s(70964);const l={heroBanner:"heroBanner_UJJx",buttons:"buttons_pzbO",features:"features_keug",featureImage:"featureImage_yA8i"};var d=s(17624);const u=[{title:"Open hardware",imageUrl:"img/openhardware_2.svg",description:(0,d.jsx)(d.Fragment,{children:"Os projetos Franzininho s\xe3o open hardware, ou seja, s\xe3o disponibilizado ao p\xfablico de modo que qualquer um pode construir, modificar, distribuir e utilizar a partir dos arquivos."})},{title:"Open Source",imageUrl:"img/code_2.svg",description:(0,d.jsx)(d.Fragment,{children:"Trabalhamos com softwares open source e todo os nossos materiais seguem esse formato."})},{title:"Educa\xe7\xe3o Aberta",imageUrl:"img/community_2.svg",description:(0,d.jsx)(d.Fragment,{children:"Nossos materiais contribuem para uma educa\xe7\xe3o aberta e inclusiva. S\xe3o desenvolvidos de forma colaborativa e revisados pela comunidade."})}];function m(e){let{imageUrl:r,title:s,description:a}=e;const o=(0,c.c)(r);return(0,d.jsxs)("div",{className:i("col col--4",l.feature),children:[o&&(0,d.jsx)("div",{className:"text--center",children:(0,d.jsx)("img",{className:l.featureImage,src:o,alt:s})}),(0,d.jsx)("h3",{children:s}),(0,d.jsx)("p",{children:a})]})}const h=function(){const e=(0,n.c)(),{siteConfig:r={}}=e;return(0,d.jsxs)(o.c,{title:`Documenta\xe7\xe3o ${r.title}`,description:"Documenta\xe7\xe3o do projeto Franzininho <head />",children:[(0,d.jsx)("header",{className:i("hero hero--primary",l.heroBanner),children:(0,d.jsxs)("div",{className:"container",children:[(0,d.jsx)("h1",{className:"hero__title",children:r.title}),(0,d.jsx)("p",{className:"hero__subtitle",children:r.tagline}),(0,d.jsx)("div",{className:l.buttons,children:(0,d.jsx)(t.c,{className:i("button button--secondary button--lg",l.getStarted),to:(0,c.c)("docs/"),children:"Explore"})})]})}),(0,d.jsx)("main",{children:u&&u.length>0&&(0,d.jsx)("section",{className:l.features,children:(0,d.jsx)("div",{className:"container",children:(0,d.jsx)("div",{className:"row",children:u.map(((e,r)=>(0,d.jsx)(m,{...e},r)))})})})})]})}}}]); \ No newline at end of file diff --git a/assets/js/c720cb85.2f9ba57b.js b/assets/js/c720cb85.2f9ba57b.js new file mode 100755 index 000000000..3b7471093 --- /dev/null +++ b/assets/js/c720cb85.2f9ba57b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3916],{77584:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>d,contentTitle:()=>a,default:()=>m,frontMatter:()=>s,metadata:()=>t,toc:()=>l});var i=o(17624),n=o(95788);const s={id:"timer0",title:"Timer 0",slug:"/franzininho-diy/exemplos-avr-libc/timer0",description:"Vamos aprender usar o timer 0 como temporizador",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},a=void 0,t={id:"FranzininhoDIY/exemplos-avr-libc/timer0",title:"Timer 0",description:"Vamos aprender usar o timer 0 como temporizador",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/timer0",permalink:"/docs/franzininho-diy/exemplos-avr-libc/timer0",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/timer0.md",tags:[],version:"current",frontMatter:{id:"timer0",title:"Timer 0",slug:"/franzininho-diy/exemplos-avr-libc/timer0",description:"Vamos aprender usar o timer 0 como temporizador",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Entrada Digital",permalink:"/docs/franzininho-diy/exemplos-avr-libc/entrada-digital"},next:{title:"Timer 0 - Interrup\xe7\xe3o",permalink:"/docs/franzininho-diy/exemplos-avr-libc/timer0-int"}},d={},l=[{value:"Caracter\xedsticas do Timer0",id:"caracter\xedsticas-do-timer0",level:2},{value:"Resumo de recursos do Timer0",id:"resumo-de-recursos-do-timer0",level:2},{value:"Usando o Timer0 como temporizador",id:"usando-o-timer0-como-temporizador",level:2},{value:"Passo para configurar o Timer0 como temporizador",id:"passo-para-configurar-o-timer0-como-temporizador",level:3},{value:"Calculo do Delay",id:"calculo-do-delay",level:3},{value:"Passos para monitorar o overflow do timer e gerar o delay de 1s",id:"passos-para-monitorar-o-overflow-do-timer-e-gerar-o-delay-de-1s",level:3},{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:3},{value:"C\xf3digo exemplo",id:"c\xf3digo-exemplo",level:3},{value:"Simula\xe7\xe3o do exemplo",id:"simula\xe7\xe3o-do-exemplo",level:3}];function c(e){const r={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,n.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.p,{children:"Os timers s\xe3o perif\xe9ricos muito importantes nos microcontroladores. Podemos us\xe1-los para temporiza\xe7\xe3o, contagem de eventos, PWM, medir pulsos externos, etc. O ATtiny85 possui 2 timers, chamados de Timer0 e Timer1. Nesse exemplos vamos focar no uso do Timer0 como temporizador."}),"\n",(0,i.jsx)(r.h2,{id:"caracter\xedsticas-do-timer0",children:"Caracter\xedsticas do Timer0"}),"\n",(0,i.jsx)(r.p,{children:"O Timer0 \xe9 um m\xf3dulo temporizador/contador de 8 bits de uso geral. Isso significa que ele pode contar de 0 a 255. A funcionalidade de temporiza\xe7\xe3o pode ser estendida ainda mais usando os perif\xe9ricos de compara\xe7\xe3o, que permitem que o temporizador conte eventos, gere sinais PWM e assim por diante. Assim \xe9 poss\xedvel gerar temporiza\xe7\xf5es precisas, ondas e sinais PWM independentes da CPU."}),"\n",(0,i.jsx)(r.p,{children:"A figura a seguir exibe o diagrama de blocos simplificado do Timer0:"}),"\n",(0,i.jsx)(r.p,{children:(0,i.jsx)(r.img,{alt:"Diagrama de blocos do Timer0",src:o(17712).c+"",width:"862",height:"668"})}),"\n",(0,i.jsx)(r.h2,{id:"resumo-de-recursos-do-timer0",children:"Resumo de recursos do Timer0"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:"Duas unidades de compara\xe7\xe3o de sa\xedda independentes;"}),"\n",(0,i.jsx)(r.li,{children:"Registradores de compara\xe7\xe3o de sa\xedda com buffer duplo;"}),"\n",(0,i.jsx)(r.li,{children:"Limpa cron\xf4metro na compara\xe7\xe3o de correspond\xeancia (recarregamento autom\xe1tico);"}),"\n",(0,i.jsx)(r.li,{children:"Modulador de largura de pulso com corre\xe7\xe3o de fase (PWM) livre de glitch;"}),"\n",(0,i.jsx)(r.li,{children:"Per\xedodo PWM vari\xe1vel;"}),"\n",(0,i.jsx)(r.li,{children:"Gerador de frequ\xeancia;"}),"\n",(0,i.jsx)(r.li,{children:"Tr\xeas fontes de interrup\xe7\xe3o independentes (TOV0, OCF0A e OCF0B);"}),"\n"]}),"\n",(0,i.jsx)(r.h2,{id:"usando-o-timer0-como-temporizador",children:"Usando o Timer0 como temporizador"}),"\n",(0,i.jsx)(r.p,{children:"Nesse exemplos vamos usar o Timer0 para gerar delay de 1s para piscar um LED."}),"\n",(0,i.jsx)(r.h3,{id:"passo-para-configurar-o-timer0-como-temporizador",children:"Passo para configurar o Timer0 como temporizador"}),"\n",(0,i.jsxs)(r.p,{children:[(0,i.jsx)(r.strong,{children:"Passo 1:"})," Configurar o Timer0 para trabalhar no modo normal. Nesse modo o timer iniciar\xe1 a contagem em 0 e ir\xe1 at\xe9 m\xe1ximo de 255. Quando atingido o m\xe1ximo \xe9 gerado um flag de sinaliza\xe7\xe3o de overflow e o timer volta a contar a partir do zero."]}),"\n",(0,i.jsxs)(r.p,{children:["Para configurar o modo de opera\xe7\xe3o normal, devemos configurar o registrador ",(0,i.jsx)(r.strong,{children:"TCCR0A \u2013 Timer/Counter Control Register A"})," da seguinte forma:"]}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:"COM0A[1:0] e COM0B[1:0] = 0"}),"\n"]}),"\n",(0,i.jsx)(r.p,{children:(0,i.jsx)(r.img,{src:o(37276).c+"",width:"840",height:"212"})}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:"WGM0[1:0] = 0 e TCCR0B \u2013 WGM02 = 0"}),"\n"]}),"\n",(0,i.jsx)(r.p,{children:(0,i.jsx)(r.img,{src:o(84640).c+"",width:"841",height:"333"})}),"\n",(0,i.jsxs)(r.p,{children:["Deve-se escrever os seguintes valores em ",(0,i.jsx)(r.strong,{children:"TCCR0A \u2013 Timer/Counter Control Register A"}),":"]}),"\n",(0,i.jsx)(r.p,{children:"TCCR0A = 0b00000000;"}),"\n",(0,i.jsxs)(r.p,{children:[(0,i.jsx)(r.strong,{children:"Passo 2:"})," Ajustar o prescaler do clock interno para 1024"]}),"\n",(0,i.jsx)(r.p,{children:"Para ajustar o prescale precisamos configurar os bits CS02,CS01 e CS00 do TCCR0B:"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:"TCCR0B \u2013 CS0[2:0]"}),"\n"]}),"\n",(0,i.jsx)(r.p,{children:(0,i.jsx)(r.img,{src:o(9264).c+"",width:"839",height:"315"})}),"\n",(0,i.jsxs)(r.p,{children:["Deve-se escrever os seguintes valores em ",(0,i.jsx)(r.strong,{children:"TCCR0B \u2013 Timer/Counter Control Register"})," B:"]}),"\n",(0,i.jsx)(r.p,{children:"TCCR0B = 0b00000101;"}),"\n",(0,i.jsx)(r.h3,{id:"calculo-do-delay",children:"Calculo do Delay"}),"\n",(0,i.jsx)(r.p,{children:"Estamos trabalhando com o clock interno do ATtiny85 em 16.5Mhz. Essa \xe9 a fonte de clock para o timer0 em modo de opera\xe7\xe3o normal. Como selecionamos o prescaler para dividir o clock por 1024, temos o incremento do timer0 em:"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsxs)(r.li,{children:["tempo por incremento do timer0 = 1/(16.5M/1024) = ",(0,i.jsx)(r.strong,{children:"62 us"})]}),"\n"]}),"\n",(0,i.jsx)(r.p,{children:"Assim, o tempo para o timer0 estourar(overflow) \xe9:"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsxs)(r.li,{children:["tempo para o timer0 estourar = 62us x 256 = ",(0,i.jsx)(r.strong,{children:"15,89ms"})]}),"\n"]}),"\n",(0,i.jsx)(r.p,{children:"Portanto, para ter um delay de 1 segundo precisamos ter:"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsxs)(r.li,{children:["quantidade de overflows do timer0 = 1/15,89ms \u2243 ",(0,i.jsx)(r.strong,{children:"63 vezes"})]}),"\n"]}),"\n",(0,i.jsx)(r.h3,{id:"passos-para-monitorar-o-overflow-do-timer-e-gerar-o-delay-de-1s",children:"Passos para monitorar o overflow do timer e gerar o delay de 1s"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.strong,{children:"Passo 0:"})," Colocar TCNT0 em zero"]}),"\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.strong,{children:"Passo 1:"})," Aguardar a contagem do timer verificando quando TOV0 vai para 1"]}),"\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.strong,{children:"Passo 2:"})," Limpar a flag TOV0 escrevendo 1 nela(Isso mesmo escrevendo 1)"]}),"\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.strong,{children:"Passo 3:"})," Repetir passos 1 e 2 63 vezes para atingir 1 segundo"]}),"\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.strong,{children:"Passo 4:"})," Passou um segundo \u2013 Inverter LED"]}),"\n"]}),"\n",(0,i.jsx)(r.h3,{id:"recursos-necess\xe1rios",children:"Recursos necess\xe1rios"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:"Placa Franzininho DIY(com Micronucleus)"}),"\n",(0,i.jsx)(r.li,{children:"LED"}),"\n",(0,i.jsx)(r.li,{children:"Resistor de 470 Ohm"}),"\n",(0,i.jsx)(r.li,{children:"Jumpers"}),"\n",(0,i.jsx)(r.li,{children:"Computador com as ferramentas de software instaladas"}),"\n"]}),"\n",(0,i.jsx)(r.h3,{id:"c\xf3digo-exemplo",children:"C\xf3digo exemplo"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-c",children:'/**\n * \n * @file main.c\n * @author F\xe1bio Souza\n * @brief Exibe como usar o timer zero para temporiza\xe7\xe3o\n * @version 0.1\n * @date 2021-02-13\n * \n * @copyright Franzininho \n * This example code is in the Public Domain (or CC0 licensed, at your option.)\n * Unless required by applicable law or agreed to in writing, this\n * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied.\n * \n */\n\n#include <avr/io.h>\n#include <util/delay.h> \n\n#define F_CPU 16500000L\n\n \t\n#define setBit(valor,bit) (valor |= (1<<bit))\n#define clearBit(valor,bit) (valor &= ~(1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n#define testBit(valor,bit) (valor & (1<<bit))\n\n/**\n * @brief Fun\xe7\xe3o main\n * \n * @return int \n */\nint main(void) \n{\n \n unsigned char tempo = 0; //contador auxiliar\n\n setBit(DDRB,PB1); \t// Configura Pino PB1 como sa\xedda (Pino do LED)\n\n //configura\xe7\xe3o do timer0 para overflow a aproximadamente 15,89 ms\n //t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms\n TCCR0A=0x00; //Modo Normal\n TCCR0B=0x00;\n TCCR0B |= (1<<CS00)|(1<<CS02); //prescaler de 1024\n TCNT0=0; //inicia timer com 0\n \n /**\n * @brief loop infinito\n * \n */\n while (1)\n {\n if(testBit(TIFR,TOV0)) //se timer estourou\n {\n setBit(TIFR,TOV0); //limpa flag\n tempo++; //incrementa contador auxiliar\n if(tempo >=63) //se passaram-se 63 x 15,89 ms = 1 s\n {\n toogleBit(PORTB,PB1); //inverte LED\n tempo = 0; //reinicia contador\n }\n }\n } \n return (0); \n}\n'})}),"\n",(0,i.jsx)(r.h3,{id:"simula\xe7\xe3o-do-exemplo",children:"Simula\xe7\xe3o do exemplo"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:"**Wokwi: **"}),"\n"]}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/305410400451560001?view=diagram"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.strong,{children:"PICSimLab:"})," ",(0,i.jsx)(r.a,{href:"https://lcgamboa.github.io/picsimlab_examples/board_Franzininho_DIY.html#board_Franzininho_DIY_attiny85",children:"https://lcgamboa.github.io/picsimlab_examples/board_Franzininho_DIY.html#board_Franzininho_DIY_attiny85"})]}),"\n"]})]})}function m(e={}){const{wrapper:r}={...(0,n.MN)(),...e.components};return r?(0,i.jsx)(r,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},95788:(e,r,o)=>{o.d(r,{MN:()=>l});var i=o(11504);function n(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}function s(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);r&&(i=i.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,i)}return o}function a(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?s(Object(o),!0).forEach((function(r){n(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):s(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}function t(e,r){if(null==e)return{};var o,i,n=function(e,r){if(null==e)return{};var o,i,n={},s=Object.keys(e);for(i=0;i<s.length;i++)o=s[i],r.indexOf(o)>=0||(n[o]=e[o]);return n}(e,r);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(i=0;i<s.length;i++)o=s[i],r.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var d=i.createContext({}),l=function(e){var r=i.useContext(d),o=r;return e&&(o="function"==typeof e?e(r):a(a({},r),e)),o},c={inlineCode:"code",wrapper:function(e){var r=e.children;return i.createElement(i.Fragment,{},r)}},m=i.forwardRef((function(e,r){var o=e.components,n=e.mdxType,s=e.originalType,d=e.parentName,m=t(e,["components","mdxType","originalType","parentName"]),p=l(o),u=n,h=p["".concat(d,".").concat(u)]||p[u]||c[u]||s;return o?i.createElement(h,a(a({ref:r},m),{},{components:o})):i.createElement(h,a({ref:r},m))}));m.displayName="MDXCreateElement"},17712:(e,r,o)=>{o.d(r,{c:()=>i});const i=o.p+"assets/images/timer0-block-diagram-5e71243b7bad24e5127e6f41dfaedde0.png"},37276:(e,r,o)=>{o.d(r,{c:()=>i});const i=o.p+"assets/images/timer0-config1-7bc446e41376fe89fecb317e4ac0d04e.png"},84640:(e,r,o)=>{o.d(r,{c:()=>i});const i=o.p+"assets/images/timer0-config2-4933e7715c9acc2a35bdda2c4012d605.png"},9264:(e,r,o)=>{o.d(r,{c:()=>i});const i=o.p+"assets/images/timer0-config3-874ed73be5590580496ee7b7f893b26e.png"}}]); \ No newline at end of file diff --git a/assets/js/c720cb85.bbf15ecc.js b/assets/js/c720cb85.bbf15ecc.js deleted file mode 100755 index 16f472039..000000000 --- a/assets/js/c720cb85.bbf15ecc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[310],{3905:(e,r,o)=>{o.d(r,{Zo:()=>d,kt:()=>g});var a=o(7294);function t(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}function i(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,a)}return o}function n(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?i(Object(o),!0).forEach((function(r){t(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}function s(e,r){if(null==e)return{};var o,a,t=function(e,r){if(null==e)return{};var o,a,t={},i=Object.keys(e);for(a=0;a<i.length;a++)o=i[a],r.indexOf(o)>=0||(t[o]=e[o]);return t}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)o=i[a],r.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var l=a.createContext({}),m=function(e){var r=a.useContext(l),o=r;return e&&(o="function"==typeof e?e(r):n(n({},r),e)),o},d=function(e){var r=m(e.components);return a.createElement(l.Provider,{value:r},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var r=e.children;return a.createElement(a.Fragment,{},r)}},u=a.forwardRef((function(e,r){var o=e.components,t=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=m(o),u=t,g=p["".concat(l,".").concat(u)]||p[u]||c[u]||i;return o?a.createElement(g,n(n({ref:r},d),{},{components:o})):a.createElement(g,n({ref:r},d))}));function g(e,r){var o=arguments,t=r&&r.mdxType;if("string"==typeof e||t){var i=o.length,n=new Array(i);n[0]=u;var s={};for(var l in r)hasOwnProperty.call(r,l)&&(s[l]=r[l]);s.originalType=e,s[p]="string"==typeof e?e:t,n[1]=s;for(var m=2;m<i;m++)n[m]=o[m];return a.createElement.apply(null,n)}return a.createElement.apply(null,o)}u.displayName="MDXCreateElement"},2639:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>l,contentTitle:()=>n,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>m});var a=o(3117),t=(o(7294),o(3905));const i={id:"timer0",title:"Timer 0",slug:"/franzininho-diy/exemplos-avr-libc/timer0",description:"Vamos aprender usar o timer 0 como temporizador",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},n=void 0,s={unversionedId:"FranzininhoDIY/exemplos-avr-libc/timer0",id:"FranzininhoDIY/exemplos-avr-libc/timer0",title:"Timer 0",description:"Vamos aprender usar o timer 0 como temporizador",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/timer0",permalink:"/docs/franzininho-diy/exemplos-avr-libc/timer0",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/timer0.md",tags:[],version:"current",frontMatter:{id:"timer0",title:"Timer 0",slug:"/franzininho-diy/exemplos-avr-libc/timer0",description:"Vamos aprender usar o timer 0 como temporizador",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Entrada Digital",permalink:"/docs/franzininho-diy/exemplos-avr-libc/entrada-digital"},next:{title:"Timer 0 - Interrup\xe7\xe3o",permalink:"/docs/franzininho-diy/exemplos-avr-libc/timer0-int"}},l={},m=[{value:"Caracter\xedsticas do Timer0",id:"caracter\xedsticas-do-timer0",level:2},{value:"Resumo de recursos do Timer0",id:"resumo-de-recursos-do-timer0",level:2},{value:"Usando o Timer0 como temporizador",id:"usando-o-timer0-como-temporizador",level:2},{value:"Passo para configurar o Timer0 como temporizador",id:"passo-para-configurar-o-timer0-como-temporizador",level:3},{value:"Calculo do Delay",id:"calculo-do-delay",level:3},{value:"Passos para monitorar o overflow do timer e gerar o delay de 1s",id:"passos-para-monitorar-o-overflow-do-timer-e-gerar-o-delay-de-1s",level:3},{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:3},{value:"C\xf3digo exemplo",id:"c\xf3digo-exemplo",level:3},{value:"Simula\xe7\xe3o do exemplo",id:"simula\xe7\xe3o-do-exemplo",level:3}],d={toc:m},p="wrapper";function c(e){let{components:r,...i}=e;return(0,t.kt)(p,(0,a.Z)({},d,i,{components:r,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Os timers s\xe3o perif\xe9ricos muito importantes nos microcontroladores. Podemos us\xe1-los para temporiza\xe7\xe3o, contagem de eventos, PWM, medir pulsos externos, etc. O ATtiny85 possui 2 timers, chamados de Timer0 e Timer1. Nesse exemplos vamos focar no uso do Timer0 como temporizador."),(0,t.kt)("h2",{id:"caracter\xedsticas-do-timer0"},"Caracter\xedsticas do Timer0"),(0,t.kt)("p",null,"O Timer0 \xe9 um m\xf3dulo temporizador/contador de 8 bits de uso geral. Isso significa que ele pode contar de 0 a 255. A funcionalidade de temporiza\xe7\xe3o pode ser estendida ainda mais usando os perif\xe9ricos de compara\xe7\xe3o, que permitem que o temporizador conte eventos, gere sinais PWM e assim por diante. Assim \xe9 poss\xedvel gerar temporiza\xe7\xf5es precisas, ondas e sinais PWM independentes da CPU."),(0,t.kt)("p",null,"A figura a seguir exibe o diagrama de blocos simplificado do Timer0:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Diagrama de blocos do Timer0",src:o(7289).Z,width:"862",height:"668"})),(0,t.kt)("h2",{id:"resumo-de-recursos-do-timer0"},"Resumo de recursos do Timer0"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Duas unidades de compara\xe7\xe3o de sa\xedda independentes;"),(0,t.kt)("li",{parentName:"ul"},"Registradores de compara\xe7\xe3o de sa\xedda com buffer duplo;"),(0,t.kt)("li",{parentName:"ul"},"Limpa cron\xf4metro na compara\xe7\xe3o de correspond\xeancia (recarregamento autom\xe1tico);"),(0,t.kt)("li",{parentName:"ul"},"Modulador de largura de pulso com corre\xe7\xe3o de fase (PWM) livre de glitch;"),(0,t.kt)("li",{parentName:"ul"},"Per\xedodo PWM vari\xe1vel;"),(0,t.kt)("li",{parentName:"ul"},"Gerador de frequ\xeancia;"),(0,t.kt)("li",{parentName:"ul"},"Tr\xeas fontes de interrup\xe7\xe3o independentes (TOV0, OCF0A e OCF0B);")),(0,t.kt)("h2",{id:"usando-o-timer0-como-temporizador"},"Usando o Timer0 como temporizador"),(0,t.kt)("p",null,"Nesse exemplos vamos usar o Timer0 para gerar delay de 1s para piscar um LED."),(0,t.kt)("h3",{id:"passo-para-configurar-o-timer0-como-temporizador"},"Passo para configurar o Timer0 como temporizador"),(0,t.kt)("p",null,(0,t.kt)("strong",{parentName:"p"},"Passo 1:")," Configurar o Timer0 para trabalhar no modo normal. Nesse modo o timer iniciar\xe1 a contagem em 0 e ir\xe1 at\xe9 m\xe1ximo de 255. Quando atingido o m\xe1ximo \xe9 gerado um flag de sinaliza\xe7\xe3o de overflow e o timer volta a contar a partir do zero."),(0,t.kt)("p",null,"Para configurar o modo de opera\xe7\xe3o normal, devemos configurar o registrador ",(0,t.kt)("strong",{parentName:"p"},"TCCR0A \u2013 Timer/Counter Control Register A")," da seguinte forma:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"COM0A","[1:0]"," e COM0B","[1:0]"," = 0")),(0,t.kt)("p",null,(0,t.kt)("img",{src:o(5301).Z,width:"840",height:"212"})),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"WGM0","[1:0]"," = 0 e TCCR0B \u2013 WGM02 = 0")),(0,t.kt)("p",null,(0,t.kt)("img",{src:o(1300).Z,width:"841",height:"333"})),(0,t.kt)("p",null,"Deve-se escrever os seguintes valores em ",(0,t.kt)("strong",{parentName:"p"},"TCCR0A \u2013 Timer/Counter Control Register A"),":"),(0,t.kt)("p",null,"TCCR0A = 0b00000000;"),(0,t.kt)("p",null,(0,t.kt)("strong",{parentName:"p"},"Passo 2:")," Ajustar o prescaler do clock interno para 1024"),(0,t.kt)("p",null,"Para ajustar o prescale precisamos configurar os bits CS02,CS01 e CS00 do TCCR0B:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"TCCR0B \u2013 CS0","[2:0]")),(0,t.kt)("p",null,(0,t.kt)("img",{src:o(4059).Z,width:"839",height:"315"})),(0,t.kt)("p",null,"Deve-se escrever os seguintes valores em ",(0,t.kt)("strong",{parentName:"p"},"TCCR0B \u2013 Timer/Counter Control Register")," B:"),(0,t.kt)("p",null,"TCCR0B = 0b00000101;"),(0,t.kt)("h3",{id:"calculo-do-delay"},"Calculo do Delay"),(0,t.kt)("p",null,"Estamos trabalhando com o clock interno do ATtiny85 em 16.5Mhz. Essa \xe9 a fonte de clock para o timer0 em modo de opera\xe7\xe3o normal. Como selecionamos o prescaler para dividir o clock por 1024, temos o incremento do timer0 em:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"tempo por incremento do timer0 = 1/(16.5M/1024) = ",(0,t.kt)("strong",{parentName:"li"},"62 us"))),(0,t.kt)("p",null,"Assim, o tempo para o timer0 estourar(overflow) \xe9:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"tempo para o timer0 estourar = 62us x 256 = ",(0,t.kt)("strong",{parentName:"li"},"15,89ms"))),(0,t.kt)("p",null,"Portanto, para ter um delay de 1 segundo precisamos ter:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"quantidade de overflows do timer0 = 1/15,89ms \u2243 ",(0,t.kt)("strong",{parentName:"li"},"63 vezes"))),(0,t.kt)("h3",{id:"passos-para-monitorar-o-overflow-do-timer-e-gerar-o-delay-de-1s"},"Passos para monitorar o overflow do timer e gerar o delay de 1s"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Passo 0:")," Colocar TCNT0 em zero"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Passo 1:")," Aguardar a contagem do timer verificando quando TOV0 vai para 1"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Passo 2:")," Limpar a flag TOV0 escrevendo 1 nela(Isso mesmo escrevendo 1)"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Passo 3:")," Repetir passos 1 e 2 63 vezes para atingir 1 segundo"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Passo 4:")," Passou um segundo \u2013 Inverter LED")),(0,t.kt)("h3",{id:"recursos-necess\xe1rios"},"Recursos necess\xe1rios"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Placa Franzininho DIY(com Micronucleus)"),(0,t.kt)("li",{parentName:"ul"},"LED "),(0,t.kt)("li",{parentName:"ul"},"Resistor de 470 Ohm"),(0,t.kt)("li",{parentName:"ul"},"Jumpers"),(0,t.kt)("li",{parentName:"ul"},"Computador com as ferramentas de software instaladas")),(0,t.kt)("h3",{id:"c\xf3digo-exemplo"},"C\xf3digo exemplo"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},'/**\n * \n * @file main.c\n * @author F\xe1bio Souza\n * @brief Exibe como usar o timer zero para temporiza\xe7\xe3o\n * @version 0.1\n * @date 2021-02-13\n * \n * @copyright Franzininho \n * This example code is in the Public Domain (or CC0 licensed, at your option.)\n * Unless required by applicable law or agreed to in writing, this\n * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied.\n * \n */\n\n#include <avr/io.h>\n#include <util/delay.h> \n\n#define F_CPU 16500000L\n\n \n#define setBit(valor,bit) (valor |= (1<<bit))\n#define clearBit(valor,bit) (valor &= ~(1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n#define testBit(valor,bit) (valor & (1<<bit))\n\n/**\n * @brief Fun\xe7\xe3o main\n * \n * @return int \n */\nint main(void) \n{\n \n unsigned char tempo = 0; //contador auxiliar\n\n setBit(DDRB,PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n //configura\xe7\xe3o do timer0 para overflow a aproximadamente 15,89 ms\n //t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms\n TCCR0A=0x00; //Modo Normal\n TCCR0B=0x00;\n TCCR0B |= (1<<CS00)|(1<<CS02); //prescaler de 1024\n TCNT0=0; //inicia timer com 0\n \n /**\n * @brief loop infinito\n * \n */\n while (1)\n {\n if(testBit(TIFR,TOV0)) //se timer estourou\n {\n setBit(TIFR,TOV0); //limpa flag\n tempo++; //incrementa contador auxiliar\n if(tempo >=63) //se passaram-se 63 x 15,89 ms = 1 s\n {\n toogleBit(PORTB,PB1); //inverte LED\n tempo = 0; //reinicia contador\n }\n }\n } \n return (0); \n}\n')),(0,t.kt)("h3",{id:"simula\xe7\xe3o-do-exemplo"},"Simula\xe7\xe3o do exemplo"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Wokwi: "))),(0,t.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/305410400451560001?view=diagram"}),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"PICSimLab:")," ",(0,t.kt)("a",{parentName:"li",href:"https://lcgamboa.github.io/picsimlab_examples/board_Franzininho_DIY.html#board_Franzininho_DIY_attiny85"},"https://lcgamboa.github.io/picsimlab_examples/board_Franzininho_DIY.html#board_Franzininho_DIY_attiny85"))))}c.isMDXComponent=!0},7289:(e,r,o)=>{o.d(r,{Z:()=>a});const a=o.p+"assets/images/timer0-block-diagram-5e71243b7bad24e5127e6f41dfaedde0.png"},5301:(e,r,o)=>{o.d(r,{Z:()=>a});const a=o.p+"assets/images/timer0-config1-7bc446e41376fe89fecb317e4ac0d04e.png"},1300:(e,r,o)=>{o.d(r,{Z:()=>a});const a=o.p+"assets/images/timer0-config2-4933e7715c9acc2a35bdda2c4012d605.png"},4059:(e,r,o)=>{o.d(r,{Z:()=>a});const a=o.p+"assets/images/timer0-config3-874ed73be5590580496ee7b7f893b26e.png"}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.60db7232.js b/assets/js/ccc49370.60db7232.js new file mode 100755 index 000000000..e7265d8cb --- /dev/null +++ b/assets/js/ccc49370.60db7232.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6344],{26448:(e,t,n)=>{n.r(t),n.d(t,{default:()=>j});n(11504);var i=n(34064),a=n(68900),o=n(45864),r=n(83152),s=n(9452),l=n(47590),c=n(84357),d=n(70308),u=n(17624);function m(e){const{nextItem:t,prevItem:n}=e;return(0,u.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,c.G)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"}),children:[n&&(0,u.jsx)(d.c,{...n,subLabel:(0,u.jsx)(c.c,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post",children:"Newer Post"})}),t&&(0,u.jsx)(d.c,{...t,subLabel:(0,u.jsx)(c.c,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post",children:"Older Post"}),isNext:!0})]})}function g(){const{assets:e,metadata:t}=(0,r.g)(),{title:n,description:i,date:o,tags:s,authors:l,frontMatter:c}=t,{keywords:d}=c,m=e.image??c.image;return(0,u.jsxs)(a.U7,{title:n,description:i,keywords:d,image:m,children:[(0,u.jsx)("meta",{property:"og:type",content:"article"}),(0,u.jsx)("meta",{property:"article:published_time",content:o}),l.some((e=>e.url))&&(0,u.jsx)("meta",{property:"article:author",content:l.map((e=>e.url)).filter(Boolean).join(",")}),s.length>0&&(0,u.jsx)("meta",{property:"article:tag",content:s.map((e=>e.label)).join(",")})]})}var h=n(56952),f=n(35388);function p(){const e=(0,f.C)();return(0,u.jsx)(h.c,{children:(0,u.jsx)("script",{type:"application/ld+json",children:JSON.stringify(e)})})}var v=n(75124),x=n(61528);function b(e){let{sidebar:t,children:n}=e;const{metadata:i,toc:a}=(0,r.g)(),{nextItem:o,prevItem:c,frontMatter:d,unlisted:g}=i,{hide_table_of_contents:h,toc_min_heading_level:f,toc_max_heading_level:p}=d;return(0,u.jsxs)(s.c,{sidebar:t,toc:!h&&a.length>0?(0,u.jsx)(v.c,{toc:a,minHeadingLevel:f,maxHeadingLevel:p}):void 0,children:[g&&(0,u.jsx)(x.c,{}),(0,u.jsx)(l.c,{children:n}),(o||c)&&(0,u.jsx)(m,{nextItem:o,prevItem:c})]})}function j(e){const t=e.content;return(0,u.jsx)(r.E,{content:e.content,isBlogPostPage:!0,children:(0,u.jsxs)(a.cr,{className:(0,i.c)(o.W.wrapper.blogPages,o.W.page.blogPostPage),children:[(0,u.jsx)(g,{}),(0,u.jsx)(p,{}),(0,u.jsx)(b,{sidebar:e.sidebar,children:(0,u.jsx)(t,{})})]})})}},75124:(e,t,n)=>{n.d(t,{c:()=>c});n(11504);var i=n(34064),a=n(43088);const o={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var r=n(17624);const s="table-of-contents__link toc-highlight",l="table-of-contents__link--active";function c(e){let{className:t,...n}=e;return(0,r.jsx)("div",{className:(0,i.c)(o.tableOfContents,"thin-scrollbar",t),children:(0,r.jsx)(a.c,{...n,linkClassName:s,linkActiveClassName:l})})}},43088:(e,t,n)=>{n.d(t,{c:()=>f});var i=n(11504),a=n(21824);function o(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const i=n.slice(2,e.level);e.parentIndex=Math.max(...i),n[e.level]=t}));const i=[];return t.forEach((e=>{const{parentIndex:n,...a}=e;n>=0?t[n].children.push(a):i.push(a)})),i}function r(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:i}=e;return t.flatMap((e=>{const t=r({toc:e.children,minHeadingLevel:n,maxHeadingLevel:i});return function(e){return e.level>=n&&e.level<=i}(e)?[{...e,children:t}]:t}))}function s(e){const t=e.getBoundingClientRect();return t.top===t.bottom?s(e.parentNode):t}function l(e,t){let{anchorTopOffset:n}=t;const i=e.find((e=>s(e).top>=n));if(i){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(s(i))?i:e[e.indexOf(i)-1]??null}return e[e.length-1]??null}function c(){const e=(0,i.useRef)(0),{navbar:{hideOnScroll:t}}=(0,a.y)();return(0,i.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,i.useRef)(void 0),n=c();(0,i.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:i,linkActiveClassName:a,minHeadingLevel:o,maxHeadingLevel:r}=e;function s(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(i),s=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const i=[];for(let a=t;a<=n;a+=1)i.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(i.join()))}({minHeadingLevel:o,maxHeadingLevel:r}),c=l(s,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(a),e.classList.add(a),t.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",s),document.addEventListener("resize",s),s(),()=>{document.removeEventListener("scroll",s),document.removeEventListener("resize",s)}}),[e,n])}var u=n(10867),m=n(17624);function g(e){let{toc:t,className:n,linkClassName:i,isChild:a}=e;return t.length?(0,m.jsx)("ul",{className:a?void 0:n,children:t.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.c,{to:`#${e.id}`,className:i??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(g,{isChild:!0,toc:e.children,className:n,linkClassName:i})]},e.id)))}):null}const h=i.memo(g);function f(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:s="table-of-contents__link",linkActiveClassName:l,minHeadingLevel:c,maxHeadingLevel:u,...g}=e;const f=(0,a.y)(),p=c??f.tableOfContents.minHeadingLevel,v=u??f.tableOfContents.maxHeadingLevel,x=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,i.useMemo)((()=>r({toc:o(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:p,maxHeadingLevel:v});return d((0,i.useMemo)((()=>{if(s&&l)return{linkClassName:s,linkActiveClassName:l,minHeadingLevel:p,maxHeadingLevel:v}}),[s,l,p,v])),(0,m.jsx)(h,{toc:x,className:n,linkClassName:s,...g})}},61528:(e,t,n)=>{n.d(t,{c:()=>g});n(11504);var i=n(34064),a=n(84357),o=n(56952),r=n(17624);function s(){return(0,r.jsx)(a.c,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function l(){return(0,r.jsx)(a.c,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,r.jsx)(o.c,{children:(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=n(45864),u=n(30304);function m(e){let{className:t}=e;return(0,r.jsx)(u.c,{type:"caution",title:(0,r.jsx)(s,{}),className:(0,i.c)(t,d.W.common.unlistedBanner),children:(0,r.jsx)(l,{})})}function g(e){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c,{}),(0,r.jsx)(m,{...e})]})}},35388:(e,t,n)=>{n.d(t,{Q:()=>d,C:()=>u});var i=n(70964),a=n(28264),o=n(85308);var r=n(83152);const s=e=>new Date(e).toISOString();function l(e){const t=e.map(m);return{author:1===t.length?t[0]:t}}function c(e,t,n){return e?{image:g({imageUrl:t(e,{absolute:!0}),caption:`title image for the blog post: ${n}`})}:{}}function d(e){const{siteConfig:t}=(0,a.c)(),{withBaseUrl:n}=(0,i.E)(),{metadata:{blogDescription:o,blogTitle:r,permalink:d}}=e,u=`${t.url}${d}`;return{"@context":"https://schema.org","@type":"Blog","@id":u,mainEntityOfPage:u,headline:r,description:o,blogPost:e.items.map((e=>function(e,t,n){const{assets:i,frontMatter:a,metadata:o}=e,{date:r,title:d,description:u,lastUpdatedAt:m}=o,g=i.image??a.image,h=a.keywords??[],f=`${t.url}${o.permalink}`,p=m?s(m):void 0;return{"@type":"BlogPosting","@id":f,mainEntityOfPage:f,url:f,headline:d,name:d,description:u,datePublished:r,...p?{dateModified:p}:{},...l(o.authors),...c(g,n,d),...h?{keywords:h}:{}}}(e.content,t,n)))}}function u(){const e=function(){const e=(0,o.c)(),t=e?.data?.blogMetadata;if(!t)throw new Error("useBlogMetadata() can't be called on the current route because the blog metadata could not be found in route context");return t}(),{assets:t,metadata:n}=(0,r.g)(),{siteConfig:d}=(0,a.c)(),{withBaseUrl:u}=(0,i.E)(),{date:m,title:g,description:h,frontMatter:f,lastUpdatedAt:p}=n,v=t.image??f.image,x=f.keywords??[],b=p?s(p):void 0,j=`${d.url}${n.permalink}`;return{"@context":"https://schema.org","@type":"BlogPosting","@id":j,mainEntityOfPage:j,url:j,headline:g,name:g,description:h,datePublished:m,...b?{dateModified:b}:{},...l(n.authors),...c(v,u,g),...x?{keywords:x}:{},isPartOf:{"@type":"Blog","@id":`${d.url}${e.blogBasePath}`,name:e.blogTitle}}}function m(e){return{"@type":"Person",...e.name?{name:e.name}:{},...e.title?{description:e.title}:{},...e.url?{url:e.url}:{},...e.email?{email:e.email}:{},...e.imageURL?{image:e.imageURL}:{}}}function g(e){let{imageUrl:t,caption:n}=e;return{"@type":"ImageObject","@id":t,url:t,contentUrl:t,caption:n}}}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.ed5a44eb.js b/assets/js/ccc49370.ed5a44eb.js deleted file mode 100755 index a03a1d97e..000000000 --- a/assets/js/ccc49370.ed5a44eb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6103],{5203:(e,t,n)=>{n.r(t),n.d(t,{default:()=>h});var a=n(7294),l=n(4334),r=n(1944),o=n(5281),i=n(9460),c=n(9058),s=n(390),m=n(3117),d=n(5999),u=n(2244);function g(e){const{nextItem:t,prevItem:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,d.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"})},n&&a.createElement(u.Z,(0,m.Z)({},n,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post"},"Newer Post")})),t&&a.createElement(u.Z,(0,m.Z)({},t,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post"},"Older Post"),isNext:!0})))}function f(){const{assets:e,metadata:t}=(0,i.C)(),{title:n,description:l,date:o,tags:c,authors:s,frontMatter:m}=t,{keywords:d}=m,u=e.image??m.image;return a.createElement(r.d,{title:n,description:l,keywords:d,image:u},a.createElement("meta",{property:"og:type",content:"article"}),a.createElement("meta",{property:"article:published_time",content:o}),s.some((e=>e.url))&&a.createElement("meta",{property:"article:author",content:s.map((e=>e.url)).filter(Boolean).join(",")}),c.length>0&&a.createElement("meta",{property:"article:tag",content:c.map((e=>e.label)).join(",")}))}var v=n(9407);function p(e){let{sidebar:t,children:n}=e;const{metadata:l,toc:r}=(0,i.C)(),{nextItem:o,prevItem:m,frontMatter:d}=l,{hide_table_of_contents:u,toc_min_heading_level:f,toc_max_heading_level:p}=d;return a.createElement(c.Z,{sidebar:t,toc:!u&&r.length>0?a.createElement(v.Z,{toc:r,minHeadingLevel:f,maxHeadingLevel:p}):void 0},a.createElement(s.Z,null,n),(o||m)&&a.createElement(g,{nextItem:o,prevItem:m}))}function h(e){const t=e.content;return a.createElement(i.n,{content:e.content,isBlogPostPage:!0},a.createElement(r.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogPostPage)},a.createElement(f,null),a.createElement(p,{sidebar:e.sidebar},a.createElement(t,null))))}},9407:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(3117),l=n(7294),r=n(4334),o=n(3743);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},c="table-of-contents__link toc-highlight",s="table-of-contents__link--active";function m(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,r.Z)(i.tableOfContents,"thin-scrollbar",t)},l.createElement(o.Z,(0,a.Z)({},n,{linkClassName:c,linkActiveClassName:s})))}},3743:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(3117),l=n(7294),r=n(6668);function o(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function i(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=i({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function c(e){const t=e.getBoundingClientRect();return t.top===t.bottom?c(e.parentNode):t}function s(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>c(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(c(a))?a:e[e.indexOf(a)-1]??null}return e[e.length-1]??null}function m(){const e=(0,l.useRef)(0),{navbar:{hideOnScroll:t}}=(0,r.L)();return(0,l.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,l.useRef)(void 0),n=m();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:o}=e;function i(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),i=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:o}),c=s(i,{anchorTopOffset:n.current}),m=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===m)}))}return document.addEventListener("scroll",i),document.addEventListener("resize",i),i(),()=>{document.removeEventListener("scroll",i),document.removeEventListener("resize",i)}}),[e,n])}function u(e){let{toc:t,className:n,linkClassName:a,isChild:r}=e;return t.length?l.createElement("ul",{className:r?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(u,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const g=l.memo(u);function f(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:s,minHeadingLevel:m,maxHeadingLevel:u,...f}=e;const v=(0,r.L)(),p=m??v.tableOfContents.minHeadingLevel,h=u??v.tableOfContents.maxHeadingLevel,b=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,l.useMemo)((()=>i({toc:o(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:p,maxHeadingLevel:h});return d((0,l.useMemo)((()=>{if(c&&s)return{linkClassName:c,linkActiveClassName:s,minHeadingLevel:p,maxHeadingLevel:h}}),[c,s,p,h])),l.createElement(g,(0,a.Z)({toc:b,className:n,linkClassName:c},f))}}}]); \ No newline at end of file diff --git a/assets/js/cdcae78f.b279e290.js b/assets/js/cdcae78f.b279e290.js deleted file mode 100755 index 620050d7c..000000000 --- a/assets/js/cdcae78f.b279e290.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3518],{3905:(e,i,a)=>{a.d(i,{Zo:()=>d,kt:()=>h});var n=a(7294);function o(e,i,a){return i in e?Object.defineProperty(e,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[i]=a,e}function r(e,i){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);i&&(n=n.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),a.push.apply(a,n)}return a}function t(e){for(var i=1;i<arguments.length;i++){var a=null!=arguments[i]?arguments[i]:{};i%2?r(Object(a),!0).forEach((function(i){o(e,i,a[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))}))}return e}function s(e,i){if(null==e)return{};var a,n,o=function(e,i){if(null==e)return{};var a,n,o={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],i.indexOf(a)>=0||(o[a]=e[a]);return o}(e,i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],i.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),p=function(e){var i=n.useContext(l),a=i;return e&&(a="function"==typeof e?e(i):t(t({},i),e)),a},d=function(e){var i=p(e.components);return n.createElement(l.Provider,{value:i},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var i=e.children;return n.createElement(n.Fragment,{},i)}},m=n.forwardRef((function(e,i){var a=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=p(a),m=o,h=c["".concat(l,".").concat(m)]||c[m]||u[m]||r;return a?n.createElement(h,t(t({ref:i},d),{},{components:a})):n.createElement(h,t({ref:i},d))}));function h(e,i){var a=arguments,o=i&&i.mdxType;if("string"==typeof e||o){var r=a.length,t=new Array(r);t[0]=m;var s={};for(var l in i)hasOwnProperty.call(i,l)&&(s[l]=i[l]);s.originalType=e,s[c]="string"==typeof e?e:o,t[1]=s;for(var p=2;p<r;p++)t[p]=a[p];return n.createElement.apply(null,t)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},2729:(e,i,a)=>{a.r(i),a.d(i,{assets:()=>l,contentTitle:()=>t,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var n=a(3117),o=(a(7294),a(3905));const r={id:"franzininho-wifi",title:"Placa Franzininho WiFi",slug:"/franzininho-wifi/franzininho-wifi",description:"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes."},t=void 0,s={unversionedId:"FranzininhoWifi/franzininho-wifi",id:"FranzininhoWifi/franzininho-wifi",title:"Placa Franzininho WiFi",description:"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes.",source:"@site/docs/FranzininhoWifi/franzininho-wifi.md",sourceDirName:"FranzininhoWifi",slug:"/franzininho-wifi/franzininho-wifi",permalink:"/docs/franzininho-wifi/franzininho-wifi",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/franzininho-wifi.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi",title:"Placa Franzininho WiFi",slug:"/franzininho-wifi/franzininho-wifi",description:"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes."},sidebar:"docs",previous:{title:"Seja bem vindo!",permalink:"/docs/"},next:{title:"Como simular a Franzininho WiFi no Wokwi",permalink:"/docs/franzininho-wifi/wokwi/primeiros-passos"}},l={},p=[{value:"Resumo de recursos da placa Franzininho WiFi:",id:"resumo-de-recursos-da-placa-franzininho-wifi",level:2},{value:"Pinout da Franzininho WiFi",id:"pinout-da-franzininho-wifi",level:2},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Simula\xe7\xe3o da Franzininho WiFi no Wokwi",id:"simula\xe7\xe3o-da-franzininho-wifi-no-wokwi",level:2},{value:"Componente para o Fritzing",id:"componente-para-o-fritzing",level:2}],d={toc:p},c="wrapper";function u(e){let{components:i,...r}=e;return(0,o.kt)(c,(0,n.Z)({},d,r,{components:i,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"A Franzininho WIFI \xe9 uma placa de desenvolvimento de hardware de c\xf3digo aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal \xe9 tornar o desenvolvimento de projetos eletr\xf4nicos mais acess\xedvel a makers, entusiastas e desenvolvedores brasileiros."),(0,o.kt)("p",null,"A placa pode ser programada de v\xe1rias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes."),(0,o.kt)("p",null,"Neste texto, apresentaremos os recursos dispon\xedveis, as formas de programa\xe7\xe3o e informa\xe7\xf5es relevantes para aqueles que est\xe3o iniciando o uso da Franzininho WiFi ou t\xeam interesse em conhec\xea-la."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://sacola.pagseguro.uol.com.br/e9bdf81f-339f-4b36-951c-88c69240e0e7"},"Compre sua Franzininho WiFi (com frete gratis) clicando neste link")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Placa Franzininho WiFi",src:a(5081).Z,width:"1600",height:"900"})),(0,o.kt)("h2",{id:"resumo-de-recursos-da-placa-franzininho-wifi"},"Resumo de recursos da placa Franzininho WiFi:"),(0,o.kt)("p",null,"A Franzininho WiFi possui os seguintes recursos:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"M\xf3dulo ESP32-S2",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Microcontrolador Xtensa\xae single-core32-bit LX7 operando em at\xe9 240 MHz"),(0,o.kt)("li",{parentName:"ul"},"Mem\xf3rias: 128 KB de ROM, 320 KB de SRAM, 16 KB SRAM no RTC, 4MB de Flash"),(0,o.kt)("li",{parentName:"ul"},"WiFi 802.11 b/g/n"),(0,o.kt)("li",{parentName:"ul"},"Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera, IR,contador de pulsos, LED PWM, TWAI(CAN), USB 1.1 OTG, ADC, DAC, touch, sensor de temperatura interno."))),(0,o.kt)("li",{parentName:"ul"},"Pinout:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"40 pinos divididos em 2\xd720 headers de 2,54 mm"),(0,o.kt)("li",{parentName:"ul"},"35 GPIOs"),(0,o.kt)("li",{parentName:"ul"},"Compat\xedvel com protoboard"))),(0,o.kt)("li",{parentName:"ul"},"2 LEDS de uso geral"),(0,o.kt)("li",{parentName:"ul"},"Bot\xf5es: 1xReset, 1 x Boot"),(0,o.kt)("li",{parentName:"ul"},"USB: conector micro USB \u2013 OTG 1.1"),(0,o.kt)("li",{parentName:"ul"},"Alimenta\xe7\xe3o:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"5V via conector USB"),(0,o.kt)("li",{parentName:"ul"},"5V e GND via pinos"),(0,o.kt)("li",{parentName:"ul"},"3V3 e GND via pinos"))),(0,o.kt)("li",{parentName:"ul"},"Formas de programa\xe7\xe3o:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"ESP-IDF,"),(0,o.kt)("li",{parentName:"ul"},"Arduino,"),(0,o.kt)("li",{parentName:"ul"},"CircuitPyhton,"),(0,o.kt)("li",{parentName:"ul"},"MicroPython,"),(0,o.kt)("li",{parentName:"ul"},"Zephyr,"),(0,o.kt)("li",{parentName:"ul"},"NuttX")))),(0,o.kt)("h2",{id:"pinout-da-franzininho-wifi"},"Pinout da Franzininho WiFi"),(0,o.kt)("p",null,"A imagem a seguir exibe o pinout da Franzininho WiFi com mapeamento dos pinos e recursos:"),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://raw.githubusercontent.com/Franzininho/imagens-franzininho/main/franzininho-wifi/pinagem-franzininho-wifi.png",alt:"Nova Franzininho WiFI: pinout"})),(0,o.kt)("h2",{id:"licen\xe7a"},"Licen\xe7a"),(0,o.kt)("p",null,"A placa Franzininho WiFi \xe9 um projeto de hardware de c\xf3digo aberto, licenciado sob a ",(0,o.kt)("strong",{parentName:"p"},"CERN Open Hardware License"),". Essa licen\xe7a \xe9 utilizada em projetos de hardware que s\xe3o desenvolvidos e disponibilizados como c\xf3digo aberto, permitindo que outras pessoas possam reproduzir e criar deriva\xe7\xf5es do projeto. Para garantir a conformidade com a licen\xe7a, \xe9 importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar deriva\xe7\xf5es do projeto. Dessa forma, podem garantir que est\xe3o seguindo as diretrizes corretas e respeitando a licen\xe7a escolhida para o projeto."),(0,o.kt)("p",null,"Voc\xea encontra o projeto do hardware no Github organiza\xe7\xe3o Franzininho: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/Franzininho-WiFi"},"https://github.com/Franzininho/Franzininho-WiFi")),(0,o.kt)("h2",{id:"simula\xe7\xe3o-da-franzininho-wifi-no-wokwi"},"Simula\xe7\xe3o da Franzininho WiFi no Wokwi"),(0,o.kt)("p",null,"O Wokwi \xe9 uma ferramenta de simula\xe7\xe3o online e gratuita que permite que desenvolvedores de projetos eletr\xf4nicos testem suas cria\xe7\xf5es em um ambiente leve e intuitivo. Com suporte a diversas placas de desenvolvimento, incluindo o Arduino Uno, ESP32, RP2040, e muitas outras, o simulador \xe9 um diferencial na \xe1rea. A ferramenta oferece recursos exclusivos, como simula\xe7\xe3o de Wi-Fi, Analisador L\xf3gico Virtual, Depura\xe7\xe3o avan\xe7ada com GDB, simula\xe7\xe3o de cart\xe3o SD, API dos chips (cria\xe7\xe3o de chips personalizados) e integra\xe7\xe3o com o Visual Studio Code."),(0,o.kt)("p",null,"A placa Franzininho WiFi tamb\xe9m \xe9 suportada no simulador. Para come\xe7ar a criar projetos, acesse a lista de placas suportadas pelo Wokwi e comece a testar suas cria\xe7\xf5es em um ambiente seguro e de f\xe1cil acesso. Al\xe9m disso, compartilhar seus projetos com a comunidade pode ajudar outros desenvolvedores a iniciarem no universo da eletr\xf4nica, permitindo que cres\xe7am juntos e desenvolvam solu\xe7\xf5es cada vez mais inovadoras."),(0,o.kt)("p",null,"A figura a seguir exibe a Franzininho WiFi no ambiente de simula\xe7\xe3o do Wokwi:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Franzininho WiFi",src:a(3454).Z,width:"1374",height:"633"})),(0,o.kt)("p",null,"Entenda melhor sobre a ferramenta, acessando os links abaixo:"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://docs.wokwi.com/pt-BR/"},"Documenta\xe7\xe3o do Wokwi")),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://wokwi.com/projects/new/franzininho-wifi"},"Simula\xe7\xe3o Franzininho WiFi")),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://docs.franzininho.com.br/docs/franzininho-wifi/wokwi/primeiros-passos"},"Documenta\xe7\xe3o da Franzininho Wokwi")),(0,o.kt)("h2",{id:"componente-para-o-fritzing"},"Componente para o Fritzing"),(0,o.kt)("p",null,"O ",(0,o.kt)("a",{parentName:"p",href:"https://fritzing.org/"},"Fritzing")," \xe9 uma ferramenta open-source que permite a intera\xe7\xe3o com o hardware, possibilitando a montagem de circuitos eletr\xf4nicos, cria\xe7\xe3o de placas de circuito impresso e inclus\xe3o do c\xf3digo-fonte do projeto proposto. Com sua riqueza de detalhes e ampla variedade de componentes, o Fritzing \xe9 uma op\xe7\xe3o ideal para documenta\xe7\xe3o de projetos. Para facilitar a documenta\xe7\xe3o de projetos, criamos um ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/franzininho-fritzing/tree/master/Franzininho-WiFi"},"componente para ser adicionado")," ao Fritzing:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Franzininho WiFi",src:a(3248).Z,width:"1600",height:"900"})))}u.isMDXComponent=!0},5081:(e,i,a)=>{a.d(i,{Z:()=>n});const n=a.p+"assets/images/franzininho-wifi-new-726cd0edc1ae88b9f789475b6d5797de.jpg"},3454:(e,i,a)=>{a.d(i,{Z:()=>n});const n=a.p+"assets/images/image-8.png-b399947d2d8d238d7e1e8b03130218a8.webp"},3248:(e,i,a)=>{a.d(i,{Z:()=>n});const n=a.p+"assets/images/image-9.png-b4e173c5e8b330e9ded7940fa1c12717.webp"}}]); \ No newline at end of file diff --git a/assets/js/cdcae78f.d9bf9322.js b/assets/js/cdcae78f.d9bf9322.js new file mode 100755 index 000000000..9a4297572 --- /dev/null +++ b/assets/js/cdcae78f.d9bf9322.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7272],{67340:(i,e,n)=>{n.r(e),n.d(e,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>c});var o=n(17624),r=n(95788);const a={id:"franzininho-wifi",title:"Placa Franzininho WiFi",slug:"/franzininho-wifi/franzininho-wifi",description:"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes."},s=void 0,t={id:"FranzininhoWifi/franzininho-wifi",title:"Placa Franzininho WiFi",description:"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes.",source:"@site/docs/FranzininhoWifi/franzininho-wifi.md",sourceDirName:"FranzininhoWifi",slug:"/franzininho-wifi/franzininho-wifi",permalink:"/docs/franzininho-wifi/franzininho-wifi",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/franzininho-wifi.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi",title:"Placa Franzininho WiFi",slug:"/franzininho-wifi/franzininho-wifi",description:"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes."},sidebar:"docs",previous:{title:"Seja bem vindo!",permalink:"/docs/"},next:{title:"Como simular a Franzininho WiFi no Wokwi",permalink:"/docs/franzininho-wifi/wokwi/primeiros-passos"}},d={},c=[{value:"Resumo de recursos da placa Franzininho WiFi:",id:"resumo-de-recursos-da-placa-franzininho-wifi",level:2},{value:"Pinout da Franzininho WiFi",id:"pinout-da-franzininho-wifi",level:2},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Simula\xe7\xe3o da Franzininho WiFi no Wokwi",id:"simula\xe7\xe3o-da-franzininho-wifi-no-wokwi",level:2},{value:"Componente para o Fritzing",id:"componente-para-o-fritzing",level:2}];function l(i){const e={a:"a",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.MN)(),...i.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(e.p,{children:"A Franzininho WIFI \xe9 uma placa de desenvolvimento de hardware de c\xf3digo aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal \xe9 tornar o desenvolvimento de projetos eletr\xf4nicos mais acess\xedvel a makers, entusiastas e desenvolvedores brasileiros."}),"\n",(0,o.jsx)(e.p,{children:"A placa pode ser programada de v\xe1rias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes."}),"\n",(0,o.jsx)(e.p,{children:"Neste texto, apresentaremos os recursos dispon\xedveis, as formas de programa\xe7\xe3o e informa\xe7\xf5es relevantes para aqueles que est\xe3o iniciando o uso da Franzininho WiFi ou t\xeam interesse em conhec\xea-la."}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.a,{href:"https://sacola.pagseguro.uol.com.br/e9bdf81f-339f-4b36-951c-88c69240e0e7",children:"Compre sua Franzininho WiFi (com frete gratis) clicando neste link"})}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.img,{alt:"Placa Franzininho WiFi",src:n(41788).c+"",width:"1600",height:"900"})}),"\n",(0,o.jsx)(e.h2,{id:"resumo-de-recursos-da-placa-franzininho-wifi",children:"Resumo de recursos da placa Franzininho WiFi:"}),"\n",(0,o.jsx)(e.p,{children:"A Franzininho WiFi possui os seguintes recursos:"}),"\n",(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsxs)(e.li,{children:["M\xf3dulo ESP32-S2","\n",(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsx)(e.li,{children:"Microcontrolador Xtensa\xae single-core32-bit LX7 operando em at\xe9 240 MHz"}),"\n",(0,o.jsx)(e.li,{children:"Mem\xf3rias: 128 KB de ROM, 320 KB de SRAM, 16 KB SRAM no RTC, 4MB de Flash"}),"\n",(0,o.jsx)(e.li,{children:"WiFi 802.11 b/g/n"}),"\n",(0,o.jsx)(e.li,{children:"Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera, IR,contador de pulsos, LED PWM, TWAI(CAN), USB 1.1 OTG, ADC, DAC, touch, sensor de temperatura interno."}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(e.li,{children:["Pinout:","\n",(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsx)(e.li,{children:"40 pinos divididos em 2\xd720 headers de 2,54 mm"}),"\n",(0,o.jsx)(e.li,{children:"35 GPIOs"}),"\n",(0,o.jsx)(e.li,{children:"Compat\xedvel com protoboard"}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(e.li,{children:"2 LEDS de uso geral"}),"\n",(0,o.jsx)(e.li,{children:"Bot\xf5es: 1xReset, 1 x Boot"}),"\n",(0,o.jsx)(e.li,{children:"USB: conector micro USB \u2013 OTG 1.1"}),"\n",(0,o.jsxs)(e.li,{children:["Alimenta\xe7\xe3o:","\n",(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsx)(e.li,{children:"5V via conector USB"}),"\n",(0,o.jsx)(e.li,{children:"5V e GND via pinos"}),"\n",(0,o.jsx)(e.li,{children:"3V3 e GND via pinos"}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(e.li,{children:["Formas de programa\xe7\xe3o:","\n",(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsx)(e.li,{children:"ESP-IDF,"}),"\n",(0,o.jsx)(e.li,{children:"Arduino,"}),"\n",(0,o.jsx)(e.li,{children:"CircuitPyhton,"}),"\n",(0,o.jsx)(e.li,{children:"MicroPython,"}),"\n",(0,o.jsx)(e.li,{children:"Zephyr,"}),"\n",(0,o.jsx)(e.li,{children:"NuttX"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(e.h2,{id:"pinout-da-franzininho-wifi",children:"Pinout da Franzininho WiFi"}),"\n",(0,o.jsx)(e.p,{children:"A imagem a seguir exibe o pinout da Franzininho WiFi com mapeamento dos pinos e recursos:"}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.img,{src:"https://raw.githubusercontent.com/Franzininho/imagens-franzininho/main/franzininho-wifi/pinagem-franzininho-wifi.png",alt:"Nova Franzininho WiFI: pinout"})}),"\n",(0,o.jsx)(e.h2,{id:"licen\xe7a",children:"Licen\xe7a"}),"\n",(0,o.jsxs)(e.p,{children:["A placa Franzininho WiFi \xe9 um projeto de hardware de c\xf3digo aberto, licenciado sob a ",(0,o.jsx)(e.strong,{children:"CERN Open Hardware License"}),". Essa licen\xe7a \xe9 utilizada em projetos de hardware que s\xe3o desenvolvidos e disponibilizados como c\xf3digo aberto, permitindo que outras pessoas possam reproduzir e criar deriva\xe7\xf5es do projeto. Para garantir a conformidade com a licen\xe7a, \xe9 importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar deriva\xe7\xf5es do projeto. Dessa forma, podem garantir que est\xe3o seguindo as diretrizes corretas e respeitando a licen\xe7a escolhida para o projeto."]}),"\n",(0,o.jsxs)(e.p,{children:["Voc\xea encontra o projeto do hardware no Github organiza\xe7\xe3o Franzininho: ",(0,o.jsx)(e.a,{href:"https://github.com/Franzininho/Franzininho-WiFi",children:"https://github.com/Franzininho/Franzininho-WiFi"})]}),"\n",(0,o.jsx)(e.h2,{id:"simula\xe7\xe3o-da-franzininho-wifi-no-wokwi",children:"Simula\xe7\xe3o da Franzininho WiFi no Wokwi"}),"\n",(0,o.jsx)(e.p,{children:"O Wokwi \xe9 uma ferramenta de simula\xe7\xe3o online e gratuita que permite que desenvolvedores de projetos eletr\xf4nicos testem suas cria\xe7\xf5es em um ambiente leve e intuitivo. Com suporte a diversas placas de desenvolvimento, incluindo o Arduino Uno, ESP32, RP2040, e muitas outras, o simulador \xe9 um diferencial na \xe1rea. A ferramenta oferece recursos exclusivos, como simula\xe7\xe3o de Wi-Fi, Analisador L\xf3gico Virtual, Depura\xe7\xe3o avan\xe7ada com GDB, simula\xe7\xe3o de cart\xe3o SD, API dos chips (cria\xe7\xe3o de chips personalizados) e integra\xe7\xe3o com o Visual Studio Code."}),"\n",(0,o.jsx)(e.p,{children:"A placa Franzininho WiFi tamb\xe9m \xe9 suportada no simulador. Para come\xe7ar a criar projetos, acesse a lista de placas suportadas pelo Wokwi e comece a testar suas cria\xe7\xf5es em um ambiente seguro e de f\xe1cil acesso. Al\xe9m disso, compartilhar seus projetos com a comunidade pode ajudar outros desenvolvedores a iniciarem no universo da eletr\xf4nica, permitindo que cres\xe7am juntos e desenvolvam solu\xe7\xf5es cada vez mais inovadoras."}),"\n",(0,o.jsx)(e.p,{children:"A figura a seguir exibe a Franzininho WiFi no ambiente de simula\xe7\xe3o do Wokwi:"}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.img,{alt:"Franzininho WiFi",src:n(19424).c+"",width:"1374",height:"633"})}),"\n",(0,o.jsx)(e.p,{children:"Entenda melhor sobre a ferramenta, acessando os links abaixo:"}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.a,{href:"https://docs.wokwi.com/pt-BR/",children:"Documenta\xe7\xe3o do Wokwi"})}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.a,{href:"https://wokwi.com/projects/new/franzininho-wifi",children:"Simula\xe7\xe3o Franzininho WiFi"})}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.a,{href:"https://docs.franzininho.com.br/docs/franzininho-wifi/wokwi/primeiros-passos",children:"Documenta\xe7\xe3o da Franzininho Wokwi"})}),"\n",(0,o.jsx)(e.h2,{id:"componente-para-o-fritzing",children:"Componente para o Fritzing"}),"\n",(0,o.jsxs)(e.p,{children:["O ",(0,o.jsx)(e.a,{href:"https://fritzing.org/",children:"Fritzing"})," \xe9 uma ferramenta open-source que permite a intera\xe7\xe3o com o hardware, possibilitando a montagem de circuitos eletr\xf4nicos, cria\xe7\xe3o de placas de circuito impresso e inclus\xe3o do c\xf3digo-fonte do projeto proposto. Com sua riqueza de detalhes e ampla variedade de componentes, o Fritzing \xe9 uma op\xe7\xe3o ideal para documenta\xe7\xe3o de projetos. Para facilitar a documenta\xe7\xe3o de projetos, criamos um ",(0,o.jsx)(e.a,{href:"https://github.com/Franzininho/franzininho-fritzing/tree/master/Franzininho-WiFi",children:"componente para ser adicionado"})," ao Fritzing:"]}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.img,{alt:"Franzininho WiFi",src:n(26548).c+"",width:"1600",height:"900"})})]})}function h(i={}){const{wrapper:e}={...(0,r.MN)(),...i.components};return e?(0,o.jsx)(e,{...i,children:(0,o.jsx)(l,{...i})}):l(i)}},95788:(i,e,n)=>{n.d(e,{MN:()=>c});var o=n(11504);function r(i,e,n){return e in i?Object.defineProperty(i,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):i[e]=n,i}function a(i,e){var n=Object.keys(i);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(i);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable}))),n.push.apply(n,o)}return n}function s(i){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?a(Object(n),!0).forEach((function(e){r(i,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(i,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(e){Object.defineProperty(i,e,Object.getOwnPropertyDescriptor(n,e))}))}return i}function t(i,e){if(null==i)return{};var n,o,r=function(i,e){if(null==i)return{};var n,o,r={},a=Object.keys(i);for(o=0;o<a.length;o++)n=a[o],e.indexOf(n)>=0||(r[n]=i[n]);return r}(i,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(i);for(o=0;o<a.length;o++)n=a[o],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(i,n)&&(r[n]=i[n])}return r}var d=o.createContext({}),c=function(i){var e=o.useContext(d),n=e;return i&&(n="function"==typeof i?i(e):s(s({},e),i)),n},l={inlineCode:"code",wrapper:function(i){var e=i.children;return o.createElement(o.Fragment,{},e)}},h=o.forwardRef((function(i,e){var n=i.components,r=i.mdxType,a=i.originalType,d=i.parentName,h=t(i,["components","mdxType","originalType","parentName"]),p=c(n),u=r,m=p["".concat(d,".").concat(u)]||p[u]||l[u]||a;return n?o.createElement(m,s(s({ref:e},h),{},{components:n})):o.createElement(m,s({ref:e},h))}));h.displayName="MDXCreateElement"},41788:(i,e,n)=>{n.d(e,{c:()=>o});const o=n.p+"assets/images/franzininho-wifi-new-726cd0edc1ae88b9f789475b6d5797de.jpg"},19424:(i,e,n)=>{n.d(e,{c:()=>o});const o=n.p+"assets/images/image-8.png-b399947d2d8d238d7e1e8b03130218a8.webp"},26548:(i,e,n)=>{n.d(e,{c:()=>o});const o=n.p+"assets/images/image-9.png-b4e173c5e8b330e9ded7940fa1c12717.webp"}}]); \ No newline at end of file diff --git a/assets/js/cfe204fd.4bbeb1c1.js b/assets/js/cfe204fd.4bbeb1c1.js new file mode 100755 index 000000000..2a5c578fd --- /dev/null +++ b/assets/js/cfe204fd.4bbeb1c1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8658],{37904:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>x,frontMatter:()=>o,metadata:()=>d,toc:()=>l});var r=t(17624),i=t(95788);const o={id:"franzininho-stm32c0-stm32cubeide-todolist",title:"STM32Cube IDE TODO List",slug:"/franzininho-c0/franzininho-c0-stm32cubeide-todolist",description:"Todo list para exemplos com STM32Cube IDE"},s=void 0,d={id:"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist",title:"STM32Cube IDE TODO List",description:"Todo list para exemplos com STM32Cube IDE",source:"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/stm32cube-ide-todolist.md",sourceDirName:"franzininhoSTM32C0/exemplos-stm32cube-IDE",slug:"/franzininho-c0/franzininho-c0-stm32cubeide-todolist",permalink:"/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/stm32cube-ide-todolist.md",tags:[],version:"current",frontMatter:{id:"franzininho-stm32c0-stm32cubeide-todolist",title:"STM32Cube IDE TODO List",slug:"/franzininho-c0/franzininho-c0-stm32cubeide-todolist",description:"Todo list para exemplos com STM32Cube IDE"},sidebar:"docs",previous:{title:"Placa Franzininho C0",permalink:"/docs/franzininho-c0/franzininho-c0-board"},next:{title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",permalink:"/docs/franzininho-c0/config-franzininho-c0-stm32cubeide"}},c={},l=[{value:"Reposit\xf3rio de Exemplos",id:"reposit\xf3rio-de-exemplos",level:2}];function a(e){const n={a:"a",h2:"h2",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programa\xe7\xe3o da placa Franzininho C0 na STM32CubeIDE usando a HAL da ST."}),"\n",(0,r.jsx)(n.p,{children:"Fique a vontade para colaborar na constru\xe7\xe3o dos materiais e c\xf3digos. Outros exemplos podem ser adicionados. Converse na comunidade."}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Exemplos"}),(0,r.jsx)(n.th,{children:"Status"}),(0,r.jsx)(n.th,{children:"Descri\xe7\xe3o"}),(0,r.jsx)(n.th,{children:"Documentacao"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"00 - Exemplo Template"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Projeto template com as"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"01 - Exemplo Blinky"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Piscando o LED usando delay"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"02 - Exemplo Blinky Int"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Piscando o LED usando interrup\xe7\xe3o de timer"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"03 - Exemplo Hello World"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Transmitindo mensagem serial pela UART"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"04 - Exemplo input"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Leitura de um bot\xe3o e acionamento de um LED"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"05 - Exemplo debounce"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Leitura de um bot\xe3o com realiza\xe7\xe3o de debounce"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"06 - Exemplo ADC"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Convers\xe3o A/D com DMA e base de tempo por timer"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"07 - Exemplo PWM"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Gera\xe7\xe3o de PWM"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"08 - Exemplo Dimmer"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Controlando o brilho do LED por um potenci\xf4metro (ADC e PWM)"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"09 - Exemplo Servo Motor"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Controlando a posi\xe7\xe3o de um servo motor por um potenci\xf4metro (ADC e PWM)"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"10 - Exemplo I2C"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Controlando algum perif\xe9rico via I2C (por exemplo, mem\xf3ria externa, sensor de temperatura, RTC, display, ...)"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"11 - Exemplo SPI"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Controlando aglum perif\xe9rico via SPI (por exemplo: mem\xf3ria externa, cart\xe3o SD, display, ...)"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"12 - Exemplo ..."}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"Legenda:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"\ud83d\udfe2 Feito"}),"\n",(0,r.jsx)(n.li,{children:"\ud83d\udfe1 Em progresso"}),"\n",(0,r.jsx)(n.li,{children:"\ud83d\udd34 Ainda n\xe3o implementado"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"reposit\xf3rio-de-exemplos",children:"Reposit\xf3rio de Exemplos"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide",children:"GitHub - Franzininho/franzininho-c0-exemplos-stm32cubeide: Exemplos de c\xf3digo para Franzininho C0 na STM32CubeIDE"})})]})}function x(e={}){const{wrapper:n}={...(0,i.MN)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},95788:(e,n,t)=>{t.d(n,{MN:()=>l});var r=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function s(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){i(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function d(e,n){if(null==e)return{};var t,r,i=function(e,n){if(null==e)return{};var t,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var c=r.createContext({}),l=function(e){var n=r.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},a={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},x=r.forwardRef((function(e,n){var t=e.components,i=e.mdxType,o=e.originalType,c=e.parentName,x=d(e,["components","mdxType","originalType","parentName"]),h=l(t),m=i,p=h["".concat(c,".").concat(m)]||h[m]||a[m]||o;return t?r.createElement(p,s(s({ref:n},x),{},{components:t})):r.createElement(p,s({ref:n},x))}));x.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/cfe204fd.ceec565a.js b/assets/js/cfe204fd.ceec565a.js deleted file mode 100755 index 52437adc4..000000000 --- a/assets/js/cfe204fd.ceec565a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1793],{3905:(t,e,n)=>{n.d(e,{Zo:()=>d,kt:()=>k});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function o(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?l(Object(n),!0).forEach((function(e){r(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function i(t,e){if(null==t)return{};var n,a,r=function(t,e){if(null==t)return{};var n,a,r={},l=Object.keys(t);for(a=0;a<l.length;a++)n=l[a],e.indexOf(n)>=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(a=0;a<l.length;a++)n=l[a],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var p=a.createContext({}),m=function(t){var e=a.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},d=function(t){var e=m(t.components);return a.createElement(p.Provider,{value:e},t.children)},u="mdxType",s={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},c=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,l=t.originalType,p=t.parentName,d=i(t,["components","mdxType","originalType","parentName"]),u=m(n),c=r,k=u["".concat(p,".").concat(c)]||u[c]||s[c]||l;return n?a.createElement(k,o(o({ref:e},d),{},{components:n})):a.createElement(k,o({ref:e},d))}));function k(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=n.length,o=new Array(l);o[0]=c;var i={};for(var p in e)hasOwnProperty.call(e,p)&&(i[p]=e[p]);i.originalType=t,i[u]="string"==typeof t?t:r,o[1]=i;for(var m=2;m<l;m++)o[m]=n[m];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},1693:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>o,default:()=>s,frontMatter:()=>l,metadata:()=>i,toc:()=>m});var a=n(3117),r=(n(7294),n(3905));const l={id:"franzininho-stm32c0-stm32cubeide-todolist",title:"STM32Cube IDE TODO List",slug:"/franzininho-c0/franzininho-c0-stm32cubeide-todolist",description:"Todo list para exemplos com STM32Cube IDE"},o=void 0,i={unversionedId:"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist",id:"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist",title:"STM32Cube IDE TODO List",description:"Todo list para exemplos com STM32Cube IDE",source:"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/stm32cube-ide-todolist.md",sourceDirName:"franzininhoSTM32C0/exemplos-stm32cube-IDE",slug:"/franzininho-c0/franzininho-c0-stm32cubeide-todolist",permalink:"/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/stm32cube-ide-todolist.md",tags:[],version:"current",frontMatter:{id:"franzininho-stm32c0-stm32cubeide-todolist",title:"STM32Cube IDE TODO List",slug:"/franzininho-c0/franzininho-c0-stm32cubeide-todolist",description:"Todo list para exemplos com STM32Cube IDE"},sidebar:"docs",previous:{title:"Placa Franzininho C0",permalink:"/docs/franzininho-c0/franzininho-c0-board"},next:{title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",permalink:"/docs/franzininho-c0/config-franzininho-c0-stm32cubeide"}},p={},m=[{value:"Reposit\xf3rio de Exemplos",id:"reposit\xf3rio-de-exemplos",level:2}],d={toc:m},u="wrapper";function s(t){let{components:e,...n}=t;return(0,r.kt)(u,(0,a.Z)({},d,n,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programa\xe7\xe3o da placa Franzininho C0 na STM32CubeIDE usando a HAL da ST. "),(0,r.kt)("p",null,"Fique a vontade para colaborar na constru\xe7\xe3o dos materiais e c\xf3digos. Outros exemplos podem ser adicionados. Converse na comunidade."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Exemplos"),(0,r.kt)("th",{parentName:"tr",align:null},"Status"),(0,r.kt)("th",{parentName:"tr",align:null},"Descri\xe7\xe3o"),(0,r.kt)("th",{parentName:"tr",align:null},"Documentacao"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"00 - Exemplo Template"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Projeto template com as"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"01 - Exemplo Blinky"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Piscando o LED usando delay"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"02 - Exemplo Blinky Int"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Piscando o LED usando interrup\xe7\xe3o de timer"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"03 - Exemplo Hello World"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Transmitindo mensagem serial pela UART"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"04 - Exemplo input"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Leitura de um bot\xe3o e acionamento de um LED"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"05 - Exemplo debounce"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Leitura de um bot\xe3o com realiza\xe7\xe3o de debounce"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"06 - Exemplo ADC"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Convers\xe3o A/D com DMA e base de tempo por timer"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"07 - Exemplo PWM"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Gera\xe7\xe3o de PWM"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"08 - Exemplo Dimmer"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Controlando o brilho do LED por um potenci\xf4metro (ADC e PWM)"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"09 - Exemplo Servo Motor"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Controlando a posi\xe7\xe3o de um servo motor por um potenci\xf4metro (ADC e PWM)"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"10 - Exemplo I2C"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Controlando algum perif\xe9rico via I2C (por exemplo, mem\xf3ria externa, sensor de temperatura, RTC, display, ...)"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"11 - Exemplo SPI"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Controlando aglum perif\xe9rico via SPI (por exemplo: mem\xf3ria externa, cart\xe3o SD, display, ...)"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"12 - Exemplo ..."),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null})))),(0,r.kt)("p",null,"Legenda:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ud83d\udfe2 Feito"),(0,r.kt)("li",{parentName:"ul"},"\ud83d\udfe1 Em progresso"),(0,r.kt)("li",{parentName:"ul"},"\ud83d\udd34 Ainda n\xe3o implementado")),(0,r.kt)("h2",{id:"reposit\xf3rio-de-exemplos"},"Reposit\xf3rio de Exemplos"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide"},"GitHub - Franzininho/franzininho-c0-exemplos-stm32cubeide: Exemplos de c\xf3digo para Franzininho C0 na STM32CubeIDE")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d0c422fb.51cc0c7f.js b/assets/js/d0c422fb.51cc0c7f.js new file mode 100755 index 000000000..311af9b4f --- /dev/null +++ b/assets/js/d0c422fb.51cc0c7f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5944],{73880:(e,i,r)=>{r.r(i),r.d(i,{assets:()=>d,contentTitle:()=>t,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=r(17624),n=r(95788);const o={id:"circuitpython-dht11",title:"Sensor de temperatura e umidade DHT11",slug:"/franzininho-wifi/exemplos-circuitpython/dht11",description:"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},t=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11",title:"Sensor de temperatura e umidade DHT11",description:"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/dht11.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/dht11",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/dht11",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/dht11.md",tags:[],version:"current",frontMatter:{id:"circuitpython-dht11",title:"Sensor de temperatura e umidade DHT11",slug:"/franzininho-wifi/exemplos-circuitpython/dht11",description:"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},sidebar:"docs",previous:{title:"Display OLED I2C",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c"},next:{title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04"}},d={},c=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Resultado",id:"resultado",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function l(e){const i={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.p,{children:"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11."}),"\n",(0,a.jsx)(i.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,a.jsx)(i.p,{children:"Identifique os seguintes materiais necess\xe1rios para este projeto:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"1 Franzininho WiFi."}),"\n",(0,a.jsx)(i.li,{children:"1 Sensor DHT11"}),"\n",(0,a.jsx)(i.li,{children:"1 Resistor de 10k"}),"\n",(0,a.jsx)(i.li,{children:"1 Protoboard."}),"\n",(0,a.jsx)(i.li,{children:"Cabos de liga\xe7\xe3o."}),"\n"]}),"\n",(0,a.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,a.jsx)(i.p,{children:"Realize a montagem do circuito da maneira indicada pela figura a seguir:"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"Circuito DHT11",src:r(72524).c+"",width:"876",height:"1041"})}),"\n",(0,a.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,a.jsxs)(i.p,{children:["Para usar o sensor DHT com a Franzininho WiFi, precisamos instalar o m\xf3dulo ",(0,a.jsx)(i.strong,{children:"adafruit_dht"})," na placa antes de criarmos nosso c\xf3digo."]}),"\n",(0,a.jsxs)(i.p,{children:["As bibliotecas para o CircuitPython podem ser obtidas atrav\xe9s do endere\xe7o ",(0,a.jsx)(i.a,{href:"https://circuitpython.org/libraries",children:"https://circuitpython.org/libraries"}),". Escolha e baixe o arquivo de acordo com a vers\xe3o do CircuitPyhthon que voc\xea tem instalado na Franzininho WiFi."]}),"\n",(0,a.jsxs)(i.p,{children:["Em seguida, copie o seguinte arquivo diretamente para a pasta ",(0,a.jsx)(i.strong,{children:"lib"})," do sistema de arquivos da Franzininho WiFi:"]}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"adafruit_dht.mpy"}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"Instala\xe7\xe3o da Biblioteca",src:r(97252).c+"",width:"1278",height:"271"})}),"\n",(0,a.jsx)(i.p,{children:"Para demonstrar o uso do m\xf3dulo do sensor DHT, digite o c\xf3digo abaixo e conecte ao terminal serial (REPL) da placa para verificar os valores de temperatura e umidade lidos."}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-python",children:'""" Leitura de temperatura e umidade com DHT11 """\n\nimport board\nimport time\nimport adafruit_dht\n\ndht = adafruit_dht.DHT11(board.IO2)\n\nwhile True:\n try:\n temperatura = dht.temperature\n umidade = dht.humidity\n # Imprime valores lidos na serial\n print("Temperatura: {:.1f} \xb0C \\t Umidade: {}%".format(temperatura, umidade))\n except RuntimeError as e:\n # A leitura do DHT11 pode falhar\n print("Falha na leitura do DHT11: ", e.args)\n\n time.sleep(1)\n'})}),"\n",(0,a.jsx)(i.h2,{id:"an\xe1lise-do-c\xf3digo",children:"An\xe1lise do c\xf3digo"}),"\n",(0,a.jsxs)(i.p,{children:["Na primeira parte do c\xf3digo temos a importa\xe7\xe3o das bibliotecas a serem usadas na aplica\xe7\xe3o. Note que importamos o m\xf3dulo ",(0,a.jsx)(i.strong,{children:"adafruit_dht"})," que instalamos na pasta ",(0,a.jsx)(i.strong,{children:"lib"})," da placa:"]}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-python",children:"import board\nimport time\nimport adafruit_dht\n"})}),"\n",(0,a.jsx)(i.p,{children:"Em seguida criamos uma inst\xe2ncia e escolhemos o modo DHT11, ja que \xe9 poss\xedvel trabalhar com outros modelos com essa biblioteca. \xc9 necessario passar como par\xe2metro o pino que est\xe1 conectado a linha de comunica\xe7\xe3o do sensor. Em nosso caso passamos o pino 2:"}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-python",children:"dht = adafruit_dht.DHT11(board.IO2)\n"})}),"\n",(0,a.jsxs)(i.p,{children:["No loop infinito fazemos a leitura dos valores de temperatura e umidade a cada ",(0,a.jsx)(i.strong,{children:"1 segundo"})," atrav\xe9s dos metodos ",(0,a.jsx)(i.code,{children:"dht.temperature"})," e ",(0,a.jsx)(i.code,{children:"dht.humidity"}),", e imprimimos os valores lidos no terminal serial."]}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-python",children:'while True:\n try:\n temperatura = dht.temperature\n umidade = dht.humidity\n # Imprime valores lidos na serial\n print("Temperatura: {:.1f} \xb0C \\t Umidade: {}%".format(temperatura, umidade))\n except RuntimeError as e:\n # A leitura do DHT11 pode falhar\n print("Falha na leitura do DHT11: ", e.args)\n\n time.sleep(1)\n'})}),"\n",(0,a.jsx)(i.h2,{id:"resultado",children:"Resultado"}),"\n",(0,a.jsx)(i.p,{children:"A figura a seguir exibe os valores lidos no terminal serial(REPL):"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"Terminal Serial",src:r(91604).c+"",width:"818",height:"495"})}),"\n",(0,a.jsx)(i.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,a.jsx)(i.p,{children:"O sensor DHT11( e similares) possibilita que fa\xe7amos leitura de temperatura e umidade de uma forma simples e eficiente. Atrav\xe9s de 1 fio de comunica\xe7\xe3o conseguimos fazer a leitura das duas grandezas. Como a comunica\xe7\xe3o \xe9 um pouco complexa, o uso de uma biblioteca facilita a comunica\xe7\xe3o com o dispositivo."}),"\n",(0,a.jsx)(i.admonition,{type:"info",children:(0,a.jsxs)(i.p,{children:["Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,a.jsx)(i.a,{href:"https://discord.gg/H5kENmWGaz",children:"Discord"})]})}),"\n",(0,a.jsxs)(i.table,{children:[(0,a.jsx)(i.thead,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.th,{children:"Autor"}),(0,a.jsx)(i.th,{children:"F\xe1bio Souza"})]})}),(0,a.jsx)(i.tbody,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:"Data:"}),(0,a.jsx)(i.td,{children:"10/10/2021"})]})})]})]})}function u(e={}){const{wrapper:i}={...(0,n.MN)(),...e.components};return i?(0,a.jsx)(i,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},95788:(e,i,r)=>{r.d(i,{MN:()=>c});var a=r(11504);function n(e,i,r){return i in e?Object.defineProperty(e,i,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[i]=r,e}function o(e,i){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);i&&(a=a.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),r.push.apply(r,a)}return r}function t(e){for(var i=1;i<arguments.length;i++){var r=null!=arguments[i]?arguments[i]:{};i%2?o(Object(r),!0).forEach((function(i){n(e,i,r[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(r,i))}))}return e}function s(e,i){if(null==e)return{};var r,a,n=function(e,i){if(null==e)return{};var r,a,n={},o=Object.keys(e);for(a=0;a<o.length;a++)r=o[a],i.indexOf(r)>=0||(n[r]=e[r]);return n}(e,i);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],i.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var d=a.createContext({}),c=function(e){var i=a.useContext(d),r=i;return e&&(r="function"==typeof e?e(i):t(t({},i),e)),r},l={inlineCode:"code",wrapper:function(e){var i=e.children;return a.createElement(a.Fragment,{},i)}},u=a.forwardRef((function(e,i){var r=e.components,n=e.mdxType,o=e.originalType,d=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=c(r),p=n,h=m["".concat(d,".").concat(p)]||m[p]||l[p]||o;return r?a.createElement(h,t(t({ref:i},u),{},{components:r})):a.createElement(h,t({ref:i},u))}));u.displayName="MDXCreateElement"},72524:(e,i,r)=>{r.d(i,{c:()=>a});const a=r.p+"assets/images/circuito-43a970745d9aaeec4fad97f720fd8811.png"},97252:(e,i,r)=>{r.d(i,{c:()=>a});const a=r.p+"assets/images/lib-7c2dd516e09a0e1aed3ab358bcd7af0a.png"},91604:(e,i,r)=>{r.d(i,{c:()=>a});const a=r.p+"assets/images/terminal-59d0e1d7a0f860e09a850af3600f4abd.png"}}]); \ No newline at end of file diff --git a/assets/js/d0c422fb.53d1973d.js b/assets/js/d0c422fb.53d1973d.js deleted file mode 100755 index 2b3b305a8..000000000 --- a/assets/js/d0c422fb.53d1973d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8811],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var r=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function n(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){i(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t){if(null==e)return{};var a,r,i=function(e,t){if(null==e)return{};var a,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var l=r.createContext({}),d=function(e){var t=r.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):n(n({},t),e)),a},u=function(e){var t=d(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var a=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=d(a),m=i,h=p["".concat(l,".").concat(m)]||p[m]||c[m]||o;return a?r.createElement(h,n(n({ref:t},u),{},{components:a})):r.createElement(h,n({ref:t},u))}));function h(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=a.length,n=new Array(o);n[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:i,n[1]=s;for(var d=2;d<o;d++)n[d]=a[d];return r.createElement.apply(null,n)}return r.createElement.apply(null,a)}m.displayName="MDXCreateElement"},9358:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>n,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=a(3117),i=(a(7294),a(3905));const o={id:"circuitpython-dht11",title:"Sensor de temperatura e umidade DHT11",slug:"/franzininho-wifi/exemplos-circuitpython/dht11",description:"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},n=void 0,s={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11",title:"Sensor de temperatura e umidade DHT11",description:"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/dht11.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/dht11",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/dht11",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/dht11.md",tags:[],version:"current",frontMatter:{id:"circuitpython-dht11",title:"Sensor de temperatura e umidade DHT11",slug:"/franzininho-wifi/exemplos-circuitpython/dht11",description:"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},sidebar:"docs",previous:{title:"Display OLED I2C",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c"},next:{title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04"}},l={},d=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Resultado",id:"resultado",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],u={toc:d},p="wrapper";function c(e){let{components:t,...o}=e;return(0,i.kt)(p,(0,r.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11."),(0,i.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,i.kt)("p",null,"Identifique os seguintes materiais necess\xe1rios para este projeto:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"1 Franzininho WiFi."),(0,i.kt)("li",{parentName:"ul"},"1 Sensor DHT11"),(0,i.kt)("li",{parentName:"ul"},"1 Resistor de 10k"),(0,i.kt)("li",{parentName:"ul"},"1 Protoboard."),(0,i.kt)("li",{parentName:"ul"},"Cabos de liga\xe7\xe3o.")),(0,i.kt)("h2",{id:"circuito"},"Circuito"),(0,i.kt)("p",null,"Realize a montagem do circuito da maneira indicada pela figura a seguir:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Circuito DHT11",src:a(9100).Z,width:"876",height:"1041"})),(0,i.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,i.kt)("p",null,"Para usar o sensor DHT com a Franzininho WiFi, precisamos instalar o m\xf3dulo ",(0,i.kt)("strong",{parentName:"p"},"adafruit_dht")," na placa antes de criarmos nosso c\xf3digo."),(0,i.kt)("p",null,"As bibliotecas para o CircuitPython podem ser obtidas atrav\xe9s do endere\xe7o ",(0,i.kt)("a",{parentName:"p",href:"https://circuitpython.org/libraries"},"https://circuitpython.org/libraries"),". Escolha e baixe o arquivo de acordo com a vers\xe3o do CircuitPyhthon que voc\xea tem instalado na Franzininho WiFi."),(0,i.kt)("p",null,"Em seguida, copie o seguinte arquivo diretamente para a pasta ",(0,i.kt)("strong",{parentName:"p"},"lib")," do sistema de arquivos da Franzininho WiFi:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"adafruit_dht.mpy")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Instala\xe7\xe3o da Biblioteca",src:a(9837).Z,width:"1278",height:"271"})),(0,i.kt)("p",null,"Para demonstrar o uso do m\xf3dulo do sensor DHT, digite o c\xf3digo abaixo e conecte ao terminal serial (REPL) da placa para verificar os valores de temperatura e umidade lidos."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},'""" Leitura de temperatura e umidade com DHT11 """\n\nimport board\nimport time\nimport adafruit_dht\n\ndht = adafruit_dht.DHT11(board.IO2)\n\nwhile True:\n try:\n temperatura = dht.temperature\n umidade = dht.humidity\n # Imprime valores lidos na serial\n print("Temperatura: {:.1f} \xb0C \\t Umidade: {}%".format(temperatura, umidade))\n except RuntimeError as e:\n # A leitura do DHT11 pode falhar\n print("Falha na leitura do DHT11: ", e.args)\n\n time.sleep(1)\n')),(0,i.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},"An\xe1lise do c\xf3digo"),(0,i.kt)("p",null,"Na primeira parte do c\xf3digo temos a importa\xe7\xe3o das bibliotecas a serem usadas na aplica\xe7\xe3o. Note que importamos o m\xf3dulo ",(0,i.kt)("strong",{parentName:"p"},"adafruit_dht")," que instalamos na pasta ",(0,i.kt)("strong",{parentName:"p"},"lib")," da placa:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"import board\nimport time\nimport adafruit_dht\n")),(0,i.kt)("p",null,"Em seguida criamos uma inst\xe2ncia e escolhemos o modo DHT11, ja que \xe9 poss\xedvel trabalhar com outros modelos com essa biblioteca. \xc9 necessario passar como par\xe2metro o pino que est\xe1 conectado a linha de comunica\xe7\xe3o do sensor. Em nosso caso passamos o pino 2:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dht = adafruit_dht.DHT11(board.IO2)\n")),(0,i.kt)("p",null,"No loop infinito fazemos a leitura dos valores de temperatura e umidade a cada ",(0,i.kt)("strong",{parentName:"p"},"1 segundo")," atrav\xe9s dos metodos ",(0,i.kt)("inlineCode",{parentName:"p"},"dht.temperature")," e ",(0,i.kt)("inlineCode",{parentName:"p"},"dht.humidity"),", e imprimimos os valores lidos no terminal serial."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},'while True:\n try:\n temperatura = dht.temperature\n umidade = dht.humidity\n # Imprime valores lidos na serial\n print("Temperatura: {:.1f} \xb0C \\t Umidade: {}%".format(temperatura, umidade))\n except RuntimeError as e:\n # A leitura do DHT11 pode falhar\n print("Falha na leitura do DHT11: ", e.args)\n\n time.sleep(1)\n')),(0,i.kt)("h2",{id:"resultado"},"Resultado"),(0,i.kt)("p",null,"A figura a seguir exibe os valores lidos no terminal serial(REPL):"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Terminal Serial",src:a(1867).Z,width:"818",height:"495"})),(0,i.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,i.kt)("p",null,"O sensor DHT11( e similares) possibilita que fa\xe7amos leitura de temperatura e umidade de uma forma simples e eficiente. Atrav\xe9s de 1 fio de comunica\xe7\xe3o conseguimos fazer a leitura das duas grandezas. Como a comunica\xe7\xe3o \xe9 um pouco complexa, o uso de uma biblioteca facilita a comunica\xe7\xe3o com o dispositivo."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,i.kt)("a",{parentName:"p",href:"https://discord.gg/H5kENmWGaz"},"Discord"))),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Autor"),(0,i.kt)("th",{parentName:"tr",align:null},"F\xe1bio Souza"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Data:"),(0,i.kt)("td",{parentName:"tr",align:null},"10/10/2021")))))}c.isMDXComponent=!0},9100:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/circuito-43a970745d9aaeec4fad97f720fd8811.png"},9837:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/lib-7c2dd516e09a0e1aed3ab358bcd7af0a.png"},1867:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/terminal-59d0e1d7a0f860e09a850af3600f4abd.png"}}]); \ No newline at end of file diff --git a/assets/js/d268d7c6.48a23515.js b/assets/js/d268d7c6.48a23515.js new file mode 100755 index 000000000..2c7e2eb84 --- /dev/null +++ b/assets/js/d268d7c6.48a23515.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3630],{87604:(e,i,o)=>{o.r(i),o.d(i,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>t,metadata:()=>s,toc:()=>l});var n=o(17624),a=o(95788);const t={id:"circuitpython-entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",description:"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi",author:"Diana Santos"},r=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",description:"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-saidas-digitais.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/entrada-saidas-digitais.md",tags:[],version:"current",frontMatter:{id:"circuitpython-entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",description:"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Serial Console",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/serial-console"},next:{title:"Entrada Anal\xf3gica",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas"}},d={},l=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function c(e){const i={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.p,{children:"Agora que j\xe1 entendemos a estrutura b\xe1sica de um programa no CircuitoPython, exploraremos os pinos de I/O como entrada e sa\xedda digital. Este exemplo exibe como ler um bot\xe3o (entrada digital) e acionar um LED (sa\xedda digital). Quando o bot\xe3o for pressionado o estado do LED dever\xe1 ser invertido. Assim, ao final teremos um bot\xe3o Liga/Desliga para controlar o LED."}),"\n",(0,n.jsx)(i.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"1 Placa Franzininho WiFi com CircuitPython;"}),"\n",(0,n.jsx)(i.li,{children:"1 Protoboard;"}),"\n",(0,n.jsx)(i.li,{children:"1 LED vermelho de 3 mm;"}),"\n",(0,n.jsx)(i.li,{children:"1 Resistor 330 \u03a9;"}),"\n",(0,n.jsx)(i.li,{children:"1 Bot\xe3o;"}),"\n",(0,n.jsx)(i.li,{children:"Jumpers."}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,n.jsx)(i.p,{children:"Fa\xe7a a seguinte montagem:"}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"Circuito Entrada e Saida digital",src:o(68528).c+"",width:"1728",height:"753"})}),"\n",(0,n.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,n.jsx)(i.p,{children:"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 dentro do diret\xf3rio CIRCUITPY e salve o arquivo:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-python",children:"# Entradas e Sa\xeddas digitais - Bot\xe3o Liga/Desliga\nimport time\nimport board\nfrom digitalio import DigitalInOut, Direction, Pull\n\n# Configura o pino do bot\xe3o\nbtn = DigitalInOut(board.IO5) \t# mapea para pino 5 \nbtn.direction = Direction.INPUT \t# configura como entrada\nbtn.pull = Pull.UP # habilita pull-up interno\n\n\n# Configura o pino do led\nled = DigitalInOut(board.IO4) # mapea para pino 4 \nled.direction = Direction.OUTPUT \t# configura como sa\xedda\n\n# loop infinito\nwhile True:\n\tif btn.value ==0:\t\t\t \t# Se bot\xe3o pressionado \n\t\tled.value=not led.value\t\t# inverte estado do LED\n\t\twhile btn.value==0:\t\t\t# Aguarda bot\xe3o ser solto\n\t\t\ttime.sleep(0.01)\t\t# delay de 10 ms\n"})}),"\n",(0,n.jsx)(i.h2,{id:"an\xe1lise-do-c\xf3digo",children:"An\xe1lise do c\xf3digo"}),"\n",(0,n.jsx)(i.p,{children:"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-python",children:"import board\n"})}),"\n",(0,n.jsx)(i.p,{children:"Como precisaremos de intervalos de temporiza\xe7\xe3o importamos o m\xf3dulo time:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-python",children:"import time\n"})}),"\n",(0,n.jsx)(i.p,{children:"Trabalharemos como entradas e sa\xeddas digitais nesse exemplo. Para isso, precisamos importar os seguintes m\xf3dulos em digitalio:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-python",children:"from digitalio import DigitalInOut, Direction\n"})}),"\n",(0,n.jsx)(i.p,{children:"O bot\xe3o deve ser configurado como uma entrada digital no pino 5. Al\xe9m disso, como n\xe3o usamos resistor de pull-up externo devemos configurar o pull-up interno:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-python",children:"# Configura o pino do bot\xe3o\nbtn = DigitalInOut(board.IO5) \t# mapea para pino 5 \nbtn.direction = Direction.INPUT \t# configura como entrada\nbtn.pull = Pull.UP # habilita pull-up interno\n"})}),"\n",(0,n.jsx)(i.p,{children:"O LED foi configurado como uma sa\xedda digital no pino 4, da mesma forma que fizemos no exemplo anterior:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-python",children:"# Configura o pino do led\nled = DigitalInOut(board.IO4) # mapea para pino 4 \nled.direction = Direction.OUTPUT \t# configura como sa\xedda\n"})}),"\n",(0,n.jsx)(i.p,{children:"No loop infinito testamos o valor do pio do bot\xe3o, caso esteja em n\xedvel 0 significa que o usu\xe1rio apertou. Assim toda vez que o bot\xe3o \xe9 pressionado o valor do LED \xe9 invertido. Para evitar que o sejam realizadas diversas opera\xe7\xf5es \xe9 aguardado que o usu\xe1rio solte o bot\xe3o antes de ler o bot\xe3o novamente. Essa espera \xe9 feita com um loop\nwhile:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-python",children:"# loop infinito\nwhile True:\n\tif btn.value ==0:\t\t\t \t# Se bot\xe3o pressionado \n\t\tled.value=not led.value\t\t# inverte estado do LED\n\t\twhile btn.value==0:\t\t\t# Aguarda bot\xe3o ser solto\n\t\t\ttime.sleep(0.01)\t\t# delay de 10 ms\n"})}),"\n",(0,n.jsx)(i.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,n.jsx)(i.p,{children:"Neste exemplo, fizemos uma aplica\xe7\xe3o simples para leitura de uma entrada digital(bot\xe3o) e acionamento de uma sa\xedda digital(LED). Esse exemplo servir\xe1 de base para quando voc\xea precisar trabalhar com entradas e sa\xeddas digitais em seus projetos. A configura\xe7\xe3o \xe9 sempre a mesma."}),"\n",(0,n.jsx)(i.admonition,{title:"Desafio",type:"tip",children:(0,n.jsx)(i.p,{children:"Inclua mais um bot\xe3o e mais um LED no circuito com funcionamento igual ao que fizemos."})}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Autor"}),(0,n.jsx)(i.th,{children:"Diana Santos"})]})}),(0,n.jsxs)(i.tbody,{children:[(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"Autor"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"Data:"}),(0,n.jsx)(i.td,{children:"16/09/2021"})]})]})]})]})}function p(e={}){const{wrapper:i}={...(0,a.MN)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},95788:(e,i,o)=>{o.d(i,{MN:()=>l});var n=o(11504);function a(e,i,o){return i in e?Object.defineProperty(e,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[i]=o,e}function t(e,i){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);i&&(n=n.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var i=1;i<arguments.length;i++){var o=null!=arguments[i]?arguments[i]:{};i%2?t(Object(o),!0).forEach((function(i){a(e,i,o[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):t(Object(o)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(o,i))}))}return e}function s(e,i){if(null==e)return{};var o,n,a=function(e,i){if(null==e)return{};var o,n,a={},t=Object.keys(e);for(n=0;n<t.length;n++)o=t[n],i.indexOf(o)>=0||(a[o]=e[o]);return a}(e,i);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n<t.length;n++)o=t[n],i.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var d=n.createContext({}),l=function(e){var i=n.useContext(d),o=i;return e&&(o="function"==typeof e?e(i):r(r({},i),e)),o},c={inlineCode:"code",wrapper:function(e){var i=e.children;return n.createElement(n.Fragment,{},i)}},p=n.forwardRef((function(e,i){var o=e.components,a=e.mdxType,t=e.originalType,d=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(o),m=a,h=u["".concat(d,".").concat(m)]||u[m]||c[m]||t;return o?n.createElement(h,r(r({ref:i},p),{},{components:o})):n.createElement(h,r({ref:i},p))}));p.displayName="MDXCreateElement"},68528:(e,i,o)=>{o.d(i,{c:()=>n});const n=o.p+"assets/images/00-circuito-366206a6cd9002f9e3db12f576d74713.png"}}]); \ No newline at end of file diff --git a/assets/js/d268d7c6.f53d7ea5.js b/assets/js/d268d7c6.f53d7ea5.js deleted file mode 100755 index e580552f0..000000000 --- a/assets/js/d268d7c6.f53d7ea5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8659],{3905:(e,a,t)=>{t.d(a,{Zo:()=>p,kt:()=>g});var i=t(7294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function n(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,i)}return t}function r(e){for(var a=1;a<arguments.length;a++){var t=null!=arguments[a]?arguments[a]:{};a%2?n(Object(t),!0).forEach((function(a){o(e,a,t[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):n(Object(t)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(t,a))}))}return e}function s(e,a){if(null==e)return{};var t,i,o=function(e,a){if(null==e)return{};var t,i,o={},n=Object.keys(e);for(i=0;i<n.length;i++)t=n[i],a.indexOf(t)>=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i<n.length;i++)t=n[i],a.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=i.createContext({}),d=function(e){var a=i.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):r(r({},a),e)),t},p=function(e){var a=d(e.components);return i.createElement(l.Provider,{value:a},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var a=e.children;return i.createElement(i.Fragment,{},a)}},m=i.forwardRef((function(e,a){var t=e.components,o=e.mdxType,n=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=d(t),m=o,g=u["".concat(l,".").concat(m)]||u[m]||c[m]||n;return t?i.createElement(g,r(r({ref:a},p),{},{components:t})):i.createElement(g,r({ref:a},p))}));function g(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var n=t.length,r=new Array(n);r[0]=m;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[u]="string"==typeof e?e:o,r[1]=s;for(var d=2;d<n;d++)r[d]=t[d];return i.createElement.apply(null,r)}return i.createElement.apply(null,t)}m.displayName="MDXCreateElement"},416:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>n,metadata:()=>s,toc:()=>d});var i=t(3117),o=(t(7294),t(3905));const n={id:"circuitpython-entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",description:"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi",author:"Diana Santos"},r=void 0,s={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",description:"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-saidas-digitais.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/entrada-saidas-digitais.md",tags:[],version:"current",frontMatter:{id:"circuitpython-entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",description:"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Serial Console",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/serial-console"},next:{title:"Entrada Anal\xf3gica",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas"}},l={},d=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],p={toc:d},u="wrapper";function c(e){let{components:a,...n}=e;return(0,o.kt)(u,(0,i.Z)({},p,n,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Agora que j\xe1 entendemos a estrutura b\xe1sica de um programa no CircuitoPython, exploraremos os pinos de I/O como entrada e sa\xedda digital. Este exemplo exibe como ler um bot\xe3o (entrada digital) e acionar um LED (sa\xedda digital). Quando o bot\xe3o for pressionado o estado do LED dever\xe1 ser invertido. Assim, ao final teremos um bot\xe3o Liga/Desliga para controlar o LED."),(0,o.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"1 Placa Franzininho WiFi com CircuitPython;"),(0,o.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,o.kt)("li",{parentName:"ul"},"1 LED vermelho de 3 mm;"),(0,o.kt)("li",{parentName:"ul"},"1 Resistor 330 \u03a9;"),(0,o.kt)("li",{parentName:"ul"},"1 Bot\xe3o;"),(0,o.kt)("li",{parentName:"ul"},"Jumpers.")),(0,o.kt)("h2",{id:"circuito"},"Circuito"),(0,o.kt)("p",null,"Fa\xe7a a seguinte montagem:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Circuito Entrada e Saida digital",src:t(7807).Z,width:"1728",height:"753"})),(0,o.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,o.kt)("p",null,"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 dentro do diret\xf3rio CIRCUITPY e salve o arquivo:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"# Entradas e Sa\xeddas digitais - Bot\xe3o Liga/Desliga\nimport time\nimport board\nfrom digitalio import DigitalInOut, Direction, Pull\n\n# Configura o pino do bot\xe3o\nbtn = DigitalInOut(board.IO5) # mapea para pino 5 \nbtn.direction = Direction.INPUT # configura como entrada\nbtn.pull = Pull.UP # habilita pull-up interno\n\n\n# Configura o pino do led\nled = DigitalInOut(board.IO4) # mapea para pino 4 \nled.direction = Direction.OUTPUT # configura como sa\xedda\n\n# loop infinito\nwhile True:\n if btn.value ==0: # Se bot\xe3o pressionado \n led.value=not led.value # inverte estado do LED\n while btn.value==0: # Aguarda bot\xe3o ser solto\n time.sleep(0.01) # delay de 10 ms\n")),(0,o.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},"An\xe1lise do c\xf3digo"),(0,o.kt)("p",null,"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,o.kt)("p",null,"Como precisaremos de intervalos de temporiza\xe7\xe3o importamos o m\xf3dulo time:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"import time\n")),(0,o.kt)("p",null,"Trabalharemos como entradas e sa\xeddas digitais nesse exemplo. Para isso, precisamos importar os seguintes m\xf3dulos em digitalio:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"from digitalio import DigitalInOut, Direction\n")),(0,o.kt)("p",null,"O bot\xe3o deve ser configurado como uma entrada digital no pino 5. Al\xe9m disso, como n\xe3o usamos resistor de pull-up externo devemos configurar o pull-up interno:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"# Configura o pino do bot\xe3o\nbtn = DigitalInOut(board.IO5) # mapea para pino 5 \nbtn.direction = Direction.INPUT # configura como entrada\nbtn.pull = Pull.UP # habilita pull-up interno\n")),(0,o.kt)("p",null,"O LED foi configurado como uma sa\xedda digital no pino 4, da mesma forma que fizemos no exemplo anterior:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"# Configura o pino do led\nled = DigitalInOut(board.IO4) # mapea para pino 4 \nled.direction = Direction.OUTPUT # configura como sa\xedda\n")),(0,o.kt)("p",null,"No loop infinito testamos o valor do pio do bot\xe3o, caso esteja em n\xedvel 0 significa que o usu\xe1rio apertou. Assim toda vez que o bot\xe3o \xe9 pressionado o valor do LED \xe9 invertido. Para evitar que o sejam realizadas diversas opera\xe7\xf5es \xe9 aguardado que o usu\xe1rio solte o bot\xe3o antes de ler o bot\xe3o novamente. Essa espera \xe9 feita com um loop\nwhile:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"# loop infinito\nwhile True:\n if btn.value ==0: # Se bot\xe3o pressionado \n led.value=not led.value # inverte estado do LED\n while btn.value==0: # Aguarda bot\xe3o ser solto\n time.sleep(0.01) # delay de 10 ms\n")),(0,o.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,o.kt)("p",null,"Neste exemplo, fizemos uma aplica\xe7\xe3o simples para leitura de uma entrada digital(bot\xe3o) e acionamento de uma sa\xedda digital(LED). Esse exemplo servir\xe1 de base para quando voc\xea precisar trabalhar com entradas e sa\xeddas digitais em seus projetos. A configura\xe7\xe3o \xe9 sempre a mesma."),(0,o.kt)("admonition",{title:"Desafio",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Inclua mais um bot\xe3o e mais um LED no circuito com funcionamento igual ao que fizemos.")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Autor"),(0,o.kt)("th",{parentName:"tr",align:null},"Diana Santos"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Autor"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Data:"),(0,o.kt)("td",{parentName:"tr",align:null},"16/09/2021")))))}c.isMDXComponent=!0},7807:(e,a,t)=>{t.d(a,{Z:()=>i});const i=t.p+"assets/images/00-circuito-366206a6cd9002f9e3db12f576d74713.png"}}]); \ No newline at end of file diff --git a/assets/js/d29449f8.14ea76d6.js b/assets/js/d29449f8.14ea76d6.js new file mode 100755 index 000000000..3bf0cbac4 --- /dev/null +++ b/assets/js/d29449f8.14ea76d6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[560],{61052:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var r=n(17624),s=n(95788);const o={id:"circuitpython-sensor-hcsr04",title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",slug:"/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",description:"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.",author:"Wallace Brito"},t=void 0,a={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04",title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",description:"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/hcsr04.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/hcsr04.md",tags:[],version:"current",frontMatter:{id:"circuitpython-sensor-hcsr04",title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",slug:"/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",description:"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.",author:"Wallace Brito"},sidebar:"docs",previous:{title:"Sensor de temperatura e umidade DHT11",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/dht11"},next:{title:"Servo motor",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/servo-motor"}},c={},d=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Resultado",id:"resultado",level:2}];function l(e){const i={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.p,{children:"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython."}),"\n",(0,r.jsx)(i.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,r.jsx)(i.p,{children:"Identifique os seguintes materiais necess\xe1rios para este projeto:"}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsx)(i.li,{children:"1 Franzininho WiFi."}),"\n",(0,r.jsx)(i.li,{children:"1 Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04."}),"\n",(0,r.jsx)(i.li,{children:"1 Protoboard."}),"\n",(0,r.jsx)(i.li,{children:"Cabos de liga\xe7\xe3o."}),"\n"]}),"\n",(0,r.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,r.jsx)(i.p,{children:"A pr\xf3xima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:"}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"Circuito HC-SR04",src:n(51956).c+"",width:"984",height:"918"})}),"\n",(0,r.jsx)(i.p,{children:"A tabela abaixo resume as conex\xf5es entre o sensor e a Franzininho:"}),"\n",(0,r.jsxs)(i.table,{children:[(0,r.jsx)(i.thead,{children:(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.th,{style:{textAlign:"center"},children:"HC-SR04"}),(0,r.jsx)(i.th,{style:{textAlign:"center"},children:"Franzininho WiFi"})]})}),(0,r.jsxs)(i.tbody,{children:[(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{style:{textAlign:"center"},children:"Echo"}),(0,r.jsx)(i.td,{style:{textAlign:"center"},children:"GPIO35"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{style:{textAlign:"center"},children:"Trig"}),(0,r.jsx)(i.td,{style:{textAlign:"center"},children:"GPIO36"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{style:{textAlign:"center"},children:"Vcc"}),(0,r.jsx)(i.td,{style:{textAlign:"center"},children:"5v"})]}),(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{style:{textAlign:"center"},children:"Gnd"}),(0,r.jsx)(i.td,{style:{textAlign:"center"},children:"GND"})]})]})]}),"\n",(0,r.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,r.jsx)(i.p,{children:"Neste exemplo, vamos fazer o uso de uma biblioteca que implementa os m\xe9todos necess\xe1rios para uso do sensor."}),"\n",(0,r.jsxs)(i.p,{children:["As bibliotecas para o CircuitPython podem ser obtidas atrav\xe9s do endere\xe7o ",(0,r.jsx)(i.a,{href:"https://circuitpython.org/libraries",children:"https://circuitpython.org/libraries"}),". Escolha e baixe o arquivo de acordo com a vers\xe3o do CircuitPyhthon que voc\xea tem instalado na Franzininho WiFi."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"Bibliotecas",src:n(73508).c+"",width:"1295",height:"465"})}),"\n",(0,r.jsx)(i.p,{children:"Em seguida, copie o arquivo diretamente para a pasta lib do sistema de arquivos da Franzininho WiFi:"}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsx)(i.li,{children:"adafruit_hcsr04.mpy"}),"\n"]}),"\n",(0,r.jsxs)(i.p,{children:["Implemente o programa abaixo no arquivo ",(0,r.jsx)(i.strong,{children:"code.py"})," que est\xe1 localizado na pasta raiz da Franzininho WiFi."]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-python",children:'import board\nimport time\nimport adafruit_hcsr04\n\nsonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)\n\nwhile True:\n try:\n print((sonar.distance,))\n except RuntimeError:\n print("Retrying!")\n time.sleep(0.1)\n'})}),"\n",(0,r.jsx)(i.h2,{id:"an\xe1lise-do-c\xf3digo",children:"An\xe1lise do c\xf3digo"}),"\n",(0,r.jsxs)(i.p,{children:["Para acessar os pinos da placa precisamos importar o m\xf3dulo ",(0,r.jsx)(i.strong,{children:"board"}),":"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-python",children:"import board\n"})}),"\n",(0,r.jsxs)(i.p,{children:["Como precisaremos fazer o uso do sleep, importamos o m\xf3dulo ",(0,r.jsx)(i.strong,{children:"time"}),":"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-python",children:"import time\n"})}),"\n",(0,r.jsxs)(i.p,{children:["A biblioteca que vamos utilizar para realizar as leituras do sensor \xe9 o ",(0,r.jsx)(i.strong,{children:"adafruit_hcsr04"}),", importaremos esse m\xf3dulo:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-python",children:"import adafruit_hcsr04\n"})}),"\n",(0,r.jsxs)(i.p,{children:["Em seguida criamos uma inst\xe2ncia da classe HCSR04, passando como par\xe2metro ",(0,r.jsx)(i.strong,{children:"trigger_pin"})," sendo o pino 36, o ",(0,r.jsx)(i.strong,{children:"echo_pin"})," o pino 35 e o ",(0,r.jsx)(i.strong,{children:"timeout"})," sendo 0.5 segundos.\nO ",(0,r.jsx)(i.strong,{children:"trigger_pin"})," (em portugu\xeas: Gatilho) tem a fun\xe7\xe3o de disparar uma esp\xe9cie de onda sonora ultrass\xf4nica, a qual ir\xe1 colidir com algum obst\xe1culo e retorna para o sensor fazendo com que o pino ",(0,r.jsx)(i.strong,{children:"echo_pin"})," envie pulsos para a Franzininho, o tempo desse processo ser\xe1 convertido em dist\xe2ncia. O par\xe2metro ",(0,r.jsx)(i.strong,{children:"timeout"})," \xe9 o tempo m\xe1ximo de leitura do sensor, que nesse caso \xe9 0.5 segundos.\nConforme podemos observar na pinagem, dispon\xedvel em ",(0,r.jsx)(i.a,{href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi",children:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi"})]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-python",children:"sonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)\n"})}),"\n",(0,r.jsxs)(i.p,{children:["No loop infinito fazemos a leitura do valor de dist\xe2ncia a cada ",(0,r.jsx)(i.strong,{children:"0.1 segundos"})," atrav\xe9s dos m\xe9todo ",(0,r.jsx)(i.code,{children:"sonar.distance"}),", e imprimimos o valor lido no terminal serial. O valor retornado de ",(0,r.jsx)(i.code,{children:"sonar.distance"})," tem a unidade de medida cent\xedmetros."]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-python",children:'while True:\n try:\n print((sonar.distance,))\n except RuntimeError:\n print("Retrying!")\n time.sleep(0.1)\n'})}),"\n",(0,r.jsx)(i.h2,{id:"resultado",children:"Resultado"}),"\n",(0,r.jsx)(i.p,{children:"A figura a seguir exibe os valores lidos no terminal serial(REPL):"}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"Terminal Serial",src:n(46636).c+"",width:"1141",height:"344"})}),"\n",(0,r.jsx)(i.admonition,{type:"info",children:(0,r.jsxs)(i.p,{children:["Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,r.jsx)(i.a,{href:"https://discord.gg/H5kENmWGaz",children:"Discord"})]})}),"\n",(0,r.jsxs)(i.table,{children:[(0,r.jsx)(i.thead,{children:(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.th,{children:"Autor"}),(0,r.jsx)(i.th,{children:(0,r.jsx)(i.a,{href:"mailto:wallacejsb@gmail.com",children:"Wallace Brito"})})]})}),(0,r.jsx)(i.tbody,{children:(0,r.jsxs)(i.tr,{children:[(0,r.jsx)(i.td,{children:"Data:"}),(0,r.jsx)(i.td,{children:"31/10/2021"})]})})]})]})}function h(e={}){const{wrapper:i}={...(0,s.MN)(),...e.components};return i?(0,r.jsx)(i,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},95788:(e,i,n)=>{n.d(i,{MN:()=>d});var r=n(11504);function s(e,i,n){return i in e?Object.defineProperty(e,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[i]=n,e}function o(e,i){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);i&&(r=r.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),n.push.apply(n,r)}return n}function t(e){for(var i=1;i<arguments.length;i++){var n=null!=arguments[i]?arguments[i]:{};i%2?o(Object(n),!0).forEach((function(i){s(e,i,n[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(n,i))}))}return e}function a(e,i){if(null==e)return{};var n,r,s=function(e,i){if(null==e)return{};var n,r,s={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],i.indexOf(n)>=0||(s[n]=e[n]);return s}(e,i);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],i.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(s[n]=e[n])}return s}var c=r.createContext({}),d=function(e){var i=r.useContext(c),n=i;return e&&(n="function"==typeof e?e(i):t(t({},i),e)),n},l={inlineCode:"code",wrapper:function(e){var i=e.children;return r.createElement(r.Fragment,{},i)}},h=r.forwardRef((function(e,i){var n=e.components,s=e.mdxType,o=e.originalType,c=e.parentName,h=a(e,["components","mdxType","originalType","parentName"]),p=d(n),u=s,m=p["".concat(c,".").concat(u)]||p[u]||l[u]||o;return n?r.createElement(m,t(t({ref:i},h),{},{components:n})):r.createElement(m,t({ref:i},h))}));h.displayName="MDXCreateElement"},73508:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/libraries-43f696d429c655da2cf36dc63cfc72e0.png"},51956:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/circuito-sensor-hcsr04-36362e07b837238ba47b3c1f31c559ce.png"},46636:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/leitura-sensor-hc-sr04-0c4c677c0a5e425cbba24731cb5f7f09.png"}}]); \ No newline at end of file diff --git a/assets/js/d29449f8.a2736ccc.js b/assets/js/d29449f8.a2736ccc.js deleted file mode 100755 index bb500ea40..000000000 --- a/assets/js/d29449f8.a2736ccc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4242],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(r),u=a,h=d["".concat(l,".").concat(u)]||d[u]||m[u]||i;return r?n.createElement(h,o(o({ref:t},c),{},{components:r})):n.createElement(h,o({ref:t},c))}));function h(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:a,o[1]=s;for(var p=2;p<i;p++)o[p]=r[p];return n.createElement.apply(null,o)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},6463:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var n=r(3117),a=(r(7294),r(3905));const i={id:"circuitpython-sensor-hcsr04",title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",slug:"/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",description:"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.",author:"Wallace Brito"},o=void 0,s={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04",title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",description:"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/hcsr04.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/hcsr04.md",tags:[],version:"current",frontMatter:{id:"circuitpython-sensor-hcsr04",title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",slug:"/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",description:"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.",author:"Wallace Brito"},sidebar:"docs",previous:{title:"Sensor de temperatura e umidade DHT11",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/dht11"},next:{title:"Servo motor",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/servo-motor"}},l={},p=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Resultado",id:"resultado",level:2}],c={toc:p},d="wrapper";function m(e){let{components:t,...i}=e;return(0,a.kt)(d,(0,n.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython."),(0,a.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,a.kt)("p",null,"Identifique os seguintes materiais necess\xe1rios para este projeto:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"1 Franzininho WiFi."),(0,a.kt)("li",{parentName:"ul"},"1 Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04."),(0,a.kt)("li",{parentName:"ul"},"1 Protoboard."),(0,a.kt)("li",{parentName:"ul"},"Cabos de liga\xe7\xe3o.")),(0,a.kt)("h2",{id:"circuito"},"Circuito"),(0,a.kt)("p",null,"A pr\xf3xima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Circuito HC-SR04",src:r(901).Z,width:"984",height:"918"})),(0,a.kt)("p",null,"A tabela abaixo resume as conex\xf5es entre o sensor e a Franzininho: "),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:"center"},"HC-SR04"),(0,a.kt)("th",{parentName:"tr",align:"center"},"Franzininho WiFi"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Echo"),(0,a.kt)("td",{parentName:"tr",align:"center"},"GPIO35")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Trig"),(0,a.kt)("td",{parentName:"tr",align:"center"},"GPIO36")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Vcc"),(0,a.kt)("td",{parentName:"tr",align:"center"},"5v")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Gnd"),(0,a.kt)("td",{parentName:"tr",align:"center"},"GND")))),(0,a.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,a.kt)("p",null,"Neste exemplo, vamos fazer o uso de uma biblioteca que implementa os m\xe9todos necess\xe1rios para uso do sensor."),(0,a.kt)("p",null,"As bibliotecas para o CircuitPython podem ser obtidas atrav\xe9s do endere\xe7o ",(0,a.kt)("a",{parentName:"p",href:"https://circuitpython.org/libraries"},"https://circuitpython.org/libraries"),". Escolha e baixe o arquivo de acordo com a vers\xe3o do CircuitPyhthon que voc\xea tem instalado na Franzininho WiFi."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Bibliotecas",src:r(609).Z,width:"1295",height:"465"})),(0,a.kt)("p",null,"Em seguida, copie o arquivo diretamente para a pasta lib do sistema de arquivos da Franzininho WiFi:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"adafruit_hcsr04.mpy")),(0,a.kt)("p",null,"Implemente o programa abaixo no arquivo ",(0,a.kt)("strong",{parentName:"p"},"code.py")," que est\xe1 localizado na pasta raiz da Franzininho WiFi."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},'import board\nimport time\nimport adafruit_hcsr04\n\nsonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)\n\nwhile True:\n try:\n print((sonar.distance,))\n except RuntimeError:\n print("Retrying!")\n time.sleep(0.1)\n')),(0,a.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},"An\xe1lise do c\xf3digo"),(0,a.kt)("p",null,"Para acessar os pinos da placa precisamos importar o m\xf3dulo ",(0,a.kt)("strong",{parentName:"p"},"board"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,a.kt)("p",null,"Como precisaremos fazer o uso do sleep, importamos o m\xf3dulo ",(0,a.kt)("strong",{parentName:"p"},"time"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"import time\n")),(0,a.kt)("p",null,"A biblioteca que vamos utilizar para realizar as leituras do sensor \xe9 o ",(0,a.kt)("strong",{parentName:"p"},"adafruit_hcsr04"),", importaremos esse m\xf3dulo:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"import adafruit_hcsr04\n")),(0,a.kt)("p",null,"Em seguida criamos uma inst\xe2ncia da classe HCSR04, passando como par\xe2metro ",(0,a.kt)("strong",{parentName:"p"},"trigger_pin")," sendo o pino 36, o ",(0,a.kt)("strong",{parentName:"p"},"echo_pin")," o pino 35 e o ",(0,a.kt)("strong",{parentName:"p"},"timeout")," sendo 0.5 segundos.\nO ",(0,a.kt)("strong",{parentName:"p"},"trigger_pin")," (em portugu\xeas: Gatilho) tem a fun\xe7\xe3o de disparar uma esp\xe9cie de onda sonora ultrass\xf4nica, a qual ir\xe1 colidir com algum obst\xe1culo e retorna para o sensor fazendo com que o pino ",(0,a.kt)("strong",{parentName:"p"},"echo_pin")," envie pulsos para a Franzininho, o tempo desse processo ser\xe1 convertido em dist\xe2ncia. O par\xe2metro ",(0,a.kt)("strong",{parentName:"p"},"timeout")," \xe9 o tempo m\xe1ximo de leitura do sensor, que nesse caso \xe9 0.5 segundos.\nConforme podemos observar na pinagem, dispon\xedvel em ",(0,a.kt)("a",{parentName:"p",href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi"},"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi")," "),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"sonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)\n")),(0,a.kt)("p",null,"No loop infinito fazemos a leitura do valor de dist\xe2ncia a cada ",(0,a.kt)("strong",{parentName:"p"},"0.1 segundos")," atrav\xe9s dos m\xe9todo ",(0,a.kt)("inlineCode",{parentName:"p"},"sonar.distance"),", e imprimimos o valor lido no terminal serial. O valor retornado de ",(0,a.kt)("inlineCode",{parentName:"p"},"sonar.distance")," tem a unidade de medida cent\xedmetros."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},'while True:\n try:\n print((sonar.distance,))\n except RuntimeError:\n print("Retrying!")\n time.sleep(0.1)\n')),(0,a.kt)("h2",{id:"resultado"},"Resultado"),(0,a.kt)("p",null,"A figura a seguir exibe os valores lidos no terminal serial(REPL):"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Terminal Serial",src:r(5621).Z,width:"1141",height:"344"})),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,a.kt)("a",{parentName:"p",href:"https://discord.gg/H5kENmWGaz"},"Discord"))),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Autor"),(0,a.kt)("th",{parentName:"tr",align:null},(0,a.kt)("a",{parentName:"th",href:"mailto:wallacejsb@gmail.com"},"Wallace Brito")))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Data:"),(0,a.kt)("td",{parentName:"tr",align:null},"31/10/2021")))))}m.isMDXComponent=!0},609:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/libraries-43f696d429c655da2cf36dc63cfc72e0.png"},901:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/circuito-sensor-hcsr04-36362e07b837238ba47b3c1f31c559ce.png"},5621:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/leitura-sensor-hc-sr04-0c4c677c0a5e425cbba24731cb5f7f09.png"}}]); \ No newline at end of file diff --git a/assets/js/d5f74b3b.3df8d54a.js b/assets/js/d5f74b3b.3df8d54a.js deleted file mode 100755 index d4cd28f01..000000000 --- a/assets/js/d5f74b3b.3df8d54a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5845],{3905:(e,a,t)=>{t.d(a,{Zo:()=>s,kt:()=>f});var r=t(7294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function i(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var a=1;a<arguments.length;a++){var t=null!=arguments[a]?arguments[a]:{};a%2?i(Object(t),!0).forEach((function(a){n(e,a,t[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(t,a))}))}return e}function l(e,a){if(null==e)return{};var t,r,n=function(e,a){if(null==e)return{};var t,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],a.indexOf(t)>=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],a.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var c=r.createContext({}),u=function(e){var a=r.useContext(c),t=a;return e&&(t="function"==typeof e?e(a):o(o({},a),e)),t},s=function(e){var a=u(e.components);return r.createElement(c.Provider,{value:a},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},m=r.forwardRef((function(e,a){var t=e.components,n=e.mdxType,i=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),d=u(t),m=n,f=d["".concat(c,".").concat(m)]||d[m]||p[m]||i;return t?r.createElement(f,o(o({ref:a},s),{},{components:t})):r.createElement(f,o({ref:a},s))}));function f(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var c in a)hasOwnProperty.call(a,c)&&(l[c]=a[c]);l.originalType=e,l[d]="string"==typeof e?e:n,o[1]=l;for(var u=2;u<i;u++)o[u]=t[u];return r.createElement.apply(null,o)}return r.createElement.apply(null,t)}m.displayName="MDXCreateElement"},4853:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var r=t(3117),n=(t(7294),t(3905));const i={id:"leitura-tecla",title:"Leitura de Tecla",slug:"/franzininho-diy/leitura-tecla",description:"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada."},o=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/leitura-tecla",id:"FranzininhoDIY/exemplos-arduino/leitura-tecla",title:"Leitura de Tecla",description:"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/leitura-tecla.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/leitura-tecla",permalink:"/docs/franzininho-diy/leitura-tecla",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/leitura-tecla.md",tags:[],version:"current",frontMatter:{id:"leitura-tecla",title:"Leitura de Tecla",slug:"/franzininho-diy/leitura-tecla",description:"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada."},sidebar:"docs",previous:{title:"Controle brilho de LED",permalink:"/docs/franzininho-diy/brilho-led"},next:{title:"Tecla Liga/Desliga",permalink:"/docs/franzininho-diy/tecla-liga-desliga"}},c={},u=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],s={toc:u},d="wrapper";function p(e){let{components:a,...i}=e;return(0,n.kt)(d,(0,r.Z)({},s,i,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada."),(0,n.kt)("h2",{id:"materiais"},"Materiais"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Placa Franzininho;"),(0,n.kt)("li",{parentName:"ul"},"Protoboard;"),(0,n.kt)("li",{parentName:"ul"},"LED 3mm;"),(0,n.kt)("li",{parentName:"ul"},"1 Resistor 330;"),(0,n.kt)("li",{parentName:"ul"},"1 Resistor de 1k;"),(0,n.kt)("li",{parentName:"ul"},"1 Bot\xe3o;"),(0,n.kt)("li",{parentName:"ul"},"Jumpers macho/f\xeamea")),(0,n.kt)("h2",{id:"circuito"},"Circuito"),(0,n.kt)("p",null,"No protoboard voc\xea deve inserir o LED, resistores e o bot\xe3o, conforme a imagem abaixo:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito leitura tecla",src:t(988).Z,width:"1755",height:"702"})),(0,n.kt)("h2",{id:"sketch"},"Sketch"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},"/*\n Franzininho\n Exemplo: Leitura de Tecla - Pull Down\n Esse exemplo exibe como ler uma tecla com resistor de pull down e acionar um led quando ela for pressionada\n*/\nconst int LED = 1; //pino para o LED\nconst int BOTAO = 2; //pino para o bot\xe3o\nint val = 0; // val ser\xe1 utilizado para armazenar o estado do pino\nvoid setup(){\n pinMode(LED,OUTPUT); //o LED \xe9 uma sa\xedda\n pinMode(BOTAO,INPUT); //o BOTAO \xe9 uma entrada\n}\nvoid loop (){\nval = digitalRead(BOTAO); // l\xea e armazena o valor de entrada\ndigitalWrite(LED, val); //aciona LED conforme valor lido do bot\xe3o\n}\n")),(0,n.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,n.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311373301712683584?view=diagram"}),(0,n.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,n.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/JHdqOuj-WHc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}p.isMDXComponent=!0},988:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/leitura-de-tecla-0133088e4f085079b1a5dc507efc2d45.png"}}]); \ No newline at end of file diff --git a/assets/js/d5f74b3b.5756181b.js b/assets/js/d5f74b3b.5756181b.js new file mode 100755 index 000000000..88223316a --- /dev/null +++ b/assets/js/d5f74b3b.5756181b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7888],{89360:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>t,metadata:()=>l,toc:()=>s});var r=i(17624),a=i(95788);const t={id:"leitura-tecla",title:"Leitura de Tecla",slug:"/franzininho-diy/leitura-tecla",description:"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada."},o=void 0,l={id:"FranzininhoDIY/exemplos-arduino/leitura-tecla",title:"Leitura de Tecla",description:"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/leitura-tecla.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/leitura-tecla",permalink:"/docs/franzininho-diy/leitura-tecla",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/leitura-tecla.md",tags:[],version:"current",frontMatter:{id:"leitura-tecla",title:"Leitura de Tecla",slug:"/franzininho-diy/leitura-tecla",description:"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada."},sidebar:"docs",previous:{title:"Controle brilho de LED",permalink:"/docs/franzininho-diy/brilho-led"},next:{title:"Tecla Liga/Desliga",permalink:"/docs/franzininho-diy/tecla-liga-desliga"}},c={},s=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function d(e){const n={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada."}),"\n",(0,r.jsx)(n.h2,{id:"materiais",children:"Materiais"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Placa Franzininho;"}),"\n",(0,r.jsx)(n.li,{children:"Protoboard;"}),"\n",(0,r.jsx)(n.li,{children:"LED 3mm;"}),"\n",(0,r.jsx)(n.li,{children:"1 Resistor 330;"}),"\n",(0,r.jsx)(n.li,{children:"1 Resistor de 1k;"}),"\n",(0,r.jsx)(n.li,{children:"1 Bot\xe3o;"}),"\n",(0,r.jsx)(n.li,{children:"Jumpers macho/f\xeamea"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,r.jsx)(n.p,{children:"No protoboard voc\xea deve inserir o LED, resistores e o bot\xe3o, conforme a imagem abaixo:"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Circuito leitura tecla",src:i(88444).c+"",width:"1755",height:"702"})}),"\n",(0,r.jsx)(n.h2,{id:"sketch",children:"Sketch"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-cpp",children:"/*\n Franzininho\n Exemplo: Leitura de Tecla - Pull Down\n Esse exemplo exibe como ler uma tecla com resistor de pull down e acionar um led quando ela for pressionada\n*/\nconst int LED = 1; //pino para o LED\nconst int BOTAO = 2; //pino para o bot\xe3o\nint val = 0; // val ser\xe1 utilizado para armazenar o estado do pino\nvoid setup(){\n pinMode(LED,OUTPUT); //o LED \xe9 uma sa\xedda\n pinMode(BOTAO,INPUT); //o BOTAO \xe9 uma entrada\n}\nvoid loop (){\nval = digitalRead(BOTAO); // l\xea e armazena o valor de entrada\ndigitalWrite(LED, val); //aciona LED conforme valor lido do bot\xe3o\n}\n"})}),"\n",(0,r.jsx)(n.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,r.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311373301712683584?view=diagram"}),"\n",(0,r.jsx)(n.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,r.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/JHdqOuj-WHc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function u(e={}){const{wrapper:n}={...(0,a.MN)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},95788:(e,n,i)=>{i.d(n,{MN:()=>s});var r=i(11504);function a(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function t(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,r)}return i}function o(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?t(Object(i),!0).forEach((function(n){a(e,n,i[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):t(Object(i)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(i,n))}))}return e}function l(e,n){if(null==e)return{};var i,r,a=function(e,n){if(null==e)return{};var i,r,a={},t=Object.keys(e);for(r=0;r<t.length;r++)i=t[r],n.indexOf(i)>=0||(a[i]=e[i]);return a}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(r=0;r<t.length;r++)i=t[r],n.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}var c=r.createContext({}),s=function(e){var n=r.useContext(c),i=n;return e&&(i="function"==typeof e?e(n):o(o({},n),e)),i},d={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},u=r.forwardRef((function(e,n){var i=e.components,a=e.mdxType,t=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=s(i),p=a,h=m["".concat(c,".").concat(p)]||m[p]||d[p]||t;return i?r.createElement(h,o(o({ref:n},u),{},{components:i})):r.createElement(h,o({ref:n},u))}));u.displayName="MDXCreateElement"},88444:(e,n,i)=>{i.d(n,{c:()=>r});const r=i.p+"assets/images/leitura-de-tecla-0133088e4f085079b1a5dc507efc2d45.png"}}]); \ No newline at end of file diff --git a/assets/js/d610846f.4a079b22.js b/assets/js/d610846f.4a079b22.js deleted file mode 100755 index 97b7db8e5..000000000 --- a/assets/js/d610846f.4a079b22.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6176],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var u=o.createContext({}),c=function(e){var t=o.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=c(e.components);return o.createElement(u.Provider,{value:t},e.children)},p="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,u=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),p=c(r),m=n,f=p["".concat(u,".").concat(m)]||p[m]||h[m]||a;return r?o.createElement(f,l(l({ref:t},s),{},{components:r})):o.createElement(f,l({ref:t},s))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i[p]="string"==typeof e?e:n,l[1]=i;for(var c=2;c<a;c++)l[c]=r[c];return o.createElement.apply(null,l)}return o.createElement.apply(null,r)}m.displayName="MDXCreateElement"},1452:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var o=r(3117),n=(r(7294),r(3905));const a={slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},l=void 0,i={permalink:"/blog/hello-world",source:"@site/blog/2019-05-29-hello-world.md",title:"Hello",description:"Welcome to this blog. This blog is created with Docusaurus 2 alpha.",date:"2019-05-29T00:00:00.000Z",formattedDate:"29 de maio de 2019",tags:[{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4"}],frontMatter:{slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},prevItem:{title:"Welcome",permalink:"/blog/welcome"},nextItem:{title:"Hola",permalink:"/blog/hola"}},u={authorsImageUrls:[void 0]},c=[],s={toc:c},p="wrapper";function h(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,o.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Welcome to this blog. This blog is created with ",(0,n.kt)("a",{parentName:"p",href:"https://v2.docusaurus.io/"},(0,n.kt)("strong",{parentName:"a"},"Docusaurus 2 alpha")),"."),(0,n.kt)("p",null,"This is a test post."),(0,n.kt)("p",null,"A whole bunch of other information."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d610846f.75f419d0.js b/assets/js/d610846f.75f419d0.js new file mode 100755 index 000000000..a5ce682f0 --- /dev/null +++ b/assets/js/d610846f.75f419d0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6552],{41508:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var o=r(17624),n=r(95788);const a={slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},l=void 0,i={permalink:"/blog/hello-world",source:"@site/blog/2019-05-29-hello-world.md",title:"Hello",description:"Welcome to this blog. This blog is created with Docusaurus 2 alpha.",date:"2019-05-29T00:00:00.000Z",tags:[{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4"}],frontMatter:{slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},unlisted:!1,prevItem:{title:"Welcome",permalink:"/blog/welcome"},nextItem:{title:"Hola",permalink:"/blog/hola"}},u={authorsImageUrls:[void 0]},s=[];function c(e){const t={a:"a",p:"p",strong:"strong",...(0,n.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(t.p,{children:["Welcome to this blog. This blog is created with ",(0,o.jsx)(t.a,{href:"https://v2.docusaurus.io/",children:(0,o.jsx)(t.strong,{children:"Docusaurus 2 alpha"})}),"."]}),"\n",(0,o.jsx)(t.p,{children:"This is a test post."}),"\n",(0,o.jsx)(t.p,{children:"A whole bunch of other information."})]})}function p(e={}){const{wrapper:t}={...(0,n.MN)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},95788:(e,t,r)=>{r.d(t,{MN:()=>s});var o=r(11504);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var u=o.createContext({}),s=function(e){var t=o.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},p=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,u=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),h=s(r),m=n,d=h["".concat(u,".").concat(m)]||h[m]||c[m]||a;return r?o.createElement(d,l(l({ref:t},p),{},{components:r})):o.createElement(d,l({ref:t},p))}));p.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/d69ae106.8f2c25f6.js b/assets/js/d69ae106.8f2c25f6.js new file mode 100755 index 000000000..acc063aa9 --- /dev/null +++ b/assets/js/d69ae106.8f2c25f6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8930],{21204:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>d});var a=n(17624),i=n(95788);const r={id:"micropython-primeiros-passos",title:"Primeiros Passos com MicroPython",slug:"/franzininho-wifi/exemplos-micropython/primeiros-passos",description:"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.",author:"Sthefania Fernandes"},s=void 0,t={id:"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos",title:"Primeiros Passos com MicroPython",description:"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.",source:"@site/docs/FranzininhoWifi/exemplos-micropython/primeiros-passos.md",sourceDirName:"FranzininhoWifi/exemplos-micropython",slug:"/franzininho-wifi/exemplos-micropython/primeiros-passos",permalink:"/docs/franzininho-wifi/exemplos-micropython/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-micropython/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"micropython-primeiros-passos",title:"Primeiros Passos com MicroPython",slug:"/franzininho-wifi/exemplos-micropython/primeiros-passos",description:"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.",author:"Sthefania Fernandes"},sidebar:"docs",previous:{title:"Leitura DHT11",permalink:"/docs/franzininho-wifi/exemplos-arduino/dht11"},next:{title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",permalink:"/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais"}},c={},d=[{value:"Gravando o MicroPython na Franzininho WiFi",id:"gravando-o-micropython-na-franzininho-wifi",level:2},{value:"Apresentando o Thonny IDE",id:"apresentando-o-thonny-ide",level:2}];function p(e){const o={a:"a",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.p,{children:"A Franzininho WIFI \xe9 uma placa de desenvolvimento de hardware de c\xf3digo aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal \xe9 tornar o desenvolvimento de projetos eletr\xf4nicos mais acess\xedvel a makers, entusiastas e desenvolvedores brasileiros."}),"\n",(0,a.jsx)(o.p,{children:"A placa pode ser programada de v\xe1rias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes."}),"\n",(0,a.jsx)(o.p,{children:"A Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns s\xe3o:"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsxs)(o.li,{children:["ESP-IDF, Arduino, CircuitPython e ",(0,a.jsx)(o.strong,{children:"MicroPython"})]}),"\n"]}),"\n",(0,a.jsx)(o.p,{children:"A Franzininho WiFi LAB01 \xe9 uma placa de expans\xe3o para a placa Franzininho WiFi, com a proposta de ser um laborat\xf3rio para auxiliar no ensino e aprendizagem do ESP32, baseada na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experi\xeancias."}),"\n",(0,a.jsxs)(o.p,{children:["Nessa s\xe9rie de artigos, vamos explorar a programa\xe7\xe3o em MicroPython com a Franzininho WiFi LAB01. Primeiramente, \xe9 preciso entender que o ",(0,a.jsx)(o.a,{href:"https://micropython.org/",children:"MicroPython"})," \xe9 uma implementa\xe7\xe3o completa da linguagem Python 3 para rodar em hardware embarcado."]}),"\n",(0,a.jsxs)(o.p,{children:["Assim, para poder programar a sua placa Franzininho WiFi com MicroPython \xe9 preciso, primeiro, gravar o firmware do MicroPython nela. Para facilitar a instala\xe7\xe3o do MicroPython, vamos usar a ferramenta de grava\xe7\xe3o atrav\xe9s do browser, criada pela comunidade Franzininho: ",(0,a.jsx)(o.a,{href:"https://franzininho.github.io/franzininho-webesptools/#",children:"franzininho.github.io"})," (funciona no Chrome e similares). Aproveitamos para agradecer ao Ewerton Sousa pela contribui\xe7\xe3o com essa ferramenta."]}),"\n",(0,a.jsx)(o.p,{children:"A seguir apresentamos os passos para grava\xe7\xe3o do MicroPython na Franzininho WiFI e a IDE que usaremos nessa serie de artigos."}),"\n",(0,a.jsx)(o.h2,{id:"gravando-o-micropython-na-franzininho-wifi",children:"Gravando o MicroPython na Franzininho WiFi"}),"\n",(0,a.jsxs)(o.p,{children:["Acesse a ferramenta ",(0,a.jsx)(o.a,{href:"https://franzininho.github.io/franzininho-webesptools/#",children:"Franzininho \u2013 ESP Web Tools"}),". Com essa ferramenta \xe9 poss\xedvel obter o firmware n\xe3o somente o firmware do Micropython, mas tamb\xe9m das outras ferramentas de software que a placa suporta. Ent\xe3o, atente-se para selecionar a aba do MicroPython, conforme exibido abaixo:"]}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Ferramenta de Grava\xe7\xe3o",src:n(3104).c+"",width:"1844",height:"529"})}),"\n",(0,a.jsx)(o.p,{children:"Seguindo o tutorial, comece conectando sua placa Franzininho a uma das portas USB de seu computador. Em seguida coloque sua placa em modo DFU que significa executar os seguintes passos:"}),"\n",(0,a.jsxs)(o.ol,{children:["\n",(0,a.jsx)(o.li,{children:"Pressione e segure o bot\xe3o boot;"}),"\n",(0,a.jsx)(o.li,{children:"Pressione o bot\xe3o reset;"}),"\n",(0,a.jsx)(o.li,{children:"Ap\xf3s soltar o reset solte o boot."}),"\n"]}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Franzininho WiFI",src:n(63020).c+"",width:"848",height:"438"})}),"\n",(0,a.jsxs)(o.p,{children:["Feito isso, clique no bot\xe3o Conectar do site ",(0,a.jsx)(o.a,{href:"https://franzininho.github.io/franzininho-webesptools/#",children:"franzininho.github.io"}),", selecione a placa e clique em conectar:"]}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Conectando a placa a ferramenta",src:n(52636).c+"",width:"778",height:"651"})}),"\n",(0,a.jsx)(o.p,{children:"Com a placa conectada, clique em instalar MicroPython:"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Intale o MicroPython",src:n(44616).c+"",width:"523",height:"242"})}),"\n",(0,a.jsx)(o.p,{children:"Selecione a op\xe7\xe3o apagar dispositivo:"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Apagar dispositivo",src:n(22580).c+"",width:"528",height:"392"})}),"\n",(0,a.jsx)(o.p,{children:"Clique em instalar e aguarde finalizar a instala\xe7\xe3o (mantenha a p\xe1gina aberta at\xe9 o final da instala\xe7\xe3o):"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Instalando o MicroPython",src:n(16344).c+"",width:"532",height:"355"})}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Instalando o MicroPython",src:n(1884).c+"",width:"591",height:"448"})}),"\n",(0,a.jsx)(o.p,{children:"Uma vez instalado clique novamente no bot\xe3o de reset para iniciar o MicroPython."}),"\n",(0,a.jsx)(o.p,{children:"Tudo pronto, agora \xe9 poss\xedvel programar sua Franzininho WiFi LAB01 com MicroPython."}),"\n",(0,a.jsxs)(o.p,{children:[(0,a.jsx)(o.strong,{children:"Observa\xe7\xe3o"}),": Quando voc\xea colocar a placa em modo DFU, o buzzer pode ser ativado, o que pode causar ru\xeddo indesejado. Para evitar isso, desconecte o jumper do buzzer (IO17), que \xe9 o primeiro da esquerda para a direita."]}),"\n",(0,a.jsx)(o.h2,{id:"apresentando-o-thonny-ide",children:"Apresentando o Thonny IDE"}),"\n",(0,a.jsx)(o.p,{children:"O Thonny \xe9 um IDE popular para Python e MicroPython e \xe9 o que recomendamos para a programa\xe7\xe3o da Franzininho WiFi."}),"\n",(0,a.jsxs)(o.p,{children:["Para realizar o download, basta visitar o site ",(0,a.jsx)(o.a,{href:"https://thonny.org/",children:"thonny.org"})," e selecionar o link de download localizado no topo da p\xe1gina, conforme o seu sistema operacional."]}),"\n",(0,a.jsx)(o.p,{children:"Em seguida, inicie o Thonny enquanto a placa ainda estiver conectada via USB. Na parte inferior direita, selecione a op\xe7\xe3o MicroPython (ESP32). Desta forma, o Thonny ir\xe1 detectar automaticamente a Franzininho WiFi."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"MicroPython Conectado",src:n(12e3).c+"",width:"1659",height:"251"})}),"\n",(0,a.jsx)(o.p,{children:"Agora tudo est\xe1 pronto para iniciar seus projetos com MicroPython na Franzininho WiFi."}),"\n",(0,a.jsxs)(o.table,{children:[(0,a.jsx)(o.thead,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.th,{children:"Autor"}),(0,a.jsx)(o.th,{children:"Sthefania Fernandes"})]})}),(0,a.jsx)(o.tbody,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"Data:"}),(0,a.jsx)(o.td,{children:"10/11/2023"})]})})]})]})}function h(e={}){const{wrapper:o}={...(0,i.MN)(),...e.components};return o?(0,a.jsx)(o,{...e,children:(0,a.jsx)(p,{...e})}):p(e)}},95788:(e,o,n)=>{n.d(o,{MN:()=>d});var a=n(11504);function i(e,o,n){return o in e?Object.defineProperty(e,o,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[o]=n,e}function r(e,o){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);o&&(a=a.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var o=1;o<arguments.length;o++){var n=null!=arguments[o]?arguments[o]:{};o%2?r(Object(n),!0).forEach((function(o){i(e,o,n[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(n,o))}))}return e}function t(e,o){if(null==e)return{};var n,a,i=function(e,o){if(null==e)return{};var n,a,i={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],o.indexOf(n)>=0||(i[n]=e[n]);return i}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],o.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var c=a.createContext({}),d=function(e){var o=a.useContext(c),n=o;return e&&(n="function"==typeof e?e(o):s(s({},o),e)),n},p={inlineCode:"code",wrapper:function(e){var o=e.children;return a.createElement(a.Fragment,{},o)}},h=a.forwardRef((function(e,o){var n=e.components,i=e.mdxType,r=e.originalType,c=e.parentName,h=t(e,["components","mdxType","originalType","parentName"]),l=d(n),m=i,u=l["".concat(c,".").concat(m)]||l[m]||p[m]||r;return n?a.createElement(u,s(s({ref:o},h),{},{components:n})):a.createElement(u,s({ref:o},h))}));h.displayName="MDXCreateElement"},3104:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/1-6d88a07fe7b4d086c5c1e919543bde1f.png"},63020:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/2-4ff442ba4ad188b9e12f85f62f5651e5.png"},52636:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/3-85a7b0152873fb9d9f399f85282c2978.png"},44616:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/4-f656418f67a602f10d2a5413fbc17693.png"},22580:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/5-6365593b93164509a613351e73fe8bd3.png"},16344:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/6-8f46bd568b85b06a3ef67a3e4bf9608f.png"},1884:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/7-b365425ef64b1bf55dcbf8492f02b523.png"},12e3:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/8-e065f7a020356536e7b2097f799041a2.png"}}]); \ No newline at end of file diff --git a/assets/js/d69ae106.eb510f0f.js b/assets/js/d69ae106.eb510f0f.js deleted file mode 100755 index b41773093..000000000 --- a/assets/js/d69ae106.eb510f0f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7201],{3905:(e,a,o)=>{o.d(a,{Zo:()=>c,kt:()=>u});var n=o(7294);function r(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function i(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function t(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?i(Object(o),!0).forEach((function(a){r(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function s(e,a){if(null==e)return{};var o,n,r=function(e,a){if(null==e)return{};var o,n,r={},i=Object.keys(e);for(n=0;n<i.length;n++)o=i[n],a.indexOf(o)>=0||(r[o]=e[o]);return r}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)o=i[n],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var p=n.createContext({}),l=function(e){var a=n.useContext(p),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},c=function(e){var a=l(e.components);return n.createElement(p.Provider,{value:a},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},h=n.forwardRef((function(e,a){var o=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=l(o),h=r,u=m["".concat(p,".").concat(h)]||m[h]||d[h]||i;return o?n.createElement(u,t(t({ref:a},c),{},{components:o})):n.createElement(u,t({ref:a},c))}));function u(e,a){var o=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var i=o.length,t=new Array(i);t[0]=h;var s={};for(var p in a)hasOwnProperty.call(a,p)&&(s[p]=a[p]);s.originalType=e,s[m]="string"==typeof e?e:r,t[1]=s;for(var l=2;l<i;l++)t[l]=o[l];return n.createElement.apply(null,t)}return n.createElement.apply(null,o)}h.displayName="MDXCreateElement"},1918:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>p,contentTitle:()=>t,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=o(3117),r=(o(7294),o(3905));const i={id:"micropython-primeiros-passos",title:"Primeiros Passos com MicroPython",slug:"/franzininho-wifi/exemplos-micropython/primeiros-passos",description:"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.",author:"Sthefania Fernandes"},t=void 0,s={unversionedId:"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos",id:"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos",title:"Primeiros Passos com MicroPython",description:"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.",source:"@site/docs/FranzininhoWifi/exemplos-micropython/primeiros-passos.md",sourceDirName:"FranzininhoWifi/exemplos-micropython",slug:"/franzininho-wifi/exemplos-micropython/primeiros-passos",permalink:"/docs/franzininho-wifi/exemplos-micropython/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-micropython/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"micropython-primeiros-passos",title:"Primeiros Passos com MicroPython",slug:"/franzininho-wifi/exemplos-micropython/primeiros-passos",description:"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.",author:"Sthefania Fernandes"},sidebar:"docs",previous:{title:"Leitura DHT11",permalink:"/docs/franzininho-wifi/exemplos-arduino/dht11"},next:{title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",permalink:"/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais"}},p={},l=[{value:"Gravando o MicroPython na Franzininho WiFi",id:"gravando-o-micropython-na-franzininho-wifi",level:2},{value:"Apresentando o Thonny IDE",id:"apresentando-o-thonny-ide",level:2}],c={toc:l},m="wrapper";function d(e){let{components:a,...i}=e;return(0,r.kt)(m,(0,n.Z)({},c,i,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"A Franzininho WIFI \xe9 uma placa de desenvolvimento de hardware de c\xf3digo aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal \xe9 tornar o desenvolvimento de projetos eletr\xf4nicos mais acess\xedvel a makers, entusiastas e desenvolvedores brasileiros."),(0,r.kt)("p",null,"A placa pode ser programada de v\xe1rias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes."),(0,r.kt)("p",null,"A Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns s\xe3o:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"ESP-IDF, Arduino, CircuitPython e ",(0,r.kt)("strong",{parentName:"li"},"MicroPython"))),(0,r.kt)("p",null,"A Franzininho WiFi LAB01 \xe9 uma placa de expans\xe3o para a placa Franzininho WiFi, com a proposta de ser um laborat\xf3rio para auxiliar no ensino e aprendizagem do ESP32, baseada na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experi\xeancias."),(0,r.kt)("p",null,"Nessa s\xe9rie de artigos, vamos explorar a programa\xe7\xe3o em MicroPython com a Franzininho WiFi LAB01. Primeiramente, \xe9 preciso entender que o ",(0,r.kt)("a",{parentName:"p",href:"https://micropython.org/"},"MicroPython")," \xe9 uma implementa\xe7\xe3o completa da linguagem Python 3 para rodar em hardware embarcado."),(0,r.kt)("p",null,"Assim, para poder programar a sua placa Franzininho WiFi com MicroPython \xe9 preciso, primeiro, gravar o firmware do MicroPython nela. Para facilitar a instala\xe7\xe3o do MicroPython, vamos usar a ferramenta de grava\xe7\xe3o atrav\xe9s do browser, criada pela comunidade Franzininho: ",(0,r.kt)("a",{parentName:"p",href:"https://franzininho.github.io/franzininho-webesptools/#"},"franzininho.github.io")," (funciona no Chrome e similares). Aproveitamos para agradecer ao Ewerton Sousa pela contribui\xe7\xe3o com essa ferramenta."),(0,r.kt)("p",null,"A seguir apresentamos os passos para grava\xe7\xe3o do MicroPython na Franzininho WiFI e a IDE que usaremos nessa serie de artigos."),(0,r.kt)("h2",{id:"gravando-o-micropython-na-franzininho-wifi"},"Gravando o MicroPython na Franzininho WiFi"),(0,r.kt)("p",null,"Acesse a ferramenta ",(0,r.kt)("a",{parentName:"p",href:"https://franzininho.github.io/franzininho-webesptools/#"},"Franzininho \u2013 ESP Web Tools"),". Com essa ferramenta \xe9 poss\xedvel obter o firmware n\xe3o somente o firmware do Micropython, mas tamb\xe9m das outras ferramentas de software que a placa suporta. Ent\xe3o, atente-se para selecionar a aba do MicroPython, conforme exibido abaixo:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Ferramenta de Grava\xe7\xe3o",src:o(2480).Z,width:"1844",height:"529"})),(0,r.kt)("p",null,"Seguindo o tutorial, comece conectando sua placa Franzininho a uma das portas USB de seu computador. Em seguida coloque sua placa em modo DFU que significa executar os seguintes passos:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Pressione e segure o bot\xe3o boot;"),(0,r.kt)("li",{parentName:"ol"},"Pressione o bot\xe3o reset;"),(0,r.kt)("li",{parentName:"ol"},"Ap\xf3s soltar o reset solte o boot.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Franzininho WiFI",src:o(4829).Z,width:"848",height:"438"})),(0,r.kt)("p",null,"Feito isso, clique no bot\xe3o Conectar do site ",(0,r.kt)("a",{parentName:"p",href:"https://franzininho.github.io/franzininho-webesptools/#"},"franzininho.github.io"),", selecione a placa e clique em conectar:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Conectando a placa a ferramenta",src:o(1220).Z,width:"778",height:"651"})),(0,r.kt)("p",null,"Com a placa conectada, clique em instalar MicroPython:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Intale o MicroPython",src:o(82).Z,width:"523",height:"242"})),(0,r.kt)("p",null,"Selecione a op\xe7\xe3o apagar dispositivo:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Apagar dispositivo",src:o(4994).Z,width:"528",height:"392"})),(0,r.kt)("p",null,"Clique em instalar e aguarde finalizar a instala\xe7\xe3o (mantenha a p\xe1gina aberta at\xe9 o final da instala\xe7\xe3o):"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Instalando o MicroPython",src:o(9968).Z,width:"532",height:"355"})),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Instalando o MicroPython",src:o(9109).Z,width:"591",height:"448"})),(0,r.kt)("p",null,"Uma vez instalado clique novamente no bot\xe3o de reset para iniciar o MicroPython."),(0,r.kt)("p",null,"Tudo pronto, agora \xe9 poss\xedvel programar sua Franzininho WiFi LAB01 com MicroPython."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Observa\xe7\xe3o"),": Quando voc\xea colocar a placa em modo DFU, o buzzer pode ser ativado, o que pode causar ru\xeddo indesejado. Para evitar isso, desconecte o jumper do buzzer (IO17), que \xe9 o primeiro da esquerda para a direita."),(0,r.kt)("h2",{id:"apresentando-o-thonny-ide"},"Apresentando o Thonny IDE"),(0,r.kt)("p",null,"O Thonny \xe9 um IDE popular para Python e MicroPython e \xe9 o que recomendamos para a programa\xe7\xe3o da Franzininho WiFi."),(0,r.kt)("p",null,"Para realizar o download, basta visitar o site ",(0,r.kt)("a",{parentName:"p",href:"https://thonny.org/"},"thonny.org")," e selecionar o link de download localizado no topo da p\xe1gina, conforme o seu sistema operacional."),(0,r.kt)("p",null,"Em seguida, inicie o Thonny enquanto a placa ainda estiver conectada via USB. Na parte inferior direita, selecione a op\xe7\xe3o MicroPython (ESP32). Desta forma, o Thonny ir\xe1 detectar automaticamente a Franzininho WiFi."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"MicroPython Conectado",src:o(7627).Z,width:"1659",height:"251"})),(0,r.kt)("p",null,"Agora tudo est\xe1 pronto para iniciar seus projetos com MicroPython na Franzininho WiFi."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Autor"),(0,r.kt)("th",{parentName:"tr",align:null},"Sthefania Fernandes"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data:"),(0,r.kt)("td",{parentName:"tr",align:null},"10/11/2023")))))}d.isMDXComponent=!0},2480:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/1-6d88a07fe7b4d086c5c1e919543bde1f.png"},4829:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/2-4ff442ba4ad188b9e12f85f62f5651e5.png"},1220:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/3-85a7b0152873fb9d9f399f85282c2978.png"},82:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/4-f656418f67a602f10d2a5413fbc17693.png"},4994:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/5-6365593b93164509a613351e73fe8bd3.png"},9968:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/6-8f46bd568b85b06a3ef67a3e4bf9608f.png"},9109:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/7-b365425ef64b1bf55dcbf8492f02b523.png"},7627:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/8-e065f7a020356536e7b2097f799041a2.png"}}]); \ No newline at end of file diff --git a/assets/js/d7336970.0aebaddb.js b/assets/js/d7336970.0aebaddb.js deleted file mode 100755 index e28a6536e..000000000 --- a/assets/js/d7336970.0aebaddb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2312],{3905:(e,n,a)=>{a.d(n,{Zo:()=>d,kt:()=>h});var r=a(7294);function t(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function o(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var n=1;n<arguments.length;n++){var a=null!=arguments[n]?arguments[n]:{};n%2?o(Object(a),!0).forEach((function(n){t(e,n,a[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))}))}return e}function s(e,n){if(null==e)return{};var a,r,t=function(e,n){if(null==e)return{};var a,r,t={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],n.indexOf(a)>=0||(t[a]=e[a]);return t}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],n.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(t[a]=e[a])}return t}var l=r.createContext({}),c=function(e){var n=r.useContext(l),a=n;return e&&(a="function"==typeof e?e(n):i(i({},n),e)),a},d=function(e){var n=c(e.components);return r.createElement(l.Provider,{value:n},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},u=r.forwardRef((function(e,n){var a=e.components,t=e.mdxType,o=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=c(a),u=t,h=p["".concat(l,".").concat(u)]||p[u]||m[u]||o;return a?r.createElement(h,i(i({ref:n},d),{},{components:a})):r.createElement(h,i({ref:n},d))}));function h(e,n){var a=arguments,t=n&&n.mdxType;if("string"==typeof e||t){var o=a.length,i=new Array(o);i[0]=u;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s[p]="string"==typeof e?e:t,i[1]=s;for(var c=2;c<o;c++)i[c]=a[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,a)}u.displayName="MDXCreateElement"},4158:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=a(3117),t=(a(7294),a(3905));const o={id:"franzininho-stm32c0",title:"Placa Franzininho C0",slug:"/franzininho-c0/franzininho-c0-board",description:"Franzininho C0 'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics"},i=void 0,s={unversionedId:"franzininhoSTM32C0/franzininho-stm32c0",id:"franzininhoSTM32C0/franzininho-stm32c0",title:"Placa Franzininho C0",description:"Franzininho C0 'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics",source:"@site/docs/franzininhoSTM32C0/franzininho-stm32c0-board.md",sourceDirName:"franzininhoSTM32C0",slug:"/franzininho-c0/franzininho-c0-board",permalink:"/docs/franzininho-c0/franzininho-c0-board",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/franzininho-stm32c0-board.md",tags:[],version:"current",frontMatter:{id:"franzininho-stm32c0",title:"Placa Franzininho C0",slug:"/franzininho-c0/franzininho-c0-board",description:"Franzininho C0 'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics"},sidebar:"docs",previous:{title:"Franzininho WiFi LAB01",permalink:"/docs/franzininho-wifi-lab01"},next:{title:"STM32Cube IDE TODO List",permalink:"/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist"}},l={},c=[{value:"Recursos de Hardware",id:"recursos-de-hardware",level:2},{value:"Pinout",id:"pinout",level:3},{value:"Mapeamento de recursos na placa",id:"mapeamento-de-recursos-na-placa",level:3},{value:"Pinout do microcontrolador",id:"pinout-do-microcontrolador",level:3},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Fotos",id:"fotos",level:2}],d={toc:c},p="wrapper";function m(e){let{components:n,...o}=e;return(0,t.kt)(p,(0,r.Z)({},d,o,{components:n,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"A Franzininho C0 \xe9 uma placa de desenvolvimento de hardware de c\xf3digo aberto, baseada no Microcontrolador STM32C0, um Arm Cortex M0+ da STMicroelectronics. Desenvolvida no Brasil, sua finalidade principal \xe9 servir como uma ferramenta de ensino/aprendizagem e prototipagem para estudantes, makers, entusiastas e desenvolvedores brasileiros."),(0,t.kt)("p",null,"Com um form factor pequeno e compat\xedvel com protoboard, ela pode ser programada atrav\xe9s das ferramentas da ST e tamb\xe9m da Arduino IDE. "),(0,t.kt)("p",null,"Neste texto, apresentaremos todos os recursos dispon\xedveis e detalhes do seu hardware."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzininho C0",src:a(6660).Z,width:"850",height:"510"})),(0,t.kt)("h2",{id:"recursos-de-hardware"},"Recursos de Hardware"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Microcontrolador: ",(0,t.kt)("ul",{parentName:"li"},(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"https://www.st.com/en/microcontrollers-microprocessors/stm32c011f6.html"},"STM32C011F6P6")," - ARM Cortex M0+ @48MHz"),(0,t.kt)("li",{parentName:"ul"},"Mem\xf3ria Flash: 32 kB"),(0,t.kt)("li",{parentName:"ul"},"Mem\xf3ria RAM: 6 kB"))),(0,t.kt)("li",{parentName:"ul"},"ADC: 12 bits (13 canais + 2 internos)"),(0,t.kt)("li",{parentName:"ul"},"Comunica\xe7\xf5es: 1x I2C, 1 x SPI, 2x USART"),(0,t.kt)("li",{parentName:"ul"},"RTC"),(0,t.kt)("li",{parentName:"ul"},"Timer/Contador: 8"),(0,t.kt)("li",{parentName:"ul"},"GPIO: 16 - Compat\xedvel com protoboard"),(0,t.kt)("li",{parentName:"ul"},"Conversor USB/Serial"),(0,t.kt)("li",{parentName:"ul"},"Conector Micro USB"),(0,t.kt)("li",{parentName:"ul"},"Tens\xe3o de opera\xe7\xe3o: 3,3V"),(0,t.kt)("li",{parentName:"ul"},"Tens\xe3o de alimenta\xe7\xe3o:",(0,t.kt)("ul",{parentName:"li"},(0,t.kt)("li",{parentName:"ul"},"5V via conector USB"),(0,t.kt)("li",{parentName:"ul"},"5V e GND via pinos"))),(0,t.kt)("li",{parentName:"ul"},"Bot\xe3o de USO Geral: 1"),(0,t.kt)("li",{parentName:"ul"},"LEDS de uso Geral: 2"),(0,t.kt)("li",{parentName:"ul"},"Bot\xf5es: 1xReset, 1 x Boot"),(0,t.kt)("li",{parentName:"ul"},"Compat\xedvel com protoboard"),(0,t.kt)("li",{parentName:"ul"},"Dimens\xe3o: 38,1 mm x 20.32 mm"),(0,t.kt)("li",{parentName:"ul"},"Licen\xe7a: CERN Open Hardware Licence version 2")),(0,t.kt)("h3",{id:"pinout"},"Pinout"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzininho C0 Pinout",src:a(9186).Z,width:"3213",height:"2457"})),(0,t.kt)("h3",{id:"mapeamento-de-recursos-na-placa"},"Mapeamento de recursos na placa"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Bot\xe3o: PA8"),(0,t.kt)("li",{parentName:"ul"},"LED1: PB6"),(0,t.kt)("li",{parentName:"ul"},"LED2: PB7"),(0,t.kt)("li",{parentName:"ul"},"RX_PA10"),(0,t.kt)("li",{parentName:"ul"},"TX_PA11")),(0,t.kt)("h3",{id:"pinout-do-microcontrolador"},"Pinout do microcontrolador"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzininho C0 Pinout stm32c11f6p6",src:a(9298).Z,width:"6660",height:"721"})),(0,t.kt)("h3",{id:"esquem\xe1tico"},"Esquem\xe1tico"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Schematic_Franzininho C0_2023-07-26.png",src:a(2997).Z,width:"1170",height:"827"})),(0,t.kt)("h2",{id:"licen\xe7a"},"Licen\xe7a"),(0,t.kt)("p",null,"A placa Franzininho C0 \xe9 um projeto de hardware de c\xf3digo aberto, licenciado sob a ",(0,t.kt)("strong",{parentName:"p"},"CERN Open Hardware Licence version 2"),". Essa licen\xe7a \xe9 utilizada em projetos de hardware que s\xe3o desenvolvidos e disponibilizados como c\xf3digo aberto, permitindo que outras pessoas possam reproduzir e criar deriva\xe7\xf5es do projeto. Para garantir a conformidade com a licen\xe7a, \xe9 importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar deriva\xe7\xf5es do projeto. Dessa forma, podem garantir que est\xe3o seguindo as diretrizes corretas e respeitando a licen\xe7a escolhida para o projeto."),(0,t.kt)("p",null,"Reposit\xf3rio: ",(0,t.kt)("a",{parentName:"p",href:"https://oshwlab.com/fabiosouza/franzininho-stm32"},"Franzininho C0 - EasyEDA open source hardware lab")),(0,t.kt)("h2",{id:"fotos"},"Fotos"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzininho C0 Frente e verso",src:a(7189).Z,width:"1920",height:"909"})),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzininho C0 Frente e verso",src:a(6080).Z,width:"1920",height:"909"})))}m.isMDXComponent=!0},6660:(e,n,a)=>{a.d(n,{Z:()=>r});const r=a.p+"assets/images/Franzininho_C0-6eb01ea78e1dcc0dcef9935e5127238c.png"},6080:(e,n,a)=>{a.d(n,{Z:()=>r});const r=a.p+"assets/images/Franzininho_C0_Protoboards-bd53f85686e107715d6c10c510a985e5.jpg"},2997:(e,n,a)=>{a.d(n,{Z:()=>r});const r=a.p+"assets/images/Franzininho_C0_Schematic-2950216dd4948871d9d70bc01c79d332.png"},7189:(e,n,a)=>{a.d(n,{Z:()=>r});const r=a.p+"assets/images/Franzininho_C0_back-9def83dc0608f9cf896243270a9e9745.jpg"},9186:(e,n,a)=>{a.d(n,{Z:()=>r});const r=a.p+"assets/images/Pinout-Franzininho-C0-34bddd88aa02f5e6d532e774d3d7925a.png"},9298:(e,n,a)=>{a.d(n,{Z:()=>r});const r=a.p+"assets/images/pinout-stm32c11f6p6-e552e71c3445ae37f6bd33259a633c72.png"}}]); \ No newline at end of file diff --git a/assets/js/d7336970.e9a75feb.js b/assets/js/d7336970.e9a75feb.js new file mode 100755 index 000000000..611619e76 --- /dev/null +++ b/assets/js/d7336970.e9a75feb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7073],{24236:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>d});var i=r(17624),o=r(95788);const a={id:"franzininho-stm32c0",title:"Placa Franzininho C0",slug:"/franzininho-c0/franzininho-c0-board",description:"Franzininho C0 'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics"},s=void 0,t={id:"franzininhoSTM32C0/franzininho-stm32c0",title:"Placa Franzininho C0",description:"Franzininho C0 'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics",source:"@site/docs/franzininhoSTM32C0/franzininho-stm32c0-board.md",sourceDirName:"franzininhoSTM32C0",slug:"/franzininho-c0/franzininho-c0-board",permalink:"/docs/franzininho-c0/franzininho-c0-board",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/franzininho-stm32c0-board.md",tags:[],version:"current",frontMatter:{id:"franzininho-stm32c0",title:"Placa Franzininho C0",slug:"/franzininho-c0/franzininho-c0-board",description:"Franzininho C0 'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics"},sidebar:"docs",previous:{title:"Franzininho WiFi LAB01",permalink:"/docs/franzininho-wifi-lab01"},next:{title:"STM32Cube IDE TODO List",permalink:"/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist"}},c={},d=[{value:"Recursos de Hardware",id:"recursos-de-hardware",level:2},{value:"Pinout",id:"pinout",level:3},{value:"Mapeamento de recursos na placa",id:"mapeamento-de-recursos-na-placa",level:3},{value:"Pinout do microcontrolador",id:"pinout-do-microcontrolador",level:3},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Fotos",id:"fotos",level:2}];function l(e){const n={a:"a",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"A Franzininho C0 \xe9 uma placa de desenvolvimento de hardware de c\xf3digo aberto, baseada no Microcontrolador STM32C0, um Arm Cortex M0+ da STMicroelectronics. Desenvolvida no Brasil, sua finalidade principal \xe9 servir como uma ferramenta de ensino/aprendizagem e prototipagem para estudantes, makers, entusiastas e desenvolvedores brasileiros."}),"\n",(0,i.jsx)(n.p,{children:"Com um form factor pequeno e compat\xedvel com protoboard, ela pode ser programada atrav\xe9s das ferramentas da ST e tamb\xe9m da Arduino IDE."}),"\n",(0,i.jsx)(n.p,{children:"Neste texto, apresentaremos todos os recursos dispon\xedveis e detalhes do seu hardware."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Franzininho C0",src:r(41933).c+"",width:"850",height:"510"})}),"\n",(0,i.jsx)(n.h2,{id:"recursos-de-hardware",children:"Recursos de Hardware"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Microcontrolador:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.st.com/en/microcontrollers-microprocessors/stm32c011f6.html",children:"STM32C011F6P6"})," - ARM Cortex M0+ @48MHz"]}),"\n",(0,i.jsx)(n.li,{children:"Mem\xf3ria Flash: 32 kB"}),"\n",(0,i.jsx)(n.li,{children:"Mem\xf3ria RAM: 6 kB"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"ADC: 12 bits (13 canais + 2 internos)"}),"\n",(0,i.jsx)(n.li,{children:"Comunica\xe7\xf5es: 1x I2C, 1 x SPI, 2x USART"}),"\n",(0,i.jsx)(n.li,{children:"RTC"}),"\n",(0,i.jsx)(n.li,{children:"Timer/Contador: 8"}),"\n",(0,i.jsx)(n.li,{children:"GPIO: 16 - Compat\xedvel com protoboard"}),"\n",(0,i.jsx)(n.li,{children:"Conversor USB/Serial"}),"\n",(0,i.jsx)(n.li,{children:"Conector Micro USB"}),"\n",(0,i.jsx)(n.li,{children:"Tens\xe3o de opera\xe7\xe3o: 3,3V"}),"\n",(0,i.jsxs)(n.li,{children:["Tens\xe3o de alimenta\xe7\xe3o:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"5V via conector USB"}),"\n",(0,i.jsx)(n.li,{children:"5V e GND via pinos"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"Bot\xe3o de USO Geral: 1"}),"\n",(0,i.jsx)(n.li,{children:"LEDS de uso Geral: 2"}),"\n",(0,i.jsx)(n.li,{children:"Bot\xf5es: 1xReset, 1 x Boot"}),"\n",(0,i.jsx)(n.li,{children:"Compat\xedvel com protoboard"}),"\n",(0,i.jsx)(n.li,{children:"Dimens\xe3o: 38,1 mm x 20.32 mm"}),"\n",(0,i.jsx)(n.li,{children:"Licen\xe7a: CERN Open Hardware Licence version 2"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"pinout",children:"Pinout"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Franzininho C0 Pinout",src:r(4280).c+"",width:"3213",height:"2457"})}),"\n",(0,i.jsx)(n.h3,{id:"mapeamento-de-recursos-na-placa",children:"Mapeamento de recursos na placa"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Bot\xe3o: PA8"}),"\n",(0,i.jsx)(n.li,{children:"LED1: PB6"}),"\n",(0,i.jsx)(n.li,{children:"LED2: PB7"}),"\n",(0,i.jsx)(n.li,{children:"RX_PA10"}),"\n",(0,i.jsx)(n.li,{children:"TX_PA11"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"pinout-do-microcontrolador",children:"Pinout do microcontrolador"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Franzininho C0 Pinout stm32c11f6p6",src:r(95516).c+"",width:"6660",height:"721"})}),"\n",(0,i.jsx)(n.h3,{id:"esquem\xe1tico",children:"Esquem\xe1tico"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Schematic_Franzininho C0_2023-07-26.png",src:r(56800).c+"",width:"1170",height:"827"})}),"\n",(0,i.jsx)(n.h2,{id:"licen\xe7a",children:"Licen\xe7a"}),"\n",(0,i.jsxs)(n.p,{children:["A placa Franzininho C0 \xe9 um projeto de hardware de c\xf3digo aberto, licenciado sob a ",(0,i.jsx)(n.strong,{children:"CERN Open Hardware Licence version 2"}),". Essa licen\xe7a \xe9 utilizada em projetos de hardware que s\xe3o desenvolvidos e disponibilizados como c\xf3digo aberto, permitindo que outras pessoas possam reproduzir e criar deriva\xe7\xf5es do projeto. Para garantir a conformidade com a licen\xe7a, \xe9 importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar deriva\xe7\xf5es do projeto. Dessa forma, podem garantir que est\xe3o seguindo as diretrizes corretas e respeitando a licen\xe7a escolhida para o projeto."]}),"\n",(0,i.jsxs)(n.p,{children:["Reposit\xf3rio: ",(0,i.jsx)(n.a,{href:"https://oshwlab.com/fabiosouza/franzininho-stm32",children:"Franzininho C0 - EasyEDA open source hardware lab"})]}),"\n",(0,i.jsx)(n.h2,{id:"fotos",children:"Fotos"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Franzininho C0 Frente e verso",src:r(59048).c+"",width:"1920",height:"909"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Franzininho C0 Frente e verso",src:r(80452).c+"",width:"1920",height:"909"})})]})}function h(e={}){const{wrapper:n}={...(0,o.MN)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},95788:(e,n,r)=>{r.d(n,{MN:()=>d});var i=r(11504);function o(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function a(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,i)}return r}function s(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?a(Object(r),!0).forEach((function(n){o(e,n,r[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))}))}return e}function t(e,n){if(null==e)return{};var r,i,o=function(e,n){if(null==e)return{};var r,i,o={},a=Object.keys(e);for(i=0;i<a.length;i++)r=a[i],n.indexOf(r)>=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=i.createContext({}),d=function(e){var n=i.useContext(c),r=n;return e&&(r="function"==typeof e?e(n):s(s({},n),e)),r},l={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},h=i.forwardRef((function(e,n){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,h=t(e,["components","mdxType","originalType","parentName"]),p=d(r),m=o,u=p["".concat(c,".").concat(m)]||p[m]||l[m]||a;return r?i.createElement(u,s(s({ref:n},h),{},{components:r})):i.createElement(u,s({ref:n},h))}));h.displayName="MDXCreateElement"},41933:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/Franzininho_C0-6eb01ea78e1dcc0dcef9935e5127238c.png"},80452:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/Franzininho_C0_Protoboards-bd53f85686e107715d6c10c510a985e5.jpg"},56800:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/Franzininho_C0_Schematic-2950216dd4948871d9d70bc01c79d332.png"},59048:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/Franzininho_C0_back-9def83dc0608f9cf896243270a9e9745.jpg"},4280:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/Pinout-Franzininho-C0-34bddd88aa02f5e6d532e774d3d7925a.png"},95516:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/pinout-stm32c11f6p6-e552e71c3445ae37f6bd33259a633c72.png"}}]); \ No newline at end of file diff --git a/assets/js/d75a6ad4.b9068510.js b/assets/js/d75a6ad4.b9068510.js deleted file mode 100755 index b66111910..000000000 --- a/assets/js/d75a6ad4.b9068510.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[286],{3905:(a,n,e)=>{e.d(n,{Zo:()=>d,kt:()=>h});var t=e(7294);function i(a,n,e){return n in a?Object.defineProperty(a,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):a[n]=e,a}function r(a,n){var e=Object.keys(a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(a);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(a,n).enumerable}))),e.push.apply(e,t)}return e}function o(a){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?r(Object(e),!0).forEach((function(n){i(a,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(e)):r(Object(e)).forEach((function(n){Object.defineProperty(a,n,Object.getOwnPropertyDescriptor(e,n))}))}return a}function l(a,n){if(null==a)return{};var e,t,i=function(a,n){if(null==a)return{};var e,t,i={},r=Object.keys(a);for(t=0;t<r.length;t++)e=r[t],n.indexOf(e)>=0||(i[e]=a[e]);return i}(a,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(a);for(t=0;t<r.length;t++)e=r[t],n.indexOf(e)>=0||Object.prototype.propertyIsEnumerable.call(a,e)&&(i[e]=a[e])}return i}var s=t.createContext({}),p=function(a){var n=t.useContext(s),e=n;return a&&(e="function"==typeof a?a(n):o(o({},n),a)),e},d=function(a){var n=p(a.components);return t.createElement(s.Provider,{value:n},a.children)},c="mdxType",u={inlineCode:"code",wrapper:function(a){var n=a.children;return t.createElement(t.Fragment,{},n)}},m=t.forwardRef((function(a,n){var e=a.components,i=a.mdxType,r=a.originalType,s=a.parentName,d=l(a,["components","mdxType","originalType","parentName"]),c=p(e),m=i,h=c["".concat(s,".").concat(m)]||c[m]||u[m]||r;return e?t.createElement(h,o(o({ref:n},d),{},{components:e})):t.createElement(h,o({ref:n},d))}));function h(a,n){var e=arguments,i=n&&n.mdxType;if("string"==typeof a||i){var r=e.length,o=new Array(r);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=a,l[c]="string"==typeof a?a:i,o[1]=l;for(var p=2;p<r;p++)o[p]=e[p];return t.createElement.apply(null,o)}return t.createElement.apply(null,e)}m.displayName="MDXCreateElement"},8059:(a,n,e)=>{e.r(n),e.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var t=e(3117),i=(e(7294),e(3905));const r={id:"franzininho-wifi-lab01",title:"Franzininho WiFi LAB01",slug:"/franzininho-wifi-lab01",description:"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi."},o=void 0,l={unversionedId:"FranzininhoWiFiLAB01/franzininho-wifi-lab01",id:"FranzininhoWiFiLAB01/franzininho-wifi-lab01",title:"Franzininho WiFi LAB01",description:"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi.",source:"@site/docs/FranzininhoWiFiLAB01/franzininho-wifi-lab01.md",sourceDirName:"FranzininhoWiFiLAB01",slug:"/franzininho-wifi-lab01",permalink:"/docs/franzininho-wifi-lab01",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWiFiLAB01/franzininho-wifi-lab01.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-lab01",title:"Franzininho WiFi LAB01",slug:"/franzininho-wifi-lab01",description:"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi."},sidebar:"docs",previous:{title:"Placa Franzininho WiFi dev Edition",permalink:"/docs/franzininho-wifi/franzininho-wifi-dev-edition"},next:{title:"Placa Franzininho C0",permalink:"/docs/franzininho-c0/franzininho-c0-board"}},s={},p=[{value:"Franzininho WiFi LAB01",id:"franzininho-wifi-lab01",level:2},{value:"Recursos da Franzininho WiFi LAB01",id:"recursos-da-franzininho-wifi-lab01",level:3},{value:"Resumo dos recursos da placa",id:"resumo-dos-recursos-da-placa",level:3},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Usando os pinos de expans\xe3o da placa",id:"usando-os-pinos-de-expans\xe3o-da-placa",level:2},{value:"Mapa de pinos Franzininho vs Recurso onboard",id:"mapa-de-pinos-franzininho-vs-recurso-onboard",level:2},{value:"JTAG",id:"jtag",level:2},{value:"Como Programar?",id:"como-programar",level:2},{value:"Exemplos de c\xf3digo:",id:"exemplos-de-c\xf3digo",level:3},{value:"Onde adquirir a placa?",id:"onde-adquirir-a-placa",level:2}],d={toc:p},c="wrapper";function u(a){let{components:n,...r}=a;return(0,i.kt)(c,(0,t.Z)({},d,r,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"A Franzininho WiFi LAB01 \xe9 uma placa de expans\xe3o para a placa ",(0,i.kt)("a",{parentName:"p",href:"https://embarcados.com.br/franzininho-wifi/"},"Franzininho WiFi"),", com a proposta de ser um laborat\xf3rio para auxiliar no ensino e aprendizagem do ESP32, com base na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experiencias."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Franzininho WiFi LAB01",src:e(8652).Z,width:"1195",height:"1181"})),(0,i.kt)("p",null,"Nesse material voc\xea encontra os detalhes do hardware da Franzininho WiFi LAB01."),(0,i.kt)("p",null,"Saiba mais sobre a Franzininho WiFi: ",(0,i.kt)("a",{parentName:"p",href:"https://docs.franzininho.com.br/docs/franzininho-wifi/franzininho-wifi"},"Placa Franzininho WiFi")),(0,i.kt)("h2",{id:"franzininho-wifi-lab01"},"Franzininho WiFi LAB01"),(0,i.kt)("p",null,"A placa Franzininho WiFi LAB01 foi desenvolvida para facilitar o ensino e aprendizagem em diversos n\xedveis e abordagens com a Franzininho WiFi."),(0,i.kt)("p",null,"Essa placa \xe9 o laborat\xf3rio base para os exemplos apresentados com a Franzininho WiFi sendo usada em oficinas, workshops e forma\xe7\xf5es em diversos n\xedveis de abordagem, desde iniciantes at\xe9 desenvolvedores experientes."),(0,i.kt)("h3",{id:"recursos-da-franzininho-wifi-lab01"},"Recursos da Franzininho WiFi LAB01"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Conector para placa Franzininho WiFi"),(0,i.kt)("li",{parentName:"ul"},"6 chaves t\xe1cteis"),(0,i.kt)("li",{parentName:"ul"},"Conector para display IPS 240\xd7240 ST7789"),(0,i.kt)("li",{parentName:"ul"},"Conector para display OLED 0.96 SSD1306"),(0,i.kt)("li",{parentName:"ul"},"DHT11"),(0,i.kt)("li",{parentName:"ul"},"LDR"),(0,i.kt)("li",{parentName:"ul"},"LED RGB"),(0,i.kt)("li",{parentName:"ul"},"BUZZER"),(0,i.kt)("li",{parentName:"ul"},"Expans\xf5es:",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"5 x I2C"),(0,i.kt)("li",{parentName:"ul"},"2 UARTs"),(0,i.kt)("li",{parentName:"ul"},"Alimenta\xe7\xe3o (5V, GND)"),(0,i.kt)("li",{parentName:"ul"},"6x Conector para garras jacar\xe9s (TOUCH, entrada DIGITAL)"),(0,i.kt)("li",{parentName:"ul"},"Todos os I/Os da Franzininho WiFi"))),(0,i.kt)("li",{parentName:"ul"},"JTAG"),(0,i.kt)("li",{parentName:"ul"},"Possibilidade de desabilitar/habilitar recursos para uso dos I/Os por outro recurso")),(0,i.kt)("h3",{id:"resumo-dos-recursos-da-placa"},"Resumo dos recursos da placa"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Recursos da Franzininho WiFi LAB01",src:e(6734).Z,width:"800",height:"640"})),(0,i.kt)("h3",{id:"esquem\xe1tico"},"Esquem\xe1tico"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Franzininho-wifi-lab01-esquematico.png",src:e(9893).Z,width:"1653",height:"1171"})),(0,i.kt)("h2",{id:"licen\xe7a"},"Licen\xe7a"),(0,i.kt)("p",null,"A ",(0,i.kt)("strong",{parentName:"p"},"Franzininho WiFi LAB01")," \xe9 um projeto open source e est\xe1 dispon\xedvel sob a licen\xe7a ",(0,i.kt)("strong",{parentName:"p"},"CERN Open Hardware License"),"."),(0,i.kt)("p",null,"O projeto, criado em fevereiro de 2022 no ",(0,i.kt)("strong",{parentName:"p"},"EasyEDA"),", est\xe1 dispon\xedvel em: ",(0,i.kt)("a",{parentName:"p",href:"https://oshwlab.com/fabiosouza/shield-franzininho-wifi"},"https://oshwlab.com/fabiosouza/shield-franzininho-wifi"),"."),(0,i.kt)("h2",{id:"usando-os-pinos-de-expans\xe3o-da-placa"},"Usando os pinos de expans\xe3o da placa"),(0,i.kt)("p",null,"A placa Franzininho WiFi LAB01 foi pensanda para o uso dos recursos existentes na placa e tamb\xe9m dando a possibilidade para adicionar recursos externos. Por exemplo, se voce precisar adicionar um rele para acionamento de pot\xeancia, ou outro sensor, voc\xea pode usar os pinos de expans\xe3o da placa."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Franzininho-wifi-lab01-expansoes.png",src:e(5794).Z,width:"2509",height:"1838"})),(0,i.kt)("p",null,"Caso o pino da Franzininho WiFi que voce queira usar esteja sendo usado por um dos recursos onboard da placa, voce pode desabilitar atrav\xe9s dos jumper correspondente:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Franzininho-wifi-lab01-jumpers.png",src:e(2561).Z,width:"862",height:"710"})),(0,i.kt)("p",null,"Al\xe9m disso, ela possui alguns barramentos de comunica\xe7\xf5es que facilitam a conex\xe3o de m\xf3dulos externos. \xc9 posivel ligar 5 m\xf3dulos I2C e 2 UARTs#"),(0,i.kt)("h2",{id:"mapa-de-pinos-franzininho-vs-recurso-onboard"},"Mapa de pinos Franzininho vs Recurso onboard"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Pino"),(0,i.kt)("th",{parentName:"tr",align:null},"Recurso"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"I01"),(0,i.kt)("td",{parentName:"tr",align:null},"LDR")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"I02"),(0,i.kt)("td",{parentName:"tr",align:null},"BT6")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO3"),(0,i.kt)("td",{parentName:"tr",align:null},"BT5")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO4"),(0,i.kt)("td",{parentName:"tr",align:null},"BT4")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO5"),(0,i.kt)("td",{parentName:"tr",align:null},"BT3")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO6"),(0,i.kt)("td",{parentName:"tr",align:null},"BT2")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO7"),(0,i.kt)("td",{parentName:"tr",align:null},"BT1")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO8"),(0,i.kt)("td",{parentName:"tr",align:null},"OLED_SDA")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO9"),(0,i.kt)("td",{parentName:"tr",align:null},"OLED_SCL")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO10"),(0,i.kt)("td",{parentName:"tr",align:null},"TFT_DC")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO11"),(0,i.kt)("td",{parentName:"tr",align:null},"TFT_RES")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO12"),(0,i.kt)("td",{parentName:"tr",align:null},"LED AZUL")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO13"),(0,i.kt)("td",{parentName:"tr",align:null},"LED VERDE")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO14"),(0,i.kt)("td",{parentName:"tr",align:null},"LED VERMELHO")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO15"),(0,i.kt)("td",{parentName:"tr",align:null},"DHT11")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO17"),(0,i.kt)("td",{parentName:"tr",align:null},"BUZZER")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO35"),(0,i.kt)("td",{parentName:"tr",align:null},"TFT_SDA")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO36"),(0,i.kt)("td",{parentName:"tr",align:null},"TFT_scl")))),(0,i.kt)("h2",{id:"jtag"},"JTAG"),(0,i.kt)("p",null,"A Franzininho WiFI LAB01 possui conector para JTAG compat\xedvel com o ",(0,i.kt)("a",{parentName:"p",href:"https://docs.espressif.com/projects/espressif-esp-dev-kits/en/latest/other/esp-prog/user_guide.html"},"ESP-PROG")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Franzininho-wifi-lab01-jtag.png",src:e(5955).Z,width:"1751",height:"1447"})),(0,i.kt)("h2",{id:"como-programar"},"Como Programar?"),(0,i.kt)("p",null,"Conforme apresentado no artigo \u201c",(0,i.kt)("a",{parentName:"p",href:"https://embarcados.com.br/como-programar-a-franzininho-wifi/"},"Como programar a Franzininho WiFi? Descubra agora mesmo!"),"\u201c, a Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns s\xe3o:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"ESP-IDF, Arduino, CircuitPython e MicroPython")),(0,i.kt)("h3",{id:"exemplos-de-c\xf3digo"},"Exemplos de c\xf3digo:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Arduino: ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/Franzininho-WiFI-LAB01-Arduino"},"https://github.com/Franzininho/Franzininho-WiFI-LAB01-Arduino")),(0,i.kt)("li",{parentName:"ul"},"CircuitPython: tbd"),(0,i.kt)("li",{parentName:"ul"},"MicroPython: tbd"),(0,i.kt)("li",{parentName:"ul"},"ESP-IDF: tbd")),(0,i.kt)("h2",{id:"onde-adquirir-a-placa"},"Onde adquirir a placa?"),(0,i.kt)("p",null,"Adquira sua placa em: ",(0,i.kt)("a",{parentName:"p",href:"https://cursos.embarcados.com.br/cursos/franzininho-wifi-lab01/"},"https://cursos.embarcados.com.br/cursos/franzininho-wifi-lab01/")),(0,i.kt)("p",null,"Se voc\xea quiser equipar o laborat\xf3rio da sua institui\xe7\xe3o com essa placa, entre em contato conosco para reservar com anteced\xeancia antes da produ\xe7\xe3o."),(0,i.kt)("p",null,"Contato: ",(0,i.kt)("a",{parentName:"p",href:"mailto:contato@embarcados.com.br"},"contato@embarcados.com.br")))}u.isMDXComponent=!0},8652:(a,n,e)=>{e.d(n,{Z:()=>t});const t=e.p+"assets/images/Franzininho-wifi-lab01-desenho-392517059b55459854f015253728930c.png"},9893:(a,n,e)=>{e.d(n,{Z:()=>t});const t=e.p+"assets/images/Franzininho-wifi-lab01-esquematico-d4d32d414db33086a671d4b8c1a66dc0.png"},5794:(a,n,e)=>{e.d(n,{Z:()=>t});const t=e.p+"assets/images/Franzininho-wifi-lab01-expansoes-85f8d5ef179d70c5e10144221aa414e6.png"},5955:(a,n,e)=>{e.d(n,{Z:()=>t});const t=e.p+"assets/images/Franzininho-wifi-lab01-jtag-714e1397df7c33ee7a2cb36fd8f49b02.png"},2561:(a,n,e)=>{e.d(n,{Z:()=>t});const t=e.p+"assets/images/Franzininho-wifi-lab01-jumpers-a5b24505dd2d71bff5fc1f8c62400d22.png"},6734:(a,n,e)=>{e.d(n,{Z:()=>t});const t=e.p+"assets/images/Franzininho-wifi-lab01-recursos-a73b02e1e67137518f241488c8367938.png"}}]); \ No newline at end of file diff --git a/assets/js/d75a6ad4.f9196fd6.js b/assets/js/d75a6ad4.f9196fd6.js new file mode 100755 index 000000000..526928031 --- /dev/null +++ b/assets/js/d75a6ad4.f9196fd6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1363],{44972:(i,n,e)=>{e.r(n),e.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>d,toc:()=>t});var r=e(17624),a=e(95788);const s={id:"franzininho-wifi-lab01",title:"Franzininho WiFi LAB01",slug:"/franzininho-wifi-lab01",description:"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi."},o=void 0,d={id:"FranzininhoWiFiLAB01/franzininho-wifi-lab01",title:"Franzininho WiFi LAB01",description:"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi.",source:"@site/docs/FranzininhoWiFiLAB01/franzininho-wifi-lab01.md",sourceDirName:"FranzininhoWiFiLAB01",slug:"/franzininho-wifi-lab01",permalink:"/docs/franzininho-wifi-lab01",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWiFiLAB01/franzininho-wifi-lab01.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-lab01",title:"Franzininho WiFi LAB01",slug:"/franzininho-wifi-lab01",description:"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi."},sidebar:"docs",previous:{title:"Placa Franzininho WiFi dev Edition",permalink:"/docs/franzininho-wifi/franzininho-wifi-dev-edition"},next:{title:"Placa Franzininho C0",permalink:"/docs/franzininho-c0/franzininho-c0-board"}},c={},t=[{value:"Franzininho WiFi LAB01",id:"franzininho-wifi-lab01",level:2},{value:"Recursos da Franzininho WiFi LAB01",id:"recursos-da-franzininho-wifi-lab01",level:3},{value:"Resumo dos recursos da placa",id:"resumo-dos-recursos-da-placa",level:3},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Usando os pinos de expans\xe3o da placa",id:"usando-os-pinos-de-expans\xe3o-da-placa",level:2},{value:"Mapa de pinos Franzininho vs Recurso onboard",id:"mapa-de-pinos-franzininho-vs-recurso-onboard",level:2},{value:"JTAG",id:"jtag",level:2},{value:"Como Programar?",id:"como-programar",level:2},{value:"Exemplos de c\xf3digo:",id:"exemplos-de-c\xf3digo",level:3},{value:"Onde adquirir a placa?",id:"onde-adquirir-a-placa",level:2}];function l(i){const n={a:"a",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.MN)(),...i.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["A Franzininho WiFi LAB01 \xe9 uma placa de expans\xe3o para a placa ",(0,r.jsx)(n.a,{href:"https://embarcados.com.br/franzininho-wifi/",children:"Franzininho WiFi"}),", com a proposta de ser um laborat\xf3rio para auxiliar no ensino e aprendizagem do ESP32, com base na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experiencias."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Franzininho WiFi LAB01",src:e(49423).c+"",width:"1195",height:"1181"})}),"\n",(0,r.jsx)(n.p,{children:"Nesse material voc\xea encontra os detalhes do hardware da Franzininho WiFi LAB01."}),"\n",(0,r.jsxs)(n.p,{children:["Saiba mais sobre a Franzininho WiFi: ",(0,r.jsx)(n.a,{href:"https://docs.franzininho.com.br/docs/franzininho-wifi/franzininho-wifi",children:"Placa Franzininho WiFi"})]}),"\n",(0,r.jsx)(n.h2,{id:"franzininho-wifi-lab01",children:"Franzininho WiFi LAB01"}),"\n",(0,r.jsx)(n.p,{children:"A placa Franzininho WiFi LAB01 foi desenvolvida para facilitar o ensino e aprendizagem em diversos n\xedveis e abordagens com a Franzininho WiFi."}),"\n",(0,r.jsx)(n.p,{children:"Essa placa \xe9 o laborat\xf3rio base para os exemplos apresentados com a Franzininho WiFi sendo usada em oficinas, workshops e forma\xe7\xf5es em diversos n\xedveis de abordagem, desde iniciantes at\xe9 desenvolvedores experientes."}),"\n",(0,r.jsx)(n.h3,{id:"recursos-da-franzininho-wifi-lab01",children:"Recursos da Franzininho WiFi LAB01"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Conector para placa Franzininho WiFi"}),"\n",(0,r.jsx)(n.li,{children:"6 chaves t\xe1cteis"}),"\n",(0,r.jsx)(n.li,{children:"Conector para display IPS 240\xd7240 ST7789"}),"\n",(0,r.jsx)(n.li,{children:"Conector para display OLED 0.96 SSD1306"}),"\n",(0,r.jsx)(n.li,{children:"DHT11"}),"\n",(0,r.jsx)(n.li,{children:"LDR"}),"\n",(0,r.jsx)(n.li,{children:"LED RGB"}),"\n",(0,r.jsx)(n.li,{children:"BUZZER"}),"\n",(0,r.jsxs)(n.li,{children:["Expans\xf5es:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"5 x I2C"}),"\n",(0,r.jsx)(n.li,{children:"2 UARTs"}),"\n",(0,r.jsx)(n.li,{children:"Alimenta\xe7\xe3o (5V, GND)"}),"\n",(0,r.jsx)(n.li,{children:"6x Conector para garras jacar\xe9s (TOUCH, entrada DIGITAL)"}),"\n",(0,r.jsx)(n.li,{children:"Todos os I/Os da Franzininho WiFi"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.li,{children:"JTAG"}),"\n",(0,r.jsx)(n.li,{children:"Possibilidade de desabilitar/habilitar recursos para uso dos I/Os por outro recurso"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"resumo-dos-recursos-da-placa",children:"Resumo dos recursos da placa"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Recursos da Franzininho WiFi LAB01",src:e(75764).c+"",width:"800",height:"640"})}),"\n",(0,r.jsx)(n.h3,{id:"esquem\xe1tico",children:"Esquem\xe1tico"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Franzininho-wifi-lab01-esquematico.png",src:e(7376).c+"",width:"1653",height:"1171"})}),"\n",(0,r.jsx)(n.h2,{id:"licen\xe7a",children:"Licen\xe7a"}),"\n",(0,r.jsxs)(n.p,{children:["A ",(0,r.jsx)(n.strong,{children:"Franzininho WiFi LAB01"})," \xe9 um projeto open source e est\xe1 dispon\xedvel sob a licen\xe7a ",(0,r.jsx)(n.strong,{children:"CERN Open Hardware License"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["O projeto, criado em fevereiro de 2022 no ",(0,r.jsx)(n.strong,{children:"EasyEDA"}),", est\xe1 dispon\xedvel em: ",(0,r.jsx)(n.a,{href:"https://oshwlab.com/fabiosouza/shield-franzininho-wifi",children:"https://oshwlab.com/fabiosouza/shield-franzininho-wifi"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"usando-os-pinos-de-expans\xe3o-da-placa",children:"Usando os pinos de expans\xe3o da placa"}),"\n",(0,r.jsx)(n.p,{children:"A placa Franzininho WiFi LAB01 foi pensanda para o uso dos recursos existentes na placa e tamb\xe9m dando a possibilidade para adicionar recursos externos. Por exemplo, se voce precisar adicionar um rele para acionamento de pot\xeancia, ou outro sensor, voc\xea pode usar os pinos de expans\xe3o da placa."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Franzininho-wifi-lab01-expansoes.png",src:e(39133).c+"",width:"2509",height:"1838"})}),"\n",(0,r.jsx)(n.p,{children:"Caso o pino da Franzininho WiFi que voce queira usar esteja sendo usado por um dos recursos onboard da placa, voce pode desabilitar atrav\xe9s dos jumper correspondente:"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Franzininho-wifi-lab01-jumpers.png",src:e(77368).c+"",width:"862",height:"710"})}),"\n",(0,r.jsx)(n.p,{children:"Al\xe9m disso, ela possui alguns barramentos de comunica\xe7\xf5es que facilitam a conex\xe3o de m\xf3dulos externos. \xc9 posivel ligar 5 m\xf3dulos I2C e 2 UARTs#"}),"\n",(0,r.jsx)(n.h2,{id:"mapa-de-pinos-franzininho-vs-recurso-onboard",children:"Mapa de pinos Franzininho vs Recurso onboard"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Pino"}),(0,r.jsx)(n.th,{children:"Recurso"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"I01"}),(0,r.jsx)(n.td,{children:"LDR"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"I02"}),(0,r.jsx)(n.td,{children:"BT6"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO3"}),(0,r.jsx)(n.td,{children:"BT5"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO4"}),(0,r.jsx)(n.td,{children:"BT4"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO5"}),(0,r.jsx)(n.td,{children:"BT3"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO6"}),(0,r.jsx)(n.td,{children:"BT2"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO7"}),(0,r.jsx)(n.td,{children:"BT1"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO8"}),(0,r.jsx)(n.td,{children:"OLED_SDA"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO9"}),(0,r.jsx)(n.td,{children:"OLED_SCL"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO10"}),(0,r.jsx)(n.td,{children:"TFT_DC"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO11"}),(0,r.jsx)(n.td,{children:"TFT_RES"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO12"}),(0,r.jsx)(n.td,{children:"LED AZUL"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO13"}),(0,r.jsx)(n.td,{children:"LED VERDE"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO14"}),(0,r.jsx)(n.td,{children:"LED VERMELHO"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO15"}),(0,r.jsx)(n.td,{children:"DHT11"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO17"}),(0,r.jsx)(n.td,{children:"BUZZER"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO35"}),(0,r.jsx)(n.td,{children:"TFT_SDA"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO36"}),(0,r.jsx)(n.td,{children:"TFT_scl"})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"jtag",children:"JTAG"}),"\n",(0,r.jsxs)(n.p,{children:["A Franzininho WiFI LAB01 possui conector para JTAG compat\xedvel com o ",(0,r.jsx)(n.a,{href:"https://docs.espressif.com/projects/espressif-esp-dev-kits/en/latest/other/esp-prog/user_guide.html",children:"ESP-PROG"})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Franzininho-wifi-lab01-jtag.png",src:e(54684).c+"",width:"1751",height:"1447"})}),"\n",(0,r.jsx)(n.h2,{id:"como-programar",children:"Como Programar?"}),"\n",(0,r.jsxs)(n.p,{children:["Conforme apresentado no artigo \u201c",(0,r.jsx)(n.a,{href:"https://embarcados.com.br/como-programar-a-franzininho-wifi/",children:"Como programar a Franzininho WiFi? Descubra agora mesmo!"}),"\u201c, a Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns s\xe3o:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"ESP-IDF, Arduino, CircuitPython e MicroPython"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"exemplos-de-c\xf3digo",children:"Exemplos de c\xf3digo:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Arduino: ",(0,r.jsx)(n.a,{href:"https://github.com/Franzininho/Franzininho-WiFI-LAB01-Arduino",children:"https://github.com/Franzininho/Franzininho-WiFI-LAB01-Arduino"})]}),"\n",(0,r.jsx)(n.li,{children:"CircuitPython: tbd"}),"\n",(0,r.jsx)(n.li,{children:"MicroPython: tbd"}),"\n",(0,r.jsx)(n.li,{children:"ESP-IDF: tbd"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"onde-adquirir-a-placa",children:"Onde adquirir a placa?"}),"\n",(0,r.jsxs)(n.p,{children:["Adquira sua placa em: ",(0,r.jsx)(n.a,{href:"https://cursos.embarcados.com.br/cursos/franzininho-wifi-lab01/",children:"https://cursos.embarcados.com.br/cursos/franzininho-wifi-lab01/"})]}),"\n",(0,r.jsx)(n.p,{children:"Se voc\xea quiser equipar o laborat\xf3rio da sua institui\xe7\xe3o com essa placa, entre em contato conosco para reservar com anteced\xeancia antes da produ\xe7\xe3o."}),"\n",(0,r.jsxs)(n.p,{children:["Contato: ",(0,r.jsx)(n.a,{href:"mailto:contato@embarcados.com.br",children:"contato@embarcados.com.br"})]})]})}function h(i={}){const{wrapper:n}={...(0,a.MN)(),...i.components};return n?(0,r.jsx)(n,{...i,children:(0,r.jsx)(l,{...i})}):l(i)}},95788:(i,n,e)=>{e.d(n,{MN:()=>t});var r=e(11504);function a(i,n,e){return n in i?Object.defineProperty(i,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):i[n]=e,i}function s(i,n){var e=Object.keys(i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(i,n).enumerable}))),e.push.apply(e,r)}return e}function o(i){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?s(Object(e),!0).forEach((function(n){a(i,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(i,Object.getOwnPropertyDescriptors(e)):s(Object(e)).forEach((function(n){Object.defineProperty(i,n,Object.getOwnPropertyDescriptor(e,n))}))}return i}function d(i,n){if(null==i)return{};var e,r,a=function(i,n){if(null==i)return{};var e,r,a={},s=Object.keys(i);for(r=0;r<s.length;r++)e=s[r],n.indexOf(e)>=0||(a[e]=i[e]);return a}(i,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(i);for(r=0;r<s.length;r++)e=s[r],n.indexOf(e)>=0||Object.prototype.propertyIsEnumerable.call(i,e)&&(a[e]=i[e])}return a}var c=r.createContext({}),t=function(i){var n=r.useContext(c),e=n;return i&&(e="function"==typeof i?i(n):o(o({},n),i)),e},l={inlineCode:"code",wrapper:function(i){var n=i.children;return r.createElement(r.Fragment,{},n)}},h=r.forwardRef((function(i,n){var e=i.components,a=i.mdxType,s=i.originalType,c=i.parentName,h=d(i,["components","mdxType","originalType","parentName"]),p=t(e),x=a,j=p["".concat(c,".").concat(x)]||p[x]||l[x]||s;return e?r.createElement(j,o(o({ref:n},h),{},{components:e})):r.createElement(j,o({ref:n},h))}));h.displayName="MDXCreateElement"},49423:(i,n,e)=>{e.d(n,{c:()=>r});const r=e.p+"assets/images/Franzininho-wifi-lab01-desenho-392517059b55459854f015253728930c.png"},7376:(i,n,e)=>{e.d(n,{c:()=>r});const r=e.p+"assets/images/Franzininho-wifi-lab01-esquematico-d4d32d414db33086a671d4b8c1a66dc0.png"},39133:(i,n,e)=>{e.d(n,{c:()=>r});const r=e.p+"assets/images/Franzininho-wifi-lab01-expansoes-85f8d5ef179d70c5e10144221aa414e6.png"},54684:(i,n,e)=>{e.d(n,{c:()=>r});const r=e.p+"assets/images/Franzininho-wifi-lab01-jtag-714e1397df7c33ee7a2cb36fd8f49b02.png"},77368:(i,n,e)=>{e.d(n,{c:()=>r});const r=e.p+"assets/images/Franzininho-wifi-lab01-jumpers-a5b24505dd2d71bff5fc1f8c62400d22.png"},75764:(i,n,e)=>{e.d(n,{c:()=>r});const r=e.p+"assets/images/Franzininho-wifi-lab01-recursos-a73b02e1e67137518f241488c8367938.png"}}]); \ No newline at end of file diff --git a/assets/js/d9a3a88a.051d298c.js b/assets/js/d9a3a88a.051d298c.js new file mode 100755 index 000000000..1d14c6770 --- /dev/null +++ b/assets/js/d9a3a88a.051d298c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4672],{18208:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>c,contentTitle:()=>t,default:()=>u,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var a=o(17624),i=o(95788);const n={id:"girassol-automatizado",title:"Girassol Automatizado",slug:"/franzininho-diy/girassol-automatizado",description:"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY"},t=void 0,s={id:"FranzininhoDIY/exemplos-arduino/girassol-automatizado",title:"Girassol Automatizado",description:"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/girassol-automatizado.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/girassol-automatizado",permalink:"/docs/franzininho-diy/girassol-automatizado",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/girassol-automatizado.md",tags:[],version:"current",frontMatter:{id:"girassol-automatizado",title:"Girassol Automatizado",slug:"/franzininho-diy/girassol-automatizado",description:"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY"},sidebar:"docs",previous:{title:"Theremim",permalink:"/docs/franzininho-diy/theremim"},next:{title:"Primeiros Passos",permalink:"/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos"}},c={},l=[{value:"Materiais:",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Video explicativo",id:"video-explicativo",level:2},{value:"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 1)",id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-1",level:3},{value:"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 2)",id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-2",level:3},{value:"Refer\xeancia",id:"refer\xeancia",level:2}];function d(e){const r={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(r.p,{children:"Nesse exemplo vamos fazer um girassol automatizado que se movimenta conforme a posi\xe7\xe3o da luz."}),"\n",(0,a.jsx)(r.h2,{id:"materiais",children:"Materiais:"}),"\n",(0,a.jsxs)(r.ul,{children:["\n",(0,a.jsx)(r.li,{children:"Placa Franzininho DIY;"}),"\n",(0,a.jsx)(r.li,{children:"Protoboard;"}),"\n",(0,a.jsx)(r.li,{children:"LED 3mm;"}),"\n",(0,a.jsx)(r.li,{children:"1 Resistor LDR (foto resistores 10 k)"}),"\n",(0,a.jsx)(r.li,{children:"1 Servo motor"}),"\n",(0,a.jsx)(r.li,{children:"Jumpers macho/f\xeamea"}),"\n"]}),"\n",(0,a.jsx)(r.h2,{id:"circuito",children:"Circuito"}),"\n",(0,a.jsx)(r.p,{children:"No protoboard voc\xea deve inserir o foto resistores e o servo motoro, conforme a imagem abaixo:"}),"\n",(0,a.jsx)(r.p,{children:(0,a.jsx)(r.img,{alt:"Circuito",src:o(76388).c+"",width:"1698",height:"1050"})}),"\n",(0,a.jsx)(r.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,a.jsx)(r.pre,{children:(0,a.jsx)(r.code,{className:"language-cpp",children:"\n/*\nFranzininho\nExemplo: Girassol Automatizado\nNesse exemplo \xe9 de um girassol automatizado com dois fotos resistores, um servo motor, entre outros materiais, confira.\n*/\n//\n\n#include <Servo.h>\n\nint sensor = A;\nint servoMotor = 1;\n\nint valorSensor =0;\nint analogServo = 90;\n\nServo servo;\n\nvoid setup() {\n servo.attach(servoMotor);\n servo.write(anguloServo);\n}\n\nvoid loop() {\n valorSensor = analogRead(sensor);\n if(valorSensor <512)\n {\n if(anguloServo < 170)anguloServo++;\n }\n if(valorSensor = >512)\n {\n if(anguloServo > 10)anguloServo--;\n }\n\nservo.write(anguloServo);\ndelay(50);\n}\n\n"})}),"\n",(0,a.jsx)(r.h2,{id:"video-explicativo",children:"Video explicativo"}),"\n",(0,a.jsxs)(r.p,{children:["Este projeto foi feiro para colaborar no projeto Co.Lab da Red Hat, confira esse e outros na plataforma:",(0,a.jsx)(r.a,{href:"https://www.redhat.com/pt-br/colab-repo",children:"https://www.redhat.com/pt-br/colab-repo"})]}),"\n",(0,a.jsx)(r.h3,{id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-1",children:"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 1)"}),"\n",(0,a.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/wGXmITj9mHE",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,a.jsx)(r.h3,{id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-2",children:"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 2)"}),"\n",(0,a.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/ANmRyWnvq4U",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,a.jsx)(r.h2,{id:"refer\xeancia",children:"Refer\xeancia"}),"\n",(0,a.jsx)(r.p,{children:(0,a.jsx)(r.a,{href:"https://create.arduino.cc/projecthub/Mako_/arduino-sunflower-c4fd84",children:"Arduino Sunflower"})}),"\n",(0,a.jsxs)(r.table,{children:[(0,a.jsx)(r.thead,{children:(0,a.jsxs)(r.tr,{children:[(0,a.jsx)(r.th,{children:"Autor"}),(0,a.jsx)(r.th,{children:"Diana Santos"})]})}),(0,a.jsx)(r.tbody,{children:(0,a.jsxs)(r.tr,{children:[(0,a.jsx)(r.td,{children:"Data:"}),(0,a.jsx)(r.td,{children:"22/01/2022"})]})})]})]})}function u(e={}){const{wrapper:r}={...(0,i.MN)(),...e.components};return r?(0,a.jsx)(r,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},95788:(e,r,o)=>{o.d(r,{MN:()=>l});var a=o(11504);function i(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}function n(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,a)}return o}function t(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?n(Object(o),!0).forEach((function(r){i(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}function s(e,r){if(null==e)return{};var o,a,i=function(e,r){if(null==e)return{};var o,a,i={},n=Object.keys(e);for(a=0;a<n.length;a++)o=n[a],r.indexOf(o)>=0||(i[o]=e[o]);return i}(e,r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a<n.length;a++)o=n[a],r.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var c=a.createContext({}),l=function(e){var r=a.useContext(c),o=r;return e&&(o="function"==typeof e?e(r):t(t({},r),e)),o},d={inlineCode:"code",wrapper:function(e){var r=e.children;return a.createElement(a.Fragment,{},r)}},u=a.forwardRef((function(e,r){var o=e.components,i=e.mdxType,n=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(o),m=i,h=p["".concat(c,".").concat(m)]||p[m]||d[m]||n;return o?a.createElement(h,t(t({ref:r},u),{},{components:o})):a.createElement(h,t({ref:r},u))}));u.displayName="MDXCreateElement"},76388:(e,r,o)=>{o.d(r,{c:()=>a});const a=o.p+"assets/images/girassol-atualizado-8574b109211295db7d1d61b5f40e69e8.png"}}]); \ No newline at end of file diff --git a/assets/js/d9a3a88a.5ce54f0f.js b/assets/js/d9a3a88a.5ce54f0f.js deleted file mode 100755 index bf74145d7..000000000 --- a/assets/js/d9a3a88a.5ce54f0f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7259],{3905:(e,a,o)=>{o.d(a,{Zo:()=>u,kt:()=>f});var r=o(7294);function t(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function n(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,r)}return o}function i(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?n(Object(o),!0).forEach((function(a){t(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function l(e,a){if(null==e)return{};var o,r,t=function(e,a){if(null==e)return{};var o,r,t={},n=Object.keys(e);for(r=0;r<n.length;r++)o=n[r],a.indexOf(o)>=0||(t[o]=e[o]);return t}(e,a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r<n.length;r++)o=n[r],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var s=r.createContext({}),c=function(e){var a=r.useContext(s),o=a;return e&&(o="function"==typeof e?e(a):i(i({},a),e)),o},u=function(e){var a=c(e.components);return r.createElement(s.Provider,{value:a},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},m=r.forwardRef((function(e,a){var o=e.components,t=e.mdxType,n=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(o),m=t,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||n;return o?r.createElement(f,i(i({ref:a},u),{},{components:o})):r.createElement(f,i({ref:a},u))}));function f(e,a){var o=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var n=o.length,i=new Array(n);i[0]=m;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[d]="string"==typeof e?e:t,i[1]=l;for(var c=2;c<n;c++)i[c]=o[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,o)}m.displayName="MDXCreateElement"},129:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>n,metadata:()=>l,toc:()=>c});var r=o(3117),t=(o(7294),o(3905));const n={id:"girassol-automatizado",title:"Girassol Automatizado",slug:"/franzininho-diy/girassol-automatizado",description:"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY"},i=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/girassol-automatizado",id:"FranzininhoDIY/exemplos-arduino/girassol-automatizado",title:"Girassol Automatizado",description:"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/girassol-automatizado.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/girassol-automatizado",permalink:"/docs/franzininho-diy/girassol-automatizado",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/girassol-automatizado.md",tags:[],version:"current",frontMatter:{id:"girassol-automatizado",title:"Girassol Automatizado",slug:"/franzininho-diy/girassol-automatizado",description:"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY"},sidebar:"docs",previous:{title:"Theremim",permalink:"/docs/franzininho-diy/theremim"},next:{title:"Primeiros Passos",permalink:"/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos"}},s={},c=[{value:"Materiais:",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Video explicativo",id:"video-explicativo",level:2},{value:"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 1)",id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-1",level:3},{value:"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 2)",id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-2",level:3},{value:"Refer\xeancia",id:"refer\xeancia",level:2}],u={toc:c},d="wrapper";function p(e){let{components:a,...n}=e;return(0,t.kt)(d,(0,r.Z)({},u,n,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Nesse exemplo vamos fazer um girassol automatizado que se movimenta conforme a posi\xe7\xe3o da luz."),(0,t.kt)("h2",{id:"materiais"},"Materiais:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Placa Franzininho DIY;"),(0,t.kt)("li",{parentName:"ul"},"Protoboard;"),(0,t.kt)("li",{parentName:"ul"},"LED 3mm;"),(0,t.kt)("li",{parentName:"ul"},"1 Resistor LDR (foto resistores 10 k)"),(0,t.kt)("li",{parentName:"ul"},"1 Servo motor"),(0,t.kt)("li",{parentName:"ul"},"Jumpers macho/f\xeamea")),(0,t.kt)("h2",{id:"circuito"},"Circuito"),(0,t.kt)("p",null,"No protoboard voc\xea deve inserir o foto resistores e o servo motoro, conforme a imagem abaixo:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Circuito",src:o(3190).Z,width:"1698",height:"1050"})),(0,t.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-cpp"},"\n/*\nFranzininho\nExemplo: Girassol Automatizado\nNesse exemplo \xe9 de um girassol automatizado com dois fotos resistores, um servo motor, entre outros materiais, confira.\n*/\n//\n\n#include <Servo.h>\n\nint sensor = A;\nint servoMotor = 1;\n\nint valorSensor =0;\nint analogServo = 90;\n\nServo servo;\n\nvoid setup() {\n servo.attach(servoMotor);\n servo.write(anguloServo);\n}\n\nvoid loop() {\n valorSensor = analogRead(sensor);\n if(valorSensor <512)\n {\n if(anguloServo < 170)anguloServo++;\n }\n if(valorSensor = >512)\n {\n if(anguloServo > 10)anguloServo--;\n }\n\nservo.write(anguloServo);\ndelay(50);\n}\n\n")),(0,t.kt)("h2",{id:"video-explicativo"},"Video explicativo"),(0,t.kt)("p",null,"Este projeto foi feiro para colaborar no projeto Co.Lab da Red Hat, confira esse e outros na plataforma:",(0,t.kt)("a",{parentName:"p",href:"https://www.redhat.com/pt-br/colab-repo"},"https://www.redhat.com/pt-br/colab-repo")),(0,t.kt)("h3",{id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-1"},"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 1)"),(0,t.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/wGXmITj9mHE",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,t.kt)("h3",{id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-2"},"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 2)"),(0,t.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/ANmRyWnvq4U",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,t.kt)("h2",{id:"refer\xeancia"},"Refer\xeancia"),(0,t.kt)("p",null," ",(0,t.kt)("a",{parentName:"p",href:"https://create.arduino.cc/projecthub/Mako_/arduino-sunflower-c4fd84"},"Arduino Sunflower")),(0,t.kt)("table",null,(0,t.kt)("thead",{parentName:"table"},(0,t.kt)("tr",{parentName:"thead"},(0,t.kt)("th",{parentName:"tr",align:null},"Autor"),(0,t.kt)("th",{parentName:"tr",align:null},"Diana Santos"))),(0,t.kt)("tbody",{parentName:"table"},(0,t.kt)("tr",{parentName:"tbody"},(0,t.kt)("td",{parentName:"tr",align:null},"Data:"),(0,t.kt)("td",{parentName:"tr",align:null},"22/01/2022")))))}p.isMDXComponent=!0},3190:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/girassol-atualizado-8574b109211295db7d1d61b5f40e69e8.png"}}]); \ No newline at end of file diff --git a/assets/js/daddf4d9.2858fa3a.js b/assets/js/daddf4d9.2858fa3a.js new file mode 100755 index 000000000..3821d05db --- /dev/null +++ b/assets/js/daddf4d9.2858fa3a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1140],{5472:(o,a,n)=>{n.r(a),n.d(a,{assets:()=>t,contentTitle:()=>s,default:()=>p,frontMatter:()=>i,metadata:()=>d,toc:()=>c});var r=n(17624),e=n(95788);const i={id:"upload-com-arduino-uno",title:"Gravando a Franzino com um placa Arduino UNO",slug:"/Franzino/upload-com-arduino-uno",description:"Veja como usar um Arduino Uno como programador para a Franzino"},s=void 0,d={id:"Franzino/upload-com-arduino-uno",title:"Gravando a Franzino com um placa Arduino UNO",description:"Veja como usar um Arduino Uno como programador para a Franzino",source:"@site/docs/Franzino/upload-com-arduino-uno.md",sourceDirName:"Franzino",slug:"/Franzino/upload-com-arduino-uno",permalink:"/docs/Franzino/upload-com-arduino-uno",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Franzino/upload-com-arduino-uno.md",tags:[],version:"current",frontMatter:{id:"upload-com-arduino-uno",title:"Gravando a Franzino com um placa Arduino UNO",slug:"/Franzino/upload-com-arduino-uno",description:"Veja como usar um Arduino Uno como programador para a Franzino"},sidebar:"docs",previous:{title:"Upload via conversor USB/SERIAL",permalink:"/docs/Franzino/upload-conversor-serial"},next:{title:"Placa FranzBoy",permalink:"/docs/FranzBoy/franzboy"}},t={},c=[{value:"Configurando o avrdude ( se estiver usando o ATmega328 e n\xe3o o ATmega328P)",id:"configurando-o-avrdude--se-estiver-usando-o-atmega328-e-n\xe3o-o-atmega328p",level:2},{value:"Upload de Sketchs usando a Arduino UNO",id:"upload-de-sketchs-usando-a-arduino-uno",level:2}];function u(o){const a={admonition:"admonition",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,e.MN)(),...o.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.p,{children:"Se voc\xea n\xe3o possui um conversor USB/Serial voc\xea pode gravar a Franzino atrav\xe9s de um Arduino. Para isso vamos configurar a placa Arduino UNO com programador."}),"\n",(0,r.jsx)(a.p,{children:"Primeiro, escolha o exemplo ArduinoISP, conforme figura abaixo:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{src:n(42488).c+"",width:"625",height:"603"})}),"\n",(0,r.jsx)(a.p,{children:"Fa\xe7a o upload para a placa Arduino UNO que ser\xe1 usada como programador."}),"\n",(0,r.jsx)(a.p,{children:"Feito o UPLOAD, agora vamos as conex\xf5es do Arduino UNO na Franzino:"}),"\n",(0,r.jsxs)(a.ul,{children:["\n",(0,r.jsx)(a.li,{children:"Ligue o pino RESET da FRANZINO ao pino 10 do Arduino"}),"\n",(0,r.jsx)(a.li,{children:"Ligue o pino 11 da FRANZINO ao pino 11 do Arduino"}),"\n",(0,r.jsx)(a.li,{children:"Ligue o pino 12 da FRANZINO ao pino 12 do Arduino"}),"\n",(0,r.jsx)(a.li,{children:"Ligue o pino 13 da FRANZINO ao pino 13 do Arduino"}),"\n",(0,r.jsx)(a.li,{children:"Ligue o pino 5V da FRANZINO no pino 5V do Arduino"}),"\n",(0,r.jsx)(a.li,{children:"Ligue o pino GND da FRANZINO ao GND do Arduino"}),"\n"]}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{alt:"Liga\xe7\xe3o_arduino_franzino.png",src:n(44708).c+"",width:"1024",height:"432"})}),"\n",(0,r.jsx)(a.h2,{id:"configurando-o-avrdude--se-estiver-usando-o-atmega328-e-n\xe3o-o-atmega328p",children:"Configurando o avrdude ( se estiver usando o ATmega328 e n\xe3o o ATmega328P)"}),"\n",(0,r.jsx)(a.p,{children:"A vers\xe3o 0 da Franzino vem com o ATmega328-PU, dessa forma precisamos configurar o avrdude para gravar esse microcontrolador. Na pasta do arduino acesse:"}),"\n",(0,r.jsx)(a.p,{children:"C:\\arduino-1.6.8\\hardware\\tools\\avr\\etc, abra o arquivo avrdude.conf"}),"\n",(0,r.jsx)(a.p,{children:"Procure a assinatura do ATMEGA328P:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{src:n(8812).c+"",width:"485",height:"144"})}),"\n",(0,r.jsx)(a.p,{children:"Troque a assinatura por:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{src:n(2324).c+"",width:"390",height:"142"})}),"\n",(0,r.jsx)(a.p,{children:"Salve o arquivo."}),"\n",(0,r.jsx)(a.admonition,{type:"tip",children:(0,r.jsx)(a.p,{children:"Ap\xf3s a grava\xe7\xe3o, volte a assinatura para o valor original: signature= 0x1e 0x95 0x0F;"})}),"\n",(0,r.jsx)(a.h2,{id:"upload-de-sketchs-usando-a-arduino-uno",children:"Upload de Sketchs usando a Arduino UNO"}),"\n",(0,r.jsx)(a.p,{children:"Pronto, agora abra o programa que ser\xe1 gravado na Franzino. Para esse exemplo vamos usar o exemplo Blink, mas voc\xea poder\xe1 fazer esse procedimento para gravar suas aplica\xe7\xf5es;"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{src:n(74844).c+"",width:"687",height:"615"})}),"\n",(0,r.jsx)(a.p,{children:"Agora vamos preparar para grava\xe7\xe3o. Configure o Programador como ArduinoISP:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{src:n(96836).c+"",width:"669",height:"728"})}),"\n",(0,r.jsx)(a.p,{children:"Pronto, agora \xe9 s\xf3 fazer o UPLOAD para a Franzino:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{src:n(83032).c+"",width:"445",height:"233"})})]})}function p(o={}){const{wrapper:a}={...(0,e.MN)(),...o.components};return a?(0,r.jsx)(a,{...o,children:(0,r.jsx)(u,{...o})}):u(o)}},95788:(o,a,n)=>{n.d(a,{MN:()=>c});var r=n(11504);function e(o,a,n){return a in o?Object.defineProperty(o,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):o[a]=n,o}function i(o,a){var n=Object.keys(o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(o);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(o,a).enumerable}))),n.push.apply(n,r)}return n}function s(o){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{};a%2?i(Object(n),!0).forEach((function(a){e(o,a,n[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(a){Object.defineProperty(o,a,Object.getOwnPropertyDescriptor(n,a))}))}return o}function d(o,a){if(null==o)return{};var n,r,e=function(o,a){if(null==o)return{};var n,r,e={},i=Object.keys(o);for(r=0;r<i.length;r++)n=i[r],a.indexOf(n)>=0||(e[n]=o[n]);return e}(o,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(o);for(r=0;r<i.length;r++)n=i[r],a.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(o,n)&&(e[n]=o[n])}return e}var t=r.createContext({}),c=function(o){var a=r.useContext(t),n=a;return o&&(n="function"==typeof o?o(a):s(s({},a),o)),n},u={inlineCode:"code",wrapper:function(o){var a=o.children;return r.createElement(r.Fragment,{},a)}},p=r.forwardRef((function(o,a){var n=o.components,e=o.mdxType,i=o.originalType,t=o.parentName,p=d(o,["components","mdxType","originalType","parentName"]),l=c(n),m=e,g=l["".concat(t,".").concat(m)]||l[m]||u[m]||i;return n?r.createElement(g,s(s({ref:a},p),{},{components:n})):r.createElement(g,s({ref:a},p))}));p.displayName="MDXCreateElement"},96836:(o,a,n)=>{n.d(a,{c:()=>r});const r=n.p+"assets/images/arduinoisp-cbcaa0a676744f41adbc8859207b0e20.png"},2324:(o,a,n)=>{n.d(a,{c:()=>r});const r=n.p+"assets/images/assinatura-328-atualizada-b7da6dca34b30968ad45021edb325724.png"},8812:(o,a,n)=>{n.d(a,{c:()=>r});const r=n.p+"assets/images/assinatura-328-8c42edd0b4bf6dae4c2421ec48f8c629.png"},42488:(o,a,n)=>{n.d(a,{c:()=>r});const r=n.p+"assets/images/exemplo-arduinoisp-23bff4a9b75ade0f2fc2c0446f805aac.png"},74844:(o,a,n)=>{n.d(a,{c:()=>r});const r=n.p+"assets/images/exemplo-blink-6137bc4974e113707a3197170b2c4223.png"},44708:(o,a,n)=>{n.d(a,{c:()=>r});const r=n.p+"assets/images/franzino-uno-a66f005fcfffc7bf3d13df4670cfbf51.png"},83032:(o,a,n)=>{n.d(a,{c:()=>r});const r=n.p+"assets/images/upload-isp-8742233fda744ea45e5a90798852386b.png"}}]); \ No newline at end of file diff --git a/assets/js/daddf4d9.7bda789f.js b/assets/js/daddf4d9.7bda789f.js deleted file mode 100755 index 27b20557c..000000000 --- a/assets/js/daddf4d9.7bda789f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5193],{3905:(a,o,n)=>{n.d(o,{Zo:()=>p,kt:()=>g});var r=n(7294);function e(a,o,n){return o in a?Object.defineProperty(a,o,{value:n,enumerable:!0,configurable:!0,writable:!0}):a[o]=n,a}function t(a,o){var n=Object.keys(a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(a);o&&(r=r.filter((function(o){return Object.getOwnPropertyDescriptor(a,o).enumerable}))),n.push.apply(n,r)}return n}function i(a){for(var o=1;o<arguments.length;o++){var n=null!=arguments[o]?arguments[o]:{};o%2?t(Object(n),!0).forEach((function(o){e(a,o,n[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(n)):t(Object(n)).forEach((function(o){Object.defineProperty(a,o,Object.getOwnPropertyDescriptor(n,o))}))}return a}function u(a,o){if(null==a)return{};var n,r,e=function(a,o){if(null==a)return{};var n,r,e={},t=Object.keys(a);for(r=0;r<t.length;r++)n=t[r],o.indexOf(n)>=0||(e[n]=a[n]);return e}(a,o);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(a);for(r=0;r<t.length;r++)n=t[r],o.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(a,n)&&(e[n]=a[n])}return e}var d=r.createContext({}),s=function(a){var o=r.useContext(d),n=o;return a&&(n="function"==typeof a?a(o):i(i({},o),a)),n},p=function(a){var o=s(a.components);return r.createElement(d.Provider,{value:o},a.children)},c="mdxType",l={inlineCode:"code",wrapper:function(a){var o=a.children;return r.createElement(r.Fragment,{},o)}},m=r.forwardRef((function(a,o){var n=a.components,e=a.mdxType,t=a.originalType,d=a.parentName,p=u(a,["components","mdxType","originalType","parentName"]),c=s(n),m=e,g=c["".concat(d,".").concat(m)]||c[m]||l[m]||t;return n?r.createElement(g,i(i({ref:o},p),{},{components:n})):r.createElement(g,i({ref:o},p))}));function g(a,o){var n=arguments,e=o&&o.mdxType;if("string"==typeof a||e){var t=n.length,i=new Array(t);i[0]=m;var u={};for(var d in o)hasOwnProperty.call(o,d)&&(u[d]=o[d]);u.originalType=a,u[c]="string"==typeof a?a:e,i[1]=u;for(var s=2;s<t;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},5244:(a,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>i,default:()=>l,frontMatter:()=>t,metadata:()=>u,toc:()=>s});var r=n(3117),e=(n(7294),n(3905));const t={id:"upload-com-arduino-uno",title:"Gravando a Franzino com um placa Arduino UNO",slug:"/Franzino/upload-com-arduino-uno",description:"Veja como usar um Arduino Uno como programador para a Franzino"},i=void 0,u={unversionedId:"Franzino/upload-com-arduino-uno",id:"Franzino/upload-com-arduino-uno",title:"Gravando a Franzino com um placa Arduino UNO",description:"Veja como usar um Arduino Uno como programador para a Franzino",source:"@site/docs/Franzino/upload-com-arduino-uno.md",sourceDirName:"Franzino",slug:"/Franzino/upload-com-arduino-uno",permalink:"/docs/Franzino/upload-com-arduino-uno",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Franzino/upload-com-arduino-uno.md",tags:[],version:"current",frontMatter:{id:"upload-com-arduino-uno",title:"Gravando a Franzino com um placa Arduino UNO",slug:"/Franzino/upload-com-arduino-uno",description:"Veja como usar um Arduino Uno como programador para a Franzino"},sidebar:"docs",previous:{title:"Upload via conversor USB/SERIAL",permalink:"/docs/Franzino/upload-conversor-serial"},next:{title:"Placa FranzBoy",permalink:"/docs/FranzBoy/franzboy"}},d={},s=[{value:"Configurando o avrdude ( se estiver usando o ATmega328 e n\xe3o o ATmega328P)",id:"configurando-o-avrdude--se-estiver-usando-o-atmega328-e-n\xe3o-o-atmega328p",level:2},{value:"Upload de Sketchs usando a Arduino UNO",id:"upload-de-sketchs-usando-a-arduino-uno",level:2}],p={toc:s},c="wrapper";function l(a){let{components:o,...t}=a;return(0,e.kt)(c,(0,r.Z)({},p,t,{components:o,mdxType:"MDXLayout"}),(0,e.kt)("p",null,"Se voc\xea n\xe3o possui um conversor USB/Serial voc\xea pode gravar a Franzino atrav\xe9s de um Arduino. Para isso vamos configurar a placa Arduino UNO com programador."),(0,e.kt)("p",null,"Primeiro, escolha o exemplo ArduinoISP, conforme figura abaixo:"),(0,e.kt)("p",null,(0,e.kt)("img",{src:n(1280).Z,width:"625",height:"603"})),(0,e.kt)("p",null,"Fa\xe7a o upload para a placa Arduino UNO que ser\xe1 usada como programador."),(0,e.kt)("p",null,"Feito o UPLOAD, agora vamos as conex\xf5es do Arduino UNO na Franzino:"),(0,e.kt)("ul",null,(0,e.kt)("li",{parentName:"ul"},"Ligue o pino RESET da FRANZINO ao pino 10 do Arduino"),(0,e.kt)("li",{parentName:"ul"},"Ligue o pino 11 da FRANZINO ao pino 11 do Arduino"),(0,e.kt)("li",{parentName:"ul"},"Ligue o pino 12 da FRANZINO ao pino 12 do Arduino"),(0,e.kt)("li",{parentName:"ul"},"Ligue o pino 13 da FRANZINO ao pino 13 do Arduino"),(0,e.kt)("li",{parentName:"ul"},"Ligue o pino 5V da FRANZINO no pino 5V do Arduino"),(0,e.kt)("li",{parentName:"ul"},"Ligue o pino GND da FRANZINO ao GND do Arduino")),(0,e.kt)("p",null,(0,e.kt)("img",{alt:"Liga\xe7\xe3o_arduino_franzino.png",src:n(9060).Z,width:"1024",height:"432"})),(0,e.kt)("h2",{id:"configurando-o-avrdude--se-estiver-usando-o-atmega328-e-n\xe3o-o-atmega328p"},"Configurando o avrdude ( se estiver usando o ATmega328 e n\xe3o o ATmega328P)"),(0,e.kt)("p",null,"A vers\xe3o 0 da Franzino vem com o ATmega328-PU, dessa forma precisamos configurar o avrdude para gravar esse microcontrolador. Na pasta do arduino acesse:"),(0,e.kt)("p",null,"C:\\arduino-1.6.8\\hardware\\tools\\avr\\etc, abra o arquivo avrdude.conf"),(0,e.kt)("p",null,"Procure a assinatura do ATMEGA328P:"),(0,e.kt)("p",null,(0,e.kt)("img",{src:n(2459).Z,width:"485",height:"144"})),(0,e.kt)("p",null,"Troque a assinatura por:"),(0,e.kt)("p",null,(0,e.kt)("img",{src:n(1914).Z,width:"390",height:"142"})),(0,e.kt)("p",null,"Salve o arquivo."),(0,e.kt)("admonition",{type:"tip"},(0,e.kt)("p",{parentName:"admonition"},"Ap\xf3s a grava\xe7\xe3o, volte a assinatura para o valor original: signature= 0x1e 0x95 0x0F;")),(0,e.kt)("h2",{id:"upload-de-sketchs-usando-a-arduino-uno"},"Upload de Sketchs usando a Arduino UNO"),(0,e.kt)("p",null,"Pronto, agora abra o programa que ser\xe1 gravado na Franzino. Para esse exemplo vamos usar o exemplo Blink, mas voc\xea poder\xe1 fazer esse procedimento para gravar suas aplica\xe7\xf5es;"),(0,e.kt)("p",null,(0,e.kt)("img",{src:n(8014).Z,width:"687",height:"615"})),(0,e.kt)("p",null,"Agora vamos preparar para grava\xe7\xe3o. Configure o Programador como ArduinoISP:"),(0,e.kt)("p",null,(0,e.kt)("img",{src:n(1617).Z,width:"669",height:"728"})),(0,e.kt)("p",null,"Pronto, agora \xe9 s\xf3 fazer o UPLOAD para a Franzino:"),(0,e.kt)("p",null,(0,e.kt)("img",{src:n(1490).Z,width:"445",height:"233"})))}l.isMDXComponent=!0},1617:(a,o,n)=>{n.d(o,{Z:()=>r});const r=n.p+"assets/images/arduinoisp-cbcaa0a676744f41adbc8859207b0e20.png"},1914:(a,o,n)=>{n.d(o,{Z:()=>r});const r=n.p+"assets/images/assinatura-328-atualizada-b7da6dca34b30968ad45021edb325724.png"},2459:(a,o,n)=>{n.d(o,{Z:()=>r});const r=n.p+"assets/images/assinatura-328-8c42edd0b4bf6dae4c2421ec48f8c629.png"},1280:(a,o,n)=>{n.d(o,{Z:()=>r});const r=n.p+"assets/images/exemplo-arduinoisp-23bff4a9b75ade0f2fc2c0446f805aac.png"},8014:(a,o,n)=>{n.d(o,{Z:()=>r});const r=n.p+"assets/images/exemplo-blink-6137bc4974e113707a3197170b2c4223.png"},9060:(a,o,n)=>{n.d(o,{Z:()=>r});const r=n.p+"assets/images/franzino-uno-a66f005fcfffc7bf3d13df4670cfbf51.png"},1490:(a,o,n)=>{n.d(o,{Z:()=>r});const r=n.p+"assets/images/upload-isp-8742233fda744ea45e5a90798852386b.png"}}]); \ No newline at end of file diff --git a/assets/js/db00da42.0e6219f2.js b/assets/js/db00da42.0e6219f2.js new file mode 100755 index 000000000..451c2a02c --- /dev/null +++ b/assets/js/db00da42.0e6219f2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6728],{27652:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>l,contentTitle:()=>n,default:()=>m,frontMatter:()=>t,metadata:()=>s,toc:()=>d});var i=a(17624),r=a(95788);const t={id:"biblioteca-laboratorioFW-ARDUNO",title:"laboratorioFW_ARDUNO",slug:"biblioteca-laboratorioFW_ARDUNO",description:"O que \xe9 a biblioteca laboratorioFW-ARDUNO"},n=void 0,s={id:"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO",title:"laboratorioFW_ARDUNO",description:"O que \xe9 a biblioteca laboratorioFW-ARDUNO",source:"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO.md",sourceDirName:"LaboratorioSistemasIot/bibliotecas",slug:"/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO",permalink:"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO.md",tags:[],version:"current",frontMatter:{id:"biblioteca-laboratorioFW-ARDUNO",title:"laboratorioFW_ARDUNO",slug:"biblioteca-laboratorioFW_ARDUNO",description:"O que \xe9 a biblioteca laboratorioFW-ARDUNO"},sidebar:"docs",previous:{title:"laboratorioFW",permalink:"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW"}},l={},d=[{value:"Como instalar a biblioteca",id:"como-instalar-a-biblioteca",level:2},{value:"Como usar a biblioteca",id:"como-usar-a-biblioteca",level:2},{value:"Exemplo de utiliza\xe7\xe3o:",id:"exemplo-de-utiliza\xe7\xe3o",level:2},{value:"Exemplos implementados:",id:"exemplos-implementados",level:2},{value:"testes_completos.ino",id:"testes_completosino",level:3},{value:"adivinhe_a_senha.ino",id:"adivinhe_a_senhaino",level:3},{value:"ativar_led_RGB_com_potenciometro_e_botoes.ino",id:"ativar_led_rgb_com_potenciometro_e_botoesino",level:3},{value:"ativar_servo_motor_com_botoes.ino",id:"ativar_servo_motor_com_botoesino",level:3},{value:"contagem_display_7seg.ino",id:"contagem_display_7segino",level:3},{value:"controle_led_com_ldr.ino",id:"controle_led_com_ldrino",level:3},{value:"do_re_mi_fa.ino",id:"do_re_mi_faino",level:3},{value:"genio.ino",id:"genioino",level:3},{value:"leitura_do_teclado.ino",id:"leitura_do_tecladoino",level:3},{value:"leitura_sensores_externos.ino",id:"leitura_sensores_externosino",level:3},{value:"leitura_sensores_grove.ino",id:"leitura_sensores_groveino",level:3},{value:"leitura_umidade_temperatura_oled.ino",id:"leitura_umidade_temperatura_oledino",level:3}];function c(e){const o={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,r.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.p,{children:"Nesta biblioteca \xe9 poss\xedvel encontrar o mapeamento entre a pinagem da placa Arduino Uno e a codifica\xe7\xe3o dos pinos de ativa\xe7\xe3o da placa Laborat\xf3rio de Sistemas Embarcados e IoT segundo o projeto do adaptador para Arduino projeto para a placa. A biblioteca tamb\xe9m \xe9 poss\xedvel encontrar exemplos de utiliza\xe7\xe3o dos perif\xe9ricos dispon\xedveis na placa."}),"\n",(0,i.jsxs)(o.p,{children:[(0,i.jsx)(o.a,{href:"https://github.com/Franzininho/biblioteca-laboratorioFW_ARDUNO",children:"Clique aqui"})," para acessar o reposit\xf3rio da biblioteca no Github."]}),"\n",(0,i.jsx)(o.h2,{id:"como-instalar-a-biblioteca",children:"Como instalar a biblioteca"}),"\n",(0,i.jsxs)(o.ol,{children:["\n",(0,i.jsxs)(o.li,{children:["Fa\xe7a o donwload da biblioteca em formato zip clicando em ",(0,i.jsx)(o.strong,{children:"Code"})," e depois em ",(0,i.jsx)(o.strong,{children:"Download ZIP"})]}),"\n"]}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{src:a(68160).c+"",width:"528",height:"398"})}),"\n",(0,i.jsxs)(o.ol,{start:"2",children:["\n",(0,i.jsx)(o.li,{children:"Abra a IDE do Arduino"}),"\n",(0,i.jsx)(o.li,{children:"V\xe1 em Sketch > Include Library > Add .ZIP Library"}),"\n"]}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{src:a(5056).c+"",width:"657",height:"378"})}),"\n",(0,i.jsxs)(o.ol,{start:"4",children:["\n",(0,i.jsx)(o.li,{children:"Selecione o arquivo zip baixado e clique em ok"}),"\n",(0,i.jsx)(o.li,{children:"Opcional: Procure pelos exemplos da biblioteca em File > Examples"}),"\n"]}),"\n",(0,i.jsx)(o.h2,{id:"como-usar-a-biblioteca",children:"Como usar a biblioteca"}),"\n",(0,i.jsxs)(o.p,{children:["Para utilizar a biblioteca basta inclu\xed-la no seu arquivo de c\xf3digo com a linha ",(0,i.jsx)(o.code,{children:"#include<laboratorioFW_ARDUNO.h>"}),". Depois disso, voc\xea pode utilizar os c\xf3digos dos pinos de ativa\xe7\xe3o na placa dentro do seu c\xf3digo."]}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsxs)(o.strong,{children:["Importante : Os algorismos do c\xf3digo do pino de ativa\xe7\xe3o s\xe3o separados por um caractere de ",(0,i.jsx)(o.code,{children:"_"}),", ou seja o pino de ativa\xe7\xe3o C0 pode ser acessado no c\xf3digo atrav\xe9s do c\xf3digo C_0 e assim por diante."]})}),"\n",(0,i.jsx)(o.h2,{id:"exemplo-de-utiliza\xe7\xe3o",children:"Exemplo de utiliza\xe7\xe3o:"}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-c",children:"#include <laborarotioFW_ARDUNO.h>\n\n#define led A_1\n\nvoid setup(){\n pinMode(led,OUTPUT);\n}\n\nvoid loop{\n digitalWrite(led,HIGH);\n delay(1000);\n digitalWrite(led,LOW);\n delay(1000);\n}\n"})}),"\n",(0,i.jsx)(o.h2,{id:"exemplos-implementados",children:"Exemplos implementados:"}),"\n",(0,i.jsx)(o.h3,{id:"testes_completosino",children:"testes_completos.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo temos todos os c\xf3digos necess\xe1rios para os testes de todos os perif\xe9ricos dispon\xedveis na placa. Este c\xf3digo \xe9 um c\xf3digo para a valida\xe7\xe3o da placa e n\xe3o para ser utilizado no cotidiano."}),"\n",(0,i.jsx)(o.h3,{id:"adivinhe_a_senhaino",children:"adivinhe_a_senha.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo implementamos um sistema de verifica\xe7\xe3o de senha utilizando o teclado matricial e a biblioteca ",(0,i.jsx)(o.code,{children:"Keypad"})," para fazer o mapeamento\ndo teclado. Neste sistema, o usu\xe1rio deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usu\xe1rio indica que terminou de digitar a senha apertando um o bot\xe3o correspondente ao caractere ",(0,i.jsx)(o.code,{children:"*"})," ou ",(0,i.jsx)(o.code,{children:"#"}),", essa sequ\xeancia \xe9 comparada com uma senha previamente definida no c\xf3digo. Um led \xe9 aceso para indicar se a senha est\xe1 correta ou n\xe3o e uma mensagem com essa informa\xe7\xe3o \xe9 impresso no monitor serial."]}),"\n",(0,i.jsx)(o.h3,{id:"ativar_led_rgb_com_potenciometro_e_botoesino",children:"ativar_led_RGB_com_potenciometro_e_botoes.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenci\xf4metro e tr\xeas bot\xf5es. Os tr\xeas bot\xf5es s\xe3o utilizados para selecionar qual cor do LED RGB ser\xe1 controlada (vermelho, verde e azul) e a leitura anal\xf3gica do potenci\xf4metro \xe9 usada para dosar a intensidade da cor do terminal."}),"\n",(0,i.jsx)(o.h3,{id:"ativar_servo_motor_com_botoesino",children:"ativar_servo_motor_com_botoes.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, utilizamos dois bot\xf5es para controlar a posi\xe7\xe3o de um servo motor. Os bot\xf5es s\xe3o associados no c\xf3digo \xe0s dire\xe7\xf5es esquerda e direita e alteram o \xe2ngulo do servo fazendo com que seja poss\xedvel moviment\xe1-lo nas duas dire\xe7\xf5es. Foi usada a biblioteca Servo."}),"\n",(0,i.jsx)(o.h3,{id:"contagem_display_7segino",children:"contagem_display_7seg.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos."}),"\n",(0,i.jsx)(o.h3,{id:"controle_led_com_ldrino",children:"controle_led_com_ldr.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura \xe9 mapeada e o valor resultante \xe9 usado para acender um LED. O exemplo tamb\xe9m conta com um bot\xe3o que controla um estado interno do programa e seleciona se a leitura ser\xe1 impressa como \xe9 lida ou com l\xf3gica complementar."}),"\n",(0,i.jsx)(o.h3,{id:"do_re_mi_faino",children:"do_re_mi_fa.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo uma m\xfasica \xe9 tocada pelo buzzer em conjunto com a ativa\xe7\xe3o\ndo LED RGB endere\xe7\xe1vel. O programa utiliza a biblioteca ",(0,i.jsx)(o.code,{children:"Adafruit_NeoPixel"})," para controlar o LED."]}),"\n",(0,i.jsx)(o.h3,{id:"genioino",children:"genio.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, implementamos o jogo Simon, tamb\xe9m conhecido como g\xeanio. Neste jogo, quatro LEDs s\xe3o ativados em uma sequ\xeancia gerada aleat\xf3riamente e essa sequ\xeancia \xe9 apresentada para o jogador, que deve repetir a sequ\xeancia na ordem correta pressionando os bot\xf5es correspondentes. Quando os LEDs acendem, um som correspondente \xe9 tocado no buzzer."}),"\n",(0,i.jsx)(o.h3,{id:"leitura_do_tecladoino",children:"leitura_do_teclado.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e\na imprimimos essa tecla no no monitor serial. A biblioteca ",(0,i.jsx)(o.code,{children:"Keypad"})," \xe9 utilizada para fazer o mapeamento do teclado."]}),"\n",(0,i.jsx)(o.h3,{id:"leitura_sensores_externosino",children:"leitura_sensores_externos.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets\npara conectores externos da placa e imprimimos os valores lidos no monitor serial."}),"\n",(0,i.jsx)(o.h3,{id:"leitura_sensores_groveino",children:"leitura_sensores_grove.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial."}),"\n",(0,i.jsx)(o.h3,{id:"leitura_umidade_temperatura_oledino",children:"leitura_umidade_temperatura_oled.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, s\xe3o utilizadas as bibliotecas ",(0,i.jsx)(o.code,{children:"DTH"})," e ",(0,i.jsx)(o.code,{children:"U8glib"}),"."]}),"\n",(0,i.jsx)(o.admonition,{title:"Obs.",type:"info",children:(0,i.jsxs)(o.p,{children:["Este projeto foi desenvolvido como parte do Trabalho de Conclus\xe3o de Curso de ",(0,i.jsx)(o.a,{href:"https://github.com/LelePG",children:"Let\xedcia Pegoraro Garcez"}),"."]})})]})}function m(e={}){const{wrapper:o}={...(0,r.MN)(),...e.components};return o?(0,i.jsx)(o,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},95788:(e,o,a)=>{a.d(o,{MN:()=>d});var i=a(11504);function r(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function t(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);o&&(i=i.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,i)}return a}function n(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?t(Object(a),!0).forEach((function(o){r(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):t(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function s(e,o){if(null==e)return{};var a,i,r=function(e,o){if(null==e)return{};var a,i,r={},t=Object.keys(e);for(i=0;i<t.length;i++)a=t[i],o.indexOf(a)>=0||(r[a]=e[a]);return r}(e,o);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(i=0;i<t.length;i++)a=t[i],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=i.createContext({}),d=function(e){var o=i.useContext(l),a=o;return e&&(a="function"==typeof e?e(o):n(n({},o),e)),a},c={inlineCode:"code",wrapper:function(e){var o=e.children;return i.createElement(i.Fragment,{},o)}},m=i.forwardRef((function(e,o){var a=e.components,r=e.mdxType,t=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),p=d(a),u=r,b=p["".concat(l,".").concat(u)]||p[u]||c[u]||t;return a?i.createElement(b,n(n({ref:o},m),{},{components:a})):i.createElement(b,n({ref:o},m))}));m.displayName="MDXCreateElement"},5056:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/add-zip-ce38fdcac233471a2c4ff935e87d70bd.png"},68160:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/download-zip-ba60fb48387d2208e3f003c8afe3db77.png"}}]); \ No newline at end of file diff --git a/assets/js/db00da42.180e3837.js b/assets/js/db00da42.180e3837.js deleted file mode 100755 index 770cbf273..000000000 --- a/assets/js/db00da42.180e3837.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9267],{3905:(e,o,a)=>{a.d(o,{Zo:()=>c,kt:()=>b});var t=a(7294);function i(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function r(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,t)}return a}function n(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?r(Object(a),!0).forEach((function(o){i(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function l(e,o){if(null==e)return{};var a,t,i=function(e,o){if(null==e)return{};var a,t,i={},r=Object.keys(e);for(t=0;t<r.length;t++)a=r[t],o.indexOf(a)>=0||(i[a]=e[a]);return i}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t<r.length;t++)a=r[t],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=t.createContext({}),d=function(e){var o=t.useContext(s),a=o;return e&&(a="function"==typeof e?e(o):n(n({},o),e)),a},c=function(e){var o=d(e.components);return t.createElement(s.Provider,{value:o},e.children)},m="mdxType",p={inlineCode:"code",wrapper:function(e){var o=e.children;return t.createElement(t.Fragment,{},o)}},u=t.forwardRef((function(e,o){var a=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=d(a),u=i,b=m["".concat(s,".").concat(u)]||m[u]||p[u]||r;return a?t.createElement(b,n(n({ref:o},c),{},{components:a})):t.createElement(b,n({ref:o},c))}));function b(e,o){var a=arguments,i=o&&o.mdxType;if("string"==typeof e||i){var r=a.length,n=new Array(r);n[0]=u;var l={};for(var s in o)hasOwnProperty.call(o,s)&&(l[s]=o[s]);l.originalType=e,l[m]="string"==typeof e?e:i,n[1]=l;for(var d=2;d<r;d++)n[d]=a[d];return t.createElement.apply(null,n)}return t.createElement.apply(null,a)}u.displayName="MDXCreateElement"},5797:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>s,contentTitle:()=>n,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var t=a(3117),i=(a(7294),a(3905));const r={id:"biblioteca-laboratorioFW-ARDUNO",title:"laboratorioFW_ARDUNO",slug:"biblioteca-laboratorioFW_ARDUNO",description:"O que \xe9 a biblioteca laboratorioFW-ARDUNO"},n=void 0,l={unversionedId:"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO",id:"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO",title:"laboratorioFW_ARDUNO",description:"O que \xe9 a biblioteca laboratorioFW-ARDUNO",source:"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO.md",sourceDirName:"LaboratorioSistemasIot/bibliotecas",slug:"/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO",permalink:"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO.md",tags:[],version:"current",frontMatter:{id:"biblioteca-laboratorioFW-ARDUNO",title:"laboratorioFW_ARDUNO",slug:"biblioteca-laboratorioFW_ARDUNO",description:"O que \xe9 a biblioteca laboratorioFW-ARDUNO"},sidebar:"docs",previous:{title:"laboratorioFW",permalink:"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW"}},s={},d=[{value:"Como instalar a biblioteca",id:"como-instalar-a-biblioteca",level:2},{value:"Como usar a biblioteca",id:"como-usar-a-biblioteca",level:2},{value:"Exemplo de utiliza\xe7\xe3o:",id:"exemplo-de-utiliza\xe7\xe3o",level:2},{value:"Exemplos implementados:",id:"exemplos-implementados",level:2},{value:"testes_completos.ino",id:"testes_completosino",level:3},{value:"adivinhe_a_senha.ino",id:"adivinhe_a_senhaino",level:3},{value:"ativar_led_RGB_com_potenciometro_e_botoes.ino",id:"ativar_led_rgb_com_potenciometro_e_botoesino",level:3},{value:"ativar_servo_motor_com_botoes.ino",id:"ativar_servo_motor_com_botoesino",level:3},{value:"contagem_display_7seg.ino",id:"contagem_display_7segino",level:3},{value:"controle_led_com_ldr.ino",id:"controle_led_com_ldrino",level:3},{value:"do_re_mi_fa.ino",id:"do_re_mi_faino",level:3},{value:"genio.ino",id:"genioino",level:3},{value:"leitura_do_teclado.ino",id:"leitura_do_tecladoino",level:3},{value:"leitura_sensores_externos.ino",id:"leitura_sensores_externosino",level:3},{value:"leitura_sensores_grove.ino",id:"leitura_sensores_groveino",level:3},{value:"leitura_umidade_temperatura_oled.ino",id:"leitura_umidade_temperatura_oledino",level:3}],c={toc:d},m="wrapper";function p(e){let{components:o,...r}=e;return(0,i.kt)(m,(0,t.Z)({},c,r,{components:o,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Nesta biblioteca \xe9 poss\xedvel encontrar o mapeamento entre a pinagem da placa Arduino Uno e a codifica\xe7\xe3o dos pinos de ativa\xe7\xe3o da placa Laborat\xf3rio de Sistemas Embarcados e IoT segundo o projeto do adaptador para Arduino projeto para a placa. A biblioteca tamb\xe9m \xe9 poss\xedvel encontrar exemplos de utiliza\xe7\xe3o dos perif\xe9ricos dispon\xedveis na placa."),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/biblioteca-laboratorioFW_ARDUNO"},"Clique aqui")," para acessar o reposit\xf3rio da biblioteca no Github."),(0,i.kt)("h2",{id:"como-instalar-a-biblioteca"},"Como instalar a biblioteca"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Fa\xe7a o donwload da biblioteca em formato zip clicando em ",(0,i.kt)("strong",{parentName:"li"},"Code")," e depois em ",(0,i.kt)("strong",{parentName:"li"},"Download ZIP"))),(0,i.kt)("p",null,(0,i.kt)("img",{src:a(2467).Z,width:"528",height:"398"})),(0,i.kt)("ol",{start:2},(0,i.kt)("li",{parentName:"ol"},"Abra a IDE do Arduino"),(0,i.kt)("li",{parentName:"ol"},"V\xe1 em Sketch > Include Library > Add .ZIP Library")),(0,i.kt)("p",null,(0,i.kt)("img",{src:a(3992).Z,width:"657",height:"378"})),(0,i.kt)("ol",{start:4},(0,i.kt)("li",{parentName:"ol"},"Selecione o arquivo zip baixado e clique em ok"),(0,i.kt)("li",{parentName:"ol"},"Opcional: Procure pelos exemplos da biblioteca em File > Examples")),(0,i.kt)("h2",{id:"como-usar-a-biblioteca"},"Como usar a biblioteca"),(0,i.kt)("p",null,"Para utilizar a biblioteca basta inclu\xed-la no seu arquivo de c\xf3digo com a linha ",(0,i.kt)("inlineCode",{parentName:"p"},"#include<laboratorioFW_ARDUNO.h>"),". Depois disso, voc\xea pode utilizar os c\xf3digos dos pinos de ativa\xe7\xe3o na placa dentro do seu c\xf3digo."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Importante : Os algorismos do c\xf3digo do pino de ativa\xe7\xe3o s\xe3o separados por um caractere de ",(0,i.kt)("inlineCode",{parentName:"strong"},"_"),", ou seja o pino de ativa\xe7\xe3o C0 pode ser acessado no c\xf3digo atrav\xe9s do c\xf3digo C_0 e assim por diante.")),(0,i.kt)("h2",{id:"exemplo-de-utiliza\xe7\xe3o"},"Exemplo de utiliza\xe7\xe3o:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-c"},"#include <laborarotioFW_ARDUNO.h>\n\n#define led A_1\n\nvoid setup(){\n pinMode(led,OUTPUT);\n}\n\nvoid loop{\n digitalWrite(led,HIGH);\n delay(1000);\n digitalWrite(led,LOW);\n delay(1000);\n}\n")),(0,i.kt)("h2",{id:"exemplos-implementados"},"Exemplos implementados:"),(0,i.kt)("h3",{id:"testes_completosino"},"testes_completos.ino"),(0,i.kt)("p",null,"Neste exemplo temos todos os c\xf3digos necess\xe1rios para os testes de todos os perif\xe9ricos dispon\xedveis na placa. Este c\xf3digo \xe9 um c\xf3digo para a valida\xe7\xe3o da placa e n\xe3o para ser utilizado no cotidiano."),(0,i.kt)("h3",{id:"adivinhe_a_senhaino"},"adivinhe_a_senha.ino"),(0,i.kt)("p",null,"Neste exemplo implementamos um sistema de verifica\xe7\xe3o de senha utilizando o teclado matricial e a biblioteca ",(0,i.kt)("inlineCode",{parentName:"p"},"Keypad")," para fazer o mapeamento\ndo teclado. Neste sistema, o usu\xe1rio deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usu\xe1rio indica que terminou de digitar a senha apertando um o bot\xe3o correspondente ao caractere ",(0,i.kt)("inlineCode",{parentName:"p"},"*")," ou ",(0,i.kt)("inlineCode",{parentName:"p"},"#"),", essa sequ\xeancia \xe9 comparada com uma senha previamente definida no c\xf3digo. Um led \xe9 aceso para indicar se a senha est\xe1 correta ou n\xe3o e uma mensagem com essa informa\xe7\xe3o \xe9 impresso no monitor serial."),(0,i.kt)("h3",{id:"ativar_led_rgb_com_potenciometro_e_botoesino"},"ativar_led_RGB_com_potenciometro_e_botoes.ino"),(0,i.kt)("p",null,"Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenci\xf4metro e tr\xeas bot\xf5es. Os tr\xeas bot\xf5es s\xe3o utilizados para selecionar qual cor do LED RGB ser\xe1 controlada (vermelho, verde e azul) e a leitura anal\xf3gica do potenci\xf4metro \xe9 usada para dosar a intensidade da cor do terminal."),(0,i.kt)("h3",{id:"ativar_servo_motor_com_botoesino"},"ativar_servo_motor_com_botoes.ino"),(0,i.kt)("p",null,"Neste exemplo, utilizamos dois bot\xf5es para controlar a posi\xe7\xe3o de um servo motor. Os bot\xf5es s\xe3o associados no c\xf3digo \xe0s dire\xe7\xf5es esquerda e direita e alteram o \xe2ngulo do servo fazendo com que seja poss\xedvel moviment\xe1-lo nas duas dire\xe7\xf5es. Foi usada a biblioteca Servo."),(0,i.kt)("h3",{id:"contagem_display_7segino"},"contagem_display_7seg.ino"),(0,i.kt)("p",null,"Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos."),(0,i.kt)("h3",{id:"controle_led_com_ldrino"},"controle_led_com_ldr.ino"),(0,i.kt)("p",null,"Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura \xe9 mapeada e o valor resultante \xe9 usado para acender um LED. O exemplo tamb\xe9m conta com um bot\xe3o que controla um estado interno do programa e seleciona se a leitura ser\xe1 impressa como \xe9 lida ou com l\xf3gica complementar."),(0,i.kt)("h3",{id:"do_re_mi_faino"},"do_re_mi_fa.ino"),(0,i.kt)("p",null,"Neste exemplo uma m\xfasica \xe9 tocada pelo buzzer em conjunto com a ativa\xe7\xe3o\ndo LED RGB endere\xe7\xe1vel. O programa utiliza a biblioteca ",(0,i.kt)("inlineCode",{parentName:"p"},"Adafruit_NeoPixel")," para controlar o LED."),(0,i.kt)("h3",{id:"genioino"},"genio.ino"),(0,i.kt)("p",null,"Neste exemplo, implementamos o jogo Simon, tamb\xe9m conhecido como g\xeanio. Neste jogo, quatro LEDs s\xe3o ativados em uma sequ\xeancia gerada aleat\xf3riamente e essa sequ\xeancia \xe9 apresentada para o jogador, que deve repetir a sequ\xeancia na ordem correta pressionando os bot\xf5es correspondentes. Quando os LEDs acendem, um som correspondente \xe9 tocado no buzzer."),(0,i.kt)("h3",{id:"leitura_do_tecladoino"},"leitura_do_teclado.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e\na imprimimos essa tecla no no monitor serial. A biblioteca ",(0,i.kt)("inlineCode",{parentName:"p"},"Keypad")," \xe9 utilizada para fazer o mapeamento do teclado."),(0,i.kt)("h3",{id:"leitura_sensores_externosino"},"leitura_sensores_externos.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets\npara conectores externos da placa e imprimimos os valores lidos no monitor serial."),(0,i.kt)("h3",{id:"leitura_sensores_groveino"},"leitura_sensores_grove.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial."),(0,i.kt)("h3",{id:"leitura_umidade_temperatura_oledino"},"leitura_umidade_temperatura_oled.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, s\xe3o utilizadas as bibliotecas ",(0,i.kt)("inlineCode",{parentName:"p"},"DTH")," e ",(0,i.kt)("inlineCode",{parentName:"p"},"U8glib"),"."),(0,i.kt)("admonition",{title:"Obs.",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Este projeto foi desenvolvido como parte do Trabalho de Conclus\xe3o de Curso de ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/LelePG"},"Let\xedcia Pegoraro Garcez"),".")))}p.isMDXComponent=!0},3992:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/add-zip-ce38fdcac233471a2c4ff935e87d70bd.png"},2467:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/download-zip-ba60fb48387d2208e3f003c8afe3db77.png"}}]); \ No newline at end of file diff --git a/assets/js/dcf87b66.7a62ecbd.js b/assets/js/dcf87b66.7a62ecbd.js new file mode 100755 index 000000000..0fb05348d --- /dev/null +++ b/assets/js/dcf87b66.7a62ecbd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4298],{40620:(e,o,i)=>{i.r(o),i.d(o,{assets:()=>d,contentTitle:()=>n,default:()=>p,frontMatter:()=>r,metadata:()=>t,toc:()=>l});var a=i(17624),s=i(95788);const r={id:"franzininho-wifi-espidf-01",title:"Hello World! ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",description:"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI",author:"Halysson Junior"},n=void 0,t={id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01",title:"Hello World! ESP-IDF",description:"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x01-Hello-world.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",permalink:"/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x01-Hello-world.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-01",title:"Hello World! ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",description:"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI",author:"Halysson Junior"},sidebar:"docs",previous:{title:"Primeiros Passos com ESP-IDF",permalink:"/docs/franzininho-wifi/exemplos-espidf/primeiros-passos"},next:{title:"Entrada digital",permalink:"/docs/franzininho-wifi/exemplos-espidf/entrada-digital"}},d={},l=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Abaixo segue o nosso circuito do nosso projeto",id:"abaixo-segue-o-nosso-circuito-do-nosso-projeto",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function c(e){const o={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.p,{children:"O artigo proposto dar\xe1 in\xedcio a uma s\xe9rie de projetos utilizando o framework oficial da Espressif, o IDF. O objetivo deste artigo \xe9 apresentar um exemplo de projeto que sirva como base para aqueles que est\xe3o dando seus primeiros passos na fam\xedlia de microcontroladores ESP32."}),"\n",(0,a.jsx)(o.p,{children:"Como \xe9 de praxe na programa\xe7\xe3o sempre que iniciamos uma nova linguagem ou quando aprendemos sobre um novo processador o primeiro projeto a ser criado \xe9 o \u201cOl\xe1 Mundo\u201c, caso contr\xe1rio teremos um eterno azar, ent\xe3o o que acha de come\xe7armos a estudar e apresentar nosso projeto ao Mundo?"}),"\n",(0,a.jsx)(o.p,{children:"Ao final desse exemplo voc\xea saber\xe1 como \xe9 a estrutura b\xe1sica de um programa no ESP-IDF e estar\xe1 pronto para os pr\xf3ximos passos."}),"\n",(0,a.jsx)(o.h2,{id:"recursos-necess\xe1rios",children:"Recursos Necess\xe1rios"}),"\n",(0,a.jsx)(o.p,{children:"Para esse exemplo voc\xea precisar\xe1 dos seguintes recursos:"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"Placa Franzininho WiFi;"}),"\n",(0,a.jsx)(o.li,{children:"Protoboard;"}),"\n",(0,a.jsx)(o.li,{children:"LED;"}),"\n",(0,a.jsx)(o.li,{children:"Resistor 220R ou 150R;"}),"\n",(0,a.jsx)(o.li,{children:"Computador com ESP-IDF instalado e configurado"}),"\n"]}),"\n",(0,a.jsx)(o.h2,{id:"desenvolvimento",children:"Desenvolvimento"}),"\n",(0,a.jsx)(o.p,{children:"Nesse projeto foi utilizado a Franzininho WiFi, uma placa de desenvolvimento baseada no m\xf3dulo ESP 32-S2 (Wroom ou Wrover), o qual faz parte de uma iniciativa open hardware para ensinar sobre programa\xe7\xe3o e eletr\xf4nica aliando habilidades na soldagem de componentes eletr\xf4nicos."}),"\n",(0,a.jsx)(o.p,{children:"Como mencionado, vamos fazer o Ol\xe1 Mundo (Hello, World!), um programa base que tem como objetivo apresentar os recursos prim\xe1rios do processador em estudo. Nesse primeiro projeto vamos explorar as GPIOs, configuradas como sa\xedda digital, conectada a um LED externo para ligar e desligar numa frequ\xeancia de 1 Hertz (1 segundo) e enviar alguns dados de sa\xedda para serem mostrados no monitor do editor, para aqueles que est\xe3o migrando do Arduino j\xe1 est\xe3o familiarizados com esse exemplo, o famoso \u201cBlink\u201d."}),"\n",(0,a.jsx)(o.h3,{id:"esquem\xe1tico",children:"Esquem\xe1tico"}),"\n",(0,a.jsx)(o.p,{children:"Antes de come\xe7armos a escrever as primeiras linhas de c\xf3digo vamos realizar a montagem do circuito, vale ressaltar que na placa Franzininho WiFi h\xe1 um LED RGB on board endere\xe7\xe1vel, contudo ser\xe1 utilizado um LED externo, conectado a GPIO 2 ,para o primeiro projeto, vamos nos familiarizarmos com os comandos b\xe1sicos. Abaixo segue o esquem\xe1tico proposto:"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Hello World_circuito",src:i(43988).c+"",width:"1600",height:"632"})}),"\n",(0,a.jsx)(o.h3,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,a.jsx)(o.p,{children:"O nosso c\xf3digo possui uma estrutura bem simples e n\xe3o \xe9 necess\xe1rio acrescentar nenhuma biblioteca. Ao criar um novo projeto no IDF j\xe1 temos arquivos configurados e prontos para programa\xe7\xe3o do dispositivo, desta forma digite e comente as linhas do seguinte c\xf3digo no arquivo main.c :"}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-c",children:'/*\n Descri\xe7\xe3o: Exemplo que mostra Hello World utilizando quatro modalidade de sa\xedda de dados por meio do\n terminal e interagindo com um LED externo para indica\xe7\xe3o de estado.\n\n Autor: Halysson Junior\n Data : 28/03/21\n*/\n\n\n// Arquivos de cabe\xe7alho\n#include <stdio.h>\n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "esp_system.h"\n#include "driver/gpio.h"\n\n\n// Defini\xe7\xe3o de pino\n\n#define LED 2\n\n// Vari\xe1vel Global\nchar status[2] = {\'L\',\'H\'}; // Caracter para indicar estado do LED H- HIGH e L - LOW\n\n\nvoid app_main(void) // Main\n{\n\n gpio_pad_select_gpio(LED);// Mapeamento do pino LED\n gpio_set_direction(LED,GPIO_MODE_OUTPUT); // Defini\xe7\xe3o\n\n printf("Exemplo - Hello World \\n");// Mostra informa\xe7\xe3o no terminal\n\n\n //Vari\xe1veis Local\n bool i = 0 ; // Varia o estado l\xf3gico do LED\n\n for (;;) {// Loop\n\n i= i^1; // Opera\xe7\xe3o l\xf3gica XOR para alternar o estado do LED\n gpio_set_level(LED,i); // Envia os n\xedveis l\xf3gicos 1 ou 0\n\n printf("Hello World, i am Franzininho WiFi ----\x3e LED status : %c \\n", status[i]);\n\n vTaskDelay(1000 / portTICK_PERIOD_MS); // Rotina de Delay de 1 segundo\n fflush(stdout); // Descarrega os buffers de sa\xedda de dados \n\n }// end Loop\n\n\n}// end Main\n'})}),"\n",(0,a.jsxs)(o.p,{children:["Voc\xea encontra o projeto completo na documenta\xe7\xe3o da Franzininho: ",(0,a.jsx)(o.a,{href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/Hello_World",children:"Hello_World"})]}),"\n",(0,a.jsxs)(o.p,{children:["Caso ainda n\xe3o tenha instalado e configurado o IDF no seu computador ou tem d\xfavidas sobre as ferramentas, acesse o ",(0,a.jsx)(o.a,{href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi-espidf/primeiros-passos",children:"tutorial de instala\xe7\xe3o"})]}),"\n",(0,a.jsx)(o.h3,{id:"compila\xe7\xe3o",children:"Compila\xe7\xe3o"}),"\n",(0,a.jsx)(o.p,{children:"Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o set target para ESP 32-S2."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.code,{children:"idf.py set-target esp32s2"})}),"\n",(0,a.jsx)(o.p,{children:"Ao final da compila\xe7\xe3o o resultado final deve ser semelhante \xe0 imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu c\xf3digo."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"resultado da compila\xe7\xe3o",src:i(1432).c+"",width:"1600",height:"311"})}),"\n",(0,a.jsx)(o.p,{children:"Agora vamos enviar o c\xf3digo fonte para nossa placa, no editor vamos pressionar o \xedcone abaixo e aguarde alguns segundos para assim dar in\xedcio ao programa \u201cOl\xe1 Mundo\u201d."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Gravando",src:i(10840).c+"",width:"215",height:"69"})}),"\n",(0,a.jsx)(o.p,{children:"Para vermos a sa\xedda de dados do nosso projeto clique no \xedcone apresentado abaixo."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Monitor",src:i(76420).c+"",width:"215",height:"70"})}),"\n",(0,a.jsx)(o.h3,{id:"resultados",children:"Resultados"}),"\n",(0,a.jsx)(o.p,{children:"Com a finaliza\xe7\xe3o do projeto o leitor observou que utilizamos uma estrutura\xe7\xe3o da linguagem C (main(), printf, fflush()), la\xe7os de repeti\xe7\xe3o (for()) e alguns tipos de vari\xe1veis primitivas (int e char) para formar nosso c\xf3digo . Aliados a isso utilizamos labels nativas do IDF para definir os pinos de entrada ou sa\xedda digital (GPIO_MODE_OUTPUT )."}),"\n",(0,a.jsx)(o.p,{children:"Abaixo segue o resultado final dos dados de sa\xedda :"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"monitor",src:i(27232).c+"",width:"1056",height:"204"})}),"\n",(0,a.jsx)(o.h2,{id:"abaixo-segue-o-nosso-circuito-do-nosso-projeto",children:"Abaixo segue o nosso circuito do nosso projeto"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Monitor",src:i(22444).c+"",width:"1024",height:"252"})}),"\n",(0,a.jsx)(o.p,{children:"Portanto, a partir deste projeto \xe9 poss\xedvel aplicar a l\xf3gica estruturada no c\xf3digo em diversos outros tipos de sensores, por exemplo : sensor de vibra\xe7\xe3o, sensor infravermelho, sensor de som e outros sensores digitais comumente comercializados."}),"\n",(0,a.jsx)(o.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,a.jsx)(o.p,{children:"Nesse projeto apresentamos os conceitos b\xe1sicos para aqueles que desejam dar o pontap\xe9 inicial nos estudos sobre o IDF, contudo aconselhamos aos leitores a modificar o c\xf3digo no intuito de revisar a linguagem C e fixar algumas fun\xe7\xf5es nativas, os quais ser\xe3o normalmente utilizadas em outros projetos tamb\xe9m n\xe3o limitar-se apenas aos perif\xe9ricos GPIOs do microcontrolador, pois o ESP32-S2 possui diversos recursos tanto em hardware quanto em software. Desta forma o artigo servir\xe1 de acervo aos leitores para relembrar conceitos espec\xedficos e aprimorar os que j\xe1 possuem."}),"\n",(0,a.jsxs)(o.table,{children:[(0,a.jsx)(o.thead,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.th,{children:"Autor"}),(0,a.jsx)(o.th,{children:(0,a.jsx)(o.a,{href:"https://github.com/halyssonJr",children:"Halysson Junior"})})]})}),(0,a.jsx)(o.tbody,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"Data:"}),(0,a.jsx)(o.td,{children:"13/05/2021"})]})})]})]})}function p(e={}){const{wrapper:o}={...(0,s.MN)(),...e.components};return o?(0,a.jsx)(o,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},95788:(e,o,i)=>{i.d(o,{MN:()=>l});var a=i(11504);function s(e,o,i){return o in e?Object.defineProperty(e,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[o]=i,e}function r(e,o){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);o&&(a=a.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),i.push.apply(i,a)}return i}function n(e){for(var o=1;o<arguments.length;o++){var i=null!=arguments[o]?arguments[o]:{};o%2?r(Object(i),!0).forEach((function(o){s(e,o,i[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):r(Object(i)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(i,o))}))}return e}function t(e,o){if(null==e)return{};var i,a,s=function(e,o){if(null==e)return{};var i,a,s={},r=Object.keys(e);for(a=0;a<r.length;a++)i=r[a],o.indexOf(i)>=0||(s[i]=e[i]);return s}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)i=r[a],o.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(s[i]=e[i])}return s}var d=a.createContext({}),l=function(e){var o=a.useContext(d),i=o;return e&&(i="function"==typeof e?e(o):n(n({},o),e)),i},c={inlineCode:"code",wrapper:function(e){var o=e.children;return a.createElement(a.Fragment,{},o)}},p=a.forwardRef((function(e,o){var i=e.components,s=e.mdxType,r=e.originalType,d=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),m=l(i),u=s,h=m["".concat(d,".").concat(u)]||m[u]||c[u]||r;return i?a.createElement(h,n(n({ref:o},p),{},{components:i})):a.createElement(h,n({ref:o},p))}));p.displayName="MDXCreateElement"},43988:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/01-esquematico-121114b8161dd3e6287dcf53cbef5789.jpg"},1432:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/02-compilacao-8819c8dee549eaa15aa22bdf14b9b11b.png"},10840:(e,o,i)=>{i.d(o,{c:()=>a});const a="data:image/png;base64,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"},76420:(e,o,i)=>{i.d(o,{c:()=>a});const a="data:image/png;base64,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"},27232:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/05-monitor-715bb898fc09463329bc8c14844b8509.png"},22444:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/06-circuito-montado-58b7b31688a38dba89adcadf4bbdba30.png"}}]); \ No newline at end of file diff --git a/assets/js/dcf87b66.e04d6994.js b/assets/js/dcf87b66.e04d6994.js deleted file mode 100755 index f3b8f198b..000000000 --- a/assets/js/dcf87b66.e04d6994.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1375],{3905:(e,o,a)=>{a.d(o,{Zo:()=>p,kt:()=>g});var i=a(7294);function r(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function n(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);o&&(i=i.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,i)}return a}function s(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?n(Object(a),!0).forEach((function(o){r(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function t(e,o){if(null==e)return{};var a,i,r=function(e,o){if(null==e)return{};var a,i,r={},n=Object.keys(e);for(i=0;i<n.length;i++)a=n[i],o.indexOf(a)>=0||(r[a]=e[a]);return r}(e,o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i<n.length;i++)a=n[i],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=i.createContext({}),d=function(e){var o=i.useContext(l),a=o;return e&&(a="function"==typeof e?e(o):s(s({},o),e)),a},p=function(e){var o=d(e.components);return i.createElement(l.Provider,{value:o},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var o=e.children;return i.createElement(i.Fragment,{},o)}},m=i.forwardRef((function(e,o){var a=e.components,r=e.mdxType,n=e.originalType,l=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),u=d(a),m=r,g=u["".concat(l,".").concat(m)]||u[m]||c[m]||n;return a?i.createElement(g,s(s({ref:o},p),{},{components:a})):i.createElement(g,s({ref:o},p))}));function g(e,o){var a=arguments,r=o&&o.mdxType;if("string"==typeof e||r){var n=a.length,s=new Array(n);s[0]=m;var t={};for(var l in o)hasOwnProperty.call(o,l)&&(t[l]=o[l]);t.originalType=e,t[u]="string"==typeof e?e:r,s[1]=t;for(var d=2;d<n;d++)s[d]=a[d];return i.createElement.apply(null,s)}return i.createElement.apply(null,a)}m.displayName="MDXCreateElement"},229:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>n,metadata:()=>t,toc:()=>d});var i=a(3117),r=(a(7294),a(3905));const n={id:"franzininho-wifi-espidf-01",title:"Hello World! ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",description:"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI",author:"Halysson Junior"},s=void 0,t={unversionedId:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01",id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01",title:"Hello World! ESP-IDF",description:"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x01-Hello-world.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",permalink:"/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x01-Hello-world.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-01",title:"Hello World! ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",description:"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI",author:"Halysson Junior"},sidebar:"docs",previous:{title:"Primeiros Passos com ESP-IDF",permalink:"/docs/franzininho-wifi/exemplos-espidf/primeiros-passos"},next:{title:"Entrada digital",permalink:"/docs/franzininho-wifi/exemplos-espidf/entrada-digital"}},l={},d=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Abaixo segue o nosso circuito do nosso projeto",id:"abaixo-segue-o-nosso-circuito-do-nosso-projeto",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],p={toc:d},u="wrapper";function c(e){let{components:o,...n}=e;return(0,r.kt)(u,(0,i.Z)({},p,n,{components:o,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"O artigo proposto dar\xe1 in\xedcio a uma s\xe9rie de projetos utilizando o framework oficial da Espressif, o IDF. O objetivo deste artigo \xe9 apresentar um exemplo de projeto que sirva como base para aqueles que est\xe3o dando seus primeiros passos na fam\xedlia de microcontroladores ESP32."),(0,r.kt)("p",null,"Como \xe9 de praxe na programa\xe7\xe3o sempre que iniciamos uma nova linguagem ou quando aprendemos sobre um novo processador o primeiro projeto a ser criado \xe9 o \u201cOl\xe1 Mundo\u201c, caso contr\xe1rio teremos um eterno azar, ent\xe3o o que acha de come\xe7armos a estudar e apresentar nosso projeto ao Mundo?"),(0,r.kt)("p",null,"Ao final desse exemplo voc\xea saber\xe1 como \xe9 a estrutura b\xe1sica de um programa no ESP-IDF e estar\xe1 pronto para os pr\xf3ximos passos."),(0,r.kt)("h2",{id:"recursos-necess\xe1rios"},"Recursos Necess\xe1rios"),(0,r.kt)("p",null,"Para esse exemplo voc\xea precisar\xe1 dos seguintes recursos:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Placa Franzininho WiFi;"),(0,r.kt)("li",{parentName:"ul"},"Protoboard;"),(0,r.kt)("li",{parentName:"ul"},"LED;"),(0,r.kt)("li",{parentName:"ul"},"Resistor 220R ou 150R;"),(0,r.kt)("li",{parentName:"ul"},"Computador com ESP-IDF instalado e configurado")),(0,r.kt)("h2",{id:"desenvolvimento"},"Desenvolvimento"),(0,r.kt)("p",null,"Nesse projeto foi utilizado a Franzininho WiFi, uma placa de desenvolvimento baseada no m\xf3dulo ESP 32-S2 (Wroom ou Wrover), o qual faz parte de uma iniciativa open hardware para ensinar sobre programa\xe7\xe3o e eletr\xf4nica aliando habilidades na soldagem de componentes eletr\xf4nicos."),(0,r.kt)("p",null,"Como mencionado, vamos fazer o Ol\xe1 Mundo (Hello, World!), um programa base que tem como objetivo apresentar os recursos prim\xe1rios do processador em estudo. Nesse primeiro projeto vamos explorar as GPIOs, configuradas como sa\xedda digital, conectada a um LED externo para ligar e desligar numa frequ\xeancia de 1 Hertz (1 segundo) e enviar alguns dados de sa\xedda para serem mostrados no monitor do editor, para aqueles que est\xe3o migrando do Arduino j\xe1 est\xe3o familiarizados com esse exemplo, o famoso \u201cBlink\u201d."),(0,r.kt)("h3",{id:"esquem\xe1tico"},"Esquem\xe1tico"),(0,r.kt)("p",null,"Antes de come\xe7armos a escrever as primeiras linhas de c\xf3digo vamos realizar a montagem do circuito, vale ressaltar que na placa Franzininho WiFi h\xe1 um LED RGB on board endere\xe7\xe1vel, contudo ser\xe1 utilizado um LED externo, conectado a GPIO 2 ,para o primeiro projeto, vamos nos familiarizarmos com os comandos b\xe1sicos. Abaixo segue o esquem\xe1tico proposto:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Hello World_circuito",src:a(7694).Z,width:"1600",height:"632"})),(0,r.kt)("h3",{id:"c\xf3digo"},"C\xf3digo"),(0,r.kt)("p",null,"O nosso c\xf3digo possui uma estrutura bem simples e n\xe3o \xe9 necess\xe1rio acrescentar nenhuma biblioteca. Ao criar um novo projeto no IDF j\xe1 temos arquivos configurados e prontos para programa\xe7\xe3o do dispositivo, desta forma digite e comente as linhas do seguinte c\xf3digo no arquivo main.c :"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-c"},'/*\n Descri\xe7\xe3o: Exemplo que mostra Hello World utilizando quatro modalidade de sa\xedda de dados por meio do\n terminal e interagindo com um LED externo para indica\xe7\xe3o de estado.\n\n Autor: Halysson Junior\n Data : 28/03/21\n*/\n\n\n// Arquivos de cabe\xe7alho\n#include <stdio.h>\n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "esp_system.h"\n#include "driver/gpio.h"\n\n\n// Defini\xe7\xe3o de pino\n\n#define LED 2\n\n// Vari\xe1vel Global\nchar status[2] = {\'L\',\'H\'}; // Caracter para indicar estado do LED H- HIGH e L - LOW\n\n\nvoid app_main(void) // Main\n{\n\n gpio_pad_select_gpio(LED);// Mapeamento do pino LED\n gpio_set_direction(LED,GPIO_MODE_OUTPUT); // Defini\xe7\xe3o\n\n printf("Exemplo - Hello World \\n");// Mostra informa\xe7\xe3o no terminal\n\n\n //Vari\xe1veis Local\n bool i = 0 ; // Varia o estado l\xf3gico do LED\n\n for (;;) {// Loop\n\n i= i^1; // Opera\xe7\xe3o l\xf3gica XOR para alternar o estado do LED\n gpio_set_level(LED,i); // Envia os n\xedveis l\xf3gicos 1 ou 0\n\n printf("Hello World, i am Franzininho WiFi ----\x3e LED status : %c \\n", status[i]);\n\n vTaskDelay(1000 / portTICK_PERIOD_MS); // Rotina de Delay de 1 segundo\n fflush(stdout); // Descarrega os buffers de sa\xedda de dados \n\n }// end Loop\n\n\n}// end Main\n')),(0,r.kt)("p",null,"Voc\xea encontra o projeto completo na documenta\xe7\xe3o da Franzininho: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/Hello_World"},"Hello_World")),(0,r.kt)("p",null,"Caso ainda n\xe3o tenha instalado e configurado o IDF no seu computador ou tem d\xfavidas sobre as ferramentas, acesse o ",(0,r.kt)("a",{parentName:"p",href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi-espidf/primeiros-passos"},"tutorial de instala\xe7\xe3o")),(0,r.kt)("h3",{id:"compila\xe7\xe3o"},"Compila\xe7\xe3o"),(0,r.kt)("p",null,"Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o set target para ESP 32-S2."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"idf.py set-target esp32s2")),(0,r.kt)("p",null,"Ao final da compila\xe7\xe3o o resultado final deve ser semelhante \xe0 imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu c\xf3digo."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"resultado da compila\xe7\xe3o",src:a(9970).Z,width:"1600",height:"311"})),(0,r.kt)("p",null,"Agora vamos enviar o c\xf3digo fonte para nossa placa, no editor vamos pressionar o \xedcone abaixo e aguarde alguns segundos para assim dar in\xedcio ao programa \u201cOl\xe1 Mundo\u201d."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Gravando",src:a(6521).Z,width:"215",height:"69"})),(0,r.kt)("p",null,"Para vermos a sa\xedda de dados do nosso projeto clique no \xedcone apresentado abaixo."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Monitor",src:a(6145).Z,width:"215",height:"70"})),(0,r.kt)("h3",{id:"resultados"},"Resultados"),(0,r.kt)("p",null,"Com a finaliza\xe7\xe3o do projeto o leitor observou que utilizamos uma estrutura\xe7\xe3o da linguagem C (main(), printf, fflush()), la\xe7os de repeti\xe7\xe3o (for()) e alguns tipos de vari\xe1veis primitivas (int e char) para formar nosso c\xf3digo . Aliados a isso utilizamos labels nativas do IDF para definir os pinos de entrada ou sa\xedda digital (GPIO_MODE_OUTPUT )."),(0,r.kt)("p",null,"Abaixo segue o resultado final dos dados de sa\xedda :"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"monitor",src:a(7537).Z,width:"1056",height:"204"})),(0,r.kt)("h2",{id:"abaixo-segue-o-nosso-circuito-do-nosso-projeto"},"Abaixo segue o nosso circuito do nosso projeto"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Monitor",src:a(4116).Z,width:"1024",height:"252"})),(0,r.kt)("p",null,"Portanto, a partir deste projeto \xe9 poss\xedvel aplicar a l\xf3gica estruturada no c\xf3digo em diversos outros tipos de sensores, por exemplo : sensor de vibra\xe7\xe3o, sensor infravermelho, sensor de som e outros sensores digitais comumente comercializados."),(0,r.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,r.kt)("p",null,"Nesse projeto apresentamos os conceitos b\xe1sicos para aqueles que desejam dar o pontap\xe9 inicial nos estudos sobre o IDF, contudo aconselhamos aos leitores a modificar o c\xf3digo no intuito de revisar a linguagem C e fixar algumas fun\xe7\xf5es nativas, os quais ser\xe3o normalmente utilizadas em outros projetos tamb\xe9m n\xe3o limitar-se apenas aos perif\xe9ricos GPIOs do microcontrolador, pois o ESP32-S2 possui diversos recursos tanto em hardware quanto em software. Desta forma o artigo servir\xe1 de acervo aos leitores para relembrar conceitos espec\xedficos e aprimorar os que j\xe1 possuem."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Autor"),(0,r.kt)("th",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"th",href:"https://github.com/halyssonJr"},"Halysson Junior")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data:"),(0,r.kt)("td",{parentName:"tr",align:null},"13/05/2021")))))}c.isMDXComponent=!0},7694:(e,o,a)=>{a.d(o,{Z:()=>i});const i=a.p+"assets/images/01-esquematico-121114b8161dd3e6287dcf53cbef5789.jpg"},9970:(e,o,a)=>{a.d(o,{Z:()=>i});const i=a.p+"assets/images/02-compilacao-8819c8dee549eaa15aa22bdf14b9b11b.png"},6521:(e,o,a)=>{a.d(o,{Z:()=>i});const i="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANcAAABFCAYAAADZ03P9AAAMh0lEQVR4Xu2dCVBU9x3HAY0x8cJE430fzaRtktok5mhstDHm6iRtJ61pTquRGwQ5RVQUxfuiHlhB40WiEFFBoIKoeGtY9l7YXZZll3u5D5NMp9/+NmqKvEU53pva5PeZ+cwy//fevuv//R/v7QxOTgzzX5pJ3EX7coZhOomzkzBMjrSvxzBMJ+BwMYxEcLgYRiI4XAwjERwuhpEIDhfDSASHi2EkgsPFMBLB4WIYieBwMYxEcLgYRiI4XAwjERwuhpEIDhfDSASHi2EkgsPFMBLB4WIYieBwMYxEcLgYRiI4XAwjERwuhpEIDhfDSASHi2EkgsPFMBLB4WIYieBwMYxEcLgYRiI4XAwjEoVOwuD820HZvZZbnRiGuYPpZIuTMCyd0f5fT+zfwzBMG7oTMA4Ww9yDrgSMg8UwHaQzAeNgMUwn6UjAOFgM00XuFjAOFsN0E0cB42AxjEi0DhgHi2FExh6oqlufDMMwDMMwDMMwDMMwDMMwTNeZNGkyWPGdMGECxowZg9GjR7M/UZ1GT5kFVnxHPv0qhv1yOob+4hX2J6qT02e5YFlWAgUFLMuKo6CAZVlxFBTcS7c8POQtg/N8+tud/vaSwcX+d9v1WHG0X1s3GV1r2c2/2y5nxVXMaywouJdBBXh7pwZ9KGBOy4x4K0aJft65cG67npjePmEfBYaGqDAhXIVRAXl42EPi/ZI9fOR4NFiFsYvUtF81xoUo8IiPDD3dhOuKJoWpF53r4CDa72Itxq/UYdxqHcZHqjEmVIlBfnno5e5gOxF1pmN4aAFd7zA6bzr3cWFKDPOnxlSK/drvb0dtu62IunjkoR/d4xH+MsGyLikouJcbKnAh14xRC/PgHF+DzAw9xlFFl6z38pTjkVAVhgcp4Lq/AjvVjfi6ugXpmSa8Ga3CaKrsrj55eEDMym4/F3tP4a7AyH+UIELRhLPmFlwqu4GL6kqExuswKpDOX4reZH4eeofqMHVfKVZdrUNafiNO6xqQqWvEmYIGpMiqEPGlEVMiFHhQzHO+wzz0Cc7HK0cqsaOgCZdMTcjW1yE2xYQZYW3X7brfV+aFSoxeQo1GRAdcpMKQBVTXHHxXd3Wm694vRI/ZBTeQnlaAx7yF63RaQUF7zpPhwQAlhu604ZrSimeWqzH8izrknDHh+UgVXKUYHtIQ1HWTBZHyeiRdK6dKXosVCQY8l1iOqDNlCLlYjVilDWH79XgiiFpzsfbvrUC/SB1GbDFhdlYlok6X4a/xhXicKrxvdiVWpFkwc7cRY6I1VDny0EPMSh6gxW/2lWE1nZ9bnI56i1utKF1/Jx8lRm0vhmd2BSIPG/BMaJ5wexF0pv2M32SGT7IV87ZoMCBQg4l7rPj0uBnvrJQL1u+SdG/7Lzbgw5N1uFreTOFtuIuNOGtswkV9LfYcK0D/eQ6+r5vaw+W62Agv67e4oK3D7jglHnCwXqcUFLTnHC1+e6UeX+S3QFXaiGRtPRKKWqC0NCLDWIuFNDx8xEvkYZq/Hn6Xq7EypRjemVX4qqAai2PzMXG1GRE51YhPK8bMDBu2XS3Dx1QJBlHARdl/SD7eSqlBkqEZ503UW+jqcYzO96j25ufxomZcLmtG6jkL3l+twEBPB9/RVcPyMSOpCtsuVCL4gAFPLVNjZLASI2iIOCJCh19TJY+4aMP2tCL8dqlIFf0OqQUPpV4roQSeh02YFqHEhE1F8D5BDUusDkPEakhovj5gqQHvHS7Fsv0a4fLWzpehtz/VPxpFRKea8JgE4erhRee5owz7CsrxzmYr9mhK8GR3z1VQ0J5zjVhfUoP5W7UYsFyDnpE3fZBa+GeuNyF2vxqj/EQMF13Qnh5q/CylGtEpRXSTFTQHoHlWAM15/OXo6ytDD281ZqZXY3dWMf64WokBYoXL3ktsNOPdQ1bMOWrCy7GFeC2WhmK7THgl1oAXE0vxSYoVH26l8bmfg+27I4VrWkIFtlCjckhRh9SCRuQYGpFNLfeZwkYc09Qh4boNMccK8bIE4fq+19pSBJ/jFszbTnO95QZ8lFqBNSfNeGMJzbk8hNt0yfsoXM7ucgxYVoj38uoRE6vEw0H5eFNdC+/FXwvW7ZSCgvb8PlyVeDdUjodaD7/sFfF8EzZ9Ti2smOGiizmFWmnvy/XI1lbi0w1aDI824sO0SsRcKYfXTprgryxCyIVaHLxahaVJRjy1lOYhYky4b4croRTrLpdjUVoFNmSUY+4pG4Lp0+NsFXz+WSJZuF7aa4XnngL8KpSOw4NcQCGihsXJXrEDNHhuZzECDholCBfNtajXeuGLErgfoZ4xSoPRB2gIbrgBdXEDkrIt+AMNC0W5x/dLuNyoPi8xYvq1ehxKy8cAKnMJorqc24D1m2lUYn9w13abjiooaE8K19qSKvwpTBiuXhebsHEvHZCviOFaZaUQVSGSLuZz1Cv19VRhRkYVoqlFfYl6q41nLXh7jQp9IrQYH1+O7blVcNuZj2F0Mbo94b2fwtV2uZTh8lZi7EbqtY5a4B6jhuutSuziq8S4DUWYd5R6679r0FuMyn0/hIu+t1cYjbwuNiA504AhfnIMpIbMNViP94u+w0V5HQ4kadCr7XYdVVDQnvPy4WesRxBVdNfWj8DdNHhL3oDIbSoMFXPOFWXBmvOVWEKT6Oc3aeDqq8a0lEqsOGHFa2k2rM8sxuvRGgxeW4ApRyqwQ1aBudvzMYTD1XUDVRgWb8F7iWbqoW4+he3tR4HbYIZvBl37RCOeDHSwXVe8D8LlQvOsiVvLkKAswdRQFX5+0IajuRa8trQIG6q+gYKGhqmmcsz07uLwUFDQnvYKd6wOp2QWTItU4lFKeX8/mv/styFVbsHvaLjYW6yndXaptRyzyYRPz9bjclE1Qmj8PzJSj3dOVGBTTik+3qzB8DAD/M7XIjGPQvilHk+Ey/HAj21Y2Ha5lOHyVGDEWjPCLjdCVtGEpDMWfLy3CB4ZFYj+qhAvBDk4nq76vw4X1VWXQJrTJ9cgMVmH4ass2FV5A+cM1XBfQg20H+0zUIuZqiasW+tg+44oKLib7iqMzWpAtrkBKdp6JJqacdlYiTlrKGhSvNClXvH1rFocyDJj1ioVBvvL0cdThh50Y/oEKjBggQK9D1fAL9mEVyMV6CNGsOy2Clf0hTIsPFGOFaml+OhkJfzoc252JbwyfoTh+uzmA41xmylQ6WUITS+Bb3o5Vh034cUwB8fSHW+F689HSrEyQYc+3nnta3+RT3PBWXtKseakiOEKVmNyeh2+PJaPSV/VIPVcIcYdq8XJSyaMp3C5LFRjVG4Ldm9zsH1HFBR0xNBCrCxrxp79OgzxEekJnSMXmRB2vQbbky34W0Y1kqz1iDlQgKe2WLFR0YQcVSUCcmqw/3oZPtkq4qN4e7jW09AowYLZ+wyYuF6HUWuo51ybj8nr6EYcKMEHx634wB4uXwfbd8db4fL+XI9nFwlfzrsEa/FCnAULE6QIlwyuVInfSKzA6ivViDtXgXXHizB9kQTv0yhc/SP0+EtKNVL0tdh8qeoHY67YsPN6NXZdsyHmVtnWa9XYJ6fyFD0GiRWuBWo8frAKqaoSPJlVh4NxcjgH6jDmShPSk7UYtLgQ4XRs4RFSDwvvUAcP6r2ityoxyFOCHqu1UUUIv1KL+AwLPK7VYW1yIV6lHmRVVgkCLtTgkK4a4Xup0gfI0FPMYWloAd49bkOisQlfl7Ygr5XykkYkZBXj91HUe4r1aPq2/hpMjSvF8swyeMTlY0KwHH1vteB9F6owebsZnqfKEXZQj6eDRe5NaCg+NsaKZVfqccpe4U+YMTNcgmDd1i0PPcK1GBJrwNRdRrwUb8KsgxZ45tQis+5byHVVCNxbiBl7CjFtlwHPbtRiUrB4x+NM+390aSH8i28gR9+I06cL0IuuwYTPa6CmhvuDq004nV2AgV0Ns6CgI87XYo6sBgFrFRgoxXCwPWPLsU3TAn1dC9LTjZhON763F5V392Vfe9p/3kTDUCevttqX5Yr/0ye79l7Tn1rUXVYsv9bw/c+urppp+F3cglxLM3IUVVi6T4/JgeJVsh+kijVyB/WKl6kxO1WMWcvE7hnb0YMajigjZuc0Qm37Bua672C78S/YGr9FUfkN5GpsWBl3j3lZF7W/4xocZcYyXTPk+nK8HqrExJRGFNsasJd6ycHd+YGAoIC9v/SkEAUp4BRCFZ2G4JIEurX2X+D70D67837n/1H7dbW/U7R/2hvQ7oTqtoIClmXFUVDAsqw4CgpYlhVHQQHLsqL4HztpaIQQvdPSAAAAAElFTkSuQmCC"},6145:(e,o,a)=>{a.d(o,{Z:()=>i});const i="data:image/png;base64,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"},7537:(e,o,a)=>{a.d(o,{Z:()=>i});const i=a.p+"assets/images/05-monitor-715bb898fc09463329bc8c14844b8509.png"},4116:(e,o,a)=>{a.d(o,{Z:()=>i});const i=a.p+"assets/images/06-circuito-montado-58b7b31688a38dba89adcadf4bbdba30.png"}}]); \ No newline at end of file diff --git a/assets/js/e16015ca.20445b94.js b/assets/js/e16015ca.20445b94.js deleted file mode 100755 index f70c8ad09..000000000 --- a/assets/js/e16015ca.20445b94.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9700],{5688:a=>{a.exports=JSON.parse('{"label":"hola","permalink":"/blog/tags/hola","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/assets/js/e16015ca.f90a54a3.js b/assets/js/e16015ca.f90a54a3.js new file mode 100755 index 000000000..09e3387fd --- /dev/null +++ b/assets/js/e16015ca.f90a54a3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7552],{77616:a=>{a.exports=JSON.parse('{"label":"hola","permalink":"/blog/tags/hola","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/e586c302.b86ca4c3.js b/assets/js/e586c302.b86ca4c3.js deleted file mode 100755 index 39a45de3d..000000000 --- a/assets/js/e586c302.b86ca4c3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6355],{3905:(t,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>k});var r=a(7294);function n(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,r)}return a}function o(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?i(Object(a),!0).forEach((function(e){n(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}function l(t,e){if(null==t)return{};var a,r,n=function(t,e){if(null==t)return{};var a,r,n={},i=Object.keys(t);for(r=0;r<i.length;r++)a=i[r],e.indexOf(a)>=0||(n[a]=t[a]);return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)a=i[r],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(n[a]=t[a])}return n}var d=r.createContext({}),m=function(t){var e=r.useContext(d),a=e;return t&&(a="function"==typeof t?t(e):o(o({},e),t)),a},p=function(t){var e=m(t.components);return r.createElement(d.Provider,{value:e},t.children)},s="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},f=r.forwardRef((function(t,e){var a=t.components,n=t.mdxType,i=t.originalType,d=t.parentName,p=l(t,["components","mdxType","originalType","parentName"]),s=m(a),f=n,k=s["".concat(d,".").concat(f)]||s[f]||c[f]||i;return a?r.createElement(k,o(o({ref:e},p),{},{components:a})):r.createElement(k,o({ref:e},p))}));function k(t,e){var a=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var i=a.length,o=new Array(i);o[0]=f;var l={};for(var d in e)hasOwnProperty.call(e,d)&&(l[d]=e[d]);l.originalType=t,l[s]="string"==typeof t?t:n,o[1]=l;for(var m=2;m<i;m++)o[m]=a[m];return r.createElement.apply(null,o)}return r.createElement.apply(null,a)}f.displayName="MDXCreateElement"},9660:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>d,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>m});var r=a(3117),n=(a(7294),a(3905));const i={id:"lista-de-materiais",title:"Lista de Materiais",slug:"/franzininho-diy/lista-de-materiais",description:"Lista de materiais (componentes) para montagem da Franzininho DIY"},o=void 0,l={unversionedId:"FranzininhoDIY/lista-de-materiais",id:"FranzininhoDIY/lista-de-materiais",title:"Lista de Materiais",description:"Lista de materiais (componentes) para montagem da Franzininho DIY",source:"@site/docs/FranzininhoDIY/lista-de-materiais.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/lista-de-materiais",permalink:"/docs/franzininho-diy/lista-de-materiais",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/lista-de-materiais.md",tags:[],version:"current",frontMatter:{id:"lista-de-materiais",title:"Lista de Materiais",slug:"/franzininho-diy/lista-de-materiais",description:"Lista de materiais (componentes) para montagem da Franzininho DIY"},sidebar:"docs",previous:{title:"Placa Franzininho DIY",permalink:"/docs/franzininho-diy/sobre"},next:{title:"Identificando os componentes",permalink:"/docs/franzininho-diy/identificando-componentes"}},d={},m=[{value:"Lista de materiais (BOM)",id:"lista-de-materiais-bom",level:2}],p={toc:m},s="wrapper";function c(t){let{components:e,...a}=t;return(0,n.kt)(s,(0,r.Z)({},p,a,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Aqui voc\xea encontra a lista de materiais para montagem da Franzininho DIY."),(0,n.kt)("p",null,"Confira a refer\xeancia e descri\xe7\xe3o de cada componente."),(0,n.kt)("h2",{id:"lista-de-materiais-bom"},"Lista de materiais ","(","BOM",")"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"Refer\xeancia"),(0,n.kt)("th",{parentName:"tr",align:"left"},"Descri\xe7\xe3o"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"C1"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Capacitor Cer\xe2mico 100 nF x 50 V")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"C2"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Capacitor eletrol\xedtico 10 uF x 35 V")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"D1"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Diodo Zener 3,6 V 0,5W")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"D2"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Diodo Zener 3,6 V 0,5W")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"D3"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Diodo 1N4148")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"IC1"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Microcontrolador ATTINY85 - 20PU")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"IC2"),(0,n.kt)("td",{parentName:"tr",align:"left"},"78L05 - Regulador de tens\xe3o")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"SQ1"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Soquete Para CI - 8 pinos")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"JP3"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Barra de pinos estampada 15 mm 180\xb0 - 8 vias")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"J1"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Barra de pinos estampada 15 mm 180\xb0 - 3 vias")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"LED"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Led 3mm Amarelo Difuso")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"ON"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Led 3mm Verde Difuso")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"R1"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Resistor 68 R - 5% 1/4 W")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"R2"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Resistor 68 R - 5% 1/4 W")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"R3"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Resistor 1K5 - 5% 1/4 W")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"R4"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Resistor 1K - 5% 1/4 W")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"R5"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Resistor 1K - 5% 1/4 W")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"RESET"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Chave T\xe1ctil 6x6x5 mm")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"USB"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Conector USB Macho 90\xba com trava")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"PCB"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("a",{parentName:"td",href:"https://github.com/Franzininho/franzininho-diy-board"},"Placa de circuito impresso Franzininho V2"))))),(0,n.kt)("admonition",{title:"Ajuda",type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Se tiver alguma d\xfavida sobre os componentes, consulte a comunidade Franzininho no ",(0,n.kt)("a",{parentName:"p",href:"https://discord.gg/H5kENmWGaz"},"Discord"))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e586c302.b94f355a.js b/assets/js/e586c302.b94f355a.js new file mode 100755 index 000000000..badce6eab --- /dev/null +++ b/assets/js/e586c302.b94f355a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[872],{24400:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>x,frontMatter:()=>l,metadata:()=>d,toc:()=>o});var n=i(17624),r=i(95788);const l={id:"lista-de-materiais",title:"Lista de Materiais",slug:"/franzininho-diy/lista-de-materiais",description:"Lista de materiais (componentes) para montagem da Franzininho DIY"},s=void 0,d={id:"FranzininhoDIY/lista-de-materiais",title:"Lista de Materiais",description:"Lista de materiais (componentes) para montagem da Franzininho DIY",source:"@site/docs/FranzininhoDIY/lista-de-materiais.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/lista-de-materiais",permalink:"/docs/franzininho-diy/lista-de-materiais",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/lista-de-materiais.md",tags:[],version:"current",frontMatter:{id:"lista-de-materiais",title:"Lista de Materiais",slug:"/franzininho-diy/lista-de-materiais",description:"Lista de materiais (componentes) para montagem da Franzininho DIY"},sidebar:"docs",previous:{title:"Placa Franzininho DIY",permalink:"/docs/franzininho-diy/sobre"},next:{title:"Identificando os componentes",permalink:"/docs/franzininho-diy/identificando-componentes"}},a={},o=[{value:"Lista de materiais (BOM)",id:"lista-de-materiais-bom",level:2}];function c(e){const t={a:"a",admonition:"admonition",h2:"h2",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Aqui voc\xea encontra a lista de materiais para montagem da Franzininho DIY."}),"\n",(0,n.jsx)(t.p,{children:"Confira a refer\xeancia e descri\xe7\xe3o de cada componente."}),"\n",(0,n.jsx)(t.h2,{id:"lista-de-materiais-bom",children:"Lista de materiais (BOM)"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{style:{textAlign:"left"},children:"Refer\xeancia"}),(0,n.jsx)(t.th,{style:{textAlign:"left"},children:"Descri\xe7\xe3o"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"C1"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Capacitor Cer\xe2mico 100 nF x 50 V"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"C2"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Capacitor eletrol\xedtico 10 uF x 35 V"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"D1"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Diodo Zener 3,6 V 0,5W"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"D2"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Diodo Zener 3,6 V 0,5W"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"D3"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Diodo 1N4148"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"IC1"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Microcontrolador ATTINY85 - 20PU"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"IC2"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"78L05 - Regulador de tens\xe3o"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"SQ1"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Soquete Para CI - 8 pinos"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"JP3"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Barra de pinos estampada 15 mm 180\xb0 - 8 vias"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"J1"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Barra de pinos estampada 15 mm 180\xb0 - 3 vias"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"LED"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Led 3mm Amarelo Difuso"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"ON"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Led 3mm Verde Difuso"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"R1"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Resistor 68 R - 5% 1/4 W"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"R2"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Resistor 68 R - 5% 1/4 W"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"R3"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Resistor 1K5 - 5% 1/4 W"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"R4"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Resistor 1K - 5% 1/4 W"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"R5"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Resistor 1K - 5% 1/4 W"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"RESET"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Chave T\xe1ctil 6x6x5 mm"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"USB"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Conector USB Macho 90\xba com trava"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"PCB"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:(0,n.jsx)(t.a,{href:"https://github.com/Franzininho/franzininho-diy-board",children:"Placa de circuito impresso Franzininho V2"})})]})]})]}),"\n",(0,n.jsx)(t.admonition,{title:"Ajuda",type:"note",children:(0,n.jsxs)(t.p,{children:["Se tiver alguma d\xfavida sobre os componentes, consulte a comunidade Franzininho no ",(0,n.jsx)(t.a,{href:"https://discord.gg/H5kENmWGaz",children:"Discord"})]})})]})}function x(e={}){const{wrapper:t}={...(0,r.MN)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},95788:(e,t,i)=>{i.d(t,{MN:()=>o});var n=i(11504);function r(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function l(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function s(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?l(Object(i),!0).forEach((function(t){r(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):l(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function d(e,t){if(null==e)return{};var i,n,r=function(e,t){if(null==e)return{};var i,n,r={},l=Object.keys(e);for(n=0;n<l.length;n++)i=l[n],t.indexOf(i)>=0||(r[i]=e[i]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)i=l[n],t.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var a=n.createContext({}),o=function(e){var t=n.useContext(a),i=t;return e&&(i="function"==typeof e?e(t):s(s({},t),e)),i},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},x=n.forwardRef((function(e,t){var i=e.components,r=e.mdxType,l=e.originalType,a=e.parentName,x=d(e,["components","mdxType","originalType","parentName"]),h=o(i),f=r,j=h["".concat(a,".").concat(f)]||h[f]||c[f]||l;return i?n.createElement(j,s(s({ref:t},x),{},{components:i})):n.createElement(j,s({ref:t},x))}));x.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/e6a1d5e9.03a686d7.js b/assets/js/e6a1d5e9.03a686d7.js new file mode 100755 index 000000000..bfe4fa4ca --- /dev/null +++ b/assets/js/e6a1d5e9.03a686d7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5758],{1996:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>s,contentTitle:()=>t,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var n=o(17624),a=o(95788);const i={id:"upload-conversor-serial",title:"Upload via conversor USB/SERIAL",slug:"/Franzino/upload-conversor-serial",description:"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos"},t=void 0,c={id:"Franzino/upload-conversor-serial",title:"Upload via conversor USB/SERIAL",description:"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos",source:"@site/docs/Franzino/upload-conversor-serial.md",sourceDirName:"Franzino",slug:"/Franzino/upload-conversor-serial",permalink:"/docs/Franzino/upload-conversor-serial",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Franzino/upload-conversor-serial.md",tags:[],version:"current",frontMatter:{id:"upload-conversor-serial",title:"Upload via conversor USB/SERIAL",slug:"/Franzino/upload-conversor-serial",description:"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos"},sidebar:"docs",previous:{title:"Placa Franzino",permalink:"/docs/Franzino/franzino"},next:{title:"Gravando a Franzino com um placa Arduino UNO",permalink:"/docs/Franzino/upload-com-arduino-uno"}},s={},l=[];function d(e){const r={img:"img",p:"p",...(0,a.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.p,{children:"Para fazer upload de c\xf3digos para a Franzino, primeiro \xe9 necess\xe1rio ligar o conversor USB/Serial a placa, como exibido na figura abaixo:"}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{alt:"liga\xe7\xe3o Conversor USB/Seril",src:o(40624).c+"",width:"1133",height:"528"})}),"\n",(0,n.jsx)(r.p,{children:"Selecione na IDE do Arduino a Placa Arduino UNO. Tamb\xe9m selecione a porta seria que foi criada ao ser inserido o conversor USB/SERIAL no computador:"}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{alt:"configura\xe7\xe3o da IDE Arduino",src:o(15800).c+"",width:"485",height:"309"})}),"\n",(0,n.jsx)(r.p,{children:"Pronto, agora \xe9 s\xf3 fazer o upload dos seus c\xf3digos para a placa Franzino"})]})}function p(e={}){const{wrapper:r}={...(0,a.MN)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},95788:(e,r,o)=>{o.d(r,{MN:()=>l});var n=o(11504);function a(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}function i(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,n)}return o}function t(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?i(Object(o),!0).forEach((function(r){a(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}function c(e,r){if(null==e)return{};var o,n,a=function(e,r){if(null==e)return{};var o,n,a={},i=Object.keys(e);for(n=0;n<i.length;n++)o=i[n],r.indexOf(o)>=0||(a[o]=e[o]);return a}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)o=i[n],r.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var s=n.createContext({}),l=function(e){var r=n.useContext(s),o=r;return e&&(o="function"==typeof e?e(r):t(t({},r),e)),o},d={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},p=n.forwardRef((function(e,r){var o=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(o),f=a,g=u["".concat(s,".").concat(f)]||u[f]||d[f]||i;return o?n.createElement(g,t(t({ref:r},p),{},{components:o})):n.createElement(g,t({ref:r},p))}));p.displayName="MDXCreateElement"},15800:(e,r,o)=>{o.d(r,{c:()=>n});const n=o.p+"assets/images/congfigura-ide-7682d8d241bef3238696600a41a74a2e.png"},40624:(e,r,o)=>{o.d(r,{c:()=>n});const n=o.p+"assets/images/ligacao_conversor-29c3b68ee0e2d48f071f37ed5149e5ef.jpg"}}]); \ No newline at end of file diff --git a/assets/js/e6a1d5e9.8e2ba760.js b/assets/js/e6a1d5e9.8e2ba760.js deleted file mode 100755 index a58453df0..000000000 --- a/assets/js/e6a1d5e9.8e2ba760.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3290],{3905:(e,r,o)=>{o.d(r,{Zo:()=>p,kt:()=>m});var n=o(7294);function a(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}function t(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?t(Object(o),!0).forEach((function(r){a(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):t(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}function c(e,r){if(null==e)return{};var o,n,a=function(e,r){if(null==e)return{};var o,n,a={},t=Object.keys(e);for(n=0;n<t.length;n++)o=t[n],r.indexOf(o)>=0||(a[o]=e[o]);return a}(e,r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n<t.length;n++)o=t[n],r.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var l=n.createContext({}),s=function(e){var r=n.useContext(l),o=r;return e&&(o="function"==typeof e?e(r):i(i({},r),e)),o},p=function(e){var r=s(e.components);return n.createElement(l.Provider,{value:r},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},f=n.forwardRef((function(e,r){var o=e.components,a=e.mdxType,t=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),d=s(o),f=a,m=d["".concat(l,".").concat(f)]||d[f]||u[f]||t;return o?n.createElement(m,i(i({ref:r},p),{},{components:o})):n.createElement(m,i({ref:r},p))}));function m(e,r){var o=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var t=o.length,i=new Array(t);i[0]=f;var c={};for(var l in r)hasOwnProperty.call(r,l)&&(c[l]=r[l]);c.originalType=e,c[d]="string"==typeof e?e:a,i[1]=c;for(var s=2;s<t;s++)i[s]=o[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,o)}f.displayName="MDXCreateElement"},203:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>t,metadata:()=>c,toc:()=>s});var n=o(3117),a=(o(7294),o(3905));const t={id:"upload-conversor-serial",title:"Upload via conversor USB/SERIAL",slug:"/Franzino/upload-conversor-serial",description:"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos"},i=void 0,c={unversionedId:"Franzino/upload-conversor-serial",id:"Franzino/upload-conversor-serial",title:"Upload via conversor USB/SERIAL",description:"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos",source:"@site/docs/Franzino/upload-conversor-serial.md",sourceDirName:"Franzino",slug:"/Franzino/upload-conversor-serial",permalink:"/docs/Franzino/upload-conversor-serial",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Franzino/upload-conversor-serial.md",tags:[],version:"current",frontMatter:{id:"upload-conversor-serial",title:"Upload via conversor USB/SERIAL",slug:"/Franzino/upload-conversor-serial",description:"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos"},sidebar:"docs",previous:{title:"Placa Franzino",permalink:"/docs/Franzino/franzino"},next:{title:"Gravando a Franzino com um placa Arduino UNO",permalink:"/docs/Franzino/upload-com-arduino-uno"}},l={},s=[],p={toc:s},d="wrapper";function u(e){let{components:r,...t}=e;return(0,a.kt)(d,(0,n.Z)({},p,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Para fazer upload de c\xf3digos para a Franzino, primeiro \xe9 necess\xe1rio ligar o conversor USB/Serial a placa, como exibido na figura abaixo:"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"liga\xe7\xe3o Conversor USB/Seril",src:o(3798).Z,width:"1133",height:"528"})),(0,a.kt)("p",null,"Selecione na IDE do Arduino a Placa Arduino UNO. Tamb\xe9m selecione a porta seria que foi criada ao ser inserido o conversor USB/SERIAL no computador:"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"configura\xe7\xe3o da IDE Arduino",src:o(2238).Z,width:"485",height:"309"})),(0,a.kt)("p",null,"Pronto, agora \xe9 s\xf3 fazer o upload dos seus c\xf3digos para a placa Franzino"))}u.isMDXComponent=!0},2238:(e,r,o)=>{o.d(r,{Z:()=>n});const n=o.p+"assets/images/congfigura-ide-7682d8d241bef3238696600a41a74a2e.png"},3798:(e,r,o)=>{o.d(r,{Z:()=>n});const n=o.p+"assets/images/ligacao_conversor-29c3b68ee0e2d48f071f37ed5149e5ef.jpg"}}]); \ No newline at end of file diff --git a/assets/js/ec054302.384dcf53.js b/assets/js/ec054302.384dcf53.js deleted file mode 100755 index a983e16f3..000000000 --- a/assets/js/ec054302.384dcf53.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8911],{3905:(e,o,a)=>{a.d(o,{Zo:()=>u,kt:()=>h});var t=a(7294);function r(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function i(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,t)}return a}function n(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?i(Object(a),!0).forEach((function(o){r(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function s(e,o){if(null==e)return{};var a,t,r=function(e,o){if(null==e)return{};var a,t,r={},i=Object.keys(e);for(t=0;t<i.length;t++)a=i[t],o.indexOf(a)>=0||(r[a]=e[a]);return r}(e,o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t<i.length;t++)a=i[t],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=t.createContext({}),c=function(e){var o=t.useContext(p),a=o;return e&&(a="function"==typeof e?e(o):n(n({},o),e)),a},u=function(e){var o=c(e.components);return t.createElement(p.Provider,{value:o},e.children)},l="mdxType",m={inlineCode:"code",wrapper:function(e){var o=e.children;return t.createElement(t.Fragment,{},o)}},d=t.forwardRef((function(e,o){var a=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),l=c(a),d=r,h=l["".concat(p,".").concat(d)]||l[d]||m[d]||i;return a?t.createElement(h,n(n({ref:o},u),{},{components:a})):t.createElement(h,n({ref:o},u))}));function h(e,o){var a=arguments,r=o&&o.mdxType;if("string"==typeof e||r){var i=a.length,n=new Array(i);n[0]=d;var s={};for(var p in o)hasOwnProperty.call(o,p)&&(s[p]=o[p]);s.originalType=e,s[l]="string"==typeof e?e:r,n[1]=s;for(var c=2;c<i;c++)n[c]=a[c];return t.createElement.apply(null,n)}return t.createElement.apply(null,a)}d.displayName="MDXCreateElement"},4807:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>p,contentTitle:()=>n,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var t=a(3117),r=(a(7294),a(3905));const i={id:"circuitpython-touch-capacitivo",title:"Pinos de Toque Capacitivo",slug:"/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",description:"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.",author:"Mateus Adriano Ventura Vieira"},n=void 0,s={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo",title:"Pinos de Toque Capacitivo",description:"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/touch-capacitivo.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/touch-capacitivo.md",tags:[],version:"current",frontMatter:{id:"circuitpython-touch-capacitivo",title:"Pinos de Toque Capacitivo",slug:"/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",description:"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.",author:"Mateus Adriano Ventura Vieira"},sidebar:"docs",previous:{title:"PWM - Pulse Width Modulation",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/pwm"},next:{title:"Display OLED I2C",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c"}},p={},c=[{value:"<strong>Materiais necess\xe1rios</strong>",id:"materiais-necess\xe1rios",level:2},{value:"<strong>Circuito</strong>",id:"circuito",level:2},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo",level:2},{value:"<strong>An\xe1lise do C\xf3digo</strong>",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"<strong>Como ajustar a sensibilidade do touch?</strong>",id:"como-ajustar-a-sensibilidade-do-touch",level:2},{value:"<strong>Conclus\xe3o</strong>",id:"conclus\xe3o",level:2}],u={toc:c},l="wrapper";function m(e){let{components:o,...i}=e;return(0,r.kt)(l,(0,t.Z)({},u,i,{components:o,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"A capacit\xe2ncia pode ser definida, basicamente, como a capacidade de um corpo de armazenar energia el\xe9trica. Dessa maneira, os pinos de toque capacitivo detectam a mudan\xe7a na capacit\xe2ncia de um elemento. Esses pinos, podem ser utilizados por toque, e at\xe9 mesmo, pela aproxima\xe7\xe3o de um dedo."),(0,r.kt)("p",null,"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso."),(0,r.kt)("h2",{id:"materiais-necess\xe1rios"},(0,r.kt)("strong",{parentName:"h2"},"Materiais necess\xe1rios")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"1 Placa Franzininho WiFi com CircuitPython;"),(0,r.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,r.kt)("li",{parentName:"ul"},"1 LED;"),(0,r.kt)("li",{parentName:"ul"},"1 resistor de 220 \u03a9 ou 330 \u03a9;"),(0,r.kt)("li",{parentName:"ul"},"Jumpers.")),(0,r.kt)("h2",{id:"circuito"},(0,r.kt)("strong",{parentName:"h2"},"Circuito")),(0,r.kt)("p",null,"Realize a seguinte montagem para este projeto. No lugar do \u201csensor\u201d de toque capacitivo, pode ser utilizado um jumper, um peda\xe7o de fio ou qualquer outro material."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Circuito",src:a(8941).Z,width:"939",height:"693"})),(0,r.kt)("h2",{id:"c\xf3digo"},(0,r.kt)("strong",{parentName:"h2"},"C\xf3digo")),(0,r.kt)("p",null,"Implemente o c\xf3digo abaixo e teste seu circuito."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"#Toque Capacitivo\n\nimport board \nimport touchio\nfrom digitalio import DigitalInOut, Direction\nfrom time import sleep \n\nestado = 0\n\npin = board.IO1\ntouch = touchio.TouchIn(pin)\n\nled = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n\nwhile True:\n if touch.value:\n estado = not estado\n \n led.value = estado\n sleep(1)\n")),(0,r.kt)("p",null,"Ap\xf3s finalizar a edi\xe7\xe3o do c\xf3digo, salve-o. Execute o programa. Ao aproximar, ou, encostar o dedo no \u201csensor\u201d escolhido por voc\xea, ele deve funcionar como um interruptor, ligando e desligando o LED."),(0,r.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},(0,r.kt)("strong",{parentName:"h2"},"An\xe1lise do C\xf3digo")),(0,r.kt)("p",null,"Para acessarmos os pinos da placa devemos importar o m\xf3dulo ",(0,r.kt)("strong",{parentName:"p"},"board"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,r.kt)("p",null,"Al\xe9m disso, para o uso dos pinos de toque capacitivo, usaremos a biblioteca ",(0,r.kt)("strong",{parentName:"p"},"touchio"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import touchio\n")),(0,r.kt)("p",null,"E, para configurarmos o LED como uma sa\xedda digital, temos que importar as fun\xe7\xf5es ",(0,r.kt)("strong",{parentName:"p"},"DigitalInOut")," e ",(0,r.kt)("strong",{parentName:"p"},"Direction")," do m\xf3dulo ",(0,r.kt)("strong",{parentName:"p"},"digitalio:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"from digitalio import DigitalInOut, Direction\n")),(0,r.kt)("p",null,"Por \xfaltimo, vamos chamar a fun\xe7\xe3o ",(0,r.kt)("strong",{parentName:"p"},"sleep")," do m\xf3dulo ",(0,r.kt)("strong",{parentName:"p"},"time"),", que usaremos para intervalos de temporiza\xe7\xe3o:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"from time import sleep\n")),(0,r.kt)("p",null,"Ap\xf3s importarmos as bibliotecas necess\xe1rias, criaremos uma vari\xe1vel ",(0,r.kt)("strong",{parentName:"p"},"estado"),", que vai armazenar o estado do LED:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"estado = 0\n")),(0,r.kt)("p",null,"Agora, vamos configurar o GPIO1, como um pino ",(0,r.kt)("strong",{parentName:"p"},"touch"),". Primeiro, iremos atribuir esse pino a uma vari\xe1vel, no caso, a vari\xe1vel ",(0,r.kt)("strong",{parentName:"p"},"pin"),". Ap\xf3s isso, iremos criar o objeto ",(0,r.kt)("strong",{parentName:"p"},"touch")," e atribuir o pin a esse objeto:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"pin = board.IO1\ntouch = touchio.TouchIn(pin)\n")),(0,r.kt)("p",null,"Ademais, iremos atribuir o GPIO4 a var\xe1vel ",(0,r.kt)("strong",{parentName:"p"},"led")," e, configur\xe1-lo como uma sa\xedda digital:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"led = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n")),(0,r.kt)("p",null,"Na sequ\xeancia, criaremos um la\xe7o infinito (",(0,r.kt)("strong",{parentName:"p"},"while True"),"). Dentro do loop, verificamos se houve mudan\xe7a na capacit\xe2ncia do \u201csensor\u201d. Caso aconte\xe7a a mudan\xe7a, o estado do led tamb\xe9m mudar\xe1:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"while True:\n if touch.value:\n estado = not estado\n \n led.value = estado\n sleep(1)\n")),(0,r.kt)("h2",{id:"como-ajustar-a-sensibilidade-do-touch"},(0,r.kt)("strong",{parentName:"h2"},"Como ajustar a sensibilidade do touch?")),(0,r.kt)("p",null,"Nesse exemplo, estamos acionando o led apenas por aproximar o dedo. Por\xe9m, pode ser que voc\xea deseje ajustar o seu \u201csensor\u201d para acionar por toque. Para isso, vamos utilizar o comando ",(0,r.kt)("strong",{parentName:"p"},"threshold"),"."),(0,r.kt)("p",null,"Primeiro, vamos verificar a medi\xe7\xe3o do toque bruto. Para isso, utilizaremos a fun\xe7\xe3o ",(0,r.kt)("strong",{parentName:"p"},"raw_value"),". Depois, ajustaremos a sensibilidade, para que ele seja acionado apenas por toque:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"pin = board.IO1\ntouch = touchio.TouchIn(pin)\nprint(touch.raw_value)\ntouch.threshold = 17300\n")),(0,r.kt)("p",null,"Ap\xf3s adicionarmos a fun\xe7\xe3o ",(0,r.kt)("strong",{parentName:"p"},"threshold"),", o led s\xf3 \xe9 acionado se tocarmos o \u201csensor\u201d. Isso acontece, pois, o configuramos com uma sensibilidade menor, ou seja, um valor m\xednimo de capacit\xe2ncia maior, para que a mudan\xe7a seja percebida pela placa."),(0,r.kt)("h2",{id:"conclus\xe3o"},(0,r.kt)("strong",{parentName:"h2"},"Conclus\xe3o")),(0,r.kt)("p",null,"Aprendemos, atrav\xe9s de um exemplo pr\xe1tico, a como usar um pino toque capacitivo, que, em muitas situa\xe7\xf5es pode ser usado para substituir bot\xf5es e interruptores, por exemplo, apresentando-se como uma solu\xe7\xe3o mais simples, pois seu funcionamento n\xe3o \xe9 mec\xe2nico. Al\xe9m disso, pudemos ver como ajustar a sensibilidade desse sensor as nossas necessidades."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Autor"),(0,r.kt)("th",{parentName:"tr",align:null},"Mateus Adriano Ventura Vieira"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data:"),(0,r.kt)("td",{parentName:"tr",align:null},"06/05/2022")))))}m.isMDXComponent=!0},8941:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/circuito-toque-capacitivo-baa986e339db82a3e64763d11f03a158.webp"}}]); \ No newline at end of file diff --git a/assets/js/ec054302.918d9d0f.js b/assets/js/ec054302.918d9d0f.js new file mode 100755 index 000000000..d62f4de62 --- /dev/null +++ b/assets/js/ec054302.918d9d0f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1880],{66376:(e,o,i)=>{i.r(o),i.d(o,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>a,metadata:()=>t,toc:()=>d});var n=i(17624),r=i(95788);const a={id:"circuitpython-touch-capacitivo",title:"Pinos de Toque Capacitivo",slug:"/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",description:"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.",author:"Mateus Adriano Ventura Vieira"},s=void 0,t={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo",title:"Pinos de Toque Capacitivo",description:"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/touch-capacitivo.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/touch-capacitivo.md",tags:[],version:"current",frontMatter:{id:"circuitpython-touch-capacitivo",title:"Pinos de Toque Capacitivo",slug:"/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",description:"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.",author:"Mateus Adriano Ventura Vieira"},sidebar:"docs",previous:{title:"PWM - Pulse Width Modulation",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/pwm"},next:{title:"Display OLED I2C",permalink:"/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c"}},c={},d=[{value:"<strong>Materiais necess\xe1rios</strong>",id:"materiais-necess\xe1rios",level:2},{value:"<strong>Circuito</strong>",id:"circuito",level:2},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo",level:2},{value:"<strong>An\xe1lise do C\xf3digo</strong>",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"<strong>Como ajustar a sensibilidade do touch?</strong>",id:"como-ajustar-a-sensibilidade-do-touch",level:2},{value:"<strong>Conclus\xe3o</strong>",id:"conclus\xe3o",level:2}];function l(e){const o={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.p,{children:"A capacit\xe2ncia pode ser definida, basicamente, como a capacidade de um corpo de armazenar energia el\xe9trica. Dessa maneira, os pinos de toque capacitivo detectam a mudan\xe7a na capacit\xe2ncia de um elemento. Esses pinos, podem ser utilizados por toque, e at\xe9 mesmo, pela aproxima\xe7\xe3o de um dedo."}),"\n",(0,n.jsx)(o.p,{children:"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso."}),"\n",(0,n.jsx)(o.h2,{id:"materiais-necess\xe1rios",children:(0,n.jsx)(o.strong,{children:"Materiais necess\xe1rios"})}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:"1 Placa Franzininho WiFi com CircuitPython;"}),"\n",(0,n.jsx)(o.li,{children:"1 Protoboard;"}),"\n",(0,n.jsx)(o.li,{children:"1 LED;"}),"\n",(0,n.jsx)(o.li,{children:"1 resistor de 220 \u03a9 ou 330 \u03a9;"}),"\n",(0,n.jsx)(o.li,{children:"Jumpers."}),"\n"]}),"\n",(0,n.jsx)(o.h2,{id:"circuito",children:(0,n.jsx)(o.strong,{children:"Circuito"})}),"\n",(0,n.jsx)(o.p,{children:"Realize a seguinte montagem para este projeto. No lugar do \u201csensor\u201d de toque capacitivo, pode ser utilizado um jumper, um peda\xe7o de fio ou qualquer outro material."}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"Circuito",src:i(16872).c+"",width:"939",height:"693"})}),"\n",(0,n.jsx)(o.h2,{id:"c\xf3digo",children:(0,n.jsx)(o.strong,{children:"C\xf3digo"})}),"\n",(0,n.jsx)(o.p,{children:"Implemente o c\xf3digo abaixo e teste seu circuito."}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"#Toque Capacitivo\n\nimport board \nimport touchio\nfrom digitalio import DigitalInOut, Direction\nfrom time import sleep \n\nestado = 0\n\npin = board.IO1\ntouch = touchio.TouchIn(pin)\n\nled = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n\nwhile True:\n if touch.value:\n estado = not estado\n \n led.value = estado\n sleep(1)\n"})}),"\n",(0,n.jsx)(o.p,{children:"Ap\xf3s finalizar a edi\xe7\xe3o do c\xf3digo, salve-o. Execute o programa. Ao aproximar, ou, encostar o dedo no \u201csensor\u201d escolhido por voc\xea, ele deve funcionar como um interruptor, ligando e desligando o LED."}),"\n",(0,n.jsx)(o.h2,{id:"an\xe1lise-do-c\xf3digo",children:(0,n.jsx)(o.strong,{children:"An\xe1lise do C\xf3digo"})}),"\n",(0,n.jsxs)(o.p,{children:["Para acessarmos os pinos da placa devemos importar o m\xf3dulo ",(0,n.jsx)(o.strong,{children:"board"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import board\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Al\xe9m disso, para o uso dos pinos de toque capacitivo, usaremos a biblioteca ",(0,n.jsx)(o.strong,{children:"touchio"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import touchio\n"})}),"\n",(0,n.jsxs)(o.p,{children:["E, para configurarmos o LED como uma sa\xedda digital, temos que importar as fun\xe7\xf5es ",(0,n.jsx)(o.strong,{children:"DigitalInOut"})," e ",(0,n.jsx)(o.strong,{children:"Direction"})," do m\xf3dulo ",(0,n.jsx)(o.strong,{children:"digitalio:"})]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"from digitalio import DigitalInOut, Direction\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Por \xfaltimo, vamos chamar a fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"sleep"})," do m\xf3dulo ",(0,n.jsx)(o.strong,{children:"time"}),", que usaremos para intervalos de temporiza\xe7\xe3o:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"from time import sleep\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Ap\xf3s importarmos as bibliotecas necess\xe1rias, criaremos uma vari\xe1vel ",(0,n.jsx)(o.strong,{children:"estado"}),", que vai armazenar o estado do LED:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"estado = 0\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Agora, vamos configurar o GPIO1, como um pino ",(0,n.jsx)(o.strong,{children:"touch"}),". Primeiro, iremos atribuir esse pino a uma vari\xe1vel, no caso, a vari\xe1vel ",(0,n.jsx)(o.strong,{children:"pin"}),". Ap\xf3s isso, iremos criar o objeto ",(0,n.jsx)(o.strong,{children:"touch"})," e atribuir o pin a esse objeto:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"pin = board.IO1\ntouch = touchio.TouchIn(pin)\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Ademais, iremos atribuir o GPIO4 a var\xe1vel ",(0,n.jsx)(o.strong,{children:"led"})," e, configur\xe1-lo como uma sa\xedda digital:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"led = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Na sequ\xeancia, criaremos um la\xe7o infinito (",(0,n.jsx)(o.strong,{children:"while True"}),"). Dentro do loop, verificamos se houve mudan\xe7a na capacit\xe2ncia do \u201csensor\u201d. Caso aconte\xe7a a mudan\xe7a, o estado do led tamb\xe9m mudar\xe1:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"while True:\n if touch.value:\n estado = not estado\n \n led.value = estado\n sleep(1)\n"})}),"\n",(0,n.jsx)(o.h2,{id:"como-ajustar-a-sensibilidade-do-touch",children:(0,n.jsx)(o.strong,{children:"Como ajustar a sensibilidade do touch?"})}),"\n",(0,n.jsxs)(o.p,{children:["Nesse exemplo, estamos acionando o led apenas por aproximar o dedo. Por\xe9m, pode ser que voc\xea deseje ajustar o seu \u201csensor\u201d para acionar por toque. Para isso, vamos utilizar o comando ",(0,n.jsx)(o.strong,{children:"threshold"}),"."]}),"\n",(0,n.jsxs)(o.p,{children:["Primeiro, vamos verificar a medi\xe7\xe3o do toque bruto. Para isso, utilizaremos a fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"raw_value"}),". Depois, ajustaremos a sensibilidade, para que ele seja acionado apenas por toque:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"pin = board.IO1\ntouch = touchio.TouchIn(pin)\nprint(touch.raw_value)\ntouch.threshold = 17300\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Ap\xf3s adicionarmos a fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"threshold"}),", o led s\xf3 \xe9 acionado se tocarmos o \u201csensor\u201d. Isso acontece, pois, o configuramos com uma sensibilidade menor, ou seja, um valor m\xednimo de capacit\xe2ncia maior, para que a mudan\xe7a seja percebida pela placa."]}),"\n",(0,n.jsx)(o.h2,{id:"conclus\xe3o",children:(0,n.jsx)(o.strong,{children:"Conclus\xe3o"})}),"\n",(0,n.jsx)(o.p,{children:"Aprendemos, atrav\xe9s de um exemplo pr\xe1tico, a como usar um pino toque capacitivo, que, em muitas situa\xe7\xf5es pode ser usado para substituir bot\xf5es e interruptores, por exemplo, apresentando-se como uma solu\xe7\xe3o mais simples, pois seu funcionamento n\xe3o \xe9 mec\xe2nico. Al\xe9m disso, pudemos ver como ajustar a sensibilidade desse sensor as nossas necessidades."}),"\n",(0,n.jsxs)(o.table,{children:[(0,n.jsx)(o.thead,{children:(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.th,{children:"Autor"}),(0,n.jsx)(o.th,{children:"Mateus Adriano Ventura Vieira"})]})}),(0,n.jsx)(o.tbody,{children:(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.td,{children:"Data:"}),(0,n.jsx)(o.td,{children:"06/05/2022"})]})})]})]})}function u(e={}){const{wrapper:o}={...(0,r.MN)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},95788:(e,o,i)=>{i.d(o,{MN:()=>d});var n=i(11504);function r(e,o,i){return o in e?Object.defineProperty(e,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[o]=i,e}function a(e,o){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),i.push.apply(i,n)}return i}function s(e){for(var o=1;o<arguments.length;o++){var i=null!=arguments[o]?arguments[o]:{};o%2?a(Object(i),!0).forEach((function(o){r(e,o,i[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):a(Object(i)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(i,o))}))}return e}function t(e,o){if(null==e)return{};var i,n,r=function(e,o){if(null==e)return{};var i,n,r={},a=Object.keys(e);for(n=0;n<a.length;n++)i=a[n],o.indexOf(i)>=0||(r[i]=e[i]);return r}(e,o);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)i=a[n],o.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var c=n.createContext({}),d=function(e){var o=n.useContext(c),i=o;return e&&(i="function"==typeof e?e(o):s(s({},o),e)),i},l={inlineCode:"code",wrapper:function(e){var o=e.children;return n.createElement(n.Fragment,{},o)}},u=n.forwardRef((function(e,o){var i=e.components,r=e.mdxType,a=e.originalType,c=e.parentName,u=t(e,["components","mdxType","originalType","parentName"]),p=d(i),m=r,h=p["".concat(c,".").concat(m)]||p[m]||l[m]||a;return i?n.createElement(h,s(s({ref:o},u),{},{components:i})):n.createElement(h,s({ref:o},u))}));u.displayName="MDXCreateElement"},16872:(e,o,i)=>{i.d(o,{c:()=>n});const n=i.p+"assets/images/circuito-toque-capacitivo-baa986e339db82a3e64763d11f03a158.webp"}}]); \ No newline at end of file diff --git a/assets/js/f3019b90.042b83dd.js b/assets/js/f3019b90.042b83dd.js new file mode 100755 index 000000000..cba138c11 --- /dev/null +++ b/assets/js/f3019b90.042b83dd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[952],{71484:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var o=i(17624),r=i(95788);const a={id:"brilho-led",title:"Controle brilho de LED",slug:"/franzininho-diy/brilho-led",description:"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY."},t="Materiais",l={id:"FranzininhoDIY/exemplos-arduino/brilho-led",title:"Controle brilho de LED",description:"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/brilho-led.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/brilho-led",permalink:"/docs/franzininho-diy/brilho-led",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/brilho-led.md",tags:[],version:"current",frontMatter:{id:"brilho-led",title:"Controle brilho de LED",slug:"/franzininho-diy/brilho-led",description:"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY."},sidebar:"docs",previous:{title:"Pisca LED",permalink:"/docs/franzininho-diy/pisca-led"},next:{title:"Leitura de Tecla",permalink:"/docs/franzininho-diy/leitura-tecla"}},d={},c=[{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function s(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"Esse exemplo exibe como controlar a intensidade de um LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY."}),"\n",(0,o.jsx)(n.h1,{id:"materiais",children:"Materiais"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Placa Franzininho;"}),"\n",(0,o.jsx)(n.li,{children:"Protoboard;"}),"\n",(0,o.jsx)(n.li,{children:"LED 3mm;"}),"\n",(0,o.jsx)(n.li,{children:"Resistor 330;"}),"\n",(0,o.jsx)(n.li,{children:"Jumpers macho/f\xeamea;"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,o.jsx)(n.p,{children:"Na protoboard voc\xea pode montar o circuito para acionamento do LED da seguinte forma:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Circuito",src:i(98104).c+"",width:"1833",height:"756"})}),"\n",(0,o.jsx)(n.h2,{id:"sketch",children:"Sketch"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-cpp",children:"/*\n Franzininho\n Exemplo: Controle Brilho de LED - PWM\n Esse exemplo exibe como controlar a intensidade de brilho de um LED usando PWM\n*/\n\nconst int LED = 1; //pino para o LED\nint i = 0; //utilizaremos essa vari\xe1vel para contagem auxiliar\n\nvoid setup() {\n pinMode(LED,OUTPUT); //configura o pino do LED como uma sa\xedda\n}\n\nvoid loop() {\n //faz um loop de 0 a 255 (acende gradualmente)\n for (i = 0; i<255; i++) {\n analogWrite (LED, i); // define o brilho do LED\n delay (10); //espere 10ms, pois analogwrite \xe9 um instant\xe2neo e n\xe3o ver\xedamos nenhuma altera\xe7\xe3o\n }\n\n delay(1000);\n\n //faz um loop de 255 a 1 (apaga gradualmente)\n for (i = 255; i > 0; i--) { \n analogWrite(LED, i); //define o brilho do LED\n delay(10); //aguarda 10ms\n }\n\n delay(1000);\n}\n"})}),"\n",(0,o.jsx)(n.admonition,{title:"Saidas PWM",type:"tip",children:(0,o.jsx)(n.p,{children:"Verifique no pinout da Franzininho DIY quais os pinos possuem fun\xe7\xe3o de sa\xedda PWM"})}),"\n",(0,o.jsx)(n.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311359730520949312?view=diagram"}),"\n",(0,o.jsx)(n.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/0W5Dos0NHsE",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function u(e={}){const{wrapper:n}={...(0,r.MN)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(s,{...e})}):s(e)}},95788:(e,n,i)=>{i.d(n,{MN:()=>c});var o=i(11504);function r(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function a(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,o)}return i}function t(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?a(Object(i),!0).forEach((function(n){r(e,n,i[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):a(Object(i)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(i,n))}))}return e}function l(e,n){if(null==e)return{};var i,o,r=function(e,n){if(null==e)return{};var i,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)i=a[o],n.indexOf(i)>=0||(r[i]=e[i]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)i=a[o],n.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var d=o.createContext({}),c=function(e){var n=o.useContext(d),i=n;return e&&(i="function"==typeof e?e(n):t(t({},n),e)),i},s={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var i=e.components,r=e.mdxType,a=e.originalType,d=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(i),m=r,h=p["".concat(d,".").concat(m)]||p[m]||s[m]||a;return i?o.createElement(h,t(t({ref:n},u),{},{components:i})):o.createElement(h,t({ref:n},u))}));u.displayName="MDXCreateElement"},98104:(e,n,i)=>{i.d(n,{c:()=>o});const o=i.p+"assets/images/brilho-led-circuito-cafaefb0f69ebc87e542c140ed6f0f67.png"}}]); \ No newline at end of file diff --git a/assets/js/f3019b90.a0e247d4.js b/assets/js/f3019b90.a0e247d4.js deleted file mode 100755 index 6fb8b905d..000000000 --- a/assets/js/f3019b90.a0e247d4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[467],{3905:(e,n,o)=>{o.d(n,{Zo:()=>u,kt:()=>f});var i=o(7294);function r(e,n,o){return n in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o,e}function t(e,n){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),o.push.apply(o,i)}return o}function a(e){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?t(Object(o),!0).forEach((function(n){r(e,n,o[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):t(Object(o)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(o,n))}))}return e}function l(e,n){if(null==e)return{};var o,i,r=function(e,n){if(null==e)return{};var o,i,r={},t=Object.keys(e);for(i=0;i<t.length;i++)o=t[i],n.indexOf(o)>=0||(r[o]=e[o]);return r}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(i=0;i<t.length;i++)o=t[i],n.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var d=i.createContext({}),c=function(e){var n=i.useContext(d),o=n;return e&&(o="function"==typeof e?e(n):a(a({},n),e)),o},u=function(e){var n=c(e.components);return i.createElement(d.Provider,{value:n},e.children)},s="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},m=i.forwardRef((function(e,n){var o=e.components,r=e.mdxType,t=e.originalType,d=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),s=c(o),m=r,f=s["".concat(d,".").concat(m)]||s[m]||p[m]||t;return o?i.createElement(f,a(a({ref:n},u),{},{components:o})):i.createElement(f,a({ref:n},u))}));function f(e,n){var o=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var t=o.length,a=new Array(t);a[0]=m;var l={};for(var d in n)hasOwnProperty.call(n,d)&&(l[d]=n[d]);l.originalType=e,l[s]="string"==typeof e?e:r,a[1]=l;for(var c=2;c<t;c++)a[c]=o[c];return i.createElement.apply(null,a)}return i.createElement.apply(null,o)}m.displayName="MDXCreateElement"},7987:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var i=o(3117),r=(o(7294),o(3905));const t={id:"brilho-led",title:"Controle brilho de LED",slug:"/franzininho-diy/brilho-led",description:"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY."},a=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/brilho-led",id:"FranzininhoDIY/exemplos-arduino/brilho-led",title:"Controle brilho de LED",description:"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/brilho-led.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/brilho-led",permalink:"/docs/franzininho-diy/brilho-led",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/brilho-led.md",tags:[],version:"current",frontMatter:{id:"brilho-led",title:"Controle brilho de LED",slug:"/franzininho-diy/brilho-led",description:"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY."},sidebar:"docs",previous:{title:"Pisca LED",permalink:"/docs/franzininho-diy/pisca-led"},next:{title:"Leitura de Tecla",permalink:"/docs/franzininho-diy/leitura-tecla"}},d={},c=[{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],u={toc:c},s="wrapper";function p(e){let{components:n,...t}=e;return(0,r.kt)(s,(0,i.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Esse exemplo exibe como controlar a intensidade de um LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY."),(0,r.kt)("h1",{id:"materiais"},"Materiais"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Placa Franzininho;"),(0,r.kt)("li",{parentName:"ul"},"Protoboard;"),(0,r.kt)("li",{parentName:"ul"},"LED 3mm;"),(0,r.kt)("li",{parentName:"ul"},"Resistor 330;"),(0,r.kt)("li",{parentName:"ul"},"Jumpers macho/f\xeamea;")),(0,r.kt)("h2",{id:"circuito"},"Circuito"),(0,r.kt)("p",null,"Na protoboard voc\xea pode montar o circuito para acionamento do LED da seguinte forma:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Circuito",src:o(7706).Z,width:"1833",height:"756"})),(0,r.kt)("h2",{id:"sketch"},"Sketch"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"/*\n Franzininho\n Exemplo: Controle Brilho de LED - PWM\n Esse exemplo exibe como controlar a intensidade de brilho de um LED usando PWM\n*/\n\nconst int LED = 1; //pino para o LED\nint i = 0; //utilizaremos essa vari\xe1vel para contagem auxiliar\n\nvoid setup() {\n pinMode(LED,OUTPUT); //configura o pino do LED como uma sa\xedda\n}\n\nvoid loop() {\n //faz um loop de 0 a 255 (acende gradualmente)\n for (i = 0; i<255; i++) {\n analogWrite (LED, i); // define o brilho do LED\n delay (10); //espere 10ms, pois analogwrite \xe9 um instant\xe2neo e n\xe3o ver\xedamos nenhuma altera\xe7\xe3o\n }\n\n delay(1000);\n\n //faz um loop de 255 a 1 (apaga gradualmente)\n for (i = 255; i > 0; i--) { \n analogWrite(LED, i); //define o brilho do LED\n delay(10); //aguarda 10ms\n }\n\n delay(1000);\n}\n")),(0,r.kt)("admonition",{title:"Saidas PWM",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Verifique no pinout da Franzininho DIY quais os pinos possuem fun\xe7\xe3o de sa\xedda PWM")),(0,r.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,r.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311359730520949312?view=diagram"}),(0,r.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,r.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/0W5Dos0NHsE",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}p.isMDXComponent=!0},7706:(e,n,o)=>{o.d(n,{Z:()=>i});const i=o.p+"assets/images/brilho-led-circuito-cafaefb0f69ebc87e542c140ed6f0f67.png"}}]); \ No newline at end of file diff --git a/assets/js/f5313f89.789a8c19.js b/assets/js/f5313f89.789a8c19.js new file mode 100755 index 000000000..e607a1255 --- /dev/null +++ b/assets/js/f5313f89.789a8c19.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8800],{91976:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>t,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var r=n(17624),a=n(95788);const i={id:"sobre",title:"Seja bem vindo a documenta\xe7\xe3o do projeto Franzininho",sidebar_label:"Seja bem vindo!",slug:"/"},t=void 0,s={id:"sobre",title:"Seja bem vindo a documenta\xe7\xe3o do projeto Franzininho",description:"Aqui voc\xea encontra a documenta\xe7\xe3o (em Desenvolvimento) para trabalhar com todas as placas e Kits Franzininho.",source:"@site/docs/sobre.md",sourceDirName:".",slug:"/",permalink:"/docs/",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/sobre.md",tags:[],version:"current",frontMatter:{id:"sobre",title:"Seja bem vindo a documenta\xe7\xe3o do projeto Franzininho",sidebar_label:"Seja bem vindo!",slug:"/"},sidebar:"docs",next:{title:"Placa Franzininho WiFi",permalink:"/docs/franzininho-wifi/franzininho-wifi"}},c={},d=[{value:"Sobre o projeto Franzininho",id:"sobre-o-projeto-franzininho",level:2},{value:"Como contribuir?",id:"como-contribuir",level:2},{value:"Participe da Comunidade",id:"participe-da-comunidade",level:2},{value:"Entre em contato com os organizadores",id:"entre-em-contato-com-os-organizadores",level:2}];function l(e){const o={a:"a",br:"br",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(o.p,{children:["Aqui voc\xea encontra a documenta\xe7\xe3o (",(0,r.jsx)(o.strong,{children:"em Desenvolvimento"}),") para trabalhar com todas as placas e Kits Franzininho."]}),"\n",(0,r.jsxs)(o.p,{children:["Caso precise de ajuda e n\xe3o encontre aqui, fique a vontade para participar da comunidade no ",(0,r.jsx)(o.a,{href:"https://discord.gg/H5kENmWGaz",children:"Discord"})]}),"\n",(0,r.jsx)(o.p,{children:"Se n\xe3o conhece o projeto Franzininho, segue um breve resumo:"}),"\n",(0,r.jsx)(o.h2,{id:"sobre-o-projeto-franzininho",children:"Sobre o projeto Franzininho"}),"\n",(0,r.jsxs)(o.p,{children:["O projeto ",(0,r.jsx)(o.a,{href:"https://franzininho.com.br/",children:"Franzininho"})," nasceu com o objetivo de incentivare capacitar os brasileiros para se tornarem protagonistas no desenvolvimento de projetos eletr\xf4nicos que envolvam sistemas embarcados e IoT."]}),"\n",(0,r.jsx)(o.p,{children:"Buscamos tornar os estudo das tecnologias atuais acess\xedveis para a sociedade brasileira atrav\xe9s de conte\xfados, materiais did\xe1ticos, ferramentas de desenvolvimento, projetos compartilhados e uma comunidade envolvida."}),"\n",(0,r.jsx)(o.p,{children:"Trabalhamos baseados nos seguintes pilares: Open source software e hardware, materiais did\xe1ticos abertos, comunidade, compartilhamento de conhecimento, colabora\xe7\xe3o."}),"\n",(0,r.jsx)(o.h2,{id:"como-contribuir",children:"Como contribuir?"}),"\n",(0,r.jsxs)(o.p,{children:["Voc\xea pode socilitar novos tutoriais e exemplos atrav\xe9s da \xe1rea de ",(0,r.jsx)(o.a,{href:"https://github.com/Franzininho/docs-franzininho-site/issues",children:"Issue"})," no github."]}),"\n",(0,r.jsxs)(o.p,{children:["Voc\xea tamb\xe9m pode contribuir com a documenta\xe7\xe3o adicionando exemplos e projetos. Caso queira fazer diretamente na documenta\xe7\xe3o, abra um ",(0,r.jsx)(o.a,{href:"https://github.com/Franzininho/docs-franzininho-site/issues",children:"Issue"})," para explicar o que deseja fazer. Outra possibilidade \xe9 conversar diretamente na ",(0,r.jsx)(o.a,{href:"https://discord.gg/H5kENmWGaz",children:"comunidade"})," na \xe1rea de documenta\xe7\xe3o."]}),"\n",(0,r.jsxs)(o.p,{children:["Caso n\xe3o tenha conhecimento no Github, voc\xea pode enviar o seu material atrav\xe9s desse ",(0,r.jsx)(o.a,{href:"https://forms.gle/dGNfK3xaGK2BvRPp9",children:"formul\xe1rio"}),". Fizemos um template bacana que voc\xea pode seguir para criar seu material."]}),"\n",(0,r.jsx)(o.h2,{id:"participe-da-comunidade",children:"Participe da Comunidade"}),"\n",(0,r.jsxs)(o.ul,{children:["\n",(0,r.jsx)(o.li,{children:(0,r.jsx)(o.a,{href:"https://discord.gg/H5kENmWGaz",children:"Servidor no Discord"})}),"\n",(0,r.jsx)(o.li,{children:(0,r.jsx)(o.a,{href:"https://www.facebook.com/groups/299236843857849/",children:"Grupo no Facebook"})}),"\n"]}),"\n",(0,r.jsx)(o.h2,{id:"entre-em-contato-com-os-organizadores",children:"Entre em contato com os organizadores"}),"\n",(0,r.jsxs)(o.ul,{children:["\n",(0,r.jsx)(o.li,{children:(0,r.jsx)(o.a,{href:"https://franzininho.com.br/",children:"site"})}),"\n",(0,r.jsx)(o.li,{children:(0,r.jsx)(o.a,{href:"mailto:contato@franzininho.com.br",children:"e-mail"})}),"\n"]}),"\n",(0,r.jsxs)(o.p,{children:[(0,r.jsx)(o.a,{href:"http://creativecommons.org/licenses/by-sa/4.0/",children:(0,r.jsx)(o.img,{src:"https://i.creativecommons.org/l/by-sa/4.0/88x31.png",alt:"Creative Commons License"})}),(0,r.jsx)(o.br,{}),"\n","Este obra est\xe1 licenciada com uma Licen\xe7a ",(0,r.jsx)(o.a,{href:"http://creativecommons.org/licenses/by-sa/4.0/",children:"Creative Commons Atribui\xe7\xe3o-CompartilhaIgual 4.0 Internacional"}),"."]})]})}function m(e={}){const{wrapper:o}={...(0,a.MN)(),...e.components};return o?(0,r.jsx)(o,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},95788:(e,o,n)=>{n.d(o,{MN:()=>d});var r=n(11504);function a(e,o,n){return o in e?Object.defineProperty(e,o,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[o]=n,e}function i(e,o){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);o&&(r=r.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),n.push.apply(n,r)}return n}function t(e){for(var o=1;o<arguments.length;o++){var n=null!=arguments[o]?arguments[o]:{};o%2?i(Object(n),!0).forEach((function(o){a(e,o,n[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(n,o))}))}return e}function s(e,o){if(null==e)return{};var n,r,a=function(e,o){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],o.indexOf(n)>=0||(a[n]=e[n]);return a}(e,o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],o.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),d=function(e){var o=r.useContext(c),n=o;return e&&(n="function"==typeof e?e(o):t(t({},o),e)),n},l={inlineCode:"code",wrapper:function(e){var o=e.children;return r.createElement(r.Fragment,{},o)}},m=r.forwardRef((function(e,o){var n=e.components,a=e.mdxType,i=e.originalType,c=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),p=d(n),u=a,h=p["".concat(c,".").concat(u)]||p[u]||l[u]||i;return n?r.createElement(h,t(t({ref:o},m),{},{components:n})):r.createElement(h,t({ref:o},m))}));m.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/f5313f89.a4b0f419.js b/assets/js/f5313f89.a4b0f419.js deleted file mode 100755 index d7ba3f36e..000000000 --- a/assets/js/f5313f89.a4b0f419.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4507],{3905:(e,o,a)=>{a.d(o,{Zo:()=>l,kt:()=>b});var t=a(7294);function r(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function n(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,t)}return a}function i(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?n(Object(a),!0).forEach((function(o){r(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function s(e,o){if(null==e)return{};var a,t,r=function(e,o){if(null==e)return{};var a,t,r={},n=Object.keys(e);for(t=0;t<n.length;t++)a=n[t],o.indexOf(a)>=0||(r[a]=e[a]);return r}(e,o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(t=0;t<n.length;t++)a=n[t],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var c=t.createContext({}),p=function(e){var o=t.useContext(c),a=o;return e&&(a="function"==typeof e?e(o):i(i({},o),e)),a},l=function(e){var o=p(e.components);return t.createElement(c.Provider,{value:o},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var o=e.children;return t.createElement(t.Fragment,{},o)}},u=t.forwardRef((function(e,o){var a=e.components,r=e.mdxType,n=e.originalType,c=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),m=p(a),u=r,b=m["".concat(c,".").concat(u)]||m[u]||d[u]||n;return a?t.createElement(b,i(i({ref:o},l),{},{components:a})):t.createElement(b,i({ref:o},l))}));function b(e,o){var a=arguments,r=o&&o.mdxType;if("string"==typeof e||r){var n=a.length,i=new Array(n);i[0]=u;var s={};for(var c in o)hasOwnProperty.call(o,c)&&(s[c]=o[c]);s.originalType=e,s[m]="string"==typeof e?e:r,i[1]=s;for(var p=2;p<n;p++)i[p]=a[p];return t.createElement.apply(null,i)}return t.createElement.apply(null,a)}u.displayName="MDXCreateElement"},8007:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>s,toc:()=>p});var t=a(3117),r=(a(7294),a(3905));const n={id:"sobre",title:"Seja bem vindo a documenta\xe7\xe3o do projeto Franzininho",sidebar_label:"Seja bem vindo!",slug:"/"},i=void 0,s={unversionedId:"sobre",id:"sobre",title:"Seja bem vindo a documenta\xe7\xe3o do projeto Franzininho",description:"Aqui voc\xea encontra a documenta\xe7\xe3o (em Desenvolvimento) para trabalhar com todas as placas e Kits Franzininho.",source:"@site/docs/sobre.md",sourceDirName:".",slug:"/",permalink:"/docs/",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/sobre.md",tags:[],version:"current",frontMatter:{id:"sobre",title:"Seja bem vindo a documenta\xe7\xe3o do projeto Franzininho",sidebar_label:"Seja bem vindo!",slug:"/"},sidebar:"docs",next:{title:"Placa Franzininho WiFi",permalink:"/docs/franzininho-wifi/franzininho-wifi"}},c={},p=[{value:"Sobre o projeto Franzininho",id:"sobre-o-projeto-franzininho",level:2},{value:"Como contribuir?",id:"como-contribuir",level:2},{value:"Participe da Comunidade",id:"participe-da-comunidade",level:2},{value:"Entre em contato com os organizadores",id:"entre-em-contato-com-os-organizadores",level:2}],l={toc:p},m="wrapper";function d(e){let{components:o,...a}=e;return(0,r.kt)(m,(0,t.Z)({},l,a,{components:o,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Aqui voc\xea encontra a documenta\xe7\xe3o (",(0,r.kt)("strong",{parentName:"p"},"em Desenvolvimento"),") para trabalhar com todas as placas e Kits Franzininho."),(0,r.kt)("p",null,"Caso precise de ajuda e n\xe3o encontre aqui, fique a vontade para participar da comunidade no ",(0,r.kt)("a",{parentName:"p",href:"https://discord.gg/H5kENmWGaz"},"Discord")),(0,r.kt)("p",null,"Se n\xe3o conhece o projeto Franzininho, segue um breve resumo:"),(0,r.kt)("h2",{id:"sobre-o-projeto-franzininho"},"Sobre o projeto Franzininho"),(0,r.kt)("p",null,"O projeto ",(0,r.kt)("a",{parentName:"p",href:"https://franzininho.com.br/"},"Franzininho")," nasceu com o objetivo de incentivare capacitar os brasileiros para se tornarem protagonistas no desenvolvimento de projetos eletr\xf4nicos que envolvam sistemas embarcados e IoT. "),(0,r.kt)("p",null,"Buscamos tornar os estudo das tecnologias atuais acess\xedveis para a sociedade brasileira atrav\xe9s de conte\xfados, materiais did\xe1ticos, ferramentas de desenvolvimento, projetos compartilhados e uma comunidade envolvida."),(0,r.kt)("p",null,"Trabalhamos baseados nos seguintes pilares: Open source software e hardware, materiais did\xe1ticos abertos, comunidade, compartilhamento de conhecimento, colabora\xe7\xe3o."),(0,r.kt)("h2",{id:"como-contribuir"},"Como contribuir?"),(0,r.kt)("p",null,"Voc\xea pode socilitar novos tutoriais e exemplos atrav\xe9s da \xe1rea de ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/docs-franzininho-site/issues"},"Issue")," no github."),(0,r.kt)("p",null,"Voc\xea tamb\xe9m pode contribuir com a documenta\xe7\xe3o adicionando exemplos e projetos. Caso queira fazer diretamente na documenta\xe7\xe3o, abra um ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/docs-franzininho-site/issues"},"Issue")," para explicar o que deseja fazer. Outra possibilidade \xe9 conversar diretamente na ",(0,r.kt)("a",{parentName:"p",href:"https://discord.gg/H5kENmWGaz"},"comunidade")," na \xe1rea de documenta\xe7\xe3o."),(0,r.kt)("p",null,"Caso n\xe3o tenha conhecimento no Github, voc\xea pode enviar o seu material atrav\xe9s desse ",(0,r.kt)("a",{parentName:"p",href:"https://forms.gle/dGNfK3xaGK2BvRPp9"},"formul\xe1rio"),". Fizemos um template bacana que voc\xea pode seguir para criar seu material."),(0,r.kt)("h2",{id:"participe-da-comunidade"},"Participe da Comunidade"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://discord.gg/H5kENmWGaz"},"Servidor no Discord")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.facebook.com/groups/299236843857849/"},"Grupo no Facebook"))),(0,r.kt)("h2",{id:"entre-em-contato-com-os-organizadores"},"Entre em contato com os organizadores"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://franzininho.com.br/"},"site")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"mailto:contato@franzininho.com.br"},"e-mail"))),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"http://creativecommons.org/licenses/by-sa/4.0/"},(0,r.kt)("img",{parentName:"a",src:"https://i.creativecommons.org/l/by-sa/4.0/88x31.png",alt:"Creative Commons License"})),(0,r.kt)("br",{parentName:"p"}),"\n","Este obra est\xe1 licenciada com uma Licen\xe7a ",(0,r.kt)("a",{parentName:"p",href:"http://creativecommons.org/licenses/by-sa/4.0/"},"Creative Commons Atribui\xe7\xe3o-CompartilhaIgual 4.0 Internacional"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f64cfe00.56c7c44d.js b/assets/js/f64cfe00.56c7c44d.js new file mode 100755 index 000000000..0e3ec2bde --- /dev/null +++ b/assets/js/f64cfe00.56c7c44d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9464],{29960:(e,o,i)=>{i.r(o),i.d(o,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>s,metadata:()=>t,toc:()=>l});var a=i(17624),n=i(95788);const s={id:"franzininho-wifi-espidf-02",title:"Entrada digital",slug:"/franzininho-wifi/exemplos-espidf/entrada-digital",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},r=void 0,t={id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02",title:"Entrada digital",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x02-entrada-digital.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/entrada-digital",permalink:"/docs/franzininho-wifi/exemplos-espidf/entrada-digital",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x02-entrada-digital.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-02",title:"Entrada digital",slug:"/franzininho-wifi/exemplos-espidf/entrada-digital",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},sidebar:"docs",previous:{title:"Hello World! ESP-IDF",permalink:"/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf"},next:{title:"Entrada Anal\xf3gica",permalink:"/docs/franzininho-wifi/exemplos-espidf/entrada-analogica"}},d={},l=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"<strong>Recursos Necess\xe1rios</strong>",id:"recursos-necess\xe1rios-1",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function c(e){const o={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.p,{children:"Seguindo nas aplica\xe7\xf5es com o ESP-IDF naa placa Franzininho WiFi vamos dar continuidade aos trabalhos com o perif\xe9rico de Entrada/Sa\xedda de Prop\xf3sito Geral ou do ingl\xeas General Purpose Input/Output (GPIO) . O objetivo deste texto \xe9 apresentar um exemplo de projeto para configurar os pinos como entrada digital. Ao final, estaremos preparados para manipular tanto as sa\xeddas digitais, vista anteriormente, quanto \xe0s entradas de digitais."}),"\n",(0,a.jsx)(o.h2,{id:"recursos-necess\xe1rios",children:"Recursos Necess\xe1rios"}),"\n",(0,a.jsx)(o.p,{children:"Os materiais necess\xe1rios para realizar esse exemplo s\xe3o:"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"Placa Franzininho WiFi;"}),"\n",(0,a.jsx)(o.li,{children:"Protoboard;"}),"\n",(0,a.jsx)(o.li,{children:"Bot\xe3o ou chave t\xe1ctil;"}),"\n",(0,a.jsx)(o.li,{children:"LED;"}),"\n",(0,a.jsx)(o.li,{children:"Resistor de 220 ou 330 Ohm;"}),"\n",(0,a.jsx)(o.li,{children:"Cabos Jumpers;"}),"\n",(0,a.jsx)(o.li,{children:"Computador com ESP-IDF instalado e configurado."}),"\n"]}),"\n",(0,a.jsx)(o.h2,{id:"recursos-necess\xe1rios-1",children:(0,a.jsx)(o.strong,{children:"Recursos Necess\xe1rios"})}),"\n",(0,a.jsx)(o.p,{children:"Os materiais necess\xe1rios para realizar esse exemplo s\xe3o:"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"Placa Franzininho WiFi;"}),"\n",(0,a.jsx)(o.li,{children:"Protoboard;"}),"\n",(0,a.jsx)(o.li,{children:"Bot\xe3o ou chave t\xe1ctil;"}),"\n",(0,a.jsx)(o.li,{children:"LED;"}),"\n",(0,a.jsx)(o.li,{children:"Resistor de 220 ou 330 Ohm;"}),"\n",(0,a.jsx)(o.li,{children:"Cabos Jumpers;"}),"\n",(0,a.jsx)(o.li,{children:"Computador com ESP-IDF instalado e configurado."}),"\n"]}),"\n",(0,a.jsx)(o.h2,{id:"desenvolvimento",children:"Desenvolvimento"}),"\n",(0,a.jsx)(o.p,{children:"Nesse artigo vamos apresentar um exemplo de projeto utilizando as duas fun\xe7\xf5es do perif\xe9rico GPIO: entrada digital e sa\xedda digital. Na entrada digital vamos realizar a leitura do bot\xe3o t\xe1ctil e armazenar seu estado em uma vari\xe1vel que ir\xe1 interagir com o monitor e um LED externo, atuando como uma sa\xedda digital que ir\xe1 nos indicar o estado atual do bot\xe3o."}),"\n",(0,a.jsxs)(o.p,{children:["O programa desenvolvido possibilita utilizar duas topologias de circuito : ",(0,a.jsx)(o.a,{href:"https://www.embarcados.com.br/como-dimensionar-resistores-de-pull-up/",children:(0,a.jsx)(o.strong,{children:"pull up"})})," ou ",(0,a.jsx)(o.a,{href:"https://www.embarcados.com.br/resistor-de-pull-down/",children:(0,a.jsx)(o.strong,{children:"pull down"})}),", para mais informa\xe7\xf5es sobre essas topologias acesse os links referente a cada circuito. Nesse exemplo de projeto iremos utilizar a topologia com o pull up interno do processador, desta forma deve-se observar os coment\xe1rios ao longo do c\xf3digo a fim de habilitar ou desabilitar as topologias de circuito."]}),"\n",(0,a.jsx)(o.p,{children:"Na placa Franzininho WiFI temos 38 pinos program\xe1veis com o perif\xe9rico GPIO, encorajamos aos leitores que alterem o c\xf3digo da forma como achar necess\xe1rio e praticar a codifica\xe7\xe3o do programa a fim de consolidar o conhecimento adquirido."}),"\n",(0,a.jsx)(o.h3,{id:"esquem\xe1tico",children:"Esquem\xe1tico"}),"\n",(0,a.jsxs)(o.p,{children:["Para darmos in\xedcio ao projeto \xe9 importante realizar a montagem do circuito em protoboard observando com cuidado as conex\xf5es, iremos conectar um dos terminais do resistor no ",(0,a.jsx)(o.strong,{children:"GPIO 2"})," e outro no LED externo por fim ligamos a ",(0,a.jsx)(o.strong,{children:"GPIO 15"})," no bot\xe3o t\xe1ctil. Abaixo segue o esquem\xe1tico proposto:"]}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"circuito",src:i(29148).c+"",width:"1755",height:"702"})}),"\n",(0,a.jsx)(o.h3,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,a.jsxs)(o.p,{children:["O programa desenvolvido possui uma estrutura bem simples e n\xe3o \xe9 necess\xe1rio acrescentar nenhuma biblioteca, apenas a manuten\xe7\xe3o dos arquivos de cabe\xe7alho j\xe1 presentes no projeto. Ao criar um novo projeto no IDF automaticamente j\xe1 temos arquivos configurados e prontos para programa\xe7\xe3o do dispositivo, desta forma digite e comente as linhas do seguinte c\xf3digo no arquivo ",(0,a.jsx)(o.strong,{children:"main.c :"})]}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-c",children:'/*\n Autor : Halysson Junior\n Data: 31/03/21\n Descri\xe7\xe3o:\n Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital)\n e mostra seu estado no terminal.\n\n*/\n\n// Inclus\xe3o arquivos de cabe\xe7alho\n\n#include <stdio.h>\n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "driver/gpio.h"\n#include "sdkconfig.h"\n\n// Defini\xe7\xf5es de Pinos\n#define BTN 15\n#define LED 2\n\n// Defini\xe7\xe3o de habilita\xe7\xe3o (PULLUP / PULLDOWN)\n#define PULLUP\n// #define PULLDOWN (Para habilitar pulldown descomente aqui e comente -> " #define PULLUP ")\n\n// Defini\xe7\xf5es de estado l\xf3gico (caso altere para pulldown, deve-se inverter os estado l\xf3gicos)\n#define ON 1\n#define OFF 0\n\nvoid app_main(void){ // Main\n\n gpio_pad_select_gpio(LED); \n gpio_set_direction(LED,GPIO_MODE_OUTPUT);// onfigura LED como sa\xedda digital\n\n gpio_pad_select_gpio(BTN); \n gpio_set_direction(BTN,GPIO_MODE_INPUT); // Configura LED como sa\xedda digital\n\n #ifdef PULLDOWN // Habilita pulldown\n\n gpio_pulldown_en(BTN);\n gpio_pullup_dis(BTN); \n\n #endif\n\n #ifdef PULLUP // Habilita pullup\n gpio_pullup_en(BTN);\n gpio_pulldown_dis(BTN);\n\n #endif\n\n// V\xe1riavel Local\nbool last_state_btn = 0; // Armazena o \xfaltimo estado do bot\xe3o \n\n while (1) { // Loop\n\n // V\xe1riavel Local \n bool state_btn = gpio_get_level(BTN); // Leitura do bot\xe3o\n\n if(!state_btn && !last_state_btn) {\n gpio_set_level(LED,ON); // Se bot\xe3o for zero ent\xe3o ... liga LED\n printf("LED LIGADO"); // Mostra informa\xe7\xe3o no monitor "LED LIGADO"\n last_state_btn = true; // Bot\xe3o pressionado\n }\n\n else if(state_btn && last_state_btn){\n gpio_set_level(LED,OFF); // Sen\xe3o... desliga LED\n printf ("LED DESLIGADO"); // Mostra informa\xe7\xe3o no monitor "LED DESLIGADO"\n last_state_btn = false; // Bot\xe3o solto\n }\n vTaskDelay(1/ portTICK_PERIOD_MS); // Rotina de Delay de 1 segundo\n fflush(stdout); // Descarrega os buffers de sa\xedda de dados \n\n }// endLoop\n\n}// endMain\n'})}),"\n",(0,a.jsxs)(o.p,{children:["Voc\xea encontra o projeto completo na documenta\xe7\xe3o da Franzininho: ",(0,a.jsx)(o.strong,{children:(0,a.jsx)(o.a,{href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/Button",children:"Button"})})]}),"\n",(0,a.jsxs)(o.p,{children:["Caso ainda n\xe3o tenha instalado e configurado o IDF no seu computador ou tenha d\xfavidas sobre as ferramentas, acesse o tutorial de instala\xe7\xe3o (",(0,a.jsx)(o.a,{href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi-espidf/primeiros-passos",children:"Clique Aqui"}),")."]}),"\n",(0,a.jsx)(o.h3,{id:"compila\xe7\xe3o",children:"Compila\xe7\xe3o"}),"\n",(0,a.jsxs)(o.p,{children:["Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o ",(0,a.jsx)(o.strong,{children:(0,a.jsx)(o.em,{children:"set-target"})})," para ESP 32-S2:"]}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-bash",children:"idf.py set-target esp32s2\n"})}),"\n",(0,a.jsx)(o.p,{children:"Ao final da compila\xe7\xe3o o resultado final deve ser semelhante \xe0 imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu c\xf3digo."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"resultado da compila\xe7\xe3o",src:i(50380).c+"",width:"1064",height:"349"})}),"\n",(0,a.jsx)(o.p,{children:"Ap\xf3s a etapa de compila\xe7\xe3o vamos enviar o c\xf3digo fonte para nossa placa, no editor pressione o \xedcone abaixo e aguarde alguns segundos para assim dar in\xedcio ao programa \u201cButton\u201d(seta preta) e para vermos a sa\xedda de dados do nosso projeto clique no \xedcone no formato de monitor (seta vermelha):"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"atalhos de compila\xe7\xe3o",src:i(38100).c+"",width:"528",height:"54"})}),"\n",(0,a.jsx)(o.h2,{id:"resultados",children:"Resultados"}),"\n",(0,a.jsx)(o.p,{children:"Finalizando o exemplo de projeto o leitor deve ter observado que no programa Button, foram utilizadas as estruturas de condi\xe7\xe3o IF / ELSE IF para interagir com o estado atual do bot\xe3o, adicionou-se \xe0s uma nova label nativa para indicar as entradas digitais (GPIO_MODE_INPUT) e as fun\xe7\xf5es para indicar topologia do circuito ( gpio_pullup_en()/gpio pulldown_dis()) utilizado e verificar a leitura digital no pino definido no cabe\xe7alho do c\xf3digo."}),"\n",(0,a.jsx)(o.p,{children:"Abaixo segue o resultado final dos dados de sa\xedda no monitor:"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"sa\xedda monitor serial",src:i(11056).c+"",width:"539",height:"168"})}),"\n",(0,a.jsx)(o.p,{children:"Abaixo segue o nosso circuito do nosso projeto:"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"teste na bancada",src:i(21604).c+"",width:"1336",height:"668"})}),"\n",(0,a.jsx)(o.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,a.jsxs)(o.p,{children:["Nesse projeto conclu\xedmos o estudo do perif\xe9rico base para iniciar no mundo dos microcontroladores, pois a partir desse conhecimento adquirido podemos reciclar para as outras fam\xedlias do ESP32, como tamb\xe9m em outros chips baseados na linguagem C para estruturar seu programa. Como mencionado na se\xe7\xe3o de Desenvolvimento, este segundo artigo deseja consolidar o conhecimento nesse perif\xe9rico (GPIO), por tanto deixo o desafio de criar um contador de pulsos de 0 at\xe9 10 e reiniciado sempre quando forma maior que 10, ao final de cada contagem deve-se acionar um LED e mostrar quantas contagens j\xe1 foram feitas. Desejo sorte \xe0queles que ir\xe3o realizar o desafio e bons estudos, que a ",(0,a.jsx)(o.strong,{children:"for\xe7a esteja com todos n\xf3s."})]}),"\n",(0,a.jsxs)(o.table,{children:[(0,a.jsx)(o.thead,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.th,{children:"Autor"}),(0,a.jsx)(o.th,{children:(0,a.jsx)(o.a,{href:"https://github.com/halyssonJr",children:"Halysson Junior"})})]})}),(0,a.jsx)(o.tbody,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"Data:"}),(0,a.jsx)(o.td,{children:"01/06/2021"})]})})]})]})}function p(e={}){const{wrapper:o}={...(0,n.MN)(),...e.components};return o?(0,a.jsx)(o,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},95788:(e,o,i)=>{i.d(o,{MN:()=>l});var a=i(11504);function n(e,o,i){return o in e?Object.defineProperty(e,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[o]=i,e}function s(e,o){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);o&&(a=a.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),i.push.apply(i,a)}return i}function r(e){for(var o=1;o<arguments.length;o++){var i=null!=arguments[o]?arguments[o]:{};o%2?s(Object(i),!0).forEach((function(o){n(e,o,i[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):s(Object(i)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(i,o))}))}return e}function t(e,o){if(null==e)return{};var i,a,n=function(e,o){if(null==e)return{};var i,a,n={},s=Object.keys(e);for(a=0;a<s.length;a++)i=s[a],o.indexOf(i)>=0||(n[i]=e[i]);return n}(e,o);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)i=s[a],o.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var d=a.createContext({}),l=function(e){var o=a.useContext(d),i=o;return e&&(i="function"==typeof e?e(o):r(r({},o),e)),i},c={inlineCode:"code",wrapper:function(e){var o=e.children;return a.createElement(a.Fragment,{},o)}},p=a.forwardRef((function(e,o){var i=e.components,n=e.mdxType,s=e.originalType,d=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),u=l(i),m=n,h=u["".concat(d,".").concat(m)]||u[m]||c[m]||s;return i?a.createElement(h,r(r({ref:o},p),{},{components:i})):a.createElement(h,r({ref:o},p))}));p.displayName="MDXCreateElement"},29148:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/1-124f6f4ee8bacde41bd8a9e355dc439a.png"},50380:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/2-9dcac030cd53ee20f535abf4683f595c.png"},38100:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/3-e82c6cff8b1723ecc738df1fa83a7f4d.png"},11056:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/4-398af45ebe97733b089183f9be584ceb.png"},21604:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/5-38b38892827b20fb4c4fad0565d3620c.png"}}]); \ No newline at end of file diff --git a/assets/js/f64cfe00.6c8bfaa8.js b/assets/js/f64cfe00.6c8bfaa8.js deleted file mode 100755 index 60f435e27..000000000 --- a/assets/js/f64cfe00.6c8bfaa8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5045],{3905:(e,o,a)=>{a.d(o,{Zo:()=>p,kt:()=>f});var t=a(7294);function i(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function n(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,t)}return a}function r(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?n(Object(a),!0).forEach((function(o){i(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function s(e,o){if(null==e)return{};var a,t,i=function(e,o){if(null==e)return{};var a,t,i={},n=Object.keys(e);for(t=0;t<n.length;t++)a=n[t],o.indexOf(a)>=0||(i[a]=e[a]);return i}(e,o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(t=0;t<n.length;t++)a=n[t],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var l=t.createContext({}),d=function(e){var o=t.useContext(l),a=o;return e&&(a="function"==typeof e?e(o):r(r({},o),e)),a},p=function(e){var o=d(e.components);return t.createElement(l.Provider,{value:o},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var o=e.children;return t.createElement(t.Fragment,{},o)}},m=t.forwardRef((function(e,o){var a=e.components,i=e.mdxType,n=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=d(a),m=i,f=u["".concat(l,".").concat(m)]||u[m]||c[m]||n;return a?t.createElement(f,r(r({ref:o},p),{},{components:a})):t.createElement(f,r({ref:o},p))}));function f(e,o){var a=arguments,i=o&&o.mdxType;if("string"==typeof e||i){var n=a.length,r=new Array(n);r[0]=m;var s={};for(var l in o)hasOwnProperty.call(o,l)&&(s[l]=o[l]);s.originalType=e,s[u]="string"==typeof e?e:i,r[1]=s;for(var d=2;d<n;d++)r[d]=a[d];return t.createElement.apply(null,r)}return t.createElement.apply(null,a)}m.displayName="MDXCreateElement"},593:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>n,metadata:()=>s,toc:()=>d});var t=a(3117),i=(a(7294),a(3905));const n={id:"franzininho-wifi-espidf-02",title:"Entrada digital",slug:"/franzininho-wifi/exemplos-espidf/entrada-digital",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},r=void 0,s={unversionedId:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02",id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02",title:"Entrada digital",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x02-entrada-digital.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/entrada-digital",permalink:"/docs/franzininho-wifi/exemplos-espidf/entrada-digital",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x02-entrada-digital.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-02",title:"Entrada digital",slug:"/franzininho-wifi/exemplos-espidf/entrada-digital",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},sidebar:"docs",previous:{title:"Hello World! ESP-IDF",permalink:"/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf"},next:{title:"Entrada Anal\xf3gica",permalink:"/docs/franzininho-wifi/exemplos-espidf/entrada-analogica"}},l={},d=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"<strong>Recursos Necess\xe1rios</strong>",id:"recursos-necess\xe1rios-1",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],p={toc:d},u="wrapper";function c(e){let{components:o,...n}=e;return(0,i.kt)(u,(0,t.Z)({},p,n,{components:o,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Seguindo nas aplica\xe7\xf5es com o ESP-IDF naa placa Franzininho WiFi vamos dar continuidade aos trabalhos com o perif\xe9rico de Entrada/Sa\xedda de Prop\xf3sito Geral ou do ingl\xeas General Purpose Input/Output (GPIO) . O objetivo deste texto \xe9 apresentar um exemplo de projeto para configurar os pinos como entrada digital. Ao final, estaremos preparados para manipular tanto as sa\xeddas digitais, vista anteriormente, quanto \xe0s entradas de digitais."),(0,i.kt)("h2",{id:"recursos-necess\xe1rios"},"Recursos Necess\xe1rios"),(0,i.kt)("p",null,"Os materiais necess\xe1rios para realizar esse exemplo s\xe3o:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Placa Franzininho WiFi;"),(0,i.kt)("li",{parentName:"ul"},"Protoboard;"),(0,i.kt)("li",{parentName:"ul"},"Bot\xe3o ou chave t\xe1ctil;"),(0,i.kt)("li",{parentName:"ul"},"LED;"),(0,i.kt)("li",{parentName:"ul"},"Resistor de 220 ou 330 Ohm;"),(0,i.kt)("li",{parentName:"ul"},"Cabos Jumpers;"),(0,i.kt)("li",{parentName:"ul"},"Computador com ESP-IDF instalado e configurado.")),(0,i.kt)("h2",{id:"recursos-necess\xe1rios-1"},(0,i.kt)("strong",{parentName:"h2"},"Recursos Necess\xe1rios")),(0,i.kt)("p",null,"Os materiais necess\xe1rios para realizar esse exemplo s\xe3o:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Placa Franzininho WiFi;"),(0,i.kt)("li",{parentName:"ul"},"Protoboard;"),(0,i.kt)("li",{parentName:"ul"},"Bot\xe3o ou chave t\xe1ctil;"),(0,i.kt)("li",{parentName:"ul"},"LED;"),(0,i.kt)("li",{parentName:"ul"},"Resistor de 220 ou 330 Ohm;"),(0,i.kt)("li",{parentName:"ul"},"Cabos Jumpers;"),(0,i.kt)("li",{parentName:"ul"},"Computador com ESP-IDF instalado e configurado.")),(0,i.kt)("h2",{id:"desenvolvimento"},"Desenvolvimento"),(0,i.kt)("p",null,"Nesse artigo vamos apresentar um exemplo de projeto utilizando as duas fun\xe7\xf5es do perif\xe9rico GPIO: entrada digital e sa\xedda digital. Na entrada digital vamos realizar a leitura do bot\xe3o t\xe1ctil e armazenar seu estado em uma vari\xe1vel que ir\xe1 interagir com o monitor e um LED externo, atuando como uma sa\xedda digital que ir\xe1 nos indicar o estado atual do bot\xe3o."),(0,i.kt)("p",null,"O programa desenvolvido possibilita utilizar duas topologias de circuito : ",(0,i.kt)("a",{parentName:"p",href:"https://www.embarcados.com.br/como-dimensionar-resistores-de-pull-up/"},(0,i.kt)("strong",{parentName:"a"},"pull up"))," ou ",(0,i.kt)("a",{parentName:"p",href:"https://www.embarcados.com.br/resistor-de-pull-down/"},(0,i.kt)("strong",{parentName:"a"},"pull down")),", para mais informa\xe7\xf5es sobre essas topologias acesse os links referente a cada circuito. Nesse exemplo de projeto iremos utilizar a topologia com o pull up interno do processador, desta forma deve-se observar os coment\xe1rios ao longo do c\xf3digo a fim de habilitar ou desabilitar as topologias de circuito."),(0,i.kt)("p",null,"Na placa Franzininho WiFI temos 38 pinos program\xe1veis com o perif\xe9rico GPIO, encorajamos aos leitores que alterem o c\xf3digo da forma como achar necess\xe1rio e praticar a codifica\xe7\xe3o do programa a fim de consolidar o conhecimento adquirido."),(0,i.kt)("h3",{id:"esquem\xe1tico"},"Esquem\xe1tico"),(0,i.kt)("p",null,"Para darmos in\xedcio ao projeto \xe9 importante realizar a montagem do circuito em protoboard observando com cuidado as conex\xf5es, iremos conectar um dos terminais do resistor no ",(0,i.kt)("strong",{parentName:"p"},"GPIO 2")," e outro no LED externo por fim ligamos a ",(0,i.kt)("strong",{parentName:"p"},"GPIO 15")," no bot\xe3o t\xe1ctil. Abaixo segue o esquem\xe1tico proposto:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"circuito",src:a(8346).Z,width:"1755",height:"702"})),(0,i.kt)("h3",{id:"c\xf3digo"},"C\xf3digo"),(0,i.kt)("p",null,"O programa desenvolvido possui uma estrutura bem simples e n\xe3o \xe9 necess\xe1rio acrescentar nenhuma biblioteca, apenas a manuten\xe7\xe3o dos arquivos de cabe\xe7alho j\xe1 presentes no projeto. Ao criar um novo projeto no IDF automaticamente j\xe1 temos arquivos configurados e prontos para programa\xe7\xe3o do dispositivo, desta forma digite e comente as linhas do seguinte c\xf3digo no arquivo ",(0,i.kt)("strong",{parentName:"p"},"main.c :")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-c"},'/*\n Autor : Halysson Junior\n Data: 31/03/21\n Descri\xe7\xe3o:\n Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital)\n e mostra seu estado no terminal.\n\n*/\n\n// Inclus\xe3o arquivos de cabe\xe7alho\n\n#include <stdio.h>\n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "driver/gpio.h"\n#include "sdkconfig.h"\n\n// Defini\xe7\xf5es de Pinos\n#define BTN 15\n#define LED 2\n\n// Defini\xe7\xe3o de habilita\xe7\xe3o (PULLUP / PULLDOWN)\n#define PULLUP\n// #define PULLDOWN (Para habilitar pulldown descomente aqui e comente -> " #define PULLUP ")\n\n// Defini\xe7\xf5es de estado l\xf3gico (caso altere para pulldown, deve-se inverter os estado l\xf3gicos)\n#define ON 1\n#define OFF 0\n\nvoid app_main(void){ // Main\n\n gpio_pad_select_gpio(LED); \n gpio_set_direction(LED,GPIO_MODE_OUTPUT);// onfigura LED como sa\xedda digital\n\n gpio_pad_select_gpio(BTN); \n gpio_set_direction(BTN,GPIO_MODE_INPUT); // Configura LED como sa\xedda digital\n\n #ifdef PULLDOWN // Habilita pulldown\n\n gpio_pulldown_en(BTN);\n gpio_pullup_dis(BTN); \n\n #endif\n\n #ifdef PULLUP // Habilita pullup\n gpio_pullup_en(BTN);\n gpio_pulldown_dis(BTN);\n\n #endif\n\n// V\xe1riavel Local\nbool last_state_btn = 0; // Armazena o \xfaltimo estado do bot\xe3o \n\n while (1) { // Loop\n\n // V\xe1riavel Local \n bool state_btn = gpio_get_level(BTN); // Leitura do bot\xe3o\n\n if(!state_btn && !last_state_btn) {\n gpio_set_level(LED,ON); // Se bot\xe3o for zero ent\xe3o ... liga LED\n printf("LED LIGADO"); // Mostra informa\xe7\xe3o no monitor "LED LIGADO"\n last_state_btn = true; // Bot\xe3o pressionado\n }\n\n else if(state_btn && last_state_btn){\n gpio_set_level(LED,OFF); // Sen\xe3o... desliga LED\n printf ("LED DESLIGADO"); // Mostra informa\xe7\xe3o no monitor "LED DESLIGADO"\n last_state_btn = false; // Bot\xe3o solto\n }\n vTaskDelay(1/ portTICK_PERIOD_MS); // Rotina de Delay de 1 segundo\n fflush(stdout); // Descarrega os buffers de sa\xedda de dados \n\n }// endLoop\n\n}// endMain\n')),(0,i.kt)("p",null,"Voc\xea encontra o projeto completo na documenta\xe7\xe3o da Franzininho: ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("a",{parentName:"strong",href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/Button"},"Button"))),(0,i.kt)("p",null,"Caso ainda n\xe3o tenha instalado e configurado o IDF no seu computador ou tenha d\xfavidas sobre as ferramentas, acesse o tutorial de instala\xe7\xe3o (",(0,i.kt)("a",{parentName:"p",href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi-espidf/primeiros-passos"},"Clique Aqui"),")."),(0,i.kt)("h3",{id:"compila\xe7\xe3o"},"Compila\xe7\xe3o"),(0,i.kt)("p",null,"Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("em",{parentName:"strong"},"set-target"))," para ESP 32-S2:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"idf.py set-target esp32s2\n")),(0,i.kt)("p",null,"Ao final da compila\xe7\xe3o o resultado final deve ser semelhante \xe0 imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu c\xf3digo."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"resultado da compila\xe7\xe3o",src:a(5823).Z,width:"1064",height:"349"})),(0,i.kt)("p",null,"Ap\xf3s a etapa de compila\xe7\xe3o vamos enviar o c\xf3digo fonte para nossa placa, no editor pressione o \xedcone abaixo e aguarde alguns segundos para assim dar in\xedcio ao programa \u201cButton\u201d(seta preta) e para vermos a sa\xedda de dados do nosso projeto clique no \xedcone no formato de monitor (seta vermelha):"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"atalhos de compila\xe7\xe3o",src:a(3159).Z,width:"528",height:"54"})),(0,i.kt)("h2",{id:"resultados"},"Resultados"),(0,i.kt)("p",null,"Finalizando o exemplo de projeto o leitor deve ter observado que no programa Button, foram utilizadas as estruturas de condi\xe7\xe3o IF / ELSE IF para interagir com o estado atual do bot\xe3o, adicionou-se \xe0s uma nova label nativa para indicar as entradas digitais (GPIO_MODE_INPUT) e as fun\xe7\xf5es para indicar topologia do circuito ( gpio_pullup_en()/gpio pulldown_dis()) utilizado e verificar a leitura digital no pino definido no cabe\xe7alho do c\xf3digo."),(0,i.kt)("p",null,"Abaixo segue o resultado final dos dados de sa\xedda no monitor:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"sa\xedda monitor serial",src:a(4983).Z,width:"539",height:"168"})),(0,i.kt)("p",null,"Abaixo segue o nosso circuito do nosso projeto:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"teste na bancada",src:a(9331).Z,width:"1336",height:"668"})),(0,i.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,i.kt)("p",null,"Nesse projeto conclu\xedmos o estudo do perif\xe9rico base para iniciar no mundo dos microcontroladores, pois a partir desse conhecimento adquirido podemos reciclar para as outras fam\xedlias do ESP32, como tamb\xe9m em outros chips baseados na linguagem C para estruturar seu programa. Como mencionado na se\xe7\xe3o de Desenvolvimento, este segundo artigo deseja consolidar o conhecimento nesse perif\xe9rico (GPIO), por tanto deixo o desafio de criar um contador de pulsos de 0 at\xe9 10 e reiniciado sempre quando forma maior que 10, ao final de cada contagem deve-se acionar um LED e mostrar quantas contagens j\xe1 foram feitas. Desejo sorte \xe0queles que ir\xe3o realizar o desafio e bons estudos, que a ",(0,i.kt)("strong",{parentName:"p"},"for\xe7a esteja com todos n\xf3s.")),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Autor"),(0,i.kt)("th",{parentName:"tr",align:null},(0,i.kt)("a",{parentName:"th",href:"https://github.com/halyssonJr"},"Halysson Junior")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Data:"),(0,i.kt)("td",{parentName:"tr",align:null},"01/06/2021")))))}c.isMDXComponent=!0},8346:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/1-124f6f4ee8bacde41bd8a9e355dc439a.png"},5823:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/2-9dcac030cd53ee20f535abf4683f595c.png"},3159:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/3-e82c6cff8b1723ecc738df1fa83a7f4d.png"},4983:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/4-398af45ebe97733b089183f9be584ceb.png"},9331:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/5-38b38892827b20fb4c4fad0565d3620c.png"}}]); \ No newline at end of file diff --git a/assets/js/f67a9ad7.61cd8489.js b/assets/js/f67a9ad7.61cd8489.js new file mode 100755 index 000000000..8ea196d2e --- /dev/null +++ b/assets/js/f67a9ad7.61cd8489.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8812],{10508:(e,o,i)=>{i.r(o),i.d(o,{assets:()=>t,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>d,toc:()=>c});var a=i(17624),n=i(95788);const r={id:"wokwi-intro",title:"Como simular a Franzininho DIY no Wokwi",slug:"/franzininho-diy/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY"},s=void 0,d={id:"FranzininhoDIY/wokwi/wokwi-intro",title:"Como simular a Franzininho DIY no Wokwi",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY",source:"@site/docs/FranzininhoDIY/wokwi/franzininho-wokwi.md",sourceDirName:"FranzininhoDIY/wokwi",slug:"/franzininho-diy/wokwi/primeiros-passos",permalink:"/docs/franzininho-diy/wokwi/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/wokwi/franzininho-wokwi.md",tags:[],version:"current",frontMatter:{id:"wokwi-intro",title:"Como simular a Franzininho DIY no Wokwi",slug:"/franzininho-diy/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY"},sidebar:"docs",previous:{title:"TODO",permalink:"/docs/franzininho-diy/exemplos-avr-libc/todo"},next:{title:"Franzininho DIY no PICSimLab",permalink:"/docs/franzininho-diy/picsimlab/primeiros-passos"}},t={},c=[{value:"Primeiros passos",id:"primeiros-passos",level:2},{value:"C\xf3digo do exemplo 1",id:"c\xf3digo-do-exemplo-1",level:3},{value:"Pe\xe7as",id:"pe\xe7as",level:2},{value:"Adicionando uma nova pe\xe7a",id:"adicionando-uma-nova-pe\xe7a",level:3},{value:"Rotacionando uma pe\xe7a",id:"rotacionando-uma-pe\xe7a",level:3},{value:"Removendo uma pe\xe7a",id:"removendo-uma-pe\xe7a",level:3},{value:"Liga\xe7\xf5es",id:"liga\xe7\xf5es",level:2},{value:"Cria\xe7\xe3o de uma liga\xe7\xe3o entre as duas pe\xe7as",id:"cria\xe7\xe3o-de-uma-liga\xe7\xe3o-entre-as-duas-pe\xe7as",level:3},{value:"Liga\xe7\xe3o entre os fios",id:"liga\xe7\xe3o-entre-os-fios",level:3},{value:"C\xf3digo do exemplo 2",id:"c\xf3digo-do-exemplo-2",level:3},{value:"Mudando a cor de um fio",id:"mudando-a-cor-de-um-fio",level:3},{value:"Atalhos do teclado",id:"atalhos-do-teclado",level:2},{value:"Desfazer / Refazer",id:"desfazer--refazer",level:2},{value:"Saiba mais",id:"saiba-mais",level:2},{value:"Exemplos no Simulador",id:"exemplos-no-simulador",level:2}];function l(e){const o={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.p,{children:"Wokwi \xe9 um simulador online para Arduino e Eletr\xf4nica. Foi desenvolvido para makers, por makers."}),"\n",(0,a.jsx)(o.p,{children:"Voc\xea pode usar o Wokwi para aprender a programar o Franzininho DIY, criar prot\xf3tipos de suas id\xe9ias, e compartilhar seus projetos com outros makers."}),"\n",(0,a.jsx)("div",{style:{textAlign:"center"},children:(0,a.jsx)(o.p,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/new?template=franzininho",children:(0,a.jsx)(o.img,{alt:"Wokwi Franzininho DIY",src:i(13644).c+"",width:"280",height:"146"})})})}),"\n",(0,a.jsx)(o.admonition,{title:"Dica",type:"tip",children:(0,a.jsx)(o.p,{children:"Use o Template do Franzininho DIY clicando na imagem acima para come\xe7ar um novo projeto no Wokwi."})}),"\n",(0,a.jsx)(o.h2,{id:"primeiros-passos",children:"Primeiros passos"}),"\n",(0,a.jsxs)(o.p,{children:["Vamos come\xe7ar o nosso programa acendendo o ",(0,a.jsx)(o.code,{children:"LED1"})," do Franzinino DIY no simulador, para isso copie ou digite o c\xf3digo abaixo no editor do Wokwi conforme imagem abaixo."]}),"\n",(0,a.jsx)("div",{style:{textAlign:"center"},children:(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Wokwi Code Editor",src:i(68520).c+"",width:"640",height:"360"})})}),"\n",(0,a.jsx)(o.h3,{id:"c\xf3digo-do-exemplo-1",children:"C\xf3digo do exemplo 1"}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-cpp",children:"const byte LED1 = 1;\n\nvoid setup() {\n pinMode(LED1, OUTPUT); // Configura como pino de sa\xedda digital\n}\n\nvoid loop() {\n digitalWrite(LED1, HIGH); // Acende o LED interno\n delay(1000); // Aguarda um segundo\n digitalWrite(LED1, LOW); // Apaga o LED interno\n delay(1000); // Aguarda um segundo\n}\n"})}),"\n",(0,a.jsx)(o.p,{children:"Em seguida, vamos executar o nosso programa clicando no bot\xe3o verde conforme a imagem abaixo."}),"\n",(0,a.jsx)("div",{style:{textAlign:"center"},children:(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Wokwi Simulation",src:i(35904).c+"",width:"640",height:"360"})})}),"\n",(0,a.jsx)(o.h2,{id:"pe\xe7as",children:"Pe\xe7as"}),"\n",(0,a.jsxs)(o.p,{children:["Vamos chamar os novos m\xf3dulos ou componentes de ",(0,a.jsx)(o.em,{children:(0,a.jsx)(o.strong,{children:"pe\xe7as"})}),", que seriam como por exemplo, as pe\xe7as de um jogo de montagem, onde vamos adicionando cada uma para depois fazermos as liga\xe7\xf5es entre elas."]}),"\n",(0,a.jsxs)(o.p,{children:["Cada projeto de simula\xe7\xe3o cont\xe9m um arquivo ",(0,a.jsx)(o.a,{href:"#saiba-mais",children:"diagram.json"})," localizado no editor de c\xf3digo. Este arquivo define as pe\xe7as\nque ser\xe3o usadas para a simula\xe7\xe3o, suas propriedades e as conex\xf5es entre os componentes."]}),"\n",(0,a.jsx)(o.p,{children:"O editor de diagramas fornece uma maneira interativa de editar seu diagrama: adicionando pe\xe7as \xe0 simula\xe7\xe3o e definindo as conex\xf5es entre elas."}),"\n",(0,a.jsx)(o.h3,{id:"adicionando-uma-nova-pe\xe7a",children:"Adicionando uma nova pe\xe7a"}),"\n",(0,a.jsxs)(o.p,{children:["Para adicionar uma nova pe\xe7a, clique no bot\xe3o ",(0,a.jsx)(o.em,{children:(0,a.jsx)(o.strong,{children:'roxo "+"'})})," na parte superior do editor de diagramas."]}),"\n",(0,a.jsx)(o.p,{children:"Voc\xea ver\xe1 um menu com uma lista de pe\xe7as que voc\xea pode adicionar. Escolha uma pe\xe7a para adicion\xe1-la. A pe\xe7a ser\xe1 adicionada na posi\xe7\xe3o (0, 0), e ent\xe3o voc\xea pode arrast\xe1-la para a posi\xe7\xe3o desejada, conforme imagem abaixo."}),"\n",(0,a.jsx)("div",{style:{textAlign:"center"},children:(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Wokwi Add part",src:i(51898).c+"",width:"640",height:"360"})})}),"\n",(0,a.jsx)(o.h3,{id:"rotacionando-uma-pe\xe7a",children:"Rotacionando uma pe\xe7a"}),"\n",(0,a.jsxs)(o.p,{children:['Gire uma pe\xe7a clicando nela (para selecion\xe1-la) e pressionando "R". A pe\xe7a girar\xe1 90 graus no sentido hor\xe1rio. Se voc\xea precisar girar uma pe\xe7a\ncom um valor diferente (por exemplo, 45 graus), voc\xea pode conseguir isso editando o arquivo ',(0,a.jsx)(o.a,{href:"#saiba-mais",children:"diagram.json"})," no editor de c\xf3digo."]}),"\n",(0,a.jsx)(o.h3,{id:"removendo-uma-pe\xe7a",children:"Removendo uma pe\xe7a"}),"\n",(0,a.jsx)(o.p,{children:"Exclua uma pe\xe7a clicando nela (para selecion\xe1-la) e em seguida pressionando a tecla Delete."}),"\n",(0,a.jsx)(o.h2,{id:"liga\xe7\xf5es",children:"Liga\xe7\xf5es"}),"\n",(0,a.jsx)(o.h3,{id:"cria\xe7\xe3o-de-uma-liga\xe7\xe3o-entre-as-duas-pe\xe7as",children:"Cria\xe7\xe3o de uma liga\xe7\xe3o entre as duas pe\xe7as"}),"\n",(0,a.jsxs)(o.p,{children:["Para criar um ",(0,a.jsx)(o.em,{children:(0,a.jsx)(o.strong,{children:"novo fio"})})," entre duas pe\xe7as, clique em um dos pinos que deseja conectar. Em seguida, clique no segundo pino (alvo). Isso criar\xe1 o fio."]}),"\n",(0,a.jsx)("div",{style:{textAlign:"center"},children:(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Wokwi Add part",src:i(61464).c+"",width:"640",height:"360"})})}),"\n",(0,a.jsx)(o.p,{children:"Se quiser que o fio v\xe1 de uma maneira espec\xedfica, voc\xea pode gui\xe1-lo clicando para onde deseja que ele v\xe1 ap\xf3s selecionar o primeiro pino."}),"\n",(0,a.jsx)(o.p,{children:"Para cancelar um novo fio (exclua-o sem selecionar um pino de destino), clique com o bot\xe3o direito do mouse ou pressione Escape."}),"\n",(0,a.jsx)(o.p,{children:"Para excluir uma liga\xe7\xe3o apenas clique com o bot\xe3o esquerdo do mouse no fio que ele ser\xe1 removido."}),"\n",(0,a.jsx)("div",{style:{textAlign:"center"},children:(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Wokwi Add part",src:i(83576).c+"",width:"640",height:"360"})})}),"\n",(0,a.jsx)(o.h3,{id:"liga\xe7\xe3o-entre-os-fios",children:"Liga\xe7\xe3o entre os fios"}),"\n",(0,a.jsx)(o.p,{children:"Para fazer mais de uma liga\xe7\xe3o na mesma pe\xe7a, apenas arraste o fio at\xe9 o pino da pe\xe7a, conforme a imagem abaixo."}),"\n",(0,a.jsx)("div",{style:{textAlign:"center"},children:(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Wokwi Add part",src:i(92836).c+"",width:"640",height:"360"})})}),"\n",(0,a.jsx)(o.admonition,{title:"Aten\xe7\xe3o",type:"caution",children:(0,a.jsx)(o.p,{children:"Cuidado para n\xe3o clicar em cima de um fio existente ao arrastar o segundo fio e remov\xea-lo sem querer. Procure sempre clicar em cima do pino da pe\xe7a."})}),"\n",(0,a.jsx)(o.h3,{id:"c\xf3digo-do-exemplo-2",children:"C\xf3digo do exemplo 2"}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-cpp",children:"const byte BUTTON = 0;\nconst byte LED1 = 1;\n\nint buttonState = 0;\n\nvoid setup() {\n pinMode(LED1, OUTPUT); // Configura como pino de sa\xedda digital\n pinMode(BUTTON, INPUT); // Configura como pino de entrada\n}\n\nvoid loop() {\n // L\xea o estado do bot\xe3o\n buttonState = digitalRead(BUTTON);\n\n // Verifica se est\xe1 pressionado\n if (buttonState == LOW) {\n digitalWrite(LED1, HIGH); // Acende o LED interno\n } else {\n digitalWrite(LED1, LOW); // Apaga o LED interno\n }\n}\n"})}),"\n",(0,a.jsx)(o.h3,{id:"mudando-a-cor-de-um-fio",children:"Mudando a cor de um fio"}),"\n",(0,a.jsx)(o.p,{children:"A cor dos novos fios \xe9 determinada automaticamente pela fun\xe7\xe3o do pino: os fios que come\xe7am nos pinos de aterramento s\xe3o pretos e os outros fios s\xe3o verdes."}),"\n",(0,a.jsxs)(o.p,{children:["O editor interativo n\xe3o oferece suporte para definir a cor dos fios. Voc\xea pode, no entanto, alterar a cor de qualquer fio editando o diagram.json, ",(0,a.jsx)(o.a,{href:"#saiba-mais",children:"saiba mais"}),"."]}),"\n",(0,a.jsx)(o.h2,{id:"atalhos-do-teclado",children:"Atalhos do teclado"}),"\n",(0,a.jsx)(o.p,{children:"A tabela a seguir resume os atalhos do teclado:"}),"\n",(0,a.jsxs)(o.table,{children:[(0,a.jsx)(o.thead,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.th,{children:"Tecla"}),(0,a.jsx)(o.th,{children:"Fun\xe7\xe3o"})]})}),(0,a.jsxs)(o.tbody,{children:[(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"-"}),(0,a.jsx)(o.td,{children:"Reduz o zoom"})]}),(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"+"}),(0,a.jsx)(o.td,{children:"Aumenta o zoom"})]}),(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"R"}),(0,a.jsx)(o.td,{children:"Gira a pe\xe7a selecionada"})]}),(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"Delete"}),(0,a.jsx)(o.td,{children:"Remove a pe\xe7a selecionada"})]}),(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"?"}),(0,a.jsx)(o.td,{children:"Abre a documenta\xe7\xe3o da pe\xe7a selecionada"})]}),(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"Escape"}),(0,a.jsx)(o.td,{children:"Cancela o fio (no modo de fia\xe7\xe3o)"})]})]})]}),"\n",(0,a.jsx)(o.p,{children:'Usu\xe1rios do Firefox: se os atalhos do teclado n\xe3o funcionarem, certifique-se de que a configura\xe7\xe3o "Pesquisar texto ao come\xe7ar a digitar" esteja desabilitada.'}),"\n",(0,a.jsx)(o.h2,{id:"desfazer--refazer",children:"Desfazer / Refazer"}),"\n",(0,a.jsxs)(o.p,{children:["Qualquer mudan\xe7a que voc\xea fizer no editor interativo tamb\xe9m se refletir\xe1 em ",(0,a.jsx)(o.a,{href:"#saiba-mais",children:"diagram.json"}),"."]}),"\n",(0,a.jsxs)(o.p,{children:["O editor interativo ",(0,a.jsx)(o.strong,{children:"n\xe3o tem"})," o recurso de desfazer no momento (h\xe1 uma ",(0,a.jsx)(o.a,{href:"https://github.com/wokwi/wokwi-features/issues/77",children:"solicita\xe7\xe3o aberta para isso"}),")."]}),"\n",(0,a.jsx)(o.p,{children:'Voc\xea ainda pode obter o hist\xf3rico completo de Desfazer se selecionar a guia "diagram.json" no editor de c\xf3digo. Quaisquer altera\xe7\xf5es feitas no editor de diagramas interativo\nrefletir\xe1 imediatamente no editor de c\xf3digo e voc\xea poder\xe1 desfaz\xea-los clicando no editor de c\xf3digo e pressionando Ctrl+Z.'}),"\n",(0,a.jsx)(o.p,{children:'Observe que isso s\xf3 funciona se a guia "diagram.json" estiver ativa enquanto voc\xea faz altera\xe7\xf5es. Esta \xe9 uma solu\xe7\xe3o tempor\xe1ria at\xe9 implementarmos o Desfazer no editor de diagramas interativo.'}),"\n",(0,a.jsx)(o.h2,{id:"saiba-mais",children:"Saiba mais"}),"\n",(0,a.jsxs)(o.p,{children:["Caso queira saber mais sobre outras funcionalidades do simulador, d\xea uma olhada na lista abaixo. Voc\xea pode tamb\xe9m consultar as pe\xe7as na lista de ",(0,a.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/",children:"Refer\xeancia do Diagrama"}),", dispon\xedvel na documenta\xe7\xe3o do Wokwi."]}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/diagram-format",children:"Formato do diagram.json"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/keyboard-shortcuts",children:"Teclas de Atalho do Editor"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/serial-monitor",children:"O Monitor Serial"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/gdb-debugging",children:"Usando o GDB no Wokwi"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/logic-analyzer",children:"Guia do Analisador L\xf3gico"})}),"\n",(0,a.jsxs)(o.li,{children:[(0,a.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/libraries",children:"Lista completa das Bibliotecas Arduino"}),", atualmente dispon\xedveis no Wokwi."]}),"\n"]}),"\n",(0,a.jsx)(o.h2,{id:"exemplos-no-simulador",children:"Exemplos no Simulador"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/301693553069785610",children:"Pisca LED"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/304646764687786560",children:"Dado eletr\xf4nico"})}),"\n",(0,a.jsxs)(o.li,{children:[(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/301751077214093834",children:"Sensor de Temperatura NTC"}),", usando Termistor NTC e SSD1306."]}),"\n",(0,a.jsxs)(o.li,{children:[(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/301745949656482317",children:"Sensor de Umidade e Temperatura Digital"}),", com DHT22 e SSD1306."]}),"\n",(0,a.jsxs)(o.li,{children:[(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/302020345098928648",children:"Sensor Ultra-s\xf4nico"}),", usando 74HC595 e HC-SR04."]}),"\n",(0,a.jsxs)(o.li,{children:[(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/302291615188255242",children:"Controle de posi\xe7\xe3o Servo Motor"}),", com um Motor Micro Servo e um LCD1602."]}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/302199144424931848",children:"Contador de pulsos externos"})}),"\n",(0,a.jsxs)(o.li,{children:[(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/301738586036765194",children:"Rel\xf3gio"}),", usando dois 74HC595 e RTC DS1307."]}),"\n",(0,a.jsxs)(o.li,{children:[(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/304826828859638336",children:"Letreiro"}),", com quatro MAX7219, um RTC DS1307 e um sensor DHT22."]}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/313076832346833472",children:"LCD 4 bits com 74HC595"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/311202006419112513",children:"Simula\xe7\xe3o de 6 portas l\xf3gicas com Franzininho DIY"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/310022133947302466",children:"LED Bar Graph"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/306670612160447042",children:"LED RGB "})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/311426763532010048",children:"Simon Game"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/301931601583931913",children:"Sem\xe1foro"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/314180422625919552",children:"Painel de senhas para atendimento"})}),"\n"]})]})}function m(e={}){const{wrapper:o}={...(0,n.MN)(),...e.components};return o?(0,a.jsx)(o,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},95788:(e,o,i)=>{i.d(o,{MN:()=>c});var a=i(11504);function n(e,o,i){return o in e?Object.defineProperty(e,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[o]=i,e}function r(e,o){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);o&&(a=a.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),i.push.apply(i,a)}return i}function s(e){for(var o=1;o<arguments.length;o++){var i=null!=arguments[o]?arguments[o]:{};o%2?r(Object(i),!0).forEach((function(o){n(e,o,i[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):r(Object(i)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(i,o))}))}return e}function d(e,o){if(null==e)return{};var i,a,n=function(e,o){if(null==e)return{};var i,a,n={},r=Object.keys(e);for(a=0;a<r.length;a++)i=r[a],o.indexOf(i)>=0||(n[i]=e[i]);return n}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)i=r[a],o.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var t=a.createContext({}),c=function(e){var o=a.useContext(t),i=o;return e&&(i="function"==typeof e?e(o):s(s({},o),e)),i},l={inlineCode:"code",wrapper:function(e){var o=e.children;return a.createElement(a.Fragment,{},o)}},m=a.forwardRef((function(e,o){var i=e.components,n=e.mdxType,r=e.originalType,t=e.parentName,m=d(e,["components","mdxType","originalType","parentName"]),p=c(i),h=n,u=p["".concat(t,".").concat(h)]||p[h]||l[h]||r;return i?a.createElement(u,s(s({ref:o},m),{},{components:i})):a.createElement(u,s({ref:o},m))}));m.displayName="MDXCreateElement"},51898:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/wokwi-add-part-926231e515ac4ee3870435dab3b57a96.gif"},92836:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/wokwi-button-example-48d78418193c8ce581aeaf830011cc9c.gif"},68520:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/wokwi-code-editor-47eee91a0ab6645263b94f6bd08f4a2d.gif"},13644:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/wokwi-franzininho-diy-0e10ac8a10de848902742f1eca4a1dd5.png"},35904:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/wokwi-simulation-d50447bbaca6bad8045412b26dcd3bdf.gif"},83576:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/wokwi-wire-delete-e7d78e867645f88f9ce03d0fbe96b94b.gif"},61464:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/wokwi-wire-22136c43f0684fab1cd744b2fdd96e57.gif"}}]); \ No newline at end of file diff --git a/assets/js/f67a9ad7.89fa15f2.js b/assets/js/f67a9ad7.89fa15f2.js deleted file mode 100755 index d63d00246..000000000 --- a/assets/js/f67a9ad7.89fa15f2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3634],{3905:(e,a,o)=>{o.d(a,{Zo:()=>p,kt:()=>k});var t=o(7294);function i(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function n(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,t)}return o}function r(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?n(Object(o),!0).forEach((function(a){i(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function s(e,a){if(null==e)return{};var o,t,i=function(e,a){if(null==e)return{};var o,t,i={},n=Object.keys(e);for(t=0;t<n.length;t++)o=n[t],a.indexOf(o)>=0||(i[o]=e[o]);return i}(e,a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(t=0;t<n.length;t++)o=n[t],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var d=t.createContext({}),l=function(e){var a=t.useContext(d),o=a;return e&&(o="function"==typeof e?e(a):r(r({},a),e)),o},p=function(e){var a=l(e.components);return t.createElement(d.Provider,{value:a},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},c=t.forwardRef((function(e,a){var o=e.components,i=e.mdxType,n=e.originalType,d=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=l(o),c=i,k=m["".concat(d,".").concat(c)]||m[c]||u[c]||n;return o?t.createElement(k,r(r({ref:a},p),{},{components:o})):t.createElement(k,r({ref:a},p))}));function k(e,a){var o=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var n=o.length,r=new Array(n);r[0]=c;var s={};for(var d in a)hasOwnProperty.call(a,d)&&(s[d]=a[d]);s.originalType=e,s[m]="string"==typeof e?e:i,r[1]=s;for(var l=2;l<n;l++)r[l]=o[l];return t.createElement.apply(null,r)}return t.createElement.apply(null,o)}c.displayName="MDXCreateElement"},5350:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var t=o(3117),i=(o(7294),o(3905));const n={id:"wokwi-intro",title:"Como simular a Franzininho DIY no Wokwi",slug:"/franzininho-diy/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY"},r=void 0,s={unversionedId:"FranzininhoDIY/wokwi/wokwi-intro",id:"FranzininhoDIY/wokwi/wokwi-intro",title:"Como simular a Franzininho DIY no Wokwi",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY",source:"@site/docs/FranzininhoDIY/wokwi/franzininho-wokwi.md",sourceDirName:"FranzininhoDIY/wokwi",slug:"/franzininho-diy/wokwi/primeiros-passos",permalink:"/docs/franzininho-diy/wokwi/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/wokwi/franzininho-wokwi.md",tags:[],version:"current",frontMatter:{id:"wokwi-intro",title:"Como simular a Franzininho DIY no Wokwi",slug:"/franzininho-diy/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY"},sidebar:"docs",previous:{title:"TODO",permalink:"/docs/franzininho-diy/exemplos-avr-libc/todo"},next:{title:"Franzininho DIY no PICSimLab",permalink:"/docs/franzininho-diy/picsimlab/primeiros-passos"}},d={},l=[{value:"Primeiros passos",id:"primeiros-passos",level:2},{value:"C\xf3digo do exemplo 1",id:"c\xf3digo-do-exemplo-1",level:3},{value:"Pe\xe7as",id:"pe\xe7as",level:2},{value:"Adicionando uma nova pe\xe7a",id:"adicionando-uma-nova-pe\xe7a",level:3},{value:"Rotacionando uma pe\xe7a",id:"rotacionando-uma-pe\xe7a",level:3},{value:"Removendo uma pe\xe7a",id:"removendo-uma-pe\xe7a",level:3},{value:"Liga\xe7\xf5es",id:"liga\xe7\xf5es",level:2},{value:"Cria\xe7\xe3o de uma liga\xe7\xe3o entre as duas pe\xe7as",id:"cria\xe7\xe3o-de-uma-liga\xe7\xe3o-entre-as-duas-pe\xe7as",level:3},{value:"Liga\xe7\xe3o entre os fios",id:"liga\xe7\xe3o-entre-os-fios",level:3},{value:"C\xf3digo do exemplo 2",id:"c\xf3digo-do-exemplo-2",level:3},{value:"Mudando a cor de um fio",id:"mudando-a-cor-de-um-fio",level:3},{value:"Atalhos do teclado",id:"atalhos-do-teclado",level:2},{value:"Desfazer / Refazer",id:"desfazer--refazer",level:2},{value:"Saiba mais",id:"saiba-mais",level:2},{value:"Exemplos no Simulador",id:"exemplos-no-simulador",level:2}],p={toc:l},m="wrapper";function u(e){let{components:a,...n}=e;return(0,i.kt)(m,(0,t.Z)({},p,n,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Wokwi \xe9 um simulador online para Arduino e Eletr\xf4nica. Foi desenvolvido para makers, por makers."),(0,i.kt)("p",null,"Voc\xea pode usar o Wokwi para aprender a programar o Franzininho DIY, criar prot\xf3tipos de suas id\xe9ias, e compartilhar seus projetos com outros makers."),(0,i.kt)("div",{style:{textAlign:"center"}},(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://wokwi.com/arduino/new?template=franzininho"},(0,i.kt)("img",{alt:"Wokwi Franzininho DIY",src:o(814).Z,width:"280",height:"146"})))),(0,i.kt)("admonition",{title:"Dica",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Use o Template do Franzininho DIY clicando na imagem acima para come\xe7ar um novo projeto no Wokwi.")),(0,i.kt)("h2",{id:"primeiros-passos"},"Primeiros passos"),(0,i.kt)("p",null,"Vamos come\xe7ar o nosso programa acendendo o ",(0,i.kt)("inlineCode",{parentName:"p"},"LED1")," do Franzinino DIY no simulador, para isso copie ou digite o c\xf3digo abaixo no editor do Wokwi conforme imagem abaixo."),(0,i.kt)("div",{style:{textAlign:"center"}},(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Wokwi Code Editor",src:o(6779).Z,width:"640",height:"360"}))),(0,i.kt)("h3",{id:"c\xf3digo-do-exemplo-1"},"C\xf3digo do exemplo 1"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"const byte LED1 = 1;\n\nvoid setup() {\n pinMode(LED1, OUTPUT); // Configura como pino de sa\xedda digital\n}\n\nvoid loop() {\n digitalWrite(LED1, HIGH); // Acende o LED interno\n delay(1000); // Aguarda um segundo\n digitalWrite(LED1, LOW); // Apaga o LED interno\n delay(1000); // Aguarda um segundo\n}\n")),(0,i.kt)("p",null,"Em seguida, vamos executar o nosso programa clicando no bot\xe3o verde conforme a imagem abaixo."),(0,i.kt)("div",{style:{textAlign:"center"}},(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Wokwi Simulation",src:o(6446).Z,width:"640",height:"360"}))),(0,i.kt)("h2",{id:"pe\xe7as"},"Pe\xe7as"),(0,i.kt)("p",null,"Vamos chamar os novos m\xf3dulos ou componentes de ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("em",{parentName:"strong"},"pe\xe7as")),", que seriam como por exemplo, as pe\xe7as de um jogo de montagem, onde vamos adicionando cada uma para depois fazermos as liga\xe7\xf5es entre elas."),(0,i.kt)("p",null,"Cada projeto de simula\xe7\xe3o cont\xe9m um arquivo ",(0,i.kt)("a",{parentName:"p",href:"#saiba-mais"},"diagram.json")," localizado no editor de c\xf3digo. Este arquivo define as pe\xe7as\nque ser\xe3o usadas para a simula\xe7\xe3o, suas propriedades e as conex\xf5es entre os componentes."),(0,i.kt)("p",null,"O editor de diagramas fornece uma maneira interativa de editar seu diagrama: adicionando pe\xe7as \xe0 simula\xe7\xe3o e definindo as conex\xf5es entre elas."),(0,i.kt)("h3",{id:"adicionando-uma-nova-pe\xe7a"},"Adicionando uma nova pe\xe7a"),(0,i.kt)("p",null,"Para adicionar uma nova pe\xe7a, clique no bot\xe3o ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("em",{parentName:"strong"},'roxo "+"'))," na parte superior do editor de diagramas."),(0,i.kt)("p",null,"Voc\xea ver\xe1 um menu com uma lista de pe\xe7as que voc\xea pode adicionar. Escolha uma pe\xe7a para adicion\xe1-la. A pe\xe7a ser\xe1 adicionada na posi\xe7\xe3o (0, 0), e ent\xe3o voc\xea pode arrast\xe1-la para a posi\xe7\xe3o desejada, conforme imagem abaixo."),(0,i.kt)("div",{style:{textAlign:"center"}},(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Wokwi Add part",src:o(5974).Z,width:"640",height:"360"}))),(0,i.kt)("h3",{id:"rotacionando-uma-pe\xe7a"},"Rotacionando uma pe\xe7a"),(0,i.kt)("p",null,'Gire uma pe\xe7a clicando nela (para selecion\xe1-la) e pressionando "R". A pe\xe7a girar\xe1 90 graus no sentido hor\xe1rio. Se voc\xea precisar girar uma pe\xe7a\ncom um valor diferente (por exemplo, 45 graus), voc\xea pode conseguir isso editando o arquivo ',(0,i.kt)("a",{parentName:"p",href:"#saiba-mais"},"diagram.json")," no editor de c\xf3digo."),(0,i.kt)("h3",{id:"removendo-uma-pe\xe7a"},"Removendo uma pe\xe7a"),(0,i.kt)("p",null,"Exclua uma pe\xe7a clicando nela (para selecion\xe1-la) e em seguida pressionando a tecla Delete."),(0,i.kt)("h2",{id:"liga\xe7\xf5es"},"Liga\xe7\xf5es"),(0,i.kt)("h3",{id:"cria\xe7\xe3o-de-uma-liga\xe7\xe3o-entre-as-duas-pe\xe7as"},"Cria\xe7\xe3o de uma liga\xe7\xe3o entre as duas pe\xe7as"),(0,i.kt)("p",null,"Para criar um ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("em",{parentName:"strong"},"novo fio"))," entre duas pe\xe7as, clique em um dos pinos que deseja conectar. Em seguida, clique no segundo pino (alvo). Isso criar\xe1 o fio."),(0,i.kt)("div",{style:{textAlign:"center"}},(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Wokwi Add part",src:o(4313).Z,width:"640",height:"360"}))),(0,i.kt)("p",null,"Se quiser que o fio v\xe1 de uma maneira espec\xedfica, voc\xea pode gui\xe1-lo clicando para onde deseja que ele v\xe1 ap\xf3s selecionar o primeiro pino."),(0,i.kt)("p",null,"Para cancelar um novo fio (exclua-o sem selecionar um pino de destino), clique com o bot\xe3o direito do mouse ou pressione Escape."),(0,i.kt)("p",null,"Para excluir uma liga\xe7\xe3o apenas clique com o bot\xe3o esquerdo do mouse no fio que ele ser\xe1 removido."),(0,i.kt)("div",{style:{textAlign:"center"}},(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Wokwi Add part",src:o(9559).Z,width:"640",height:"360"}))),(0,i.kt)("h3",{id:"liga\xe7\xe3o-entre-os-fios"},"Liga\xe7\xe3o entre os fios"),(0,i.kt)("p",null,"Para fazer mais de uma liga\xe7\xe3o na mesma pe\xe7a, apenas arraste o fio at\xe9 o pino da pe\xe7a, conforme a imagem abaixo."),(0,i.kt)("div",{style:{textAlign:"center"}},(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Wokwi Add part",src:o(8733).Z,width:"640",height:"360"}))),(0,i.kt)("admonition",{title:"Aten\xe7\xe3o",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Cuidado para n\xe3o clicar em cima de um fio existente ao arrastar o segundo fio e remov\xea-lo sem querer. Procure sempre clicar em cima do pino da pe\xe7a.")),(0,i.kt)("h3",{id:"c\xf3digo-do-exemplo-2"},"C\xf3digo do exemplo 2"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"const byte BUTTON = 0;\nconst byte LED1 = 1;\n\nint buttonState = 0;\n\nvoid setup() {\n pinMode(LED1, OUTPUT); // Configura como pino de sa\xedda digital\n pinMode(BUTTON, INPUT); // Configura como pino de entrada\n}\n\nvoid loop() {\n // L\xea o estado do bot\xe3o\n buttonState = digitalRead(BUTTON);\n\n // Verifica se est\xe1 pressionado\n if (buttonState == LOW) {\n digitalWrite(LED1, HIGH); // Acende o LED interno\n } else {\n digitalWrite(LED1, LOW); // Apaga o LED interno\n }\n}\n")),(0,i.kt)("h3",{id:"mudando-a-cor-de-um-fio"},"Mudando a cor de um fio"),(0,i.kt)("p",null,"A cor dos novos fios \xe9 determinada automaticamente pela fun\xe7\xe3o do pino: os fios que come\xe7am nos pinos de aterramento s\xe3o pretos e os outros fios s\xe3o verdes."),(0,i.kt)("p",null,"O editor interativo n\xe3o oferece suporte para definir a cor dos fios. Voc\xea pode, no entanto, alterar a cor de qualquer fio editando o diagram.json, ",(0,i.kt)("a",{parentName:"p",href:"#saiba-mais"},"saiba mais"),"."),(0,i.kt)("h2",{id:"atalhos-do-teclado"},"Atalhos do teclado"),(0,i.kt)("p",null,"A tabela a seguir resume os atalhos do teclado:"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Tecla"),(0,i.kt)("th",{parentName:"tr",align:null},"Fun\xe7\xe3o"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"-"),(0,i.kt)("td",{parentName:"tr",align:null},"Reduz o zoom")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"+"),(0,i.kt)("td",{parentName:"tr",align:null},"Aumenta o zoom")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"R"),(0,i.kt)("td",{parentName:"tr",align:null},"Gira a pe\xe7a selecionada")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Delete"),(0,i.kt)("td",{parentName:"tr",align:null},"Remove a pe\xe7a selecionada")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"?"),(0,i.kt)("td",{parentName:"tr",align:null},"Abre a documenta\xe7\xe3o da pe\xe7a selecionada")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Escape"),(0,i.kt)("td",{parentName:"tr",align:null},"Cancela o fio (no modo de fia\xe7\xe3o)")))),(0,i.kt)("p",null,'Usu\xe1rios do Firefox: se os atalhos do teclado n\xe3o funcionarem, certifique-se de que a configura\xe7\xe3o "Pesquisar texto ao come\xe7ar a digitar" esteja desabilitada.'),(0,i.kt)("h2",{id:"desfazer--refazer"},"Desfazer / Refazer"),(0,i.kt)("p",null,"Qualquer mudan\xe7a que voc\xea fizer no editor interativo tamb\xe9m se refletir\xe1 em ",(0,i.kt)("a",{parentName:"p",href:"#saiba-mais"},"diagram.json"),"."),(0,i.kt)("p",null,"O editor interativo ",(0,i.kt)("strong",{parentName:"p"},"n\xe3o tem")," o recurso de desfazer no momento (h\xe1 uma ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/wokwi/wokwi-features/issues/77"},"solicita\xe7\xe3o aberta para isso"),")."),(0,i.kt)("p",null,'Voc\xea ainda pode obter o hist\xf3rico completo de Desfazer se selecionar a guia "diagram.json" no editor de c\xf3digo. Quaisquer altera\xe7\xf5es feitas no editor de diagramas interativo\nrefletir\xe1 imediatamente no editor de c\xf3digo e voc\xea poder\xe1 desfaz\xea-los clicando no editor de c\xf3digo e pressionando Ctrl+Z.'),(0,i.kt)("p",null,'Observe que isso s\xf3 funciona se a guia "diagram.json" estiver ativa enquanto voc\xea faz altera\xe7\xf5es. Esta \xe9 uma solu\xe7\xe3o tempor\xe1ria at\xe9 implementarmos o Desfazer no editor de diagramas interativo.'),(0,i.kt)("h2",{id:"saiba-mais"},"Saiba mais"),(0,i.kt)("p",null,"Caso queira saber mais sobre outras funcionalidades do simulador, d\xea uma olhada na lista abaixo. Voc\xea pode tamb\xe9m consultar as pe\xe7as na lista de ",(0,i.kt)("a",{parentName:"p",href:"https://docs.wokwi.com/pt-BR/"},"Refer\xeancia do Diagrama"),", dispon\xedvel na documenta\xe7\xe3o do Wokwi."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/diagram-format"},"Formato do diagram.json")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/keyboard-shortcuts"},"Teclas de Atalho do Editor")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/serial-monitor"},"O Monitor Serial")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/gdb-debugging"},"Usando o GDB no Wokwi")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/logic-analyzer"},"Guia do Analisador L\xf3gico")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/libraries"},"Lista completa das Bibliotecas Arduino"),", atualmente dispon\xedveis no Wokwi.")),(0,i.kt)("h2",{id:"exemplos-no-simulador"},"Exemplos no Simulador"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/301693553069785610"},"Pisca LED")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/304646764687786560"},"Dado eletr\xf4nico")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/301751077214093834"},"Sensor de Temperatura NTC"),", usando Termistor NTC e SSD1306."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/301745949656482317"},"Sensor de Umidade e Temperatura Digital"),", com DHT22 e SSD1306."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/302020345098928648"},"Sensor Ultra-s\xf4nico"),", usando 74HC595 e HC-SR04."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/302291615188255242"},"Controle de posi\xe7\xe3o Servo Motor"),", com um Motor Micro Servo e um LCD1602."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/302199144424931848"},"Contador de pulsos externos")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/301738586036765194"},"Rel\xf3gio"),", usando dois 74HC595 e RTC DS1307."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/304826828859638336"},"Letreiro"),", com quatro MAX7219, um RTC DS1307 e um sensor DHT22."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/313076832346833472"},"LCD 4 bits com 74HC595")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/311202006419112513"},"Simula\xe7\xe3o de 6 portas l\xf3gicas com Franzininho DIY")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/310022133947302466"},"LED Bar Graph")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/306670612160447042"},"LED RGB ")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/311426763532010048"},"Simon Game")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/301931601583931913"},"Sem\xe1foro")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/314180422625919552"},"Painel de senhas para atendimento"))))}u.isMDXComponent=!0},5974:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/wokwi-add-part-926231e515ac4ee3870435dab3b57a96.gif"},8733:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/wokwi-button-example-48d78418193c8ce581aeaf830011cc9c.gif"},6779:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/wokwi-code-editor-47eee91a0ab6645263b94f6bd08f4a2d.gif"},814:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/wokwi-franzininho-diy-0e10ac8a10de848902742f1eca4a1dd5.png"},6446:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/wokwi-simulation-d50447bbaca6bad8045412b26dcd3bdf.gif"},9559:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/wokwi-wire-delete-e7d78e867645f88f9ce03d0fbe96b94b.gif"},4313:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/wokwi-wire-22136c43f0684fab1cd744b2fdd96e57.gif"}}]); \ No newline at end of file diff --git a/assets/js/f6af7cfc.3ef9aa07.js b/assets/js/f6af7cfc.3ef9aa07.js new file mode 100755 index 000000000..a8e66d565 --- /dev/null +++ b/assets/js/f6af7cfc.3ef9aa07.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1576],{59724:(e,o,i)=>{i.r(o),i.d(o,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>n,metadata:()=>t,toc:()=>c});var s=i(17624),a=i(95788);const n={id:"saida-digital",title:"Sa\xedda Digital",slug:"/franzininho-diy/exemplos-avr-libc/saida-digital",description:"Vamos entender como trabalhar com as sa\xeddas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},r=void 0,t={id:"FranzininhoDIY/exemplos-avr-libc/saida-digital",title:"Sa\xedda Digital",description:"Vamos entender como trabalhar com as sa\xeddas Digitais",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/saida-digital.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/saida-digital",permalink:"/docs/franzininho-diy/exemplos-avr-libc/saida-digital",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/saida-digital.md",tags:[],version:"current",frontMatter:{id:"saida-digital",title:"Sa\xedda Digital",slug:"/franzininho-diy/exemplos-avr-libc/saida-digital",description:"Vamos entender como trabalhar com as sa\xeddas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Hello, World!",permalink:"/docs/franzininho-diy/exemplos-avr-libc/hello-world"},next:{title:"Entrada Digital",permalink:"/docs/franzininho-diy/exemplos-avr-libc/entrada-digital"}},d={},c=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Pinos do ATtiny85",id:"pinos-do-attiny85",level:2},{value:"Algumas Particularidades do circuito da Franzininho DIY",id:"algumas-particularidades-do-circuito-da-franzininho-diy",level:3},{value:"Registradores respons\xe1veis pelos pinos de I/O",id:"registradores-respons\xe1veis-pelos-pinos-de-io",level:2},{value:"C\xf3digos",id:"c\xf3digos",level:2},{value:"Desafio",id:"desafio",level:2}];function l(e){const o={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.MN)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.p,{children:"Agora que j\xe1 estamos com as ferramentas instaladas e a placa Franzininho DIY em m\xe3os, vamos dar in\xedcio aos estudos dos perif\xe9ricos internos do ATtiny85."}),"\n",(0,s.jsx)(o.p,{children:"Nesse artigo vamos explorar os pinos de I/O como sa\xedda digital. Ao final, voc\xea saber\xe1 como acionar dispositivos externos a Franzininho DIY."}),"\n",(0,s.jsx)(o.h2,{id:"recursos-necess\xe1rios",children:"Recursos Necess\xe1rios"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"Placa Franzininho DIY(com Micronucleus)"}),"\n",(0,s.jsx)(o.li,{children:"Computador com as ferramentas de software instaladas"}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"pinos-do-attiny85",children:"Pinos do ATtiny85"}),"\n",(0,s.jsx)(o.p,{children:"O ATtiny85 possui 8 pinos, sendo que 6 deles podemos usar como I/O (entradas ou sa\xeddas) digitais. Os pinos de I/O s\xe3o nomeados conforme a porta que eles pertencem. Na figura a seguir vemos que os pinos do ATtiny85 s\xe3o nomeados de PBx, onde x \xe9 o n\xfamero correspondente ao pino no registrador (n\xe3o se preocupe, vamos ver mais detalhes a seguir):"}),"\n",(0,s.jsx)(o.p,{children:(0,s.jsx)(o.img,{alt:"Pinagem do ATtiny85",src:i(42212).c+"",width:"2094",height:"498"})}),"\n",(0,s.jsx)(o.p,{children:"Cada pino de I/O pode ser usado como entrada ou sa\xedda e tamb\xe9m como outras fun\xe7\xf5es nesse momento s\xf3 vamos trabalhar com os pinos funcionando como GPIO (General Porpouse Input/Output)."}),"\n",(0,s.jsx)(o.p,{children:"Conforme exibido na imagem acima, temos os seguintes pinos dispon\xedveis no ATtiny85:"}),"\n",(0,s.jsx)(o.p,{children:"PB0, PB1, PB2, PB3, PB4, PB5."}),"\n",(0,s.jsx)(o.h3,{id:"algumas-particularidades-do-circuito-da-franzininho-diy",children:"Algumas Particularidades do circuito da Franzininho DIY"}),"\n",(0,s.jsx)(o.p,{children:"Os pinos de I/O s\xe3o marcados em Amarelo no Pinout da Franzininho DIY"}),"\n",(0,s.jsx)(o.p,{children:(0,s.jsx)(o.img,{alt:"pinout Franzininho DIY",src:i(12296).c+"",width:"1630",height:"1122"})}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"O pino PB5 \xe9 configurado como RESET na Franzininho DIY, sendo assim n\xe3o poderemos us\xe1-lo como I/O."}),"\n",(0,s.jsx)(o.li,{children:"Os pinos PB3 e PB4 s\xe3o usados para o circuito da USB, sendo assim temos que us\xe1-los com cautela. Geralmente esses pinos s\xe3o usados apenas como sa\xeddas digitais."}),"\n",(0,s.jsx)(o.li,{children:"O LED amarelo da placa est\xe1 ligado ao pino PB1."}),"\n",(0,s.jsx)(o.li,{children:"Os pinos PB0 E PB2 n\xe3o possuem circuito ligados a eles."}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"registradores-respons\xe1veis-pelos-pinos-de-io",children:"Registradores respons\xe1veis pelos pinos de I/O"}),"\n",(0,s.jsx)(o.p,{children:"Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"PORTB: Registrador de dados. Respons\xe1vel pela escrita nos pinos;"}),"\n",(0,s.jsx)(o.li,{children:"DDRB: Registrador de dire\xe7\xe3o do pino. Respons\xe1vel pela configura\xe7\xe3o dos pinos para definir se ser\xe1 entrada ou sa\xedda;"}),"\n",(0,s.jsx)(o.li,{children:"PINB: Registrador de entrada da porta. Respons\xe1vel pela leitura do estado do pino."}),"\n"]}),"\n",(0,s.jsx)(o.p,{children:"Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos ter\xedamos os finais A, B,C, etc. Cada porta s\xf3 possui no m\xe1ximo 8 pinos."}),"\n",(0,s.jsx)(o.p,{children:"Na se\xe7\xe3o 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configura\xe7\xf5es poss\xedveis para os pinos:"}),"\n",(0,s.jsx)(o.p,{children:(0,s.jsx)(o.img,{alt:"configura\xe7\xe3o GPIO",src:i(64516).c+"",width:"1194",height:"339"})}),"\n",(0,s.jsx)(o.p,{children:"A figura abaixo exibe os registradores respons\xe1veis pelos pino de I/O do PORTB:"}),"\n",(0,s.jsx)(o.p,{children:(0,s.jsx)(o.img,{alt:"configura\xe7\xe3o GPIO",src:i(59336).c+"",width:"1448",height:"696"})}),"\n",(0,s.jsx)(o.p,{children:"Note que cada bit dos registradores \xe9 respons\xe1vel por pino sendo indexado pelo n\xfamero correspondente ao bit. Dessa forma, se quisermos usar o pino PB1 para acionar o LED, devemos configurar o registrador DDRB da seguinte forma:"}),"\n",(0,s.jsxs)(o.table,{children:[(0,s.jsx)(o.thead,{children:(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.th,{children:"7"}),(0,s.jsx)(o.th,{children:"6"}),(0,s.jsx)(o.th,{children:"5"}),(0,s.jsx)(o.th,{children:"4"}),(0,s.jsx)(o.th,{children:"3"}),(0,s.jsx)(o.th,{children:"2"}),(0,s.jsx)(o.th,{children:"1"}),(0,s.jsx)(o.th,{children:"0"})]})}),(0,s.jsx)(o.tbody,{children:(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:"-"}),(0,s.jsx)(o.td,{children:"-"}),(0,s.jsx)(o.td,{children:"0"}),(0,s.jsx)(o.td,{children:"0"}),(0,s.jsx)(o.td,{children:"0"}),(0,s.jsx)(o.td,{children:"0"}),(0,s.jsx)(o.td,{children:"1"}),(0,s.jsx)(o.td,{children:"0"})]})})]}),"\n",(0,s.jsx)(o.p,{children:"E para acionar ligar/deligar o LED devemos colocar 1 ou no bit correspondente no PORTB."}),"\n",(0,s.jsx)(o.p,{children:"Vamos a um exemplo para ficar mais claro."}),"\n",(0,s.jsx)(o.h2,{id:"c\xf3digos",children:"C\xf3digos"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-c",children:"#include <avr/io.h>\n#include <util/delay.h>\n\n#define F_CPU 16500000L // Frequ\xeancia do oscilador. usado para a fun\xe7\xe3o de delay\n\nint main(void)\n{\n DDRB = 0b00000010; // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n while (1)\n {\n PORTB = 0b00000010; // Liga o LED 1\n _delay_ms(250); // Aguarda 250 ms\n PORTB = 0b00000000; // Desliga o LED 1\n _delay_ms(250); // Aguarda 250 ms\n }\n\n return (0);\n}\n"})}),"\n",(0,s.jsx)(o.p,{children:"O exemplo acima pisca o LED em intervalos de 250 ms. A configura\xe7\xe3o do pino PB1 como sa\xedda foi feito colocando o bit1 de DDRB em 1. J\xe1 para ligar e desligar o LED foi manipulado o bit 1 de PORTB, hora em 1 hora em 0."}),"\n",(0,s.jsx)(o.p,{children:"Bacana, n\xe3o?"}),"\n",(0,s.jsxs)(o.p,{children:["podemos melhorar a manipula\xe7\xe3o dos bits dos registradores usando macros. As macros s\xe3o rotinas que facilitam nossas vidas. Recomendo que se voc\xea leia esse artigo para entender sobre as macros e as opera\xe7\xf5es efetuadas: ",(0,s.jsx)(o.a,{href:"https://www.embarcados.com.br/bits-em-linguagem-c/",children:"https://www.embarcados.com.br/bits-em-linguagem-c/"})]}),"\n",(0,s.jsx)(o.p,{children:"Vamos usar as seguintes macros:"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{children:"#define setBit(valor,bit) (valor |= (1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n"})}),"\n",(0,s.jsx)(o.p,{children:"Os nomes j\xe1 s\xe3o auto-explicativos mas vamos verificar como us\xe1-las no programa em C:"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-c",children:"#include <avr/io.h>\n#include <util/delay.h>\n\n#define F_CPU 16500000L\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n\nint main(void)\n{\n setBit(DDRB,PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n while (1)\n {\n toogleBit(PORTB, PB1); // Inverte o estado do pino\n _delay_ms(250); // Aguarda 250 ms\n }\n\n return (0);\n}\n"})}),"\n",(0,s.jsx)(o.p,{children:"Dessa forma manipulamos somente os bits desejados, n\xe3o alterando os valores dos outros que poder\xe3o ser usados para outras aplica\xe7\xf5es."}),"\n",(0,s.jsx)(o.h2,{id:"desafio",children:"Desafio"}),"\n",(0,s.jsx)(o.p,{children:"Coloque outro LED no pino PB0 e o acione alternadamente ao pino PB1, ou seja, quando LED no PB0 estiver ligado o LED em PB1 deve apagar e vice-versa."}),"\n",(0,s.jsxs)(o.table,{children:[(0,s.jsx)(o.thead,{children:(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.th,{children:"Autor"}),(0,s.jsx)(o.th,{children:(0,s.jsx)(o.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]})}),(0,s.jsx)(o.tbody,{children:(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:"Data:"}),(0,s.jsx)(o.td,{children:"24/04/2021"})]})})]})]})}function p(e={}){const{wrapper:o}={...(0,a.MN)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},95788:(e,o,i)=>{i.d(o,{MN:()=>c});var s=i(11504);function a(e,o,i){return o in e?Object.defineProperty(e,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[o]=i,e}function n(e,o){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);o&&(s=s.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),i.push.apply(i,s)}return i}function r(e){for(var o=1;o<arguments.length;o++){var i=null!=arguments[o]?arguments[o]:{};o%2?n(Object(i),!0).forEach((function(o){a(e,o,i[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):n(Object(i)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(i,o))}))}return e}function t(e,o){if(null==e)return{};var i,s,a=function(e,o){if(null==e)return{};var i,s,a={},n=Object.keys(e);for(s=0;s<n.length;s++)i=n[s],o.indexOf(i)>=0||(a[i]=e[i]);return a}(e,o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(s=0;s<n.length;s++)i=n[s],o.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}var d=s.createContext({}),c=function(e){var o=s.useContext(d),i=o;return e&&(i="function"==typeof e?e(o):r(r({},o),e)),i},l={inlineCode:"code",wrapper:function(e){var o=e.children;return s.createElement(s.Fragment,{},o)}},p=s.forwardRef((function(e,o){var i=e.components,a=e.mdxType,n=e.originalType,d=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),m=c(i),h=a,u=m["".concat(d,".").concat(h)]||m[h]||l[h]||n;return i?s.createElement(u,r(r({ref:o},p),{},{components:i})):s.createElement(u,r({ref:o},p))}));p.displayName="MDXCreateElement"},12296:(e,o,i)=>{i.d(o,{c:()=>s});const s=i.p+"assets/images/Pinagem-Franzininho-DIY-V2RV2-42a18903012c4dc223f9d4c774730625.png"},64516:(e,o,i)=>{i.d(o,{c:()=>s});const s=i.p+"assets/images/config-gpio-5448c58ddfc3c042b28c64b3cedb300e.png"},42212:(e,o,i)=>{i.d(o,{c:()=>s});const s=i.p+"assets/images/pinagem-attiny85-8fa815c3f3e21f9c3b699b09c9a7f6f1.png"},59336:(e,o,i)=>{i.d(o,{c:()=>s});const s=i.p+"assets/images/registradores-port-B-f8a36498e9dd1043ec81211a0fb7103c.png"}}]); \ No newline at end of file diff --git a/assets/js/f6af7cfc.74450e63.js b/assets/js/f6af7cfc.74450e63.js deleted file mode 100755 index 7ca246437..000000000 --- a/assets/js/f6af7cfc.74450e63.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1506],{3905:(e,a,o)=>{o.d(a,{Zo:()=>p,kt:()=>g});var n=o(7294);function t(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function i(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?i(Object(o),!0).forEach((function(a){t(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function s(e,a){if(null==e)return{};var o,n,t=function(e,a){if(null==e)return{};var o,n,t={},i=Object.keys(e);for(n=0;n<i.length;n++)o=i[n],a.indexOf(o)>=0||(t[o]=e[o]);return t}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)o=i[n],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var l=n.createContext({}),d=function(e){var a=n.useContext(l),o=a;return e&&(o="function"==typeof e?e(a):r(r({},a),e)),o},p=function(e){var a=d(e.components);return n.createElement(l.Provider,{value:a},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},m=n.forwardRef((function(e,a){var o=e.components,t=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=d(o),m=t,g=u["".concat(l,".").concat(m)]||u[m]||c[m]||i;return o?n.createElement(g,r(r({ref:a},p),{},{components:o})):n.createElement(g,r({ref:a},p))}));function g(e,a){var o=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var i=o.length,r=new Array(i);r[0]=m;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[u]="string"==typeof e?e:t,r[1]=s;for(var d=2;d<i;d++)r[d]=o[d];return n.createElement.apply(null,r)}return n.createElement.apply(null,o)}m.displayName="MDXCreateElement"},5673:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var n=o(3117),t=(o(7294),o(3905));const i={id:"saida-digital",title:"Sa\xedda Digital",slug:"/franzininho-diy/exemplos-avr-libc/saida-digital",description:"Vamos entender como trabalhar com as sa\xeddas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},r=void 0,s={unversionedId:"FranzininhoDIY/exemplos-avr-libc/saida-digital",id:"FranzininhoDIY/exemplos-avr-libc/saida-digital",title:"Sa\xedda Digital",description:"Vamos entender como trabalhar com as sa\xeddas Digitais",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/saida-digital.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/saida-digital",permalink:"/docs/franzininho-diy/exemplos-avr-libc/saida-digital",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/saida-digital.md",tags:[],version:"current",frontMatter:{id:"saida-digital",title:"Sa\xedda Digital",slug:"/franzininho-diy/exemplos-avr-libc/saida-digital",description:"Vamos entender como trabalhar com as sa\xeddas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Hello, World!",permalink:"/docs/franzininho-diy/exemplos-avr-libc/hello-world"},next:{title:"Entrada Digital",permalink:"/docs/franzininho-diy/exemplos-avr-libc/entrada-digital"}},l={},d=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Pinos do ATtiny85",id:"pinos-do-attiny85",level:2},{value:"Algumas Particularidades do circuito da Franzininho DIY",id:"algumas-particularidades-do-circuito-da-franzininho-diy",level:3},{value:"Registradores respons\xe1veis pelos pinos de I/O",id:"registradores-respons\xe1veis-pelos-pinos-de-io",level:2},{value:"C\xf3digos",id:"c\xf3digos",level:2},{value:"Desafio",id:"desafio",level:2}],p={toc:d},u="wrapper";function c(e){let{components:a,...i}=e;return(0,t.kt)(u,(0,n.Z)({},p,i,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Agora que j\xe1 estamos com as ferramentas instaladas e a placa Franzininho DIY em m\xe3os, vamos dar in\xedcio aos estudos dos perif\xe9ricos internos do ATtiny85."),(0,t.kt)("p",null,"Nesse artigo vamos explorar os pinos de I/O como sa\xedda digital. Ao final, voc\xea saber\xe1 como acionar dispositivos externos a Franzininho DIY."),(0,t.kt)("h2",{id:"recursos-necess\xe1rios"},"Recursos Necess\xe1rios"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Placa Franzininho DIY(com Micronucleus)"),(0,t.kt)("li",{parentName:"ul"},"Computador com as ferramentas de software instaladas")),(0,t.kt)("h2",{id:"pinos-do-attiny85"},"Pinos do ATtiny85"),(0,t.kt)("p",null,"O ATtiny85 possui 8 pinos, sendo que 6 deles podemos usar como I/O (entradas ou sa\xeddas) digitais. Os pinos de I/O s\xe3o nomeados conforme a porta que eles pertencem. Na figura a seguir vemos que os pinos do ATtiny85 s\xe3o nomeados de PBx, onde x \xe9 o n\xfamero correspondente ao pino no registrador (n\xe3o se preocupe, vamos ver mais detalhes a seguir):"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Pinagem do ATtiny85",src:o(2285).Z,width:"2094",height:"498"})),(0,t.kt)("p",null,"Cada pino de I/O pode ser usado como entrada ou sa\xedda e tamb\xe9m como outras fun\xe7\xf5es nesse momento s\xf3 vamos trabalhar com os pinos funcionando como GPIO (General Porpouse Input/Output)."),(0,t.kt)("p",null,"Conforme exibido na imagem acima, temos os seguintes pinos dispon\xedveis no ATtiny85:"),(0,t.kt)("p",null,"PB0, PB1, PB2, PB3, PB4, PB5."),(0,t.kt)("h3",{id:"algumas-particularidades-do-circuito-da-franzininho-diy"},"Algumas Particularidades do circuito da Franzininho DIY"),(0,t.kt)("p",null,"Os pinos de I/O s\xe3o marcados em Amarelo no Pinout da Franzininho DIY"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"pinout Franzininho DIY",src:o(8706).Z,width:"1630",height:"1122"})),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"O pino PB5 \xe9 configurado como RESET na Franzininho DIY, sendo assim n\xe3o poderemos us\xe1-lo como I/O."),(0,t.kt)("li",{parentName:"ul"},"Os pinos PB3 e PB4 s\xe3o usados para o circuito da USB, sendo assim temos que us\xe1-los com cautela. Geralmente esses pinos s\xe3o usados apenas como sa\xeddas digitais."),(0,t.kt)("li",{parentName:"ul"},"O LED amarelo da placa est\xe1 ligado ao pino PB1."),(0,t.kt)("li",{parentName:"ul"},"Os pinos PB0 E PB2 n\xe3o possuem circuito ligados a eles.")),(0,t.kt)("h2",{id:"registradores-respons\xe1veis-pelos-pinos-de-io"},"Registradores respons\xe1veis pelos pinos de I/O"),(0,t.kt)("p",null,"Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"PORTB: Registrador de dados. Respons\xe1vel pela escrita nos pinos;"),(0,t.kt)("li",{parentName:"ul"},"DDRB: Registrador de dire\xe7\xe3o do pino. Respons\xe1vel pela configura\xe7\xe3o dos pinos para definir se ser\xe1 entrada ou sa\xedda;"),(0,t.kt)("li",{parentName:"ul"},"PINB: Registrador de entrada da porta. Respons\xe1vel pela leitura do estado do pino.")),(0,t.kt)("p",null,"Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos ter\xedamos os finais A, B,C, etc. Cada porta s\xf3 possui no m\xe1ximo 8 pinos."),(0,t.kt)("p",null,"Na se\xe7\xe3o 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configura\xe7\xf5es poss\xedveis para os pinos:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"configura\xe7\xe3o GPIO",src:o(5368).Z,width:"1194",height:"339"})),(0,t.kt)("p",null,"A figura abaixo exibe os registradores respons\xe1veis pelos pino de I/O do PORTB:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"configura\xe7\xe3o GPIO",src:o(9192).Z,width:"1448",height:"696"})),(0,t.kt)("p",null,"Note que cada bit dos registradores \xe9 respons\xe1vel por pino sendo indexado pelo n\xfamero correspondente ao bit. Dessa forma, se quisermos usar o pino PB1 para acionar o LED, devemos configurar o registrador DDRB da seguinte forma:"),(0,t.kt)("table",null,(0,t.kt)("thead",{parentName:"table"},(0,t.kt)("tr",{parentName:"thead"},(0,t.kt)("th",{parentName:"tr",align:null},"7"),(0,t.kt)("th",{parentName:"tr",align:null},"6"),(0,t.kt)("th",{parentName:"tr",align:null},"5"),(0,t.kt)("th",{parentName:"tr",align:null},"4"),(0,t.kt)("th",{parentName:"tr",align:null},"3"),(0,t.kt)("th",{parentName:"tr",align:null},"2"),(0,t.kt)("th",{parentName:"tr",align:null},"1"),(0,t.kt)("th",{parentName:"tr",align:null},"0"))),(0,t.kt)("tbody",{parentName:"table"},(0,t.kt)("tr",{parentName:"tbody"},(0,t.kt)("td",{parentName:"tr",align:null},"-"),(0,t.kt)("td",{parentName:"tr",align:null},"-"),(0,t.kt)("td",{parentName:"tr",align:null},"0"),(0,t.kt)("td",{parentName:"tr",align:null},"0"),(0,t.kt)("td",{parentName:"tr",align:null},"0"),(0,t.kt)("td",{parentName:"tr",align:null},"0"),(0,t.kt)("td",{parentName:"tr",align:null},"1"),(0,t.kt)("td",{parentName:"tr",align:null},"0")))),(0,t.kt)("p",null,"E para acionar ligar/deligar o LED devemos colocar 1 ou no bit correspondente no PORTB."),(0,t.kt)("p",null,"Vamos a um exemplo para ficar mais claro."),(0,t.kt)("h2",{id:"c\xf3digos"},"C\xf3digos"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},"#include <avr/io.h>\n#include <util/delay.h>\n\n#define F_CPU 16500000L // Frequ\xeancia do oscilador. usado para a fun\xe7\xe3o de delay\n\nint main(void)\n{\n DDRB = 0b00000010; // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n while (1)\n {\n PORTB = 0b00000010; // Liga o LED 1\n _delay_ms(250); // Aguarda 250 ms\n PORTB = 0b00000000; // Desliga o LED 1\n _delay_ms(250); // Aguarda 250 ms\n }\n\n return (0);\n}\n")),(0,t.kt)("p",null,"O exemplo acima pisca o LED em intervalos de 250 ms. A configura\xe7\xe3o do pino PB1 como sa\xedda foi feito colocando o bit1 de DDRB em 1. J\xe1 para ligar e desligar o LED foi manipulado o bit 1 de PORTB, hora em 1 hora em 0."),(0,t.kt)("p",null,"Bacana, n\xe3o?"),(0,t.kt)("p",null,"podemos melhorar a manipula\xe7\xe3o dos bits dos registradores usando macros. As macros s\xe3o rotinas que facilitam nossas vidas. Recomendo que se voc\xea leia esse artigo para entender sobre as macros e as opera\xe7\xf5es efetuadas: ",(0,t.kt)("a",{parentName:"p",href:"https://www.embarcados.com.br/bits-em-linguagem-c/"},"https://www.embarcados.com.br/bits-em-linguagem-c/")),(0,t.kt)("p",null,"Vamos usar as seguintes macros:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"#define setBit(valor,bit) (valor |= (1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n")),(0,t.kt)("p",null,"Os nomes j\xe1 s\xe3o auto-explicativos mas vamos verificar como us\xe1-las no programa em C:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},"#include <avr/io.h>\n#include <util/delay.h>\n\n#define F_CPU 16500000L\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n\nint main(void)\n{\n setBit(DDRB,PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n while (1)\n {\n toogleBit(PORTB, PB1); // Inverte o estado do pino\n _delay_ms(250); // Aguarda 250 ms\n }\n\n return (0);\n}\n")),(0,t.kt)("p",null,"Dessa forma manipulamos somente os bits desejados, n\xe3o alterando os valores dos outros que poder\xe3o ser usados para outras aplica\xe7\xf5es."),(0,t.kt)("h2",{id:"desafio"},"Desafio"),(0,t.kt)("p",null,"Coloque outro LED no pino PB0 e o acione alternadamente ao pino PB1, ou seja, quando LED no PB0 estiver ligado o LED em PB1 deve apagar e vice-versa."),(0,t.kt)("table",null,(0,t.kt)("thead",{parentName:"table"},(0,t.kt)("tr",{parentName:"thead"},(0,t.kt)("th",{parentName:"tr",align:null},"Autor"),(0,t.kt)("th",{parentName:"tr",align:null},(0,t.kt)("a",{parentName:"th",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza")))),(0,t.kt)("tbody",{parentName:"table"},(0,t.kt)("tr",{parentName:"tbody"},(0,t.kt)("td",{parentName:"tr",align:null},"Data:"),(0,t.kt)("td",{parentName:"tr",align:null},"24/04/2021")))))}c.isMDXComponent=!0},8706:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/Pinagem-Franzininho-DIY-V2RV2-42a18903012c4dc223f9d4c774730625.png"},5368:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/config-gpio-5448c58ddfc3c042b28c64b3cedb300e.png"},2285:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/pinagem-attiny85-8fa815c3f3e21f9c3b699b09c9a7f6f1.png"},9192:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/registradores-port-B-f8a36498e9dd1043ec81211a0fb7103c.png"}}]); \ No newline at end of file diff --git a/assets/js/fd69b436.16c46d34.js b/assets/js/fd69b436.16c46d34.js new file mode 100755 index 000000000..751544220 --- /dev/null +++ b/assets/js/fd69b436.16c46d34.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9386],{92304:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=i(17624),a=i(95788);const o={id:"franzininho-diy",title:"Placa Franzininho DIY",slug:"/franzininho-diy/sobre",description:"Detalhes da Franzininho DIY"},t=void 0,s={id:"FranzininhoDIY/franzininho-diy",title:"Placa Franzininho DIY",description:"Detalhes da Franzininho DIY",source:"@site/docs/FranzininhoDIY/franzininho-diy.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/sobre",permalink:"/docs/franzininho-diy/sobre",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/franzininho-diy.md",tags:[],version:"current",frontMatter:{id:"franzininho-diy",title:"Placa Franzininho DIY",slug:"/franzininho-diy/sobre",description:"Detalhes da Franzininho DIY"},sidebar:"docs",previous:{title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",permalink:"/docs/franzininho-c0/arduino-identificacao-pinos"},next:{title:"Lista de Materiais",permalink:"/docs/franzininho-diy/lista-de-materiais"}},c={},d=[{value:"Pinout",id:"pinout",level:2},{value:"Resumo de recursos",id:"resumo-de-recursos",level:2},{value:"Documenta\xe7\xe3o",id:"documenta\xe7\xe3o",level:2},{value:"Projeto Open Hardware",id:"projeto-open-hardware",level:2},{value:"Onde comprar",id:"onde-comprar",level:2},{value:"Varejo",id:"varejo",level:3},{value:"Atacado",id:"atacado",level:3}];function l(n){const e={a:"a",admonition:"admonition",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",ul:"ul",...(0,a.MN)(),...n.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.p,{children:"A Franzininho DIY foi desenvolvida com a proposta de \u201cFa\xe7a voc\xea mesmo\u201d e com base na plataforma Arduino. O objetivo \xe9 que as pessoas que a adquirem, trilhem a jornada do Maker de eletr\xf4nica, montando e programando a sua pr\xf3pria placa compat\xedvel com Arduino."}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Placa Franzininho DIY",src:i(11576).c+"",width:"500",height:"233"})}),"\n",(0,r.jsx)(e.p,{children:"Ela \xe9 fornecida em formato de Kit para soldar, n\xe3o recomendamos que voc\xea adquira a Franzininho DIY j\xe1 soldada, pois o objetivo pedag\xf3gico compreende a jornada de montagem."}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Kit Franzininho DIY",src:i(26812).c+"",width:"600",height:"600"})}),"\n",(0,r.jsx)(e.p,{children:"\xc9 uma excelente op\xe7\xe3o para oficinas de Soldagem eletr\xf4nica e primeiros passos com a programa\xe7\xe3o Arduino. Com componentes f\xe1ceis de identificar e tamb\xe9m de soldar, permite que qualquer pessoa com pouco ou nenhum conhecimento em soldagem consiga montar a sua placa tranquilamente e criar em pouco tempo projetos como, automa\xe7\xe3o, rob\xf4s, jogos entre outros(Veja os exemplos em nossa documenta\xe7\xe3o)."}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Oficina Franzininho DIY",src:i(95860).c+"",width:"640",height:"428"})}),"\n",(0,r.jsx)(e.p,{children:"A placa \xe9 baseada no microcontrolador ATtiny85 e foi criada para fins educacionais, \xe9 voltada para estudantes de curso t\xe9cnico e engenharia, makers e hobbistas que desejam aprender sobre prototipagem, soldagem, eletr\xf4nica e programa\xe7\xe3o em uma verdadeira experi\xeancia DIY."}),"\n",(0,r.jsx)(e.p,{children:"A placa possui 5 pinos de I/O, LED indicador de Alimenta\xe7\xe3o, LED de uso geral, conector USB para alimenta\xe7\xe3o e grava\xe7\xe3o, conector para alimenta\xe7\xe3o externa e bot\xe3o de Reset."}),"\n",(0,r.jsx)(e.h2,{id:"pinout",children:"Pinout"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"pinagem Franzininho DIY",src:i(16384).c+"",width:"1209",height:"869"})}),"\n",(0,r.jsx)(e.admonition,{title:"Vers\xf5es de placas",type:"tip",children:(0,r.jsx)(e.p,{children:"Houve uma altera\xe7\xe3o da numera\xe7\xe3o dos pinos 4 e 5 no silk a partir da V2RV2.\nAinda \xe9 necess\xe1rio ajustar no software"})}),"\n",(0,r.jsx)(e.h2,{id:"resumo-de-recursos",children:"Resumo de recursos"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"Microcontrolador: ATtiny85"}),"\n",(0,r.jsx)(e.li,{children:"Pinos de I/O: at\xe9 6"}),"\n",(0,r.jsx)(e.li,{children:"Entradas Anal\xf3gicas: at\xe9 4"}),"\n",(0,r.jsx)(e.li,{children:"PWM: 3"}),"\n",(0,r.jsx)(e.li,{children:"I2C: 1"}),"\n",(0,r.jsx)(e.li,{children:"SPI: 1"}),"\n",(0,r.jsx)(e.li,{children:"Tens\xe3o de funcionamento: 5V"}),"\n",(0,r.jsx)(e.li,{children:"Alimenta\xe7\xe3o: USB(5V) ou externa (de 7,5V \xe0 9V)"}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"documenta\xe7\xe3o",children:"Documenta\xe7\xe3o"}),"\n",(0,r.jsx)(e.p,{children:"Ela pode ser programada diretamente na IDE do Arduino inclusive com Ardublock. tamb\xe9m pode ser programada em linguagem C usando IDE mais avan\xe7adas."}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://github.com/Franzininho/franzininho-diy-board/raw/main/Franzininho.pdf",children:"Esquem\xe1tico"})}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://github.com/Franzininho/franzininho-diy-board",children:"Reposit\xf3rio do Hardware"})}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"http://eepurl.com/gbR4P1",children:"e-book Franzininho - Monte e Programe seu Pr\xf3prio Arduino"})}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://www.amazon.com.br/Franzininho-F%C3%A1bio-Souza/dp/8595680531/",children:"Livro impresso: Franzininho - Monte e Programe seu Pr\xf3prio Arduino"})}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://github.com/Franzininho/franzininho-fritzing/blob/master/Franzininho-DIY/Franzininho-DIY-V2RV2.fzpz",children:"Componentes para Fritzing"})}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"projeto-open-hardware",children:"Projeto Open Hardware"}),"\n",(0,r.jsxs)(e.p,{children:["O projeto \xe9 open hardware e foi publicado em ",(0,r.jsx)(e.a,{href:"https://github.com/Franzininho/franzininho-diy-board/blob/main/LICENSE",children:"CC-BY-SA-4.0"})]}),"\n",(0,r.jsxs)(e.p,{children:["A Franzininho DIY est\xe1 certificada na ",(0,r.jsx)(e.a,{href:"https://certification.oshwa.org/br000003.html",children:"OSHWA com UID BR000003"})]}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"BR000003",src:i(46216).c+"",width:"300",height:"220"})}),"\n",(0,r.jsx)(e.admonition,{title:"Importante",type:"important",children:(0,r.jsx)(e.p,{children:"Para reprodu\xe7\xe3o do projeto ou deriva\xe7\xf5es, \xe9 importante verificar os requisitos da licen\xe7a , copyright e boas pr\xe1ticas."})}),"\n",(0,r.jsx)(e.h2,{id:"onde-comprar",children:"Onde comprar"}),"\n",(0,r.jsx)(e.h3,{id:"varejo",children:"Varejo"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://www.robocore.net/loja/embarcados/franzininho-diy",children:"Robocore"})}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://www.robocore.net/loja/embarcados/franzininho-diy",children:"FilipeFlop"})}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://www.casadarobotica.com/loja/produto.php?loja=650361&IdProd=4275&parceiro=1821",children:"Casa da Rob\xf3tica"})}),"\n"]}),"\n",(0,r.jsx)(e.h3,{id:"atacado",children:"Atacado"}),"\n",(0,r.jsxs)(e.p,{children:["Entrar em contato: ",(0,r.jsx)(e.a,{href:"mailto:contato@franzininho.com.br",children:"contato@franzininho.com.br"})]})]})}function h(n={}){const{wrapper:e}={...(0,a.MN)(),...n.components};return e?(0,r.jsx)(e,{...n,children:(0,r.jsx)(l,{...n})}):l(n)}},95788:(n,e,i)=>{i.d(e,{MN:()=>d});var r=i(11504);function a(n,e,i){return e in n?Object.defineProperty(n,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):n[e]=i,n}function o(n,e){var i=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),i.push.apply(i,r)}return i}function t(n){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?o(Object(i),!0).forEach((function(e){a(n,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(i)):o(Object(i)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(i,e))}))}return n}function s(n,e){if(null==n)return{};var i,r,a=function(n,e){if(null==n)return{};var i,r,a={},o=Object.keys(n);for(r=0;r<o.length;r++)i=o[r],e.indexOf(i)>=0||(a[i]=n[i]);return a}(n,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);for(r=0;r<o.length;r++)i=o[r],e.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(n,i)&&(a[i]=n[i])}return a}var c=r.createContext({}),d=function(n){var e=r.useContext(c),i=e;return n&&(i="function"==typeof n?n(e):t(t({},e),n)),i},l={inlineCode:"code",wrapper:function(n){var e=n.children;return r.createElement(r.Fragment,{},e)}},h=r.forwardRef((function(n,e){var i=n.components,a=n.mdxType,o=n.originalType,c=n.parentName,h=s(n,["components","mdxType","originalType","parentName"]),p=d(i),m=a,u=p["".concat(c,".").concat(m)]||p[m]||l[m]||o;return i?r.createElement(u,t(t({ref:e},h),{},{components:i})):r.createElement(u,t({ref:e},h))}));h.displayName="MDXCreateElement"},46216:(n,e,i)=>{i.d(e,{c:()=>r});const r=i.p+"assets/images/OSHW_mark_BR000003-9a04b78c44d300b64a9ce9f590de0f14.png"},16384:(n,e,i)=>{i.d(e,{c:()=>r});const r=i.p+"assets/images/franzininho-diy-pinout-7047a8d5930175670acc131497791fcc.png"},26812:(n,e,i)=>{i.d(e,{c:()=>r});const r=i.p+"assets/images/kit-franzininho-diy-af913d17d968738d4f79dd46e69b4b96.png"},95860:(n,e,i)=>{i.d(e,{c:()=>r});const r=i.p+"assets/images/oficina-franzininho-diy-7f71f5fbaed295a79256ba0d4ec975f9.jpg"},11576:(n,e,i)=>{i.d(e,{c:()=>r});const r=i.p+"assets/images/placa-franzininho-diy-d8459c4e0e0d4c724d1c4d619ffc0350.png"}}]); \ No newline at end of file diff --git a/assets/js/fd69b436.d304b7b2.js b/assets/js/fd69b436.d304b7b2.js deleted file mode 100755 index 44125edc1..000000000 --- a/assets/js/fd69b436.d304b7b2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8504],{3905:(e,a,n)=>{n.d(a,{Zo:()=>c,kt:()=>h});var o=n(7294);function r(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function t(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);a&&(o=o.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{};a%2?t(Object(n),!0).forEach((function(a){r(e,a,n[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):t(Object(n)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(n,a))}))}return e}function l(e,a){if(null==e)return{};var n,o,r=function(e,a){if(null==e)return{};var n,o,r={},t=Object.keys(e);for(o=0;o<t.length;o++)n=t[o],a.indexOf(n)>=0||(r[n]=e[n]);return r}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(o=0;o<t.length;o++)n=t[o],a.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var d=o.createContext({}),p=function(e){var a=o.useContext(d),n=a;return e&&(n="function"==typeof e?e(a):i(i({},a),e)),n},c=function(e){var a=p(e.components);return o.createElement(d.Provider,{value:a},e.children)},s="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return o.createElement(o.Fragment,{},a)}},u=o.forwardRef((function(e,a){var n=e.components,r=e.mdxType,t=e.originalType,d=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),s=p(n),u=r,h=s["".concat(d,".").concat(u)]||s[u]||m[u]||t;return n?o.createElement(h,i(i({ref:a},c),{},{components:n})):o.createElement(h,i({ref:a},c))}));function h(e,a){var n=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var t=n.length,i=new Array(t);i[0]=u;var l={};for(var d in a)hasOwnProperty.call(a,d)&&(l[d]=a[d]);l.originalType=e,l[s]="string"==typeof e?e:r,i[1]=l;for(var p=2;p<t;p++)i[p]=n[p];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}u.displayName="MDXCreateElement"},1337:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>d,contentTitle:()=>i,default:()=>m,frontMatter:()=>t,metadata:()=>l,toc:()=>p});var o=n(3117),r=(n(7294),n(3905));const t={id:"franzininho-diy",title:"Placa Franzininho DIY",slug:"/franzininho-diy/sobre",description:"Detalhes da Franzininho DIY"},i=void 0,l={unversionedId:"FranzininhoDIY/franzininho-diy",id:"FranzininhoDIY/franzininho-diy",title:"Placa Franzininho DIY",description:"Detalhes da Franzininho DIY",source:"@site/docs/FranzininhoDIY/franzininho-diy.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/sobre",permalink:"/docs/franzininho-diy/sobre",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/franzininho-diy.md",tags:[],version:"current",frontMatter:{id:"franzininho-diy",title:"Placa Franzininho DIY",slug:"/franzininho-diy/sobre",description:"Detalhes da Franzininho DIY"},sidebar:"docs",previous:{title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",permalink:"/docs/franzininho-c0/arduino-identificacao-pinos"},next:{title:"Lista de Materiais",permalink:"/docs/franzininho-diy/lista-de-materiais"}},d={},p=[{value:"Pinout",id:"pinout",level:2},{value:"Resumo de recursos",id:"resumo-de-recursos",level:2},{value:"Documenta\xe7\xe3o",id:"documenta\xe7\xe3o",level:2},{value:"Projeto Open Hardware",id:"projeto-open-hardware",level:2},{value:"Onde comprar",id:"onde-comprar",level:2},{value:"Varejo",id:"varejo",level:3},{value:"Atacado",id:"atacado",level:3}],c={toc:p},s="wrapper";function m(e){let{components:a,...t}=e;return(0,r.kt)(s,(0,o.Z)({},c,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"A Franzininho DIY foi desenvolvida com a proposta de \u201cFa\xe7a voc\xea mesmo\u201d e com base na plataforma Arduino. O objetivo \xe9 que as pessoas que a adquirem, trilhem a jornada do Maker de eletr\xf4nica, montando e programando a sua pr\xf3pria placa compat\xedvel com Arduino."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Placa Franzininho DIY",src:n(5613).Z,width:"500",height:"233"})),(0,r.kt)("p",null,"Ela \xe9 fornecida em formato de Kit para soldar, n\xe3o recomendamos que voc\xea adquira a Franzininho DIY j\xe1 soldada, pois o objetivo pedag\xf3gico compreende a jornada de montagem."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Kit Franzininho DIY",src:n(5988).Z,width:"600",height:"600"})),(0,r.kt)("p",null,"\xc9 uma excelente op\xe7\xe3o para oficinas de Soldagem eletr\xf4nica e primeiros passos com a programa\xe7\xe3o Arduino. Com componentes f\xe1ceis de identificar e tamb\xe9m de soldar, permite que qualquer pessoa com pouco ou nenhum conhecimento em soldagem consiga montar a sua placa tranquilamente e criar em pouco tempo projetos como, automa\xe7\xe3o, rob\xf4s, jogos entre outros(Veja os exemplos em nossa documenta\xe7\xe3o)."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Oficina Franzininho DIY",src:n(818).Z,width:"640",height:"428"})),(0,r.kt)("p",null,"A placa \xe9 baseada no microcontrolador ATtiny85 e foi criada para fins educacionais, \xe9 voltada para estudantes de curso t\xe9cnico e engenharia, makers e hobbistas que desejam aprender sobre prototipagem, soldagem, eletr\xf4nica e programa\xe7\xe3o em uma verdadeira experi\xeancia DIY."),(0,r.kt)("p",null,"A placa possui 5 pinos de I/O, LED indicador de Alimenta\xe7\xe3o, LED de uso geral, conector USB para alimenta\xe7\xe3o e grava\xe7\xe3o, conector para alimenta\xe7\xe3o externa e bot\xe3o de Reset."),(0,r.kt)("h2",{id:"pinout"},"Pinout"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"pinagem Franzininho DIY",src:n(6608).Z,width:"1209",height:"869"})),(0,r.kt)("admonition",{title:"Vers\xf5es de placas",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Houve uma altera\xe7\xe3o da numera\xe7\xe3o dos pinos 4 e 5 no silk a partir da V2RV2.\nAinda \xe9 necess\xe1rio ajustar no software")),(0,r.kt)("h2",{id:"resumo-de-recursos"},"Resumo de recursos"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Microcontrolador: ATtiny85"),(0,r.kt)("li",{parentName:"ul"},"Pinos de I/O: at\xe9 6"),(0,r.kt)("li",{parentName:"ul"},"Entradas Anal\xf3gicas: at\xe9 4"),(0,r.kt)("li",{parentName:"ul"},"PWM: 3"),(0,r.kt)("li",{parentName:"ul"},"I2C: 1"),(0,r.kt)("li",{parentName:"ul"},"SPI: 1"),(0,r.kt)("li",{parentName:"ul"},"Tens\xe3o de funcionamento: 5V"),(0,r.kt)("li",{parentName:"ul"},"Alimenta\xe7\xe3o: USB(5V) ou externa (de 7,5V \xe0 9V)")),(0,r.kt)("h2",{id:"documenta\xe7\xe3o"},"Documenta\xe7\xe3o"),(0,r.kt)("p",null,"Ela pode ser programada diretamente na IDE do Arduino inclusive com Ardublock. tamb\xe9m pode ser programada em linguagem C usando IDE mais avan\xe7adas."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/franzininho-diy-board/raw/main/Franzininho.pdf"},"Esquem\xe1tico")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/franzininho-diy-board"},"Reposit\xf3rio do Hardware")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"http://eepurl.com/gbR4P1"},"e-book Franzininho - Monte e Programe seu Pr\xf3prio Arduino")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.amazon.com.br/Franzininho-F%C3%A1bio-Souza/dp/8595680531/"},"Livro impresso: Franzininho - Monte e Programe seu Pr\xf3prio Arduino")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/franzininho-fritzing/blob/master/Franzininho-DIY/Franzininho-DIY-V2RV2.fzpz"},"Componentes para Fritzing"))),(0,r.kt)("h2",{id:"projeto-open-hardware"},"Projeto Open Hardware"),(0,r.kt)("p",null,"O projeto \xe9 open hardware e foi publicado em ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/franzininho-diy-board/blob/main/LICENSE"},"CC-BY-SA-4.0")),(0,r.kt)("p",null,"A Franzininho DIY est\xe1 certificada na ",(0,r.kt)("a",{parentName:"p",href:"https://certification.oshwa.org/br000003.html"},"OSHWA com UID BR000003")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"BR000003",src:n(3801).Z,width:"300",height:"220"})),(0,r.kt)("admonition",{title:"Importante",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"Para reprodu\xe7\xe3o do projeto ou deriva\xe7\xf5es, \xe9 importante verificar os requisitos da licen\xe7a , copyright e boas pr\xe1ticas.")),(0,r.kt)("h2",{id:"onde-comprar"},"Onde comprar"),(0,r.kt)("h3",{id:"varejo"},"Varejo"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.robocore.net/loja/embarcados/franzininho-diy"},"Robocore")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.robocore.net/loja/embarcados/franzininho-diy"},"FilipeFlop")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.casadarobotica.com/loja/produto.php?loja=650361&IdProd=4275&parceiro=1821"},"Casa da Rob\xf3tica"))),(0,r.kt)("h3",{id:"atacado"},"Atacado"),(0,r.kt)("p",null,"Entrar em contato: ",(0,r.kt)("a",{parentName:"p",href:"mailto:contato@franzininho.com.br"},"contato@franzininho.com.br")))}m.isMDXComponent=!0},3801:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/OSHW_mark_BR000003-9a04b78c44d300b64a9ce9f590de0f14.png"},6608:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/franzininho-diy-pinout-7047a8d5930175670acc131497791fcc.png"},5988:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/kit-franzininho-diy-af913d17d968738d4f79dd46e69b4b96.png"},818:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/oficina-franzininho-diy-7f71f5fbaed295a79256ba0d4ec975f9.jpg"},5613:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/placa-franzininho-diy-d8459c4e0e0d4c724d1c4d619ffc0350.png"}}]); \ No newline at end of file diff --git a/assets/js/ff1c69f3.2565ba45.js b/assets/js/ff1c69f3.2565ba45.js deleted file mode 100755 index 1cecc0be9..000000000 --- a/assets/js/ff1c69f3.2565ba45.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[970],{3905:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>c});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function o(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?o(Object(a),!0).forEach((function(e){r(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}function l(t,e){if(null==t)return{};var a,n,r=function(t,e){if(null==t)return{};var a,n,r={},o=Object.keys(t);for(n=0;n<o.length;n++)a=o[n],e.indexOf(a)>=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n<o.length;n++)a=o[n],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var d=n.createContext({}),p=function(t){var e=n.useContext(d),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},m=function(t){var e=p(t.components);return n.createElement(d.Provider,{value:e},t.children)},s="mdxType",f={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},u=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,o=t.originalType,d=t.parentName,m=l(t,["components","mdxType","originalType","parentName"]),s=p(a),u=r,c=s["".concat(d,".").concat(u)]||s[u]||f[u]||o;return a?n.createElement(c,i(i({ref:e},m),{},{components:a})):n.createElement(c,i({ref:e},m))}));function c(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var o=a.length,i=new Array(o);i[0]=u;var l={};for(var d in e)hasOwnProperty.call(e,d)&&(l[d]=e[d]);l.originalType=t,l[s]="string"==typeof t?t:r,i[1]=l;for(var p=2;p<o;p++)i[p]=a[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},7069:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>d,contentTitle:()=>i,default:()=>f,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=a(3117),r=(a(7294),a(3905));const o={id:"franzininhoc0-arduino-todolist",title:"Arduino IDE TODO List",slug:"/franzininho-c0/arduino-todolist",description:"Todo list para exemplos com Arduino"},i=void 0,l={unversionedId:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist",id:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist",title:"Arduino IDE TODO List",description:"Todo list para exemplos com Arduino",source:"@site/docs/franzininhoSTM32C0/exemplos-arduino/exemplos-arduino-todolist.md",sourceDirName:"franzininhoSTM32C0/exemplos-arduino",slug:"/franzininho-c0/arduino-todolist",permalink:"/docs/franzininho-c0/arduino-todolist",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-arduino/exemplos-arduino-todolist.md",tags:[],version:"current",frontMatter:{id:"franzininhoc0-arduino-todolist",title:"Arduino IDE TODO List",slug:"/franzininho-c0/arduino-todolist",description:"Todo list para exemplos com Arduino"},sidebar:"docs",previous:{title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",permalink:"/docs/franzininho-c0/config-franzininho-c0-stm32cubeide"},next:{title:"Primeiros passos com Arduino",permalink:"/docs/franzininho-c0/arduino-primeiros-passos"}},d={},p=[{value:"Legenda:",id:"legenda",level:3},{value:"Reposit\xf3rio de Exemplos",id:"reposit\xf3rio-de-exemplos",level:2}],m={toc:p},s="wrapper";function f(t){let{components:e,...a}=t;return(0,r.kt)(s,(0,n.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programa\xe7\xe3o da placa Franzininho C0 na Arduino IDE usando o pacote STM32duino."),(0,r.kt)("p",null,"Fique a vontade para colaborar na constru\xe7\xe3o dos materiais e c\xf3digos. Outros exemplos podem ser adicionados. Converse na comunidade."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Exemplos"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Status"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Nota"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Primeiros passos"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Ferramentas necess\xe1rias, M\xe9todos de grava\xe7\xe3o, Reposit\xf3rio com os exemplos")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"01 - Blinky"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Piscando o LED usando delay")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"02 - Blinky Int"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Piscando o LED usando interrup\xe7\xe3o de timer")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"03 - Hello World"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Enviando mensagem pela serial (UART)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"04 - E/S Digital"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Leitura de um bot\xe3o e acionamento de um LED")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"05 - Debounce"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Leitura de um bot\xe3o com realiza\xe7\xe3o de debounce")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"06 - ADC"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Leitura da posi\xe7\xe3o de um potenci\xf4metro")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"07 - PWM"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:"left"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"08 - Dimmer"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Controlando o brilho do LED por um potenci\xf4metro (ADC e PWM)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"09 - Servo"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Controlando a posi\xe7\xe3o de um servo motor por um potenci\xf4metro (ADC e PWM)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"10 - I2C (LCD)"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Conex\xe3o de display LCD alfanum\xe9rico via I2C")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"11 - I2C (OLED)"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Conex\xe3o de display OLED via I2C")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"12 - SPI (OLED)"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Conex\xe3o de display OLED via SPI")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Interrup\xe7\xe3o externa"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:"left"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Timers - PWM"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:"left"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Timers - Temporizador"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:"left"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"DMA"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:"left"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"}),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:"left"})))),(0,r.kt)("h3",{id:"legenda"},"Legenda:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ud83d\udfe2 Feito"),(0,r.kt)("li",{parentName:"ul"},"\ud83d\udd35 Para revisar"),(0,r.kt)("li",{parentName:"ul"},"\ud83d\udfe1 Em progresso"),(0,r.kt)("li",{parentName:"ul"},"\ud83d\udd34 Ainda n\xe3o implementado")),(0,r.kt)("h2",{id:"reposit\xf3rio-de-exemplos"},"Reposit\xf3rio de Exemplos"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/franzininho-c0-exemplos-arduino"},"GitHub - Franzininho/franzininho-c0-exemplos-arduino: Exemplos de c\xf3digo para Franzininho C0 na Arduino IDE")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ff1c69f3.b1e2f638.js b/assets/js/ff1c69f3.b1e2f638.js new file mode 100755 index 000000000..9baf5d77d --- /dev/null +++ b/assets/js/ff1c69f3.b1e2f638.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3420],{33300:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>x,frontMatter:()=>r,metadata:()=>o,toc:()=>a});var i=n(17624),l=n(95788);const r={id:"franzininhoc0-arduino-todolist",title:"Arduino IDE TODO List",slug:"/franzininho-c0/arduino-todolist",description:"Todo list para exemplos com Arduino"},s=void 0,o={id:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist",title:"Arduino IDE TODO List",description:"Todo list para exemplos com Arduino",source:"@site/docs/franzininhoSTM32C0/exemplos-arduino/exemplos-arduino-todolist.md",sourceDirName:"franzininhoSTM32C0/exemplos-arduino",slug:"/franzininho-c0/arduino-todolist",permalink:"/docs/franzininho-c0/arduino-todolist",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-arduino/exemplos-arduino-todolist.md",tags:[],version:"current",frontMatter:{id:"franzininhoc0-arduino-todolist",title:"Arduino IDE TODO List",slug:"/franzininho-c0/arduino-todolist",description:"Todo list para exemplos com Arduino"},sidebar:"docs",previous:{title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",permalink:"/docs/franzininho-c0/config-franzininho-c0-stm32cubeide"},next:{title:"Primeiros passos com Arduino",permalink:"/docs/franzininho-c0/arduino-primeiros-passos"}},d={},a=[{value:"Legenda:",id:"legenda",level:3},{value:"Reposit\xf3rio de Exemplos",id:"reposit\xf3rio-de-exemplos",level:2}];function c(e){const t={a:"a",h2:"h2",h3:"h3",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programa\xe7\xe3o da placa Franzininho C0 na Arduino IDE usando o pacote STM32duino."}),"\n",(0,i.jsx)(t.p,{children:"Fique a vontade para colaborar na constru\xe7\xe3o dos materiais e c\xf3digos. Outros exemplos podem ser adicionados. Converse na comunidade."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Exemplos"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Status"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Nota"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Primeiros passos"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Ferramentas necess\xe1rias, M\xe9todos de grava\xe7\xe3o, Reposit\xf3rio com os exemplos"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"01 - Blinky"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Piscando o LED usando delay"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"02 - Blinky Int"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Piscando o LED usando interrup\xe7\xe3o de timer"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"03 - Hello World"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Enviando mensagem pela serial (UART)"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"04 - E/S Digital"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Leitura de um bot\xe3o e acionamento de um LED"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"05 - Debounce"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Leitura de um bot\xe3o com realiza\xe7\xe3o de debounce"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"06 - ADC"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Leitura da posi\xe7\xe3o de um potenci\xf4metro"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"07 - PWM"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd34"}),(0,i.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"08 - Dimmer"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Controlando o brilho do LED por um potenci\xf4metro (ADC e PWM)"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"09 - Servo"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Controlando a posi\xe7\xe3o de um servo motor por um potenci\xf4metro (ADC e PWM)"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"10 - I2C (LCD)"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Conex\xe3o de display LCD alfanum\xe9rico via I2C"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"11 - I2C (OLED)"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Conex\xe3o de display OLED via I2C"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"12 - SPI (OLED)"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Conex\xe3o de display OLED via SPI"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Interrup\xe7\xe3o externa"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd34"}),(0,i.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Timers - PWM"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd34"}),(0,i.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Timers - Temporizador"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd34"}),(0,i.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"DMA"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd34"}),(0,i.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"}}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd34"}),(0,i.jsx)(t.td,{style:{textAlign:"left"}})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"legenda",children:"Legenda:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"\ud83d\udfe2 Feito"}),"\n",(0,i.jsx)(t.li,{children:"\ud83d\udd35 Para revisar"}),"\n",(0,i.jsx)(t.li,{children:"\ud83d\udfe1 Em progresso"}),"\n",(0,i.jsx)(t.li,{children:"\ud83d\udd34 Ainda n\xe3o implementado"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"reposit\xf3rio-de-exemplos",children:"Reposit\xf3rio de Exemplos"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://github.com/Franzininho/franzininho-c0-exemplos-arduino",children:"GitHub - Franzininho/franzininho-c0-exemplos-arduino: Exemplos de c\xf3digo para Franzininho C0 na Arduino IDE"})})]})}function x(e={}){const{wrapper:t}={...(0,l.MN)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},95788:(e,t,n)=>{n.d(t,{MN:()=>a});var i=n(11504);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){l(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,i,l=function(e,t){if(null==e)return{};var n,i,l={},r=Object.keys(e);for(i=0;i<r.length;i++)n=r[i],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i<r.length;i++)n=r[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var d=i.createContext({}),a=function(e){var t=i.useContext(d),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},c={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},x=i.forwardRef((function(e,t){var n=e.components,l=e.mdxType,r=e.originalType,d=e.parentName,x=o(e,["components","mdxType","originalType","parentName"]),h=a(n),f=l,p=h["".concat(d,".").concat(f)]||h[f]||c[f]||r;return n?i.createElement(p,s(s({ref:t},x),{},{components:n})):i.createElement(p,s({ref:t},x))}));x.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/assets/js/ff8b9623.459b86bc.js b/assets/js/ff8b9623.459b86bc.js deleted file mode 100755 index c832ed7cf..000000000 --- a/assets/js/ff8b9623.459b86bc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3931],{3905:(e,n,a)=>{a.d(n,{Zo:()=>d,kt:()=>g});var o=a(7294);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function t(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,o)}return a}function i(e){for(var n=1;n<arguments.length;n++){var a=null!=arguments[n]?arguments[n]:{};n%2?t(Object(a),!0).forEach((function(n){r(e,n,a[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):t(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))}))}return e}function s(e,n){if(null==e)return{};var a,o,r=function(e,n){if(null==e)return{};var a,o,r={},t=Object.keys(e);for(o=0;o<t.length;o++)a=t[o],n.indexOf(a)>=0||(r[a]=e[a]);return r}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(o=0;o<t.length;o++)a=t[o],n.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=o.createContext({}),c=function(e){var n=o.useContext(l),a=n;return e&&(a="function"==typeof e?e(n):i(i({},n),e)),a},d=function(e){var n=c(e.components);return o.createElement(l.Provider,{value:n},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},m=o.forwardRef((function(e,n){var a=e.components,r=e.mdxType,t=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=c(a),m=r,g=p["".concat(l,".").concat(m)]||p[m]||u[m]||t;return a?o.createElement(g,i(i({ref:n},d),{},{components:a})):o.createElement(g,i({ref:n},d))}));function g(e,n){var a=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var t=a.length,i=new Array(t);i[0]=m;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s[p]="string"==typeof e?e:r,i[1]=s;for(var c=2;c<t;c++)i[c]=a[c];return o.createElement.apply(null,i)}return o.createElement.apply(null,a)}m.displayName="MDXCreateElement"},7933:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>t,metadata:()=>s,toc:()=>c});var o=a(3117),r=(a(7294),a(3905));const t={id:"entradas-analogicas",title:"Entradas Anal\xf3gicas",slug:"/franzininho-diy/entradas-analogicas",description:"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY"},i=void 0,s={unversionedId:"FranzininhoDIY/exemplos-arduino/entradas-analogicas",id:"FranzininhoDIY/exemplos-arduino/entradas-analogicas",title:"Entradas Anal\xf3gicas",description:"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-analogicas.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/entradas-analogicas",permalink:"/docs/franzininho-diy/entradas-analogicas",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/entradas-analogicas.md",tags:[],version:"current",frontMatter:{id:"entradas-analogicas",title:"Entradas Anal\xf3gicas",slug:"/franzininho-diy/entradas-analogicas",description:"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY"},sidebar:"docs",previous:{title:"Entradas e Sa\xeddas Digitais",permalink:"/docs/franzininho-diy/entradas-saidas-digitais"},next:{title:"Sa\xeddas PWM",permalink:"/docs/franzininho-diy/saidas-pwm"}},l={},c=[{value:"Fun\xe7\xe3o",id:"fun\xe7\xe3o",level:2},{value:"Sintaxe",id:"sintaxe",level:3},{value:"Par\xe2metros",id:"par\xe2metros",level:3},{value:"Retorno",id:"retorno",level:3},{value:"Exemplo",id:"exemplo",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:3}],d={toc:c},p="wrapper";function u(e){let{components:n,...t}=e;return(0,r.kt)(p,(0,o.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Na Franzininho DIY alguns pinos que podem ser usados como entradas anal\xf3gicas:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Pinagem Franzininho DIY",src:a(4648).Z,width:"1209",height:"869"})),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"Devido as limita\xe7\xf5es de hardware da Franzininho DIY recomendamos apenas o uso da Entrada A1 para sinais anal\xf3gicos.\nAs demais entradas (A0,A2,A3) devem ser usadas com cautela e analisando o circuito para ver o circuito presente no pino n\xe3o atrapalhar\xe1 no sinal anal\xf3gico.")),(0,r.kt)("h2",{id:"fun\xe7\xe3o"},"Fun\xe7\xe3o"),(0,r.kt)("p",null,"Para a leitura de um sinal anal\xf3gico no pino que possui essa fun\xe7\xe3o, n\xe3o \xe9 necess\xe1rio configurar o pino como entrada anal\xf3gica. Isso \xe9 feito na fun\xe7\xe3o de leitura:"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"int analogRead(pino)")),(0,r.kt)("p",null,"L\xea o valor presente em um pino configurado como entrada anal\xf3gica. Internamente o Arduino possui um conversor A/D de 10 bits. Dessa forma o valor retornado por esta fun\xe7\xe3o estar\xe1 na faixa de 0 a 1023 conforme o valor presente no pino."),(0,r.kt)("h3",{id:"sintaxe"},"Sintaxe"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"analogRead(pino);")),(0,r.kt)("h3",{id:"par\xe2metros"},"Par\xe2metros"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"pino:")," n\xfamero do pino configurado como entrada anal\xf3gica ","(","0,1,2,3 na Franzininho",")"),(0,r.kt)("h3",{id:"retorno"},"Retorno"),(0,r.kt)("p",null,"int ","(","0 a 1023",")"),(0,r.kt)("h2",{id:"exemplo"},"Exemplo"),(0,r.kt)("p",null,"Vamos ler o valor de um potenci\xf4metro ligado ao pino P2","(","A1",")"," e acionar o LED quando a leitura atingir um valor definido:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Circuito",src:a(2395).Z,width:"1590",height:"1017"})),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"const byte LED = 1; //pino do LED\nconst byte POT = A1; //pino do Potenci\xf4metro\n\nvoid setup() {\n pinMode(LED,OUTPUT);\n}\n\nvoid loop() {\n\n int valor = analogRead(POT); // l\xea o valor do potenci\xf4metro\n\n if(valor> 511){ //se valor maior que 511\n digitalWrite(LED,HIGH); //liga LED\n }else{ //se n\xe3o\n digitalWrite(LED,LOW); //apaga LED\n }\n}\n")),(0,r.kt)("h3",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,r.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310739786993238592?view=diagram"}))}u.isMDXComponent=!0},2395:(e,n,a)=>{a.d(n,{Z:()=>o});const o=a.p+"assets/images/circuito-a6a0591bc42320cbe29b14bd9332f3c2.png"},4648:(e,n,a)=>{a.d(n,{Z:()=>o});const o=a.p+"assets/images/pinagem-V2-7047a8d5930175670acc131497791fcc.png"}}]); \ No newline at end of file diff --git a/assets/js/ff8b9623.d6d588e7.js b/assets/js/ff8b9623.d6d588e7.js new file mode 100755 index 000000000..0008ce3d5 --- /dev/null +++ b/assets/js/ff8b9623.d6d588e7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6004],{4212:(n,e,a)=>{a.r(e),a.d(e,{assets:()=>c,contentTitle:()=>t,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=a(17624),i=a(95788);const o={id:"entradas-analogicas",title:"Entradas Anal\xf3gicas",slug:"/franzininho-diy/entradas-analogicas",description:"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY"},t=void 0,s={id:"FranzininhoDIY/exemplos-arduino/entradas-analogicas",title:"Entradas Anal\xf3gicas",description:"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-analogicas.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/entradas-analogicas",permalink:"/docs/franzininho-diy/entradas-analogicas",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/entradas-analogicas.md",tags:[],version:"current",frontMatter:{id:"entradas-analogicas",title:"Entradas Anal\xf3gicas",slug:"/franzininho-diy/entradas-analogicas",description:"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY"},sidebar:"docs",previous:{title:"Entradas e Sa\xeddas Digitais",permalink:"/docs/franzininho-diy/entradas-saidas-digitais"},next:{title:"Sa\xeddas PWM",permalink:"/docs/franzininho-diy/saidas-pwm"}},c={},d=[{value:"Fun\xe7\xe3o",id:"fun\xe7\xe3o",level:2},{value:"Sintaxe",id:"sintaxe",level:3},{value:"Par\xe2metros",id:"par\xe2metros",level:3},{value:"Retorno",id:"retorno",level:3},{value:"Exemplo",id:"exemplo",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:3}];function l(n){const e={admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",p:"p",pre:"pre",strong:"strong",...(0,i.MN)(),...n.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.p,{children:"Na Franzininho DIY alguns pinos que podem ser usados como entradas anal\xf3gicas:"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Pinagem Franzininho DIY",src:a(4428).c+"",width:"1209",height:"869"})}),"\n",(0,r.jsx)(e.admonition,{type:"warning",children:(0,r.jsx)(e.p,{children:"Devido as limita\xe7\xf5es de hardware da Franzininho DIY recomendamos apenas o uso da Entrada A1 para sinais anal\xf3gicos.\nAs demais entradas (A0,A2,A3) devem ser usadas com cautela e analisando o circuito para ver o circuito presente no pino n\xe3o atrapalhar\xe1 no sinal anal\xf3gico."})}),"\n",(0,r.jsx)(e.h2,{id:"fun\xe7\xe3o",children:"Fun\xe7\xe3o"}),"\n",(0,r.jsx)(e.p,{children:"Para a leitura de um sinal anal\xf3gico no pino que possui essa fun\xe7\xe3o, n\xe3o \xe9 necess\xe1rio configurar o pino como entrada anal\xf3gica. Isso \xe9 feito na fun\xe7\xe3o de leitura:"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.code,{children:"int analogRead(pino)"})}),"\n",(0,r.jsx)(e.p,{children:"L\xea o valor presente em um pino configurado como entrada anal\xf3gica. Internamente o Arduino possui um conversor A/D de 10 bits. Dessa forma o valor retornado por esta fun\xe7\xe3o estar\xe1 na faixa de 0 a 1023 conforme o valor presente no pino."}),"\n",(0,r.jsx)(e.h3,{id:"sintaxe",children:"Sintaxe"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.code,{children:"analogRead(pino);"})}),"\n",(0,r.jsx)(e.h3,{id:"par\xe2metros",children:"Par\xe2metros"}),"\n",(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.strong,{children:"pino:"})," n\xfamero do pino configurado como entrada anal\xf3gica (0,1,2,3 na Franzininho)"]}),"\n",(0,r.jsx)(e.h3,{id:"retorno",children:"Retorno"}),"\n",(0,r.jsx)(e.p,{children:"int (0 a 1023)"}),"\n",(0,r.jsx)(e.h2,{id:"exemplo",children:"Exemplo"}),"\n",(0,r.jsx)(e.p,{children:"Vamos ler o valor de um potenci\xf4metro ligado ao pino P2(A1) e acionar o LED quando a leitura atingir um valor definido:"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Circuito",src:a(36936).c+"",width:"1590",height:"1017"})}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-cpp",children:"const byte LED = 1; //pino do LED\nconst byte POT = A1; //pino do Potenci\xf4metro\n\nvoid setup() {\n pinMode(LED,OUTPUT);\n}\n\nvoid loop() {\n\n int valor = analogRead(POT); // l\xea o valor do potenci\xf4metro\n\n if(valor> 511){ //se valor maior que 511\n digitalWrite(LED,HIGH); //liga LED\n }else{ //se n\xe3o\n digitalWrite(LED,LOW); //apaga LED\n }\n}\n"})}),"\n",(0,r.jsx)(e.h3,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,r.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310739786993238592?view=diagram"})]})}function p(n={}){const{wrapper:e}={...(0,i.MN)(),...n.components};return e?(0,r.jsx)(e,{...n,children:(0,r.jsx)(l,{...n})}):l(n)}},95788:(n,e,a)=>{a.d(e,{MN:()=>d});var r=a(11504);function i(n,e,a){return e in n?Object.defineProperty(n,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[e]=a,n}function o(n,e){var a=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),a.push.apply(a,r)}return a}function t(n){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?o(Object(a),!0).forEach((function(e){i(n,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(a,e))}))}return n}function s(n,e){if(null==n)return{};var a,r,i=function(n,e){if(null==n)return{};var a,r,i={},o=Object.keys(n);for(r=0;r<o.length;r++)a=o[r],e.indexOf(a)>=0||(i[a]=n[a]);return i}(n,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);for(r=0;r<o.length;r++)a=o[r],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(n,a)&&(i[a]=n[a])}return i}var c=r.createContext({}),d=function(n){var e=r.useContext(c),a=e;return n&&(a="function"==typeof n?n(e):t(t({},e),n)),a},l={inlineCode:"code",wrapper:function(n){var e=n.children;return r.createElement(r.Fragment,{},e)}},p=r.forwardRef((function(n,e){var a=n.components,i=n.mdxType,o=n.originalType,c=n.parentName,p=s(n,["components","mdxType","originalType","parentName"]),u=d(a),m=i,h=u["".concat(c,".").concat(m)]||u[m]||l[m]||o;return a?r.createElement(h,t(t({ref:e},p),{},{components:a})):r.createElement(h,t({ref:e},p))}));p.displayName="MDXCreateElement"},36936:(n,e,a)=>{a.d(e,{c:()=>r});const r=a.p+"assets/images/circuito-a6a0591bc42320cbe29b14bd9332f3c2.png"},4428:(n,e,a)=>{a.d(e,{c:()=>r});const r=a.p+"assets/images/pinagem-V2-7047a8d5930175670acc131497791fcc.png"}}]); \ No newline at end of file diff --git a/assets/js/main.2efbdb94.js b/assets/js/main.2efbdb94.js deleted file mode 100755 index aa2a7885f..000000000 --- a/assets/js/main.2efbdb94.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.2efbdb94.js.LICENSE.txt */ -(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[179],{4334:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},7459:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(3117),i=n(8356),a=n.n(i),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1223)),"@theme/BlogTagsListPage",1223],"031793e1":[()=>n.e(1633).then(n.t.bind(n,2511,19)),"~blog/default/blog-tags-facebook-038.json",2511],"032edc05":[()=>n.e(9860).then(n.bind(n,2831)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/instalacao-ferramentas.md",2831],"06f5a5e3":[()=>n.e(6817).then(n.bind(n,7436)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x03-entrada-analogica.md",7436],"096bfee4":[()=>n.e(7178).then(n.t.bind(n,5010,19)),"~blog/default/blog-tags-facebook-038-list.json",5010],"09e1b884":[()=>n.e(6250).then(n.t.bind(n,4469,19)),"/media/fabio/Dados/Projetos/docs-franzininho-site/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],17896441:[()=>Promise.all([n.e(532),n.e(9785),n.e(7918)]).then(n.bind(n,8945)),"@theme/DocItem",8945],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"21c04bfb":[()=>n.e(5634).then(n.bind(n,8583)),"@site/docs/FranzininhoDIY/exemplos-arduino/pacote.md",8583],"249d28c1":[()=>n.e(5123).then(n.bind(n,7866)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x04-LEDC.md",7866],27079279:[()=>n.e(4417).then(n.bind(n,629)),"@site/docs/Franzino/franzino.md",629],"2868cdab":[()=>n.e(4061).then(n.bind(n,1460)),"@site/blog/2019-05-30-welcome.md",1460],"2e8bb407":[()=>n.e(2687).then(n.bind(n,6722)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x00-Primeiros-passos.md",6722],"30a24c52":[()=>n.e(453).then(n.t.bind(n,8605,19)),"~blog/default/blog-tags-hello-039.json",8605],"3570154c":[()=>n.e(3707).then(n.bind(n,9993)),"@site/blog/2019-05-29-hello-world.md?truncated=true",9993],"3ab35d9f":[()=>n.e(2517).then(n.bind(n,952)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/entrada-digital.md",952],"3ab9b561":[()=>n.e(1013).then(n.bind(n,8159)),"@site/docs/FranzininhoDIY/bootloader/bootloader.md",8159],"3cf26f2f":[()=>n.e(6803).then(n.bind(n,1809)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/serial-console.md",1809],"43004a8a":[()=>n.e(270).then(n.t.bind(n,3769,19)),"/media/fabio/Dados/Projetos/docs-franzininho-site/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"445992cb":[()=>n.e(8407).then(n.bind(n,3934)),"@site/docs/LaboratorioSistemasIot/adaptadores/adaptador-arduino.md",3934],"449acc1f":[()=>n.e(9019).then(n.bind(n,1594)),"@site/docs/franzininhoSTM32C0/exemplos-arduino/primeiros-passos.md",1594],"45a448cc":[()=>n.e(8442).then(n.bind(n,1038)),"@site/docs/FranzininhoWifi/exemplos-arduino/dht11.md",1038],"4c503f6c":[()=>n.e(2536).then(n.bind(n,1110)),"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais.md",1110],"4c9e35b1":[()=>n.e(9035).then(n.t.bind(n,499,19)),"~blog/default/blog-tags-hola-ea2-list.json",499],"4cb2f106":[()=>n.e(1829).then(n.bind(n,3043)),"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/configurando-projeto-stmcubeide.md",3043],"4e4cd8a0":[()=>n.e(6657).then(n.bind(n,3127)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/servo-motor.md",3127],"4f3ccf13":[()=>n.e(7269).then(n.t.bind(n,5745,19)),"/media/fabio/Dados/Projetos/docs-franzininho-site/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"5115f6b0":[()=>n.e(1777).then(n.bind(n,9353)),"@site/docs/FranzininhoWifi/exemplos-arduino/arduino.md",9353],52090148:[()=>n.e(9948).then(n.bind(n,1493)),"@site/docs/FranzininhoDIY/exemplos-arduino/led-rgb.md",1493],"52fc124a":[()=>n.e(2749).then(n.bind(n,4925)),"@site/docs/FranzininhoTiny/franzininho-tiny.md",4925],"558e6545":[()=>n.e(5755).then(n.bind(n,6450)),"@site/docs/FranzininhoDIY/exemplos-arduino/i2c.md",6450],"55a63e59":[()=>n.e(4334).then(n.bind(n,3140)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/display-oled-i2c.md",3140],"55ee410e":[()=>n.e(2496).then(n.bind(n,5406)),"@site/docs/FranzininhoDIY/exemplos-arduino/tecla-liga-desliga.md",5406],58231389:[()=>n.e(9429).then(n.bind(n,9742)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/irrigacao.md",9742],"5c90fd8c":[()=>n.e(5016).then(n.bind(n,9272)),"@site/docs/FranzMakey/franzmakey.md",9272],"5cfa1a80":[()=>n.e(7600).then(n.bind(n,7663)),"@site/docs/FranzininhoDIY/exemplos-arduino/sensor-luz.md",7663],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"5f765f30":[()=>n.e(8601).then(n.bind(n,4809)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/pwm.md",4809],"5f9a86e6":[()=>n.e(3405).then(n.bind(n,7331)),"@site/docs/FranzininhoWifi/exemplos-micropython/entradas-saidas-digitais.md",7331],"608ae6a4":[()=>n.e(6938).then(n.t.bind(n,4545,19)),"~blog/default/blog-tags-docusaurus-0e0-list.json",4545],66406991:[()=>n.e(110).then(n.t.bind(n,711,19)),"~blog/default/blog-tags-hello-039-list.json",711],"66e66c27":[()=>n.e(7932).then(n.bind(n,769)),"@site/docs/FranzininhoWifi/wokwi/franzininho-wifi-wokwi.md",769],"68401cc9":[()=>n.e(2654).then(n.bind(n,3965)),"@site/docs/FranzininhoDIY/identificando-componentes.md",3965],"6875c492":[()=>Promise.all([n.e(532),n.e(9785),n.e(6048),n.e(8610)]).then(n.bind(n,1714)),"@theme/BlogTagsPostsPage",1714],"69d6b121":[()=>n.e(6251).then(n.bind(n,5709)),"@site/docs/FranzininhoDIY/exemplos-arduino/elefante-colorido.md",5709],"6b289e1f":[()=>n.e(9226).then(n.bind(n,8732)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/avr-libc-todo.md",8732],"6d6d470f":[()=>n.e(3020).then(n.bind(n,239)),"@site/docs/FranzininhoWifi/franzininho-wifi-dev-edition.md",239],"6da7bcf7":[()=>n.e(9515).then(n.bind(n,2221)),"@site/docs/FranzininhoDIY/bootloader/drivers.md",2221],"6e2ab842":[()=>n.e(3567).then(n.bind(n,3192)),"@site/docs/Badge/badge.md",3192],"7561b0ae":[()=>n.e(157).then(n.bind(n,3852)),"@site/docs/FranzBoy/franzboy.md",3852],"7e45b7ad":[()=>n.e(694).then(n.bind(n,2402)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/buzzer.md",2402],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"8b8a5829":[()=>n.e(604).then(n.bind(n,1501)),"@site/docs/FranzininhoDIY/exemplos-arduino/theremim.md",1501],"8e9f0a8a":[()=>n.e(4035).then(n.bind(n,2684)),"@site/blog/2019-05-28-hola.md?truncated=true",2684],"8f70110c":[()=>n.e(6553).then(n.bind(n,7946)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-analogica.md",7946],"8f8a0b80":[()=>n.e(2559).then(n.bind(n,347)),"@site/docs/FranzininhoWifi/exemplos-arduino/onboard-rgb-led-example.md",347],"92ef60c0":[()=>n.e(6799).then(n.bind(n,3960)),"@site/docs/FranzininhoDIY/exemplos-arduino/pisca-led.md",3960],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"94c955d1":[()=>n.e(7347).then(n.bind(n,2134)),"@site/docs/franzininhoSTM32C0/exemplos-arduino/identificacao-pinos.md",2134],"9ccd4375":[()=>n.e(4123).then(n.bind(n,7620)),"@site/docs/FranzininhoDIY/montagem.md",7620],"9cf82e51":[()=>n.e(9966).then(n.bind(n,4404)),"@site/docs/FranzininhoWifi/exemplos-arduino/blink.md",4404],"9e4087bc":[()=>n.e(3608).then(n.bind(n,3169)),"@theme/BlogArchivePage",3169],a34fb63a:[()=>n.e(1982).then(n.bind(n,4553)),"@site/docs/FranzininhoDIY/picsimlab/franzininho-picsimlab.md",4553],a47310cc:[()=>n.e(8615).then(n.bind(n,101)),"@site/docs/FranzininhoDIY/exemplos-arduino/semaforo.md",101],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(9785),n.e(6048),n.e(3089)]).then(n.bind(n,46)),"@theme/BlogListPage",46],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],a80da1cf:[()=>n.e(3205).then(n.t.bind(n,4863,19)),"~blog/default/blog-tags-docusaurus-0e0.json",4863],af172acd:[()=>n.e(1449).then(n.bind(n,7498)),"@site/blog/2019-05-30-welcome.md?truncated=true",7498],af2b9553:[()=>n.e(8560).then(n.bind(n,641)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x05-AWS-IoT-Core.md",641],b0d3cd30:[()=>n.e(4669).then(n.bind(n,7779)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/hello-world.md",7779],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,10,19)),"~blog/default/blog-archive-80c.json",10],b311b2c7:[()=>n.e(6631).then(n.bind(n,1933)),"@site/docs/LaboratorioSistemasIot/laboratorio-sistemas-iot.md",1933],b55e0f56:[()=>n.e(9821).then(n.bind(n,2403)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/hello-world.md",2403],b677b176:[()=>n.e(367).then(n.bind(n,7255)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/int-externa.md",7255],bb7fee19:[()=>n.e(1832).then(n.bind(n,3386)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0-int.md",3386],bc0ca366:[()=>n.e(4679).then(n.bind(n,9991)),"@site/docs/FranzMakey/primeiros-passos.md",9991],bc0f2708:[()=>n.e(7835).then(n.bind(n,3887)),"@site/docs/FranzininhoDIY/exemplos-arduino/introducao.md",3887],bc475886:[()=>n.e(5534).then(n.bind(n,9908)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/primeiros-passos.md",9908],bdb4d3e5:[()=>n.e(1524).then(n.bind(n,417)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/contadores.md",417],bdd709f1:[()=>n.e(4694).then(n.bind(n,6724)),"@site/blog/2019-05-28-hola.md",6724],be54388e:[()=>n.e(969).then(n.bind(n,7535)),"@site/docs/FranzininhoDIY/exemplos-arduino/pwm.md",7535],c397fa15:[()=>n.e(4253).then(n.bind(n,1365)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/circuitpython.md",1365],c4380c1f:[()=>n.e(2976).then(n.bind(n,2586)),"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW.md",2586],c4f5d8e4:[()=>Promise.all([n.e(532),n.e(4195)]).then(n.bind(n,4338)),"@site/src/pages/index.js",4338],c720cb85:[()=>n.e(310).then(n.bind(n,2639)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0.md",2639],ccc49370:[()=>Promise.all([n.e(532),n.e(9785),n.e(6048),n.e(6103)]).then(n.bind(n,5203)),"@theme/BlogPostPage",5203],cdcae78f:[()=>n.e(3518).then(n.bind(n,2729)),"@site/docs/FranzininhoWifi/franzininho-wifi.md",2729],cfe204fd:[()=>n.e(1793).then(n.bind(n,1693)),"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/stm32cube-ide-todolist.md",1693],d0c422fb:[()=>n.e(8811).then(n.bind(n,9358)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/dht11.md",9358],d268d7c6:[()=>n.e(8659).then(n.bind(n,416)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-saidas-digitais.md",416],d29449f8:[()=>n.e(4242).then(n.bind(n,6463)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/hcsr04.md",6463],d5f74b3b:[()=>n.e(5845).then(n.bind(n,4853)),"@site/docs/FranzininhoDIY/exemplos-arduino/leitura-tecla.md",4853],d610846f:[()=>n.e(6176).then(n.bind(n,1452)),"@site/blog/2019-05-29-hello-world.md",1452],d69ae106:[()=>n.e(7201).then(n.bind(n,1918)),"@site/docs/FranzininhoWifi/exemplos-micropython/primeiros-passos.md",1918],d7336970:[()=>n.e(2312).then(n.bind(n,4158)),"@site/docs/franzininhoSTM32C0/franzininho-stm32c0-board.md",4158],d75a6ad4:[()=>n.e(286).then(n.bind(n,8059)),"@site/docs/FranzininhoWiFiLAB01/franzininho-wifi-lab01.md",8059],d9a3a88a:[()=>n.e(7259).then(n.bind(n,129)),"@site/docs/FranzininhoDIY/exemplos-arduino/girassol-automatizado.md",129],daddf4d9:[()=>n.e(5193).then(n.bind(n,5244)),"@site/docs/Franzino/upload-com-arduino-uno.md",5244],db00da42:[()=>n.e(9267).then(n.bind(n,5797)),"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO.md",5797],dcf87b66:[()=>n.e(1375).then(n.bind(n,229)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x01-Hello-world.md",229],e16015ca:[()=>n.e(9700).then(n.t.bind(n,5688,19)),"~blog/default/blog-tags-hola-ea2.json",5688],e586c302:[()=>n.e(6355).then(n.bind(n,9660)),"@site/docs/FranzininhoDIY/lista-de-materiais.md",9660],e6a1d5e9:[()=>n.e(3290).then(n.bind(n,203)),"@site/docs/Franzino/upload-conversor-serial.md",203],ec054302:[()=>n.e(8911).then(n.bind(n,4807)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/touch-capacitivo.md",4807],f3019b90:[()=>n.e(467).then(n.bind(n,7987)),"@site/docs/FranzininhoDIY/exemplos-arduino/brilho-led.md",7987],f5313f89:[()=>n.e(4507).then(n.bind(n,8007)),"@site/docs/sobre.md",8007],f64cfe00:[()=>n.e(5045).then(n.bind(n,593)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x02-entrada-digital.md",593],f67a9ad7:[()=>n.e(3634).then(n.bind(n,5350)),"@site/docs/FranzininhoDIY/wokwi/franzininho-wokwi.md",5350],f6af7cfc:[()=>n.e(1506).then(n.bind(n,5673)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/saida-digital.md",5673],fd69b436:[()=>n.e(8504).then(n.bind(n,1337)),"@site/docs/FranzininhoDIY/franzininho-diy.md",1337],ff1c69f3:[()=>n.e(970).then(n.bind(n,7069)),"@site/docs/franzininhoSTM32C0/exemplos-arduino/exemplos-arduino-todolist.md",7069],ff8b9623:[()=>n.e(3931).then(n.bind(n,7933)),"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-analogicas.md",7933]};function c(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(9670),d=n(226);function p(e,t){if("*"===e)return a()({loading:c,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const i=l[`${e}-${t}`],p={},f=[],m=[],h=(0,u.Z)(i);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(p[t]=r[0],f.push(r[1]),m.push(r[2]))})),a().Map({loading:c,loader:p,modules:f,webpack:()=>m,render(t,n){const a=JSON.parse(JSON.stringify(i));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let i=a;const l=n.split(".");l.slice(0,-1).forEach((e=>{i=i[e]})),i[l[l.length-1]]=o}));const l=a.__comp;delete a.__comp;const s=a.__context;return delete a.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,o.Z)({},a,n)))}})}const f=[{path:"/blog",component:p("/blog","8a4"),exact:!0},{path:"/blog/archive",component:p("/blog/archive","4bc"),exact:!0},{path:"/blog/hello-world",component:p("/blog/hello-world","741"),exact:!0},{path:"/blog/hola",component:p("/blog/hola","fdd"),exact:!0},{path:"/blog/tags",component:p("/blog/tags","546"),exact:!0},{path:"/blog/tags/docusaurus",component:p("/blog/tags/docusaurus","e69"),exact:!0},{path:"/blog/tags/facebook",component:p("/blog/tags/facebook","640"),exact:!0},{path:"/blog/tags/hello",component:p("/blog/tags/hello","a30"),exact:!0},{path:"/blog/tags/hola",component:p("/blog/tags/hola","b04"),exact:!0},{path:"/blog/welcome",component:p("/blog/welcome","f8c"),exact:!0},{path:"/docs",component:p("/docs","993"),routes:[{path:"/docs/",component:p("/docs/","5e9"),exact:!0,sidebar:"docs"},{path:"/docs/badge/badge",component:p("/docs/badge/badge","caf"),exact:!0,sidebar:"docs"},{path:"/docs/FranzBoy/franzboy",component:p("/docs/FranzBoy/franzboy","ac9"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-c0/arduino-identificacao-pinos",component:p("/docs/franzininho-c0/arduino-identificacao-pinos","20e"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-c0/arduino-primeiros-passos",component:p("/docs/franzininho-c0/arduino-primeiros-passos","f45"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-c0/arduino-todolist",component:p("/docs/franzininho-c0/arduino-todolist","a97"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-c0/config-franzininho-c0-stm32cubeide",component:p("/docs/franzininho-c0/config-franzininho-c0-stm32cubeide","af7"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-c0/franzininho-c0-board",component:p("/docs/franzininho-c0/franzininho-c0-board","58d"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist",component:p("/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist","4a5"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/bootloader",component:p("/docs/franzininho-diy/bootloader","ad5"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/brilho-led",component:p("/docs/franzininho-diy/brilho-led","153"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/drivers-micronucleus",component:p("/docs/franzininho-diy/drivers-micronucleus","9cb"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/elefante-colorido",component:p("/docs/franzininho-diy/elefante-colorido","ced"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/entradas-analogicas",component:p("/docs/franzininho-diy/entradas-analogicas","064"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/entradas-saidas-digitais",component:p("/docs/franzininho-diy/entradas-saidas-digitais","804"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/buzzer",component:p("/docs/franzininho-diy/exemplos-avr-libc/buzzer","583"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/contadores",component:p("/docs/franzininho-diy/exemplos-avr-libc/contadores","4de"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/entrada-digital",component:p("/docs/franzininho-diy/exemplos-avr-libc/entrada-digital","2df"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/hello-world",component:p("/docs/franzininho-diy/exemplos-avr-libc/hello-world","c3e"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/int-ext",component:p("/docs/franzininho-diy/exemplos-avr-libc/int-ext","994"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos",component:p("/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos","f7b"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/saida-digital",component:p("/docs/franzininho-diy/exemplos-avr-libc/saida-digital","be0"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/timer0",component:p("/docs/franzininho-diy/exemplos-avr-libc/timer0","37f"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/timer0-int",component:p("/docs/franzininho-diy/exemplos-avr-libc/timer0-int","a3e"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/todo",component:p("/docs/franzininho-diy/exemplos-avr-libc/todo","d87"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/girassol-automatizado",component:p("/docs/franzininho-diy/girassol-automatizado","227"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/identificando-componentes",component:p("/docs/franzininho-diy/identificando-componentes","b0e"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/led-rgb",component:p("/docs/franzininho-diy/led-rgb","fb7"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/leitura-tecla",component:p("/docs/franzininho-diy/leitura-tecla","8e6"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/lista-de-materiais",component:p("/docs/franzininho-diy/lista-de-materiais","381"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/montagem",component:p("/docs/franzininho-diy/montagem","480"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/pacote",component:p("/docs/franzininho-diy/pacote","158"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/picsimlab/primeiros-passos",component:p("/docs/franzininho-diy/picsimlab/primeiros-passos","48d"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/pisca-led",component:p("/docs/franzininho-diy/pisca-led","254"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/saidas-pwm",component:p("/docs/franzininho-diy/saidas-pwm","83a"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/semaforo",component:p("/docs/franzininho-diy/semaforo","5de"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/sensor-luz-ldr",component:p("/docs/franzininho-diy/sensor-luz-ldr","c1b"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/sobre",component:p("/docs/franzininho-diy/sobre","d9a"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/tecla-liga-desliga",component:p("/docs/franzininho-diy/tecla-liga-desliga","72b"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/theremim",component:p("/docs/franzininho-diy/theremim","155"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/tutoriais-i2c",component:p("/docs/franzininho-diy/tutoriais-i2c","60e"),exact:!0},{path:"/docs/franzininho-diy/wokwi/primeiros-passos",component:p("/docs/franzininho-diy/wokwi/primeiros-passos","6de"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-tiny/franzininho-tiny",component:p("/docs/franzininho-tiny/franzininho-tiny","7bd"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi-lab01",component:p("/docs/franzininho-wifi-lab01","b1a"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-arduino/blink",component:p("/docs/franzininho-wifi/exemplos-arduino/blink","3e1"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-arduino/dht11",component:p("/docs/franzininho-wifi/exemplos-arduino/dht11","101"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard",component:p("/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard","e88"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-arduino/primeiros-passos",component:p("/docs/franzininho-wifi/exemplos-arduino/primeiros-passos","f3a"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/dht11",component:p("/docs/franzininho-wifi/exemplos-circuitpython/dht11","e55"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",component:p("/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c","478"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",component:p("/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas","3fa"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",component:p("/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais","a1a"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/ferramentas",component:p("/docs/franzininho-wifi/exemplos-circuitpython/ferramentas","5aa"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/hello-world",component:p("/docs/franzininho-wifi/exemplos-circuitpython/hello-world","211"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/irrigacao",component:p("/docs/franzininho-wifi/exemplos-circuitpython/irrigacao","ab4"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos",component:p("/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos","417"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/pwm",component:p("/docs/franzininho-wifi/exemplos-circuitpython/pwm","d39"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",component:p("/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04","e55"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/serial-console",component:p("/docs/franzininho-wifi/exemplos-circuitpython/serial-console","d7a"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/servo-motor",component:p("/docs/franzininho-wifi/exemplos-circuitpython/servo-motor","6c3"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",component:p("/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo","64b"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-espidf/aws",component:p("/docs/franzininho-wifi/exemplos-espidf/aws","3a6"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-espidf/entrada-analogica",component:p("/docs/franzininho-wifi/exemplos-espidf/entrada-analogica","213"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-espidf/entrada-digital",component:p("/docs/franzininho-wifi/exemplos-espidf/entrada-digital","1f7"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",component:p("/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf","7ea"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-espidf/ledc",component:p("/docs/franzininho-wifi/exemplos-espidf/ledc","8eb"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-espidf/primeiros-passos",component:p("/docs/franzininho-wifi/exemplos-espidf/primeiros-passos","bc1"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",component:p("/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais","fe6"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-micropython/primeiros-passos",component:p("/docs/franzininho-wifi/exemplos-micropython/primeiros-passos","473"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/franzininho-wifi",component:p("/docs/franzininho-wifi/franzininho-wifi","ad0"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/franzininho-wifi-dev-edition",component:p("/docs/franzininho-wifi/franzininho-wifi-dev-edition","ad4"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/wokwi/primeiros-passos",component:p("/docs/franzininho-wifi/wokwi/primeiros-passos","0b8"),exact:!0,sidebar:"docs"},{path:"/docs/Franzino/franzino",component:p("/docs/Franzino/franzino","74f"),exact:!0,sidebar:"docs"},{path:"/docs/Franzino/upload-com-arduino-uno",component:p("/docs/Franzino/upload-com-arduino-uno","eb6"),exact:!0,sidebar:"docs"},{path:"/docs/Franzino/upload-conversor-serial",component:p("/docs/Franzino/upload-conversor-serial","32f"),exact:!0,sidebar:"docs"},{path:"/docs/FranzMakey/franzmakey",component:p("/docs/FranzMakey/franzmakey","16c"),exact:!0,sidebar:"docs"},{path:"/docs/FranzMakey/primeiros-passos",component:p("/docs/FranzMakey/primeiros-passos","e82"),exact:!0,sidebar:"docs"},{path:"/docs/LaboratorioSistemasIot/adaptadores/arduino-uno",component:p("/docs/LaboratorioSistemasIot/adaptadores/arduino-uno","294"),exact:!0,sidebar:"docs"},{path:"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",component:p("/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","038"),exact:!0,sidebar:"docs"},{path:"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO",component:p("/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO","54b"),exact:!0,sidebar:"docs"},{path:"/docs/LaboratorioSistemasIot/LaboratorioSistemasIot",component:p("/docs/LaboratorioSistemasIot/LaboratorioSistemasIot","609"),exact:!0,sidebar:"docs"},{path:"/docs/programacao/tutoriais-introducao",component:p("/docs/programacao/tutoriais-introducao","c9f"),exact:!0}]},{path:"/",component:p("/","0c3"),exact:!0},{path:"*",component:p("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>i});var r=n(7294);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},7221:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),i=n(3727),a=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(2295)];var c=n(723),u=n(6550),d=n(8790);function p(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var f=n(3117),m=n(5742),h=n(2263),g=n(4996),b=n(6668),v=n(1944),y=n(4711),w=n(9727),k=n(3320),E=n(8780),x=n(197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function T(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),o=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,u.TH)();return e+(0,E.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),i=t?`${n}${t}`:o;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:i}),r.createElement("link",{rel:"canonical",href:i}))}function _(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(T,null),r.createElement(S,null),r.createElement(x.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,f.Z)({key:t},e))))))}const C=new Map;function z(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var A=n(8934),P=n(8940);function L(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=s.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const I=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,i=t.search===n.search;if(r&&o&&!i)return;const{hash:a}=t;if(a){const e=decodeURIComponent(a.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),L("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class N extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?L("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=L("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(I,{previousLocation:this.previousLocation,location:t},r.createElement(u.AW,{location:t,render:()=>e}))}}const D=N,O="__docusaurus-base-url-issue-banner-container",F="__docusaurus-base-url-issue-banner",M="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function j(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${O}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${F}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${M}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${M}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function U(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,r.useLayoutEffect)((()=>{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,j(e))),r.createElement("div",{id:O}))}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?r.createElement(U,null):null}function q(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:i}}=(0,h.Z)(),a=(0,g.Z)(e),{htmlLang:l,direction:s}=i[o];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:a}))}var H=n(4763),G=n(2389);function W(){const e=(0,G.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function Z(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return r.createElement(H.Z,null,r.createElement(P.M,null,r.createElement(A.t,null,r.createElement(p,null,r.createElement(q,null),r.createElement(_,null),r.createElement($,null),r.createElement(D,{location:z(t)},e)),r.createElement(W,null))))}var V=n(6887);const Y=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var K=n(9670);const Q=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Q.has(e))(e))return!1;Q.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(V).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Y(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),R(e))},te=Object.freeze(ee);if(l.Z.canUseDOM){window.docusaurus=te;const e=o.hydrate;R(window.location.pathname).then((()=>{e(r.createElement(a.B6,null,r.createElement(i.VK,null,r.createElement(Z,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>d});var r=n(7294),o=n(6809);const i=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Pr\xf3ximo","isLast":true,"path":"/docs","mainDocId":"sobre","docs":[{"id":"Badge/badge","path":"/docs/badge/badge","sidebar":"docs"},{"id":"FranzBoy/franzboy","path":"/docs/FranzBoy/franzboy","sidebar":"docs"},{"id":"FranzininhoDIY/bootloader/bootloader","path":"/docs/franzininho-diy/bootloader","sidebar":"docs"},{"id":"FranzininhoDIY/bootloader/drivers-micronucleus","path":"/docs/franzininho-diy/drivers-micronucleus","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/brilho-led","path":"/docs/franzininho-diy/brilho-led","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/elefante-colorido","path":"/docs/franzininho-diy/elefante-colorido","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/entradas-analogicas","path":"/docs/franzininho-diy/entradas-analogicas","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais","path":"/docs/franzininho-diy/entradas-saidas-digitais","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/girassol-automatizado","path":"/docs/franzininho-diy/girassol-automatizado","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/led-rgb","path":"/docs/franzininho-diy/led-rgb","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/leitura-tecla","path":"/docs/franzininho-diy/leitura-tecla","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/pacote","path":"/docs/franzininho-diy/pacote","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/pisca-led","path":"/docs/franzininho-diy/pisca-led","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/saidas-pwm","path":"/docs/franzininho-diy/saidas-pwm","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/semaforo","path":"/docs/franzininho-diy/semaforo","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr","path":"/docs/franzininho-diy/sensor-luz-ldr","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga","path":"/docs/franzininho-diy/tecla-liga-desliga","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/theremim","path":"/docs/franzininho-diy/theremim","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-i2c","path":"/docs/franzininho-diy/tutoriais-i2c"},{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-introducao","path":"/docs/programacao/tutoriais-introducao"},{"id":"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo","path":"/docs/franzininho-diy/exemplos-avr-libc/todo","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/buzzer","path":"/docs/franzininho-diy/exemplos-avr-libc/buzzer","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/contadores","path":"/docs/franzininho-diy/exemplos-avr-libc/contadores","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/entrada-digital","path":"/docs/franzininho-diy/exemplos-avr-libc/entrada-digital","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/hello-world","path":"/docs/franzininho-diy/exemplos-avr-libc/hello-world","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/int-externa","path":"/docs/franzininho-diy/exemplos-avr-libc/int-ext","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/primeiros-passos","path":"/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/saida-digital","path":"/docs/franzininho-diy/exemplos-avr-libc/saida-digital","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/timer0","path":"/docs/franzininho-diy/exemplos-avr-libc/timer0","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/timer0-int","path":"/docs/franzininho-diy/exemplos-avr-libc/timer0-int","sidebar":"docs"},{"id":"FranzininhoDIY/franzininho-diy","path":"/docs/franzininho-diy/sobre","sidebar":"docs"},{"id":"FranzininhoDIY/identificando-componentes","path":"/docs/franzininho-diy/identificando-componentes","sidebar":"docs"},{"id":"FranzininhoDIY/lista-de-materiais","path":"/docs/franzininho-diy/lista-de-materiais","sidebar":"docs"},{"id":"FranzininhoDIY/montagem","path":"/docs/franzininho-diy/montagem","sidebar":"docs"},{"id":"FranzininhoDIY/picsimlab/picsimlab-intro","path":"/docs/franzininho-diy/picsimlab/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoDIY/wokwi/wokwi-intro","path":"/docs/franzininho-diy/wokwi/primeiros-passos","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos","path":"/docs/franzininho-c0/arduino-identificacao-pinos","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos","path":"/docs/franzininho-c0/arduino-primeiros-passos","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist","path":"/docs/franzininho-c0/arduino-todolist","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide","path":"/docs/franzininho-c0/config-franzininho-c0-stm32cubeide","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist","path":"/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist","sidebar":"docs"},{"id":"franzininhoSTM32C0/franzininho-stm32c0","path":"/docs/franzininho-c0/franzininho-c0-board","sidebar":"docs"},{"id":"FranzininhoTiny/franzininho-tiny","path":"/docs/franzininho-tiny/franzininho-tiny","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino","path":"/docs/franzininho-wifi/exemplos-arduino/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino-blink","path":"/docs/franzininho-wifi/exemplos-arduino/blink","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino-dht11","path":"/docs/franzininho-wifi/exemplos-arduino/dht11","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino-neopixel","path":"/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11","path":"/docs/franzininho-wifi/exemplos-circuitpython/dht11","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c","path":"/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas","path":"/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais","path":"/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas","path":"/docs/franzininho-wifi/exemplos-circuitpython/ferramentas","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world","path":"/docs/franzininho-wifi/exemplos-circuitpython/hello-world","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos","path":"/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm","path":"/docs/franzininho-wifi/exemplos-circuitpython/pwm","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04","path":"/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console","path":"/docs/franzininho-wifi/exemplos-circuitpython/serial-console","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor","path":"/docs/franzininho-wifi/exemplos-circuitpython/servo-motor","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o","path":"/docs/franzininho-wifi/exemplos-circuitpython/irrigacao","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo","path":"/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00","path":"/docs/franzininho-wifi/exemplos-espidf/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01","path":"/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02","path":"/docs/franzininho-wifi/exemplos-espidf/entrada-digital","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03","path":"/docs/franzininho-wifi/exemplos-espidf/entrada-analogica","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04","path":"/docs/franzininho-wifi/exemplos-espidf/ledc","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05","path":"/docs/franzininho-wifi/exemplos-espidf/aws","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais","path":"/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos","path":"/docs/franzininho-wifi/exemplos-micropython/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/franzininho-wifi","path":"/docs/franzininho-wifi/franzininho-wifi","sidebar":"docs"},{"id":"FranzininhoWifi/franzininho-wifi-dev-edition","path":"/docs/franzininho-wifi/franzininho-wifi-dev-edition","sidebar":"docs"},{"id":"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro","path":"/docs/franzininho-wifi/wokwi/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWiFiLAB01/franzininho-wifi-lab01","path":"/docs/franzininho-wifi-lab01","sidebar":"docs"},{"id":"Franzino/franzino","path":"/docs/Franzino/franzino","sidebar":"docs"},{"id":"Franzino/upload-com-arduino-uno","path":"/docs/Franzino/upload-com-arduino-uno","sidebar":"docs"},{"id":"Franzino/upload-conversor-serial","path":"/docs/Franzino/upload-conversor-serial","sidebar":"docs"},{"id":"FranzMakey/franzmakey","path":"/docs/FranzMakey/franzmakey","sidebar":"docs"},{"id":"FranzMakey/primeiros-passos","path":"/docs/FranzMakey/primeiros-passos","sidebar":"docs"},{"id":"LaboratorioSistemasIot/adaptadores/adaptador-arduino","path":"/docs/LaboratorioSistemasIot/adaptadores/arduino-uno","sidebar":"docs"},{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","path":"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","sidebar":"docs"},{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO","path":"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO","sidebar":"docs"},{"id":"LaboratorioSistemasIot/laboratorio-sistemas-iot","path":"/docs/LaboratorioSistemasIot/LaboratorioSistemasIot","sidebar":"docs"},{"id":"sobre","path":"/docs/","sidebar":"docs"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/docs/","label":"sobre"}}}}],"breadcrumbs":true}}}'),a=JSON.parse('{"defaultLocale":"pt-BR","locales":["pt-BR","en"],"path":"i18n","currentLocale":"pt-BR","localeConfigs":{"pt-BR":{"label":"Portugu\xeas (Brasil)","direction":"ltr","htmlLang":"pt-BR","calendar":"gregory","path":"pt-BR"},"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"1.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"}}}'),c={siteConfig:o.default,siteMetadata:s,globalData:i,i18n:a,codeTranslations:l},u=r.createContext(c);function d(e){let{children:t}=e;return r.createElement(u.Provider,{value:c},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(412),i=n(5742),a=n(8780),l=n(7961);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(c,{error:t}))}function c(e){let{error:t}=e;const n=(0,a.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function u(e){let{error:t,tryAgain:n}=e;return r.createElement(p,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(i.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(u,e);class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294),o=n(405);function i(e){return r.createElement(o.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(3117),o=n(7294),i=n(3727),a=n(8780),l=n(2263),s=n(3919),c=n(412);const u=o.createContext({collectLink:()=>{}});var d=n(4996);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:k}=(0,d.C)(),E=(0,o.useContext)(u),x=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>x.current));const S=p||f;const T=(0,s.Z)(S),_=S?.replace("pathname://","");let C=void 0!==_?(z=_,b&&(e=>e.startsWith("/"))(z)?k(z):z):void 0;var z;C&&T&&(C=(0,a.applyTrailingSlash)(C,{trailingSlash:y,baseUrl:w}));const A=(0,o.useRef)(!1),P=n?i.OL:i.rU,L=c.Z.canUseIntersectionObserver,I=(0,o.useRef)(),R=()=>{A.current||null==C||(window.docusaurus.preload(C),A.current=!0)};(0,o.useEffect)((()=>(!L&&T&&null!=C&&window.docusaurus.prefetch(C),()=>{L&&I.current&&I.current.disconnect()})),[I,C,L,T]);const N=C?.startsWith("#")??!1,D=!C||!T||N;return D||g||E.collectLink(C),D?o.createElement("a",(0,r.Z)({ref:x,href:C},S&&!T&&{target:"_blank",rel:"noopener noreferrer"},v)):o.createElement(P,(0,r.Z)({},v,{onMouseEnter:R,onTouchStart:R,innerRef:e=>{x.current=e,L&&e&&T&&(I.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(I.current.unobserve(e),I.current.disconnect(),null!=C&&window.docusaurus.prefetch(C))}))})),I.current.observe(e))},to:C},n&&{isActive:h,activeClassName:m}))}const f=o.forwardRef(p)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=()=>null},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(7529);function a(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(a({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:i}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=a({message:t,id:n});return r.createElement(r.Fragment,null,o(l,i))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>a,Z:()=>l});var r=n(7294),o=n(2263),i=n(3919);function a(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:a=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,i.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return a?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=a();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294),o=n(8940);function i(){return(0,r.useContext)(o._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294),o=n(8934);function i(){return(0,r.useContext)(o._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[i,a]=n;const l=o?`${o}.${i}`:i;r(a)?e(a,l):t[l]=a}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>i});var r=n(7294);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),a=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return r.createElement(o.Provider,{value:a},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>p,_r:()=>u,Jo:()=>g,zh:()=>d,yW:()=>m,gB:()=>f});var r=n(6550),o=n(2263),i=n(9935);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const c={},u=()=>a("docusaurus-plugin-content-docs")??c,d=e=>function(e,t,n){void 0===t&&(t=i.m),void 0===n&&(n={});const r=a(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),i=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!i&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return i}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const i={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function i(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},7961:(e,t,n)=>{"use strict";n.d(t,{Z:()=>dt});var r=n(7294),o=n(4334),i=n(4763),a=n(1944),l=n(3117),s=n(6550),c=n(5999),u=n(5936);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,c.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:o}=f();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:o}),t))}var g=n(5281),b=n(9727);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(h,{className:v.skipToContent})}var w=n(6668),k=n(9689);function E(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:i=1.2,className:a,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:o,strokeWidth:i},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const x={closeButton:"closeButton_CVFx"};function S(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",x.closeButton,e.className)}),r.createElement(E,{width:14,height:14,strokeWidth:3.1}))}const T={content:"content_knG7"};function _(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,o.Z)(T.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const C={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function z(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:o,textColor:i,isCloseable:a}=e;return r.createElement("div",{className:C.announcementBar,style:{backgroundColor:o,color:i},role:"banner"},a&&r.createElement("div",{className:C.announcementBarPlaceholder}),r.createElement(_,{className:C.announcementBarContent}),a&&r.createElement(S,{onClick:n,className:C.announcementBarClose}))}var A=n(2961),P=n(2466);var L=n(902),I=n(3102);const R=r.createContext(null);function N(e){let{children:t}=e;const n=function(){const e=(0,A.e)(),t=(0,I.HY)(),[n,o]=(0,r.useState)(!1),i=null!==t.component,a=(0,L.D9)(i);return(0,r.useEffect)((()=>{i&&!a&&o(!0)}),[i,a]),(0,r.useEffect)((()=>{i?e.shown||o(!0):o(!1)}),[e.shown,i]),(0,r.useMemo)((()=>[n,o]),[n])}();return r.createElement(R.Provider,{value:n},t)}function D(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function O(){const e=(0,r.useContext)(R);if(!e)throw new L.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),i=(0,I.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:D(i)})),[o,i,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:i}=e;const{shown:a}=O();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},i)))}var M=n(2949),B=n(2389);function j(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:i,onChange:a}=e;const l=(0,B.Z)(),s=(0,c.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===i?(0,c.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)($.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",$.toggleButton,!l&&$.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===i?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(j,{className:(0,o.Z)($.toggleIcon,$.lightToggleIcon)}),r.createElement(U,{className:(0,o.Z)($.toggleIcon,$.darkToggleIcon)})))}const H=r.memo(q),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:i,setColorMode:a}=(0,M.I)();return o?null:r.createElement(H,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:i,onChange:a})}var Z=n(1327);function V(){return r.createElement(Z.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,A.e)();return r.createElement("button",{type:"button","aria-label":(0,c.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(E,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(V,null),r.createElement(W,{className:"margin-right--md"}),r.createElement(Y,null))}var Q=n(9960),X=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:i,label:a,html:s,isDropdownLink:c,prependBaseUrlToHref:u,...d}=e;const p=(0,X.Z)(o),f=(0,X.Z)(t),m=(0,X.Z)(i,{forcePrependBaseUrl:!0}),h=a&&i&&!(0,J.Z)(i),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,a,h&&r.createElement(te.Z,c&&{width:12,height:12}))};return i?r.createElement(Q.Z,(0,l.Z)({href:u?m:i},d,g)):r.createElement(Q.Z,(0,l.Z)({to:p,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...i}=e;const a=r.createElement(ne,(0,l.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},i));return n?r.createElement("li",null,a):a}function oe(e){let{className:t,isDropdownItem:n,...i}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,o.Z)("menu__link",t)},i)))}function ie(e){let{mobile:t=!1,position:n,...o}=e;const i=t?oe:re;return r.createElement(i,(0,l.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ae=n(6043),le=n(8596),se=n(2263);function ce(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:i,onClick:a,...s}=e;const c=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{c.current&&!c.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[c]),r.createElement("div",{ref:c,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",i)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(Se,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:i,onClick:a,...c}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ae.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":p})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},c,{onClick:e=>{e.preventDefault(),f()}}),c.children??c.label),r.createElement(ae.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p},t.map(((e,t)=>r.createElement(Se,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:a,activeClassName:"menu__link--active"},e,{key:t}))))))}function pe(e){let{mobile:t=!1,...n}=e;const o=t?de:ue;return r.createElement(o,n)}var fe=n(4711);function me(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var ge=n(1875);const be={searchBox:"searchBox_ZlJk"};function ve(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,be.searchBox)},t)}var ye=n(143),we=n(2802);var ke=n(373);const Ee=e=>e.docs.find((t=>t.id===e.mainDocId));const xe={default:ie,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...i}=e;const{i18n:{currentLocale:a,locales:u,localeConfigs:d}}=(0,se.Z)(),p=(0,fe.l)(),{search:f,hash:m}=(0,s.TH)(),h=[...n,...u.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===a?t?"menu__link--active":"dropdown__link--active":""}})),...o],g=t?(0,c.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[a].label;return r.createElement(pe,(0,l.Z)({},i,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ve,{className:n},r.createElement(ge.Z,null))},dropdown:pe,html:function(e){let{value:t,className:n,mobile:i=!1,isDropdownItem:a=!1}=e;const l=a?"li":"div";return r.createElement(l,{className:(0,o.Z)({navbar__item:!i&&!a,"menu__list-item":i},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...i}=e;const{activeDoc:a}=(0,ye.Iw)(o),s=(0,we.vY)(t,o);return null===s?null:r.createElement(ie,(0,l.Z)({exact:!0},i,{isActive:()=>a?.path===s.path||!!a?.sidebar&&a.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...i}=e;const{activeDoc:a}=(0,ye.Iw)(o),s=(0,we.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ie,(0,l.Z)({exact:!0},i,{isActive:()=>a?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...i}=e;const a=(0,we.lO)(o)[0],s=t??a.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return r.createElement(ie,(0,l.Z)({},i,{label:s,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:i,dropdownItemsAfter:a,...u}=e;const{search:d,hash:p}=(0,s.TH)(),f=(0,ye.Iw)(n),m=(0,ye.gB)(n),{savePreferredVersionName:h}=(0,ke.J)(n),g=[...i,...m.map((e=>{const t=f.alternateDocVersions[e.name]??Ee(e);return{label:e.label,to:`${t.path}${d}${p}`,isActive:()=>e===f.activeVersion,onClick:()=>h(e.name)}})),...a],b=(0,we.lO)(n)[0],v=t&&g.length>1?(0,c.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&g.length>1?void 0:Ee(b).path;return g.length<=1?r.createElement(ie,(0,l.Z)({},u,{mobile:t,label:v,to:y,isActive:o?()=>!1:void 0})):r.createElement(pe,(0,l.Z)({},u,{mobile:t,label:v,to:y,items:g,isActive:o?()=>!1:void 0}))}};function Se(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),i=xe[o];if(!i)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(i,n)}function Te(){const e=(0,A.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(Se,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function _e(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(c.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Ce(){const e=0===(0,w.L)().navbar.items.length,t=O();return r.createElement(r.Fragment,null,!e&&r.createElement(_e,{onClick:()=>t.hide()}),t.content)}function ze(){const e=(0,A.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(F,{header:r.createElement(K,null),primaryMenu:r.createElement(Te,null),secondaryMenu:r.createElement(Ce,null)}):null}const Ae={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Pe(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function Le(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:i}}=(0,w.L)(),a=(0,A.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),i=(0,r.useRef)(0),a=(0,r.useCallback)((e=>{null!==e&&(i.current=e.getBoundingClientRect().height)}),[]);return(0,P.RF)(((t,r)=>{let{scrollY:a}=t;if(!e)return;if(a<i.current)return void n(!0);if(o.current)return void(o.current=!1);const l=r?.scrollY,s=document.documentElement.scrollHeight-i.current,c=window.innerHeight;l&&a>=l?n(!1):a+c<s&&n(!0)})),(0,u.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:a,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,c.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Ae.navbarHideable,!s&&Ae.navbarHidden],{"navbar--dark":"dark"===i,"navbar--primary":"primary"===i,"navbar-sidebar--show":a.shown})},t,r.createElement(Pe,{onClick:a.toggle}),r.createElement(ze,null))}var Ie=n(8780);const Re={errorBoundaryError:"errorBoundaryError_a6uf"};function Ne(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(c.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function De(e){let{error:t}=e;const n=(0,Ie.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Re.errorBoundaryError},n)}class Oe extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Fe="right";function Me(e){let{width:t=30,height:n=30,className:o,...i}=e;return r.createElement("svg",(0,l.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},i),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Be(){const{toggle:e,shown:t}=(0,A.e)();return r.createElement("button",{onClick:e,"aria-label":(0,c.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Me,null))}const je={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Oe,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(Se,e)))))}function $e(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function qe(){const e=(0,A.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??Fe)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),i=t.find((e=>"search"===e.type));return r.createElement($e,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Be,null),r.createElement(V,null),r.createElement(Ue,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ue,{items:o}),r.createElement(W,{className:je.colorModeToggle}),!i&&r.createElement(ve,null,r.createElement(ge.Z,null)))})}function He(){return r.createElement(Le,null,r.createElement(qe,null))}function Ge(e){let{item:t}=e;const{to:n,href:o,label:i,prependBaseUrlToHref:a,...s}=t,c=(0,X.Z)(n),u=(0,X.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(Q.Z,(0,l.Z)({className:"footer__link-item"},o?{href:a?u:o}:{to:c},s),i,o&&!(0,J.Z)(o)&&r.createElement(te.Z,null))}function We(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Ge,{item:t}))}function Ze(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(We,{key:t,item:e})))))}function Ve(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(Ze,{key:t,column:e}))))}function Ye(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ke(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Ge,{item:t})}function Qe(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ke,{item:e}),t.length!==n+1&&r.createElement(Ye,null))))))}function Xe(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(Ve,{columns:t}):r.createElement(Qe,{links:t})}var Je=n(941);const et={footerLogoLink:"footerLogoLink_BH7S"};function tt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),i={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Je.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:i,width:t.width,height:t.height,style:t.style})}function nt(e){let{logo:t}=e;return t.href?r.createElement(Q.Z,{href:t.href,className:et.footerLogoLink,target:t.target},r.createElement(tt,{logo:t})):r.createElement(tt,{logo:t})}function rt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ot(e){let{style:t,links:n,logo:i,copyright:a}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(i||a)&&r.createElement("div",{className:"footer__bottom text--center"},i&&r.createElement("div",{className:"margin-bottom--sm"},i),a)))}function it(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:i}=e;return r.createElement(ot,{style:i,links:n&&n.length>0&&r.createElement(Xe,{links:n}),logo:o&&r.createElement(nt,{logo:o}),copyright:t&&r.createElement(rt,{copyright:t})})}const at=r.memo(it),lt=(0,L.Qc)([M.S,k.pl,P.OC,ke.L5,a.VC,function(e){let{children:t}=e;return r.createElement(I.n2,null,r.createElement(A.M,null,r.createElement(N,null,t)))}]);function st(e){let{children:t}=e;return r.createElement(lt,null,t)}function ct(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(c.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Ne,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(De,{error:t})))))}const ut={mainWrapper:"mainWrapper_z2l0"};function dt(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:c}=e;return(0,b.t)(),r.createElement(st,null,r.createElement(a.d,{title:s,description:c}),r.createElement(y,null),r.createElement(z,null),r.createElement(He,null),r.createElement("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,ut.mainWrapper,l)},r.createElement(i.Z,{fallback:e=>r.createElement(ct,e)},t)),!n&&r.createElement(at,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(3117),o=n(7294),i=n(9960),a=n(4996),l=n(2263),s=n(6668),c=n(941);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const i={light:(0,a.Z)(t.src),dark:(0,a.Z)(t.srcDark||t.src)},l=o.createElement(c.Z,{className:t.className,sources:i,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:c}}=(0,s.L)(),{imageClassName:d,titleClassName:p,...f}=e,m=(0,a.Z)(c?.href||"/"),h=n?"":t,g=c?.alt??h;return o.createElement(i.Z,(0,r.Z)({to:m},f,c?.target&&{target:c.target}),c&&o.createElement(u,{logo:c,alt:g,imageClassName:d}),null!=n&&o.createElement("b",{className:p},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294),o=n(5742);function i(e){let{locale:t,version:n,tag:i}=e;const a=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),i&&r.createElement("meta",{name:"docusaurus_tag",content:i}),a&&r.createElement("meta",{name:"docsearch:language",content:a}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),i&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:i}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(3117),o=n(7294),i=n(4334),a=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function c(e){const t=(0,a.Z)(),{colorMode:n}=(0,l.I)(),{sources:c,className:u,alt:d,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,f.map((e=>o.createElement("img",(0,r.Z)({key:e,src:c[e],alt:d,className:(0,i.Z)(s.themedImage,s[`themedImage--${e}`],u)},p)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>g});var r=n(3117),o=n(7294),i=n(412),a=n(1442);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),i=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:i}}const c={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?c:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const i=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,a.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!i.current)return d(e,n),void(i.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function f(e){if(!i.Z.canUseDOM)return e?c:u}function m(e){let{as:t="div",collapsed:n,children:r,animation:i,onCollapseTransitionEnd:a,className:l,disableSSRStyle:s}=e;const c=(0,o.useRef)(null);return p({collapsibleRef:c,collapsed:n,animation:i}),o.createElement(t,{ref:c,style:s?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(c.current,n),a?.(n))},className:l},r)}function h(e){let{collapsed:t,...n}=e;const[i,a]=(0,o.useState)(!t),[l,s]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||a(!0)}),[t]),(0,o.useLayoutEffect)((()=>{i&&s(t)}),[i,t]),i?o.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return o.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>f});var r=n(7294),o=n(2389),i=n(12),a=n(902),l=n(6668);const s=(0,i.WA)("docusaurus.announcement.dismiss"),c=(0,i.WA)("docusaurus.announcement.id"),u=()=>"true"===s.get(),d=e=>s.set(String(e)),p=r.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.Z)(),[n,i]=(0,r.useState)((()=>!!t&&u()));(0,r.useEffect)((()=>{i(u())}),[]);const a=(0,r.useCallback)((()=>{d(!0),i(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&d(!1),!r&&u()||i(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:a})),[e,n,a])}();return r.createElement(p.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(p);if(!e)throw new a.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),o=n(412),i=n(902),a=n(12),l=n(6668);const s=r.createContext(void 0),c="theme",u=(0,a.WA)(c),d={light:"light",dark:"dark"},p=e=>e===d.dark?d.dark:d.light,f=e=>o.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),m=e=>{u.set(p(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,i]=(0,r.useState)(f(e));(0,r.useEffect)((()=>{t&&u.del()}),[t]);const a=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(i(t),o&&m(t)):(i(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),u.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=u.get();null!==t&&a(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,a]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:a(null)};return e.addListener(r),()=>e.removeListener(r)}),[a,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:a,get isDarkTheme(){return o===d.dark},setLightTheme(){a(d.light)},setDarkTheme(){a(d.dark)}})),[o,a])}();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new i.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>g});var r=n(7294),o=n(143),i=n(9935),a=n(6668),l=n(2802),s=n(902),c=n(12);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,c.WA)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(u(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,a.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[i,l]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[i,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(f.Provider,{value:n},t)}function g(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(f);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=i.m);const t=(0,o.zh)(e),[n,a]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{a.savePreferredVersion(e,t)}),[a,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),o=n(902);const i=Symbol("EmptyContext"),a=r.createContext(i);function l(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(a.Provider,{value:i},t)}function s(){const e=(0,r.useContext)(a);if(e===i)throw new o.i6("DocsSidebarProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var r=n(7294),o=n(3102),i=n(7524),a=n(6550),l=(n(1688),n(902));function s(e){!function(e){const t=(0,a.k6)(),n=(0,l.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(6668);const u=r.createContext(void 0);function d(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,c.L)().navbar;return 0===t.length&&!e.component}(),t=(0,i.i)(),n=!e&&"mobile"===t,[a,l]=(0,r.useState)(!1);s((()=>{if(a)return l(!1),!1}));const u=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:a})),[e,n,u,a])}function p(e){let{children:t}=e;const n=d();return r.createElement(u.Provider,{value:n},t)}function f(){const e=r.useContext(u);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>a});var r=n(7294),o=n(902);const i=r.createContext(null);function a(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(i.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(i);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=a,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>i});var r=n(7294);const o="navigation-with-keyboard";function i(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>c});var r=n(7294),o=n(412);const i={desktop:"desktop",mobile:"mobile",ssr:"ssr"},a=996;function l(){return o.Z.canUseDOM?window.innerWidth>a?i.desktop:i.mobile:i.ssr}const s=!1;function c(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},2802:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>p,_F:()=>h,cE:()=>d,hI:()=>k,lO:()=>v,vY:()=>w,oz:()=>y,s1:()=>b});var r=n(7294),o=n(6550),i=n(8790),a=n(143),l=n(373),s=n(1116);function c(e){return Array.from(new Set(e))}var u=n(8596);const d=!!a._r;function p(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=p(t);if(e)return e}}}const f=(e,t)=>void 0!==e&&(0,u.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?f(e.href,t):"category"===e.type&&(f(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const i of t)if("category"===i.type&&((0,u.Mg)(i.href,n)||e(i.items))||"link"===i.type&&(0,u.Mg)(i.href,n)){return r&&"category"!==i.type||o.unshift(i),!0}return!1}(t),o}function b(){const e=(0,s.V)(),{pathname:t}=(0,o.TH)(),n=(0,a.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function v(e){const{activeVersion:t}=(0,a.Iw)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,a.yW)(e);return(0,r.useMemo)((()=>c([t,n,o].filter(Boolean))),[t,n,o])}function y(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${c(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function k(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),a=t.routes,l=a.find((e=>(0,o.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,c=s?n.docsSidebars[s]:void 0;return{docElement:(0,i.H)(a),sidebarName:s,sidebarItems:c}}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>u,VC:()=>f});var r=n(7294),o=n(7459),i=n(5742),a=n(226);function l(){const e=r.useContext(a._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),c=n(2263);function u(e){let{title:t,description:n,keywords:o,image:a,children:l}=e;const u=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),p=a?d(a,{absolute:!0}):void 0;return r.createElement(i.Z,null,t&&r.createElement("title",null,u),t&&r.createElement("meta",{property:"og:title",content:u}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),p&&r.createElement("meta",{property:"og:image",content:p}),p&&r.createElement("meta",{name:"twitter:image",content:p}),l)}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const a=r.useContext(d),l=(0,o.Z)(a,t);return r.createElement(d.Provider,{value:l},r.createElement(i.Z,null,r.createElement("html",{className:l})),n)}function f(e){let{children:t}=e;const n=l(),i=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return r.createElement(p,{className:(0,o.Z)(i,a)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>a,Qc:()=>c,Ql:()=>s,i6:()=>l,zX:()=>i});var r=n(7294);const o=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function i(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function a(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>a,Ns:()=>l});var r=n(7294),o=n(723),i=n(2263);function a(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,i.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d});var r=n(7294),o=n(412),i=n(2389),a=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function c(){const e=(0,r.useContext)(l);if(null==e)throw new a.i6("ScrollControllerProvider");return e}const u=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),o=(0,r.useRef)(u()),i=(0,a.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();i(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[i,n,...t])}function p(){const e=(0,r.useRef)(null),t=(0,i.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>o});n(2263);const r="default";function o(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{WA:()=>s});n(7294),n(1688);const r="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const i=document.createEvent("StorageEvent");i.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(i)}function i(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,a||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),a=!0),null}var t}let a=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=i(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>a});var r=n(2263),o=n(6550),i=n(8780);function a(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:a,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,o.TH)(),c=(0,i.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),u=l===a?e:e.replace(`/${l}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===a?`${u}`:`${u}${e}/`}(n)}${d}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>a});var r=n(7294),o=n(6550),i=n(902);function a(e){const t=(0,o.TH)(),n=(0,i.D9)(t),a=(0,i.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&a({location:t,previousLocation:n})}),[a,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(2263);function o(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),i="/"===o||o===r?o:(a=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(a):function(e){return e.endsWith("/")?e.slice(0,-1):e}(a));var a;return e.replace(o,i)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var i=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>_,ob:()=>f,PP:()=>z,Ep:()=>p});var r=n(3117);function o(e){return"/"===e.charAt(0)}function i(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const a=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],a=t&&t.split("/")||[],l=e&&o(e),s=t&&o(t),c=l||s;if(e&&o(e)?a=r:r.length&&(a.pop(),a=a.concat(r)),!a.length)return"/";if(a.length){var u=a[a.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=a.length;p>=0;p--){var f=a[p];"."===f?i(a,p):".."===f?(i(a,p),d++):d&&(i(a,p),d--)}if(!c)for(;d--;d)a.unshift("..");!c||""===a[0]||a[0]&&o(a[0])||a.unshift("");var m=a.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(2177);function s(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var i;"string"==typeof e?(i=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var i=t.indexOf("?");return-1!==i&&(n=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),i.state=t):(void 0===(i=(0,r.Z)({},e)).pathname&&(i.pathname=""),i.search?"?"!==i.search.charAt(0)&&(i.search="?"+i.search):i.search="",i.hash?"#"!==i.hash.charAt(0)&&(i.hash="#"+i.hash):i.hash="",void 0!==t&&void 0===i.state&&(i.state=t));try{i.pathname=decodeURI(i.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+i.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(i.key=n),o?i.pathname?"/"!==i.pathname.charAt(0)&&(i.pathname=a(i.pathname,o.pathname)):i.pathname=o.pathname:i.pathname||(i.pathname="/"),i}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var i="function"==typeof e?e(t,n):e;"string"==typeof i?"function"==typeof r?r(i,o):o(!0):o(!1!==i)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var h=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var b="popstate",v="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,i=!(-1===window.navigator.userAgent.indexOf("Trident")),a=e,c=a.forceRefresh,w=void 0!==c&&c,k=a.getUserConfirmation,E=void 0===k?g:k,x=a.keyLength,S=void 0===x?6:x,T=e.basename?d(s(e.basename)):"";function _(e){var t=e||{},n=t.key,r=t.state,o=window.location,i=o.pathname+o.search+o.hash;return T&&(i=u(i,T)),f(i,r,n)}function C(){return Math.random().toString(36).substr(2,S)}var z=m();function A(e){(0,r.Z)(U,e),U.length=n.length,z.notifyListeners(U.location,U.action)}function P(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||R(_(e.state))}function L(){R(_(y()))}var I=!1;function R(e){if(I)I=!1,A();else{z.confirmTransitionTo(e,"POP",E,(function(t){t?A({action:"POP",location:e}):function(e){var t=U.location,n=D.indexOf(t.key);-1===n&&(n=0);var r=D.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(I=!0,F(o))}(e)}))}}var N=_(y()),D=[N.key];function O(e){return T+p(e)}function F(e){n.go(e)}var M=0;function B(e){1===(M+=e)&&1===e?(window.addEventListener(b,P),i&&window.addEventListener(v,L)):0===M&&(window.removeEventListener(b,P),i&&window.removeEventListener(v,L))}var j=!1;var U={length:n.length,action:"POP",location:N,createHref:O,push:function(e,t){var r="PUSH",i=f(e,t,C(),U.location);z.confirmTransitionTo(i,r,E,(function(e){if(e){var t=O(i),a=i.key,l=i.state;if(o)if(n.pushState({key:a,state:l},null,t),w)window.location.href=t;else{var s=D.indexOf(U.location.key),c=D.slice(0,s+1);c.push(i.key),D=c,A({action:r,location:i})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",i=f(e,t,C(),U.location);z.confirmTransitionTo(i,r,E,(function(e){if(e){var t=O(i),a=i.key,l=i.state;if(o)if(n.replaceState({key:a,state:l},null,t),w)window.location.replace(t);else{var s=D.indexOf(U.location.key);-1!==s&&(D[s]=i.key),A({action:r,location:i})}else window.location.replace(t)}}))},go:F,goBack:function(){F(-1)},goForward:function(){F(1)},block:function(e){void 0===e&&(e=!1);var t=z.setPrompt(e);return j||(B(1),j=!0),function(){return j&&(j=!1,B(-1)),t()}},listen:function(e){var t=z.appendListener(e);return B(1),function(){B(-1),t()}}};return U}var k="hashchange",E={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:s},slash:{encodePath:s,decodePath:s}};function x(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function S(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function T(e){window.location.replace(x(window.location.href)+"#"+e)}function _(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,i=void 0===o?g:o,a=n.hashType,c=void 0===a?"slash":a,b=e.basename?d(s(e.basename)):"",v=E[c],y=v.encodePath,w=v.decodePath;function _(){var e=w(S());return b&&(e=u(e,b)),f(e)}var C=m();function z(e){(0,r.Z)(j,e),j.length=t.length,C.notifyListeners(j.location,j.action)}var A=!1,P=null;function L(){var e,t,n=S(),r=y(n);if(n!==r)T(r);else{var o=_(),a=j.location;if(!A&&(t=o,(e=a).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(P===p(o))return;P=null,function(e){if(A)A=!1,z();else{var t="POP";C.confirmTransitionTo(e,t,i,(function(n){n?z({action:t,location:e}):function(e){var t=j.location,n=D.lastIndexOf(p(t));-1===n&&(n=0);var r=D.lastIndexOf(p(e));-1===r&&(r=0);var o=n-r;o&&(A=!0,O(o))}(e)}))}}(o)}}var I=S(),R=y(I);I!==R&&T(R);var N=_(),D=[p(N)];function O(e){t.go(e)}var F=0;function M(e){1===(F+=e)&&1===e?window.addEventListener(k,L):0===F&&window.removeEventListener(k,L)}var B=!1;var j={length:t.length,action:"POP",location:N,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=x(window.location.href)),n+"#"+y(b+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,j.location);C.confirmTransitionTo(r,n,i,(function(e){if(e){var t=p(r),o=y(b+t);if(S()!==o){P=t,function(e){window.location.hash=e}(o);var i=D.lastIndexOf(p(j.location)),a=D.slice(0,i+1);a.push(t),D=a,z({action:n,location:r})}else z()}}))},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,j.location);C.confirmTransitionTo(r,n,i,(function(e){if(e){var t=p(r),o=y(b+t);S()!==o&&(P=t,T(o));var i=D.indexOf(p(j.location));-1!==i&&(D[i]=t),z({action:n,location:r})}}))},go:O,goBack:function(){O(-1)},goForward:function(){O(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return B||(M(1),B=!0),function(){return B&&(B=!1,M(-1)),t()}},listen:function(e){var t=C.appendListener(e);return M(1),function(){M(-1),t()}}};return j}function C(e,t,n){return Math.min(Math.max(e,t),n)}function z(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,i=void 0===o?["/"]:o,a=t.initialIndex,l=void 0===a?0:a,s=t.keyLength,c=void 0===s?6:s,u=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,c)}var g=C(l,0,i.length-1),b=i.map((function(e){return f(e,void 0,"string"==typeof e?h():e.key||h())})),v=p;function y(e){var t=C(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[g],index:g,entries:b,createHref:v,push:function(e,t){var r="PUSH",o=f(e,t,h(),w.location);u.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,h(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?a:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=a;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var a=u(n);d&&(a=a.concat(d(n)));for(var l=s(t),h=s(n),g=0;g<a.length;++g){var b=a[g];if(!(i[b]||r&&r[b]||h&&h[b]||l&&l[b])){var v=p(n,b);try{c(t,b,v)}catch(y){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,o,i,a,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,i,a,l],u=0;(s=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function i(e){return 100*(-1+e)}function a(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+i(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+i(e)+"%,0)"}:{"margin-left":i(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var i=n.render(!t),c=i.querySelector(r.barSelector),u=r.speed,d=r.easing;return i.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,a(e,u,d)),1===e?(s(i,{transition:"none",opacity:1}),i.offsetWidth,setTimeout((function(){s(i,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,a=t.querySelector(r.barSelector),l=e?"-100":i(n.status||0),c=document.querySelector(r.parent);return s(a,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,i=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+i)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function i(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&i(e,n,r);else i(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var i,a,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){for(var c in i=Object(arguments[s]))n.call(i,c)&&(l[c]=i[c]);if(t){a=t(i);for(var u=0;u<a.length;u++)r.call(i,a[u])&&(l[a[u]]=i[a[u]])}}return l}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,i;switch(n=n||{},r.util.type(t)){case"Object":if(i=r.util.objId(t),n[i])return n[i];for(var a in o={},n[i]=o,t)t.hasOwnProperty(a)&&(o[a]=e(t[a],n));return o;case"Array":return i=r.util.objId(t),n[i]?n[i]:(o=[],n[i]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var i=(o=o||r.languages)[e],a={};for(var l in i)if(i.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(a[s]=n[s]);n.hasOwnProperty(l)||(a[l]=i[l])}var c=o[e];return o[e]=a,r.languages.DFS(r.languages,(function(t,n){n===c&&t!=e&&(this[t]=a)})),a},DFS:function e(t,n,o,i){i=i||{};var a=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],o||l);var s=t[l],c=r.util.type(s);"Object"!==c||i[a(s)]?"Array"!==c||i[a(s)]||(i[a(s)]=!0,e(s,n,l,i)):(i[a(s)]=!0,e(s,n,null,i))}}},plugins:{},highlight:function(e,t,n){var i={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",i),i.tokens=r.tokenize(i.code,i.grammar),r.hooks.run("after-tokenize",i),o.stringify(r.util.encode(i.tokens),i.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new l;return s(o,o.head,e),a(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,i=0;o=n[i++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function i(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var i=o[1].length;o.index+=i,o[0]=o[0].slice(i)}return o}function a(e,t,n,l,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var m=0;m<f.length;++m){if(d&&d.cause==p+","+m)return;var h=f[m],g=h.inside,b=!!h.lookbehind,v=!!h.greedy,y=h.alias;if(v&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var k=h.pattern||h,E=l.next,x=u;E!==t.tail&&!(d&&x>=d.reach);x+=E.value.length,E=E.next){var S=E.value;if(t.length>e.length)return;if(!(S instanceof o)){var T,_=1;if(v){if(!(T=i(k,x,e,b))||T.index>=e.length)break;var C=T.index,z=T.index+T[0].length,A=x;for(A+=E.value.length;C>=A;)A+=(E=E.next).value.length;if(x=A-=E.value.length,E.value instanceof o)continue;for(var P=E;P!==t.tail&&(A<z||"string"==typeof P.value);P=P.next)_++,A+=P.value.length;_--,S=e.slice(x,A),T.index-=x}else if(!(T=i(k,0,S,b)))continue;C=T.index;var L=T[0],I=S.slice(0,C),R=S.slice(C+L.length),N=x+S.length;d&&N>d.reach&&(d.reach=N);var D=E.prev;if(I&&(D=s(t,D,I),x+=I.length),c(t,D,_),E=s(t,D,new o(p,g?r.tokenize(L,g):L,y,L)),R&&s(t,E,R),_>1){var O={cause:p+","+m,reach:N};a(e,t,n,E.prev,x,O),d&&O.reach>d.reach&&(d.reach=O.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function c(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var i={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},a=t.alias;a&&(Array.isArray(a)?Array.prototype.push.apply(i.classes,a):i.classes.push(a)),r.hooks.run("wrap",i);var l="";for(var s in i.attributes)l+=" "+s+'="'+(i.attributes[s]||"").replace(/"/g,""")+'"';return"<"+i.tag+' class="'+i.classes.join(" ")+'"'+l+">"+i.content+"</"+i.tag+">"},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var i={};i[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",i)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=r.variable[1].inside,a=0;a<o.length;a++)i[o[a]]=e.languages.bash[o[a]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),i=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function a(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+i+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:a(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:a(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:a(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:a(i),lookbehind:!0,greedy:!0},number:{pattern:a(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),i=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+i+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+i+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+i+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o=t[n];if("code"===o.type){var i=o.content[1],a=o.content[3];if(i&&a&&"code-language"===i.type&&"code-block"===a.type&&"string"==typeof i.content){var l=i.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());a.alias?"string"==typeof a.alias?a.alias=[a.alias,s]:a.alias.push(s):a.alias=[s]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var i=t.classes[r],c=/language-(.+)/.exec(i);if(c){n=c[1];break}}var u,d=e.languages[n];if(d)t.content=e.highlight((u=t.content,u.replace(a,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var p="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=p,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(p);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var a=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var i=p(/^\($/,/^\)$/);if(-1===i)continue;for(;n<i;n++){var a=u(0);"variable"===a.type&&(f(a,"variable-input"),o.push(a.content))}n=i+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),o.length>0)){var l=p(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var c=t[s];"variable"===c.type&&o.indexOf(c.content)>=0&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return!1}return!0}function p(e,r){for(var o=1,i=n;i<t.length;i++){var a=t[i],l=a.content;if("punctuation"===a.type&&"string"==typeof l)if(e.test(l))o++;else if(r.test(l)&&0===--o)return i}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],i=r.pattern.source;function a(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function c(t){var n={};n["interpolation-punctuation"]=o;var i=e.tokenize(t,n);if(3===i.length){var a=[1,1];a.push.apply(a,s(i[1],e.languages.javascript,"javascript")),i.splice.apply(i,a)}return new e.Token("interpolation",i,r.alias,t)}function u(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(i),lookbehind:!0}}),a=0,u={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(a++,r)););return u[n]=o,n})).join(""),n,r),p=Object.keys(u);return a=0,function e(t){for(var n=0;n<t.length;n++){if(a>=p.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=p[a],i="string"==typeof r?r:r.content,l=i.indexOf(o);if(-1!==l){++a;var s=i.substring(0,l),d=c(u[o]),f=i.substring(l+o.length),m=[];if(s&&m.push(s),m.push(d),f){var h=[f];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[a("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),a("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),a("svg",/\bsvg/.source),a("markdown",/\b(?:markdown|md)/.source),a("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),a("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r<o;r++){var i=n[r];if("string"!=typeof i){var a=i.content;if(Array.isArray(a))if("template-string"===i.type){var l=a[1];if(3===a.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=p(l),c=l.alias,d=Array.isArray(c)?c[0]:c,f=e.languages[d];if(!f)continue;a[1]=u(s,f,d)}}else t(a);else"string"!=typeof a&&t([a])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],i=e.languages.javascript[o];"RegExp"===e.util.type(i)&&(i=e.languages.javascript[o]={pattern:i});var a=i.inside||{};i.inside=a,a["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function i(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=i(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=i(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:i(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:i(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var a=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(a).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],i=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===a(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:a(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:i=!0),(i||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=a(o);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=a(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=a(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,i){if(n.language===r){var a=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof i&&!i(e))return e;for(var o,l=a.length;-1!==n.code.indexOf(o=t(r,l));)++l;return a[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,i=Object.keys(n.tokenStack);!function a(l){for(var s=0;s<l.length&&!(o>=i.length);s++){var c=l[s];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=i[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++o;var h=p.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),v=[];h&&v.push.apply(v,a([h])),v.push(g),b&&v.push.apply(v,a([b])),"string"==typeof c?l.splice.apply(l,[s,1].concat(v)):c.content=v}}else c.content&&a(c.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const i=o},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),o=n(9642),i=new Set;function a(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...i,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(a.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),i.add(e)}))}a.silent=!1,e.exports=a},6726:(e,t,n)=>{var r={"./":2885};function o(e){var t=i(e);return n(t)}function i(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=i,e.exports=o,o.id=6726},6500:(e,t,n)=>{var r={"./":2885};function o(e){var t=i(e);return n(t)}function i(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=i,e.exports=o,o.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function o(r,i){if(!(r in n)){i.push(r);var a=i.indexOf(r);if(a<i.length-1)throw new Error("Circular dependency: "+i.slice(a).join(" -> "));var l={},s=e[r];if(s){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var a in o(t,i),l[t]=!0,n[t])l[a]=!0}t(s.require,c),t(s.optional,c),t(s.modify,c)}n[r]=l,i.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(i,a,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var i=r[o];t[o]="string"==typeof i?{title:i}:i}}return t}(i),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var i=e[o];t(i&&i.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(s);a=a.map(c),l=(l||[]).map(c);var u=n(a),d=n(l);a.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var p,f=r(s),m=u;o(m);){for(var h in p={},m){var g=s[h];t(g&&g.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in u))for(var v in f(b))if(v in u){p[b]=!0;break}for(var y in m=p)u[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var i=o?o.series:void 0,a=o?o.parallel:e,l={},s={};function c(e){if(e in l)return l[e];s[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=r(e);else{var p=a(u.map((function(e){var t=c(e);return delete s[e],t})));i?o=i(p,(function(){return r(e)})):r(e)}return l[e]=o}for(var u in n)c(u);var d=[];for(var p in s)d.push(l[p]);return a(d)}(f,u,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),i=n(3840);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(a(227));function l(e,t,n,r,o,i,a,l,s){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(u){this.onError(u)}}var s=!1,c=null,u=!1,d=null,p={onError:function(e){s=!0,c=e}};function f(e,t,n,r,o,i,a,u,d){s=!1,c=null,l.apply(p,arguments)}var m=null,h=null,g=null;function b(e,t,n){var r=e.type||"unknown-event";e.currentTarget=g(n),function(e,t,n,r,o,i,l,p,m){if(f.apply(this,arguments),s){if(!s)throw Error(a(198));var h=c;s=!1,c=null,u||(u=!0,d=h)}}(r,t,void 0,e),e.currentTarget=null}var v=null,y={};function w(){if(v)for(var e in y){var t=y[e],n=v.indexOf(e);if(!(-1<n))throw Error(a(96,e));if(!E[n]){if(!t.extractEvents)throw Error(a(97,e));for(var r in E[n]=t,n=t.eventTypes){var o=void 0,i=n[r],l=t,s=r;if(x.hasOwnProperty(s))throw Error(a(99,s));x[s]=i;var c=i.phasedRegistrationNames;if(c){for(o in c)c.hasOwnProperty(o)&&k(c[o],l,s);o=!0}else i.registrationName?(k(i.registrationName,l,s),o=!0):o=!1;if(!o)throw Error(a(98,r,e))}}}}function k(e,t,n){if(S[e])throw Error(a(100,e));S[e]=t,T[e]=t.eventTypes[n].dependencies}var E=[],x={},S={},T={};function _(e){var t,n=!1;for(t in e)if(e.hasOwnProperty(t)){var r=e[t];if(!y.hasOwnProperty(t)||y[t]!==r){if(y[t])throw Error(a(102,t));y[t]=r,n=!0}}n&&w()}var C=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),z=null,A=null,P=null;function L(e){if(e=h(e)){if("function"!=typeof z)throw Error(a(280));var t=e.stateNode;t&&(t=m(t),z(e.stateNode,e.type,t))}}function I(e){A?P?P.push(e):P=[e]:A=e}function R(){if(A){var e=A,t=P;if(P=A=null,L(e),t)for(e=0;e<t.length;e++)L(t[e])}}function N(e,t){return e(t)}function D(e,t,n,r,o){return e(t,n,r,o)}function O(){}var F=N,M=!1,B=!1;function j(){null===A&&null===P||(O(),R())}function U(e,t,n){if(B)return e(t,n);B=!0;try{return F(e,t,n)}finally{B=!1,j()}}var $=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,q=Object.prototype.hasOwnProperty,H={},G={};function W(e,t,n,r,o,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i}var Z={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){Z[e]=new W(e,0,!1,e,null,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];Z[t]=new W(t,1,!1,e[1],null,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){Z[e]=new W(e,2,!1,e.toLowerCase(),null,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){Z[e]=new W(e,2,!1,e,null,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){Z[e]=new W(e,3,!1,e.toLowerCase(),null,!1)})),["checked","multiple","muted","selected"].forEach((function(e){Z[e]=new W(e,3,!0,e,null,!1)})),["capture","download"].forEach((function(e){Z[e]=new W(e,4,!1,e,null,!1)})),["cols","rows","size","span"].forEach((function(e){Z[e]=new W(e,6,!1,e,null,!1)})),["rowSpan","start"].forEach((function(e){Z[e]=new W(e,5,!1,e.toLowerCase(),null,!1)}));var V=/[\-:]([a-z])/g;function Y(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(V,Y);Z[t]=new W(t,1,!1,e,null,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(V,Y);Z[t]=new W(t,1,!1,e,"http://www.w3.org/1999/xlink",!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(V,Y);Z[t]=new W(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1)})),["tabIndex","crossOrigin"].forEach((function(e){Z[e]=new W(e,1,!1,e.toLowerCase(),null,!1)})),Z.xlinkHref=new W("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0),["src","href","action","formAction"].forEach((function(e){Z[e]=new W(e,1,!1,e.toLowerCase(),null,!0)}));var K=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function Q(e,t,n,r){var o=Z.hasOwnProperty(t)?Z[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!q.call(G,e)||!q.call(H,e)&&($.test(e)?G[e]=!0:(H[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}K.hasOwnProperty("ReactCurrentDispatcher")||(K.ReactCurrentDispatcher={current:null}),K.hasOwnProperty("ReactCurrentBatchConfig")||(K.ReactCurrentBatchConfig={suspense:null});var X=/^(.*)[\\\/]/,J="function"==typeof Symbol&&Symbol.for,ee=J?Symbol.for("react.element"):60103,te=J?Symbol.for("react.portal"):60106,ne=J?Symbol.for("react.fragment"):60107,re=J?Symbol.for("react.strict_mode"):60108,oe=J?Symbol.for("react.profiler"):60114,ie=J?Symbol.for("react.provider"):60109,ae=J?Symbol.for("react.context"):60110,le=J?Symbol.for("react.concurrent_mode"):60111,se=J?Symbol.for("react.forward_ref"):60112,ce=J?Symbol.for("react.suspense"):60113,ue=J?Symbol.for("react.suspense_list"):60120,de=J?Symbol.for("react.memo"):60115,pe=J?Symbol.for("react.lazy"):60116,fe=J?Symbol.for("react.block"):60121,me="function"==typeof Symbol&&Symbol.iterator;function he(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=me&&e[me]||e["@@iterator"])?e:null}function ge(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case ne:return"Fragment";case te:return"Portal";case oe:return"Profiler";case re:return"StrictMode";case ce:return"Suspense";case ue:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case ae:return"Context.Consumer";case ie:return"Context.Provider";case se:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case de:return ge(e.type);case fe:return ge(e.render);case pe:if(e=1===e._status?e._result:null)return ge(e)}return null}function be(e){var t="";do{e:switch(e.tag){case 3:case 4:case 6:case 7:case 10:case 9:var n="";break e;default:var r=e._debugOwner,o=e._debugSource,i=ge(e.type);n=null,r&&(n=ge(r.type)),r=i,i="",o?i=" (at "+o.fileName.replace(X,"")+":"+o.lineNumber+")":n&&(i=" (created by "+n+")"),n="\n in "+(r||"Unknown")+i}t+=n,e=e.return}while(e);return t}function ve(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function ye(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function we(e){e._valueTracker||(e._valueTracker=function(e){var t=ye(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,i.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function ke(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=ye(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function Ee(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function xe(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=ve(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function Se(e,t){null!=(t=t.checked)&&Q(e,"checked",t,!1)}function Te(e,t){Se(e,t);var n=ve(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?Ce(e,t.type,n):t.hasOwnProperty("defaultValue")&&Ce(e,t.type,ve(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function _e(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function Ce(e,t,n){"number"===t&&e.ownerDocument.activeElement===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ze(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function Ae(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+ve(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function Pe(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function Le(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:ve(n)}}function Ie(e,t){var n=ve(t.value),r=ve(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function Re(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var Ne="http://www.w3.org/1999/xhtml",De="http://www.w3.org/2000/svg";function Oe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Fe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?Oe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var Me,Be,je=(Be=function(e,t){if(e.namespaceURI!==De||"innerHTML"in e)e.innerHTML=t;else{for((Me=Me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=Me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return Be(e,t)}))}:Be);function Ue(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}function $e(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var qe={animationend:$e("Animation","AnimationEnd"),animationiteration:$e("Animation","AnimationIteration"),animationstart:$e("Animation","AnimationStart"),transitionend:$e("Transition","TransitionEnd")},He={},Ge={};function We(e){if(He[e])return He[e];if(!qe[e])return e;var t,n=qe[e];for(t in n)if(n.hasOwnProperty(t)&&t in Ge)return He[e]=n[t];return e}C&&(Ge=document.createElement("div").style,"AnimationEvent"in window||(delete qe.animationend.animation,delete qe.animationiteration.animation,delete qe.animationstart.animation),"TransitionEvent"in window||delete qe.transitionend.transition);var Ze=We("animationend"),Ve=We("animationiteration"),Ye=We("animationstart"),Ke=We("transitionend"),Qe="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Xe=new("function"==typeof WeakMap?WeakMap:Map);function Je(e){var t=Xe.get(e);return void 0===t&&(t=new Map,Xe.set(e,t)),t}function et(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).effectTag)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function tt(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function nt(e){if(et(e)!==e)throw Error(a(188))}function rt(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=et(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(r=o.return)){n=r;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return nt(o),e;if(i===r)return nt(o),t;i=i.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=i;else{for(var l=!1,s=o.child;s;){if(s===n){l=!0,n=o,r=i;break}if(s===r){l=!0,r=o,n=i;break}s=s.sibling}if(!l){for(s=i.child;s;){if(s===n){l=!0,n=i,r=o;break}if(s===r){l=!0,r=i,n=o;break}s=s.sibling}if(!l)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function ot(e,t){if(null==t)throw Error(a(30));return null==e?t:Array.isArray(e)?Array.isArray(t)?(e.push.apply(e,t),e):(e.push(t),e):Array.isArray(t)?[e].concat(t):[e,t]}function it(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}var at=null;function lt(e){if(e){var t=e._dispatchListeners,n=e._dispatchInstances;if(Array.isArray(t))for(var r=0;r<t.length&&!e.isPropagationStopped();r++)b(e,t[r],n[r]);else t&&b(e,t,n);e._dispatchListeners=null,e._dispatchInstances=null,e.isPersistent()||e.constructor.release(e)}}function st(e){if(null!==e&&(at=ot(at,e)),e=at,at=null,e){if(it(e,lt),at)throw Error(a(95));if(u)throw e=d,u=!1,d=null,e}}function ct(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}function ut(e){if(!C)return!1;var t=(e="on"+e)in document;return t||((t=document.createElement("div")).setAttribute(e,"return;"),t="function"==typeof t[e]),t}var dt=[];function pt(e){e.topLevelType=null,e.nativeEvent=null,e.targetInst=null,e.ancestors.length=0,10>dt.length&&dt.push(e)}function ft(e,t,n,r){if(dt.length){var o=dt.pop();return o.topLevelType=e,o.eventSystemFlags=r,o.nativeEvent=t,o.targetInst=n,o}return{topLevelType:e,eventSystemFlags:r,nativeEvent:t,targetInst:n,ancestors:[]}}function mt(e){var t=e.targetInst,n=t;do{if(!n){e.ancestors.push(n);break}var r=n;if(3===r.tag)r=r.stateNode.containerInfo;else{for(;r.return;)r=r.return;r=3!==r.tag?null:r.stateNode.containerInfo}if(!r)break;5!==(t=n.tag)&&6!==t||e.ancestors.push(n),n=Rn(r)}while(n);for(n=0;n<e.ancestors.length;n++){t=e.ancestors[n];var o=ct(e.nativeEvent);r=e.topLevelType;var i=e.nativeEvent,a=e.eventSystemFlags;0===n&&(a|=64);for(var l=null,s=0;s<E.length;s++){var c=E[s];c&&(c=c.extractEvents(r,t,i,o,a))&&(l=ot(l,c))}st(l)}}function ht(e,t,n){if(!n.has(e)){switch(e){case"scroll":Yt(t,"scroll",!0);break;case"focus":case"blur":Yt(t,"focus",!0),Yt(t,"blur",!0),n.set("blur",null),n.set("focus",null);break;case"cancel":case"close":ut(e)&&Yt(t,e,!0);break;case"invalid":case"submit":case"reset":break;default:-1===Qe.indexOf(e)&&Vt(e,t)}n.set(e,null)}}var gt,bt,vt,yt=!1,wt=[],kt=null,Et=null,xt=null,St=new Map,Tt=new Map,_t=[],Ct="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput close cancel copy cut paste click change contextmenu reset submit".split(" "),zt="focus blur dragenter dragleave mouseover mouseout pointerover pointerout gotpointercapture lostpointercapture".split(" ");function At(e,t,n,r,o){return{blockedOn:e,topLevelType:t,eventSystemFlags:32|n,nativeEvent:o,container:r}}function Pt(e,t){switch(e){case"focus":case"blur":kt=null;break;case"dragenter":case"dragleave":Et=null;break;case"mouseover":case"mouseout":xt=null;break;case"pointerover":case"pointerout":St.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Tt.delete(t.pointerId)}}function Lt(e,t,n,r,o,i){return null===e||e.nativeEvent!==i?(e=At(t,n,r,o,i),null!==t&&(null!==(t=Nn(t))&&bt(t)),e):(e.eventSystemFlags|=r,e)}function It(e){var t=Rn(e.target);if(null!==t){var n=et(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=tt(n)))return e.blockedOn=t,void i.unstable_runWithPriority(e.priority,(function(){vt(n)}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Rt(e){if(null!==e.blockedOn)return!1;var t=Jt(e.topLevelType,e.eventSystemFlags,e.container,e.nativeEvent);if(null!==t){var n=Nn(t);return null!==n&&bt(n),e.blockedOn=t,!1}return!0}function Nt(e,t,n){Rt(e)&&n.delete(t)}function Dt(){for(yt=!1;0<wt.length;){var e=wt[0];if(null!==e.blockedOn){null!==(e=Nn(e.blockedOn))&>(e);break}var t=Jt(e.topLevelType,e.eventSystemFlags,e.container,e.nativeEvent);null!==t?e.blockedOn=t:wt.shift()}null!==kt&&Rt(kt)&&(kt=null),null!==Et&&Rt(Et)&&(Et=null),null!==xt&&Rt(xt)&&(xt=null),St.forEach(Nt),Tt.forEach(Nt)}function Ot(e,t){e.blockedOn===t&&(e.blockedOn=null,yt||(yt=!0,i.unstable_scheduleCallback(i.unstable_NormalPriority,Dt)))}function Ft(e){function t(t){return Ot(t,e)}if(0<wt.length){Ot(wt[0],e);for(var n=1;n<wt.length;n++){var r=wt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==kt&&Ot(kt,e),null!==Et&&Ot(Et,e),null!==xt&&Ot(xt,e),St.forEach(t),Tt.forEach(t),n=0;n<_t.length;n++)(r=_t[n]).blockedOn===e&&(r.blockedOn=null);for(;0<_t.length&&null===(n=_t[0]).blockedOn;)It(n),null===n.blockedOn&&_t.shift()}var Mt={},Bt=new Map,jt=new Map,Ut=["abort","abort",Ze,"animationEnd",Ve,"animationIteration",Ye,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Ke,"transitionEnd","waiting","waiting"];function $t(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1],i="on"+(o[0].toUpperCase()+o.slice(1));i={phasedRegistrationNames:{bubbled:i,captured:i+"Capture"},dependencies:[r],eventPriority:t},jt.set(r,t),Bt.set(r,i),Mt[o]=i}}$t("blur blur cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focus focus input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),$t("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),$t(Ut,2);for(var qt="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),Ht=0;Ht<qt.length;Ht++)jt.set(qt[Ht],0);var Gt=i.unstable_UserBlockingPriority,Wt=i.unstable_runWithPriority,Zt=!0;function Vt(e,t){Yt(t,e,!1)}function Yt(e,t,n){var r=jt.get(t);switch(void 0===r?2:r){case 0:r=Kt.bind(null,t,1,e);break;case 1:r=Qt.bind(null,t,1,e);break;default:r=Xt.bind(null,t,1,e)}n?e.addEventListener(t,r,!0):e.addEventListener(t,r,!1)}function Kt(e,t,n,r){M||O();var o=Xt,i=M;M=!0;try{D(o,e,t,n,r)}finally{(M=i)||j()}}function Qt(e,t,n,r){Wt(Gt,Xt.bind(null,e,t,n,r))}function Xt(e,t,n,r){if(Zt)if(0<wt.length&&-1<Ct.indexOf(e))e=At(null,e,t,n,r),wt.push(e);else{var o=Jt(e,t,n,r);if(null===o)Pt(e,r);else if(-1<Ct.indexOf(e))e=At(o,e,t,n,r),wt.push(e);else if(!function(e,t,n,r,o){switch(t){case"focus":return kt=Lt(kt,e,t,n,r,o),!0;case"dragenter":return Et=Lt(Et,e,t,n,r,o),!0;case"mouseover":return xt=Lt(xt,e,t,n,r,o),!0;case"pointerover":var i=o.pointerId;return St.set(i,Lt(St.get(i)||null,e,t,n,r,o)),!0;case"gotpointercapture":return i=o.pointerId,Tt.set(i,Lt(Tt.get(i)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r)){Pt(e,r),e=ft(e,r,null,t);try{U(mt,e)}finally{pt(e)}}}}function Jt(e,t,n,r){if(null!==(n=Rn(n=ct(r)))){var o=et(n);if(null===o)n=null;else{var i=o.tag;if(13===i){if(null!==(n=tt(o)))return n;n=null}else if(3===i){if(o.stateNode.hydrate)return 3===o.tag?o.stateNode.containerInfo:null;n=null}else o!==n&&(n=null)}}e=ft(e,r,n,t);try{U(mt,e)}finally{pt(e)}return null}var en={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},tn=["Webkit","ms","Moz","O"];function nn(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||en.hasOwnProperty(e)&&en[e]?(""+t).trim():t+"px"}function rn(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=nn(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(en).forEach((function(e){tn.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),en[t]=en[e]}))}));var on=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function an(e,t){if(t){if(on[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e,""));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62,""))}}function ln(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var sn=Ne;function cn(e,t){var n=Je(e=9===e.nodeType||11===e.nodeType?e:e.ownerDocument);t=T[t];for(var r=0;r<t.length;r++)ht(t[r],e,n)}function un(){}function dn(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function pn(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function fn(e,t){var n,r=pn(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=pn(r)}}function mn(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mn(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function hn(){for(var e=window,t=dn();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=dn((e=t.contentWindow).document)}return t}function gn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var bn="$",vn="/$",yn="$?",wn="$!",kn=null,En=null;function xn(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Sn(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Tn="function"==typeof setTimeout?setTimeout:void 0,_n="function"==typeof clearTimeout?clearTimeout:void 0;function Cn(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function zn(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if(n===bn||n===wn||n===yn){if(0===t)return e;t--}else n===vn&&t++}e=e.previousSibling}return null}var An=Math.random().toString(36).slice(2),Pn="__reactInternalInstance$"+An,Ln="__reactEventHandlers$"+An,In="__reactContainere$"+An;function Rn(e){var t=e[Pn];if(t)return t;for(var n=e.parentNode;n;){if(t=n[In]||n[Pn]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=zn(e);null!==e;){if(n=e[Pn])return n;e=zn(e)}return t}n=(e=n).parentNode}return null}function Nn(e){return!(e=e[Pn]||e[In])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function Dn(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function On(e){return e[Ln]||null}function Fn(e){do{e=e.return}while(e&&5!==e.tag);return e||null}function Mn(e,t){var n=e.stateNode;if(!n)return null;var r=m(n);if(!r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}function Bn(e,t,n){(t=Mn(e,n.dispatchConfig.phasedRegistrationNames[t]))&&(n._dispatchListeners=ot(n._dispatchListeners,t),n._dispatchInstances=ot(n._dispatchInstances,e))}function jn(e){if(e&&e.dispatchConfig.phasedRegistrationNames){for(var t=e._targetInst,n=[];t;)n.push(t),t=Fn(t);for(t=n.length;0<t--;)Bn(n[t],"captured",e);for(t=0;t<n.length;t++)Bn(n[t],"bubbled",e)}}function Un(e,t,n){e&&n&&n.dispatchConfig.registrationName&&(t=Mn(e,n.dispatchConfig.registrationName))&&(n._dispatchListeners=ot(n._dispatchListeners,t),n._dispatchInstances=ot(n._dispatchInstances,e))}function $n(e){e&&e.dispatchConfig.registrationName&&Un(e._targetInst,null,e)}function qn(e){it(e,jn)}var Hn=null,Gn=null,Wn=null;function Zn(){if(Wn)return Wn;var e,t,n=Gn,r=n.length,o="value"in Hn?Hn.value:Hn.textContent,i=o.length;for(e=0;e<r&&n[e]===o[e];e++);var a=r-e;for(t=1;t<=a&&n[r-t]===o[i-t];t++);return Wn=o.slice(e,1<t?1-t:void 0)}function Vn(){return!0}function Yn(){return!1}function Kn(e,t,n,r){for(var o in this.dispatchConfig=e,this._targetInst=t,this.nativeEvent=n,e=this.constructor.Interface)e.hasOwnProperty(o)&&((t=e[o])?this[o]=t(n):"target"===o?this.target=r:this[o]=n[o]);return this.isDefaultPrevented=(null!=n.defaultPrevented?n.defaultPrevented:!1===n.returnValue)?Vn:Yn,this.isPropagationStopped=Yn,this}function Qn(e,t,n,r){if(this.eventPool.length){var o=this.eventPool.pop();return this.call(o,e,t,n,r),o}return new this(e,t,n,r)}function Xn(e){if(!(e instanceof this))throw Error(a(279));e.destructor(),10>this.eventPool.length&&this.eventPool.push(e)}function Jn(e){e.eventPool=[],e.getPooled=Qn,e.release=Xn}o(Kn.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=Vn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=Vn)},persist:function(){this.isPersistent=Vn},isPersistent:Yn,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=Yn,this._dispatchInstances=this._dispatchListeners=null}}),Kn.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},Kn.extend=function(e){function t(){}function n(){return r.apply(this,arguments)}var r=this;t.prototype=r.prototype;var i=new t;return o(i,n.prototype),n.prototype=i,n.prototype.constructor=n,n.Interface=o({},r.Interface,e),n.extend=r.extend,Jn(n),n},Jn(Kn);var er=Kn.extend({data:null}),tr=Kn.extend({data:null}),nr=[9,13,27,32],rr=C&&"CompositionEvent"in window,or=null;C&&"documentMode"in document&&(or=document.documentMode);var ir=C&&"TextEvent"in window&&!or,ar=C&&(!rr||or&&8<or&&11>=or),lr=String.fromCharCode(32),sr={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},cr=!1;function ur(e,t){switch(e){case"keyup":return-1!==nr.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function dr(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var pr=!1;var fr={eventTypes:sr,extractEvents:function(e,t,n,r){var o;if(rr)e:{switch(e){case"compositionstart":var i=sr.compositionStart;break e;case"compositionend":i=sr.compositionEnd;break e;case"compositionupdate":i=sr.compositionUpdate;break e}i=void 0}else pr?ur(e,n)&&(i=sr.compositionEnd):"keydown"===e&&229===n.keyCode&&(i=sr.compositionStart);return i?(ar&&"ko"!==n.locale&&(pr||i!==sr.compositionStart?i===sr.compositionEnd&&pr&&(o=Zn()):(Gn="value"in(Hn=r)?Hn.value:Hn.textContent,pr=!0)),i=er.getPooled(i,t,n,r),o?i.data=o:null!==(o=dr(n))&&(i.data=o),qn(i),o=i):o=null,(e=ir?function(e,t){switch(e){case"compositionend":return dr(t);case"keypress":return 32!==t.which?null:(cr=!0,lr);case"textInput":return(e=t.data)===lr&&cr?null:e;default:return null}}(e,n):function(e,t){if(pr)return"compositionend"===e||!rr&&ur(e,t)?(e=Zn(),Wn=Gn=Hn=null,pr=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return ar&&"ko"!==t.locale?null:t.data}}(e,n))?((t=tr.getPooled(sr.beforeInput,t,n,r)).data=e,qn(t)):t=null,null===o?t:null===t?o:[o,t]}},mr={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function hr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!mr[e.type]:"textarea"===t}var gr={change:{phasedRegistrationNames:{bubbled:"onChange",captured:"onChangeCapture"},dependencies:"blur change click focus input keydown keyup selectionchange".split(" ")}};function br(e,t,n){return(e=Kn.getPooled(gr.change,e,t,n)).type="change",I(n),qn(e),e}var vr=null,yr=null;function wr(e){st(e)}function kr(e){if(ke(Dn(e)))return e}function Er(e,t){if("change"===e)return t}var xr=!1;function Sr(){vr&&(vr.detachEvent("onpropertychange",Tr),yr=vr=null)}function Tr(e){if("value"===e.propertyName&&kr(yr))if(e=br(yr,e,ct(e)),M)st(e);else{M=!0;try{N(wr,e)}finally{M=!1,j()}}}function _r(e,t,n){"focus"===e?(Sr(),yr=n,(vr=t).attachEvent("onpropertychange",Tr)):"blur"===e&&Sr()}function Cr(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return kr(yr)}function zr(e,t){if("click"===e)return kr(t)}function Ar(e,t){if("input"===e||"change"===e)return kr(t)}C&&(xr=ut("input")&&(!document.documentMode||9<document.documentMode));var Pr={eventTypes:gr,_isInputEventSupported:xr,extractEvents:function(e,t,n,r){var o=t?Dn(t):window,i=o.nodeName&&o.nodeName.toLowerCase();if("select"===i||"input"===i&&"file"===o.type)var a=Er;else if(hr(o))if(xr)a=Ar;else{a=Cr;var l=_r}else(i=o.nodeName)&&"input"===i.toLowerCase()&&("checkbox"===o.type||"radio"===o.type)&&(a=zr);if(a&&(a=a(e,t)))return br(a,n,r);l&&l(e,o,t),"blur"===e&&(e=o._wrapperState)&&e.controlled&&"number"===o.type&&Ce(o,"number",o.value)}},Lr=Kn.extend({view:null,detail:null}),Ir={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Rr(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Ir[e])&&!!t[e]}function Nr(){return Rr}var Dr=0,Or=0,Fr=!1,Mr=!1,Br=Lr.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:Nr,button:null,buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},movementX:function(e){if("movementX"in e)return e.movementX;var t=Dr;return Dr=e.screenX,Fr?"mousemove"===e.type?e.screenX-t:0:(Fr=!0,0)},movementY:function(e){if("movementY"in e)return e.movementY;var t=Or;return Or=e.screenY,Mr?"mousemove"===e.type?e.screenY-t:0:(Mr=!0,0)}}),jr=Br.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),Ur={mouseEnter:{registrationName:"onMouseEnter",dependencies:["mouseout","mouseover"]},mouseLeave:{registrationName:"onMouseLeave",dependencies:["mouseout","mouseover"]},pointerEnter:{registrationName:"onPointerEnter",dependencies:["pointerout","pointerover"]},pointerLeave:{registrationName:"onPointerLeave",dependencies:["pointerout","pointerover"]}},$r={eventTypes:Ur,extractEvents:function(e,t,n,r,o){var i="mouseover"===e||"pointerover"===e,a="mouseout"===e||"pointerout"===e;if(i&&0==(32&o)&&(n.relatedTarget||n.fromElement)||!a&&!i)return null;(i=r.window===r?r:(i=r.ownerDocument)?i.defaultView||i.parentWindow:window,a)?(a=t,null!==(t=(t=n.relatedTarget||n.toElement)?Rn(t):null)&&(t!==et(t)||5!==t.tag&&6!==t.tag)&&(t=null)):a=null;if(a===t)return null;if("mouseout"===e||"mouseover"===e)var l=Br,s=Ur.mouseLeave,c=Ur.mouseEnter,u="mouse";else"pointerout"!==e&&"pointerover"!==e||(l=jr,s=Ur.pointerLeave,c=Ur.pointerEnter,u="pointer");if(e=null==a?i:Dn(a),i=null==t?i:Dn(t),(s=l.getPooled(s,a,n,r)).type=u+"leave",s.target=e,s.relatedTarget=i,(n=l.getPooled(c,t,n,r)).type=u+"enter",n.target=i,n.relatedTarget=e,u=t,(r=a)&&u)e:{for(c=u,a=0,e=l=r;e;e=Fn(e))a++;for(e=0,t=c;t;t=Fn(t))e++;for(;0<a-e;)l=Fn(l),a--;for(;0<e-a;)c=Fn(c),e--;for(;a--;){if(l===c||l===c.alternate)break e;l=Fn(l),c=Fn(c)}l=null}else l=null;for(c=l,l=[];r&&r!==c&&(null===(a=r.alternate)||a!==c);)l.push(r),r=Fn(r);for(r=[];u&&u!==c&&(null===(a=u.alternate)||a!==c);)r.push(u),u=Fn(u);for(u=0;u<l.length;u++)Un(l[u],"bubbled",s);for(u=r.length;0<u--;)Un(r[u],"captured",n);return 0==(64&o)?[s]:[s,n]}};var qr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},Hr=Object.prototype.hasOwnProperty;function Gr(e,t){if(qr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!Hr.call(t,n[r])||!qr(e[n[r]],t[n[r]]))return!1;return!0}var Wr=C&&"documentMode"in document&&11>=document.documentMode,Zr={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange".split(" ")}},Vr=null,Yr=null,Kr=null,Qr=!1;function Xr(e,t){var n=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;return Qr||null==Vr||Vr!==dn(n)?null:("selectionStart"in(n=Vr)&&gn(n)?n={start:n.selectionStart,end:n.selectionEnd}:n={anchorNode:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset},Kr&&Gr(Kr,n)?null:(Kr=n,(e=Kn.getPooled(Zr.select,Yr,e,t)).type="select",e.target=Vr,qn(e),e))}var Jr={eventTypes:Zr,extractEvents:function(e,t,n,r,o,i){if(!(i=!(o=i||(r.window===r?r.document:9===r.nodeType?r:r.ownerDocument)))){e:{o=Je(o),i=T.onSelect;for(var a=0;a<i.length;a++)if(!o.has(i[a])){o=!1;break e}o=!0}i=!o}if(i)return null;switch(o=t?Dn(t):window,e){case"focus":(hr(o)||"true"===o.contentEditable)&&(Vr=o,Yr=t,Kr=null);break;case"blur":Kr=Yr=Vr=null;break;case"mousedown":Qr=!0;break;case"contextmenu":case"mouseup":case"dragend":return Qr=!1,Xr(n,r);case"selectionchange":if(Wr)break;case"keydown":case"keyup":return Xr(n,r)}return null}},eo=Kn.extend({animationName:null,elapsedTime:null,pseudoElement:null}),to=Kn.extend({clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),no=Lr.extend({relatedTarget:null});function ro(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}var oo={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},io={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},ao=Lr.extend({key:function(e){if(e.key){var t=oo[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=ro(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?io[e.keyCode]||"Unidentified":""},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Nr,charCode:function(e){return"keypress"===e.type?ro(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?ro(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),lo=Br.extend({dataTransfer:null}),so=Lr.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Nr}),co=Kn.extend({propertyName:null,elapsedTime:null,pseudoElement:null}),uo=Br.extend({deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null}),po={eventTypes:Mt,extractEvents:function(e,t,n,r){var o=Bt.get(e);if(!o)return null;switch(e){case"keypress":if(0===ro(n))return null;case"keydown":case"keyup":e=ao;break;case"blur":case"focus":e=no;break;case"click":if(2===n.button)return null;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":e=Br;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":e=lo;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":e=so;break;case Ze:case Ve:case Ye:e=eo;break;case Ke:e=co;break;case"scroll":e=Lr;break;case"wheel":e=uo;break;case"copy":case"cut":case"paste":e=to;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":e=jr;break;default:e=Kn}return qn(t=e.getPooled(o,t,n,r)),t}};if(v)throw Error(a(101));v=Array.prototype.slice.call("ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin".split(" ")),w(),m=On,h=Nn,g=Dn,_({SimpleEventPlugin:po,EnterLeaveEventPlugin:$r,ChangeEventPlugin:Pr,SelectEventPlugin:Jr,BeforeInputEventPlugin:fr});var fo=[],mo=-1;function ho(e){0>mo||(e.current=fo[mo],fo[mo]=null,mo--)}function go(e,t){mo++,fo[mo]=e.current,e.current=t}var bo={},vo={current:bo},yo={current:!1},wo=bo;function ko(e,t){var n=e.type.contextTypes;if(!n)return bo;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,i={};for(o in n)i[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function Eo(e){return null!=(e=e.childContextTypes)}function xo(){ho(yo),ho(vo)}function So(e,t,n){if(vo.current!==bo)throw Error(a(168));go(vo,t),go(yo,n)}function To(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var i in r=r.getChildContext())if(!(i in e))throw Error(a(108,ge(t)||"Unknown",i));return o({},n,{},r)}function _o(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||bo,wo=vo.current,go(vo,e),go(yo,yo.current),!0}function Co(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=To(e,t,wo),r.__reactInternalMemoizedMergedChildContext=e,ho(yo),ho(vo),go(vo,e)):ho(yo),go(yo,n)}var zo=i.unstable_runWithPriority,Ao=i.unstable_scheduleCallback,Po=i.unstable_cancelCallback,Lo=i.unstable_requestPaint,Io=i.unstable_now,Ro=i.unstable_getCurrentPriorityLevel,No=i.unstable_ImmediatePriority,Do=i.unstable_UserBlockingPriority,Oo=i.unstable_NormalPriority,Fo=i.unstable_LowPriority,Mo=i.unstable_IdlePriority,Bo={},jo=i.unstable_shouldYield,Uo=void 0!==Lo?Lo:function(){},$o=null,qo=null,Ho=!1,Go=Io(),Wo=1e4>Go?Io:function(){return Io()-Go};function Zo(){switch(Ro()){case No:return 99;case Do:return 98;case Oo:return 97;case Fo:return 96;case Mo:return 95;default:throw Error(a(332))}}function Vo(e){switch(e){case 99:return No;case 98:return Do;case 97:return Oo;case 96:return Fo;case 95:return Mo;default:throw Error(a(332))}}function Yo(e,t){return e=Vo(e),zo(e,t)}function Ko(e,t,n){return e=Vo(e),Ao(e,t,n)}function Qo(e){return null===$o?($o=[e],qo=Ao(No,Jo)):$o.push(e),Bo}function Xo(){if(null!==qo){var e=qo;qo=null,Po(e)}Jo()}function Jo(){if(!Ho&&null!==$o){Ho=!0;var e=0;try{var t=$o;Yo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),$o=null}catch(n){throw null!==$o&&($o=$o.slice(e+1)),Ao(No,Xo),n}finally{Ho=!1}}}function ei(e,t,n){return 1073741821-(1+((1073741821-e+t/10)/(n/=10)|0))*n}function ti(e,t){if(e&&e.defaultProps)for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}var ni={current:null},ri=null,oi=null,ii=null;function ai(){ii=oi=ri=null}function li(e){var t=ni.current;ho(ni),e.type._context._currentValue=t}function si(e,t){for(;null!==e;){var n=e.alternate;if(e.childExpirationTime<t)e.childExpirationTime=t,null!==n&&n.childExpirationTime<t&&(n.childExpirationTime=t);else{if(!(null!==n&&n.childExpirationTime<t))break;n.childExpirationTime=t}e=e.return}}function ci(e,t){ri=e,ii=oi=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(e.expirationTime>=t&&(Oa=!0),e.firstContext=null)}function ui(e,t){if(ii!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(ii=e,t=1073741823),t={context:e,observedBits:t,next:null},null===oi){if(null===ri)throw Error(a(308));oi=t,ri.dependencies={expirationTime:0,firstContext:t,responders:null}}else oi=oi.next=t;return e._currentValue}var di=!1;function pi(e){e.updateQueue={baseState:e.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}function fi(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,baseQueue:e.baseQueue,shared:e.shared,effects:e.effects})}function mi(e,t){return(e={expirationTime:e,suspenseConfig:t,tag:0,payload:null,callback:null,next:null}).next=e}function hi(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function gi(e,t){var n=e.alternate;null!==n&&fi(n,e),null===(n=(e=e.updateQueue).baseQueue)?(e.baseQueue=t.next=t,t.next=t):(t.next=n.next,n.next=t)}function bi(e,t,n,r){var i=e.updateQueue;di=!1;var a=i.baseQueue,l=i.shared.pending;if(null!==l){if(null!==a){var s=a.next;a.next=l.next,l.next=s}a=l,i.shared.pending=null,null!==(s=e.alternate)&&(null!==(s=s.updateQueue)&&(s.baseQueue=l))}if(null!==a){s=a.next;var c=i.baseState,u=0,d=null,p=null,f=null;if(null!==s)for(var m=s;;){if((l=m.expirationTime)<r){var h={expirationTime:m.expirationTime,suspenseConfig:m.suspenseConfig,tag:m.tag,payload:m.payload,callback:m.callback,next:null};null===f?(p=f=h,d=c):f=f.next=h,l>u&&(u=l)}else{null!==f&&(f=f.next={expirationTime:1073741823,suspenseConfig:m.suspenseConfig,tag:m.tag,payload:m.payload,callback:m.callback,next:null}),Es(l,m.suspenseConfig);e:{var g=e,b=m;switch(l=t,h=n,b.tag){case 1:if("function"==typeof(g=b.payload)){c=g.call(h,c,l);break e}c=g;break e;case 3:g.effectTag=-4097&g.effectTag|64;case 0:if(null==(l="function"==typeof(g=b.payload)?g.call(h,c,l):g))break e;c=o({},c,l);break e;case 2:di=!0}}null!==m.callback&&(e.effectTag|=32,null===(l=i.effects)?i.effects=[m]:l.push(m))}if(null===(m=m.next)||m===s){if(null===(l=i.shared.pending))break;m=a.next=l.next,l.next=s,i.baseQueue=a=l,i.shared.pending=null}}null===f?d=c:f.next=p,i.baseState=d,i.baseQueue=f,xs(u),e.expirationTime=u,e.memoizedState=c}}function vi(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=o,o=n,"function"!=typeof r)throw Error(a(191,r));r.call(o)}}}var yi=K.ReactCurrentBatchConfig,wi=(new r.Component).refs;function ki(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.expirationTime&&(e.updateQueue.baseState=n)}var Ei={isMounted:function(e){return!!(e=e._reactInternalFiber)&&et(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternalFiber;var r=cs(),o=yi.suspense;(o=mi(r=us(r,e,o),o)).payload=t,null!=n&&(o.callback=n),hi(e,o),ds(e,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternalFiber;var r=cs(),o=yi.suspense;(o=mi(r=us(r,e,o),o)).tag=1,o.payload=t,null!=n&&(o.callback=n),hi(e,o),ds(e,r)},enqueueForceUpdate:function(e,t){e=e._reactInternalFiber;var n=cs(),r=yi.suspense;(r=mi(n=us(n,e,r),r)).tag=2,null!=t&&(r.callback=t),hi(e,r),ds(e,n)}};function xi(e,t,n,r,o,i,a){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,i,a):!t.prototype||!t.prototype.isPureReactComponent||(!Gr(n,r)||!Gr(o,i))}function Si(e,t,n){var r=!1,o=bo,i=t.contextType;return"object"==typeof i&&null!==i?i=ui(i):(o=Eo(t)?wo:vo.current,i=(r=null!=(r=t.contextTypes))?ko(e,o):bo),t=new t(n,i),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=Ei,e.stateNode=t,t._reactInternalFiber=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=i),t}function Ti(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&Ei.enqueueReplaceState(t,t.state,null)}function _i(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=wi,pi(e);var i=t.contextType;"object"==typeof i&&null!==i?o.context=ui(i):(i=Eo(t)?wo:vo.current,o.context=ko(e,i)),bi(e,n,o,r),o.state=e.memoizedState,"function"==typeof(i=t.getDerivedStateFromProps)&&(ki(e,t,i,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&Ei.enqueueReplaceState(o,o.state,null),bi(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.effectTag|=4)}var Ci=Array.isArray;function zi(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===wi&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function Ai(e,t){if("textarea"!==e.type)throw Error(a(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t,""))}function Pi(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.effectTag=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=qs(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.effectTag=2,n):r:(t.effectTag=2,n):n}function l(t){return e&&null===t.alternate&&(t.effectTag=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ws(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=zi(e,t,n),r.return=e,r):((r=Hs(n.type,n.key,n.props,null,e.mode,r)).ref=zi(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Zs(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,i){return null===t||7!==t.tag?((t=Gs(n,e.mode,r,i)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ws(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case ee:return(n=Hs(t.type,t.key,t.props,null,e.mode,n)).ref=zi(e,null,t),n.return=e,n;case te:return(t=Zs(t,e.mode,n)).return=e,t}if(Ci(t)||he(t))return(t=Gs(t,e.mode,n,null)).return=e,t;Ai(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case ee:return n.key===o?n.type===ne?d(e,t,n.props.children,r,o):c(e,t,n,r):null;case te:return n.key===o?u(e,t,n,r):null}if(Ci(n)||he(n))return null!==o?null:d(e,t,n,r,null);Ai(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case ee:return e=e.get(null===r.key?n:r.key)||null,r.type===ne?d(t,e,r.props.children,o,r.key):c(t,e,r,o);case te:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(Ci(r)||he(r))return d(t,e=e.get(n)||null,r,o,null);Ai(t,r)}return null}function h(o,a,l,s){for(var c=null,u=null,d=a,h=a=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var b=f(o,d,l[h],s);if(null===b){null===d&&(d=g);break}e&&d&&null===b.alternate&&t(o,d),a=i(b,a,h),null===u?c=b:u.sibling=b,u=b,d=g}if(h===l.length)return n(o,d),c;if(null===d){for(;h<l.length;h++)null!==(d=p(o,l[h],s))&&(a=i(d,a,h),null===u?c=d:u.sibling=d,u=d);return c}for(d=r(o,d);h<l.length;h++)null!==(g=m(d,o,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),a=i(g,a,h),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach((function(e){return t(o,e)})),c}function g(o,l,s,c){var u=he(s);if("function"!=typeof u)throw Error(a(150));if(null==(s=u.call(s)))throw Error(a(151));for(var d=u=null,h=l,g=l=0,b=null,v=s.next();null!==h&&!v.done;g++,v=s.next()){h.index>g?(b=h,h=null):b=h.sibling;var y=f(o,h,v.value,c);if(null===y){null===h&&(h=b);break}e&&h&&null===y.alternate&&t(o,h),l=i(y,l,g),null===d?u=y:d.sibling=y,d=y,h=b}if(v.done)return n(o,h),u;if(null===h){for(;!v.done;g++,v=s.next())null!==(v=p(o,v.value,c))&&(l=i(v,l,g),null===d?u=v:d.sibling=v,d=v);return u}for(h=r(o,h);!v.done;g++,v=s.next())null!==(v=m(h,o,g,v.value,c))&&(e&&null!==v.alternate&&h.delete(null===v.key?g:v.key),l=i(v,l,g),null===d?u=v:d.sibling=v,d=v);return e&&h.forEach((function(e){return t(o,e)})),u}return function(e,r,i,s){var c="object"==typeof i&&null!==i&&i.type===ne&&null===i.key;c&&(i=i.props.children);var u="object"==typeof i&&null!==i;if(u)switch(i.$$typeof){case ee:e:{for(u=i.key,c=r;null!==c;){if(c.key===u){if(7===c.tag){if(i.type===ne){n(e,c.sibling),(r=o(c,i.props.children)).return=e,e=r;break e}}else if(c.elementType===i.type){n(e,c.sibling),(r=o(c,i.props)).ref=zi(e,c,i),r.return=e,e=r;break e}n(e,c);break}t(e,c),c=c.sibling}i.type===ne?((r=Gs(i.props.children,e.mode,s,i.key)).return=e,e=r):((s=Hs(i.type,i.key,i.props,null,e.mode,s)).ref=zi(e,r,i),s.return=e,e=s)}return l(e);case te:e:{for(c=i.key;null!==r;){if(r.key===c){if(4===r.tag&&r.stateNode.containerInfo===i.containerInfo&&r.stateNode.implementation===i.implementation){n(e,r.sibling),(r=o(r,i.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Zs(i,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof i||"number"==typeof i)return i=""+i,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,i)).return=e,e=r):(n(e,r),(r=Ws(i,e.mode,s)).return=e,e=r),l(e);if(Ci(i))return h(e,r,i,s);if(he(i))return g(e,r,i,s);if(u&&Ai(e,i),void 0===i&&!c)switch(e.tag){case 1:case 0:throw e=e.type,Error(a(152,e.displayName||e.name||"Component"))}return n(e,r)}}var Li=Pi(!0),Ii=Pi(!1),Ri={},Ni={current:Ri},Di={current:Ri},Oi={current:Ri};function Fi(e){if(e===Ri)throw Error(a(174));return e}function Mi(e,t){switch(go(Oi,t),go(Di,e),go(Ni,Ri),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:Fe(null,"");break;default:t=Fe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}ho(Ni),go(Ni,t)}function Bi(){ho(Ni),ho(Di),ho(Oi)}function ji(e){Fi(Oi.current);var t=Fi(Ni.current),n=Fe(t,e.type);t!==n&&(go(Di,e),go(Ni,n))}function Ui(e){Di.current===e&&(ho(Ni),ho(Di))}var $i={current:0};function qi(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||n.data===yn||n.data===wn))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.effectTag))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}function Hi(e,t){return{responder:e,props:t}}var Gi=K.ReactCurrentDispatcher,Wi=K.ReactCurrentBatchConfig,Zi=0,Vi=null,Yi=null,Ki=null,Qi=!1;function Xi(){throw Error(a(321))}function Ji(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!qr(e[n],t[n]))return!1;return!0}function ea(e,t,n,r,o,i){if(Zi=i,Vi=t,t.memoizedState=null,t.updateQueue=null,t.expirationTime=0,Gi.current=null===e||null===e.memoizedState?xa:Sa,e=n(r,o),t.expirationTime===Zi){i=0;do{if(t.expirationTime=0,!(25>i))throw Error(a(301));i+=1,Ki=Yi=null,t.updateQueue=null,Gi.current=Ta,e=n(r,o)}while(t.expirationTime===Zi)}if(Gi.current=Ea,t=null!==Yi&&null!==Yi.next,Zi=0,Ki=Yi=Vi=null,Qi=!1,t)throw Error(a(300));return e}function ta(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===Ki?Vi.memoizedState=Ki=e:Ki=Ki.next=e,Ki}function na(){if(null===Yi){var e=Vi.alternate;e=null!==e?e.memoizedState:null}else e=Yi.next;var t=null===Ki?Vi.memoizedState:Ki.next;if(null!==t)Ki=t,Yi=e;else{if(null===e)throw Error(a(310));e={memoizedState:(Yi=e).memoizedState,baseState:Yi.baseState,baseQueue:Yi.baseQueue,queue:Yi.queue,next:null},null===Ki?Vi.memoizedState=Ki=e:Ki=Ki.next=e}return Ki}function ra(e,t){return"function"==typeof t?t(e):t}function oa(e){var t=na(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=Yi,o=r.baseQueue,i=n.pending;if(null!==i){if(null!==o){var l=o.next;o.next=i.next,i.next=l}r.baseQueue=o=i,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var s=l=i=null,c=o;do{var u=c.expirationTime;if(u<Zi){var d={expirationTime:c.expirationTime,suspenseConfig:c.suspenseConfig,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null};null===s?(l=s=d,i=r):s=s.next=d,u>Vi.expirationTime&&(Vi.expirationTime=u,xs(u))}else null!==s&&(s=s.next={expirationTime:1073741823,suspenseConfig:c.suspenseConfig,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null}),Es(u,c.suspenseConfig),r=c.eagerReducer===e?c.eagerState:e(r,c.action);c=c.next}while(null!==c&&c!==o);null===s?i=r:s.next=l,qr(r,t.memoizedState)||(Oa=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function ia(e){var t=na(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{i=e(i,l.action),l=l.next}while(l!==o);qr(i,t.memoizedState)||(Oa=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function aa(e){var t=ta();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ra,lastRenderedState:e}).dispatch=ka.bind(null,Vi,e),[t.memoizedState,e]}function la(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Vi.updateQueue)?(t={lastEffect:null},Vi.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function sa(){return na().memoizedState}function ca(e,t,n,r){var o=ta();Vi.effectTag|=e,o.memoizedState=la(1|t,n,void 0,void 0===r?null:r)}function ua(e,t,n,r){var o=na();r=void 0===r?null:r;var i=void 0;if(null!==Yi){var a=Yi.memoizedState;if(i=a.destroy,null!==r&&Ji(r,a.deps))return void la(t,n,i,r)}Vi.effectTag|=e,o.memoizedState=la(1|t,n,i,r)}function da(e,t){return ca(516,4,e,t)}function pa(e,t){return ua(516,4,e,t)}function fa(e,t){return ua(4,2,e,t)}function ma(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function ha(e,t,n){return n=null!=n?n.concat([e]):null,ua(4,2,ma.bind(null,t,e),n)}function ga(){}function ba(e,t){return ta().memoizedState=[e,void 0===t?null:t],e}function va(e,t){var n=na();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Ji(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function ya(e,t){var n=na();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Ji(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function wa(e,t,n){var r=Zo();Yo(98>r?98:r,(function(){e(!0)})),Yo(97<r?97:r,(function(){var r=Wi.suspense;Wi.suspense=void 0===t?null:t;try{e(!1),n()}finally{Wi.suspense=r}}))}function ka(e,t,n){var r=cs(),o=yi.suspense;o={expirationTime:r=us(r,e,o),suspenseConfig:o,action:n,eagerReducer:null,eagerState:null,next:null};var i=t.pending;if(null===i?o.next=o:(o.next=i.next,i.next=o),t.pending=o,i=e.alternate,e===Vi||null!==i&&i===Vi)Qi=!0,o.expirationTime=Zi,Vi.expirationTime=Zi;else{if(0===e.expirationTime&&(null===i||0===i.expirationTime)&&null!==(i=t.lastRenderedReducer))try{var a=t.lastRenderedState,l=i(a,n);if(o.eagerReducer=i,o.eagerState=l,qr(l,a))return}catch(s){}ds(e,r)}}var Ea={readContext:ui,useCallback:Xi,useContext:Xi,useEffect:Xi,useImperativeHandle:Xi,useLayoutEffect:Xi,useMemo:Xi,useReducer:Xi,useRef:Xi,useState:Xi,useDebugValue:Xi,useResponder:Xi,useDeferredValue:Xi,useTransition:Xi},xa={readContext:ui,useCallback:ba,useContext:ui,useEffect:da,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,ca(4,2,ma.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ca(4,2,e,t)},useMemo:function(e,t){var n=ta();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=ta();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=ka.bind(null,Vi,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},ta().memoizedState=e},useState:aa,useDebugValue:ga,useResponder:Hi,useDeferredValue:function(e,t){var n=aa(e),r=n[0],o=n[1];return da((function(){var n=Wi.suspense;Wi.suspense=void 0===t?null:t;try{o(e)}finally{Wi.suspense=n}}),[e,t]),r},useTransition:function(e){var t=aa(!1),n=t[0];return t=t[1],[ba(wa.bind(null,t,e),[t,e]),n]}},Sa={readContext:ui,useCallback:va,useContext:ui,useEffect:pa,useImperativeHandle:ha,useLayoutEffect:fa,useMemo:ya,useReducer:oa,useRef:sa,useState:function(){return oa(ra)},useDebugValue:ga,useResponder:Hi,useDeferredValue:function(e,t){var n=oa(ra),r=n[0],o=n[1];return pa((function(){var n=Wi.suspense;Wi.suspense=void 0===t?null:t;try{o(e)}finally{Wi.suspense=n}}),[e,t]),r},useTransition:function(e){var t=oa(ra),n=t[0];return t=t[1],[va(wa.bind(null,t,e),[t,e]),n]}},Ta={readContext:ui,useCallback:va,useContext:ui,useEffect:pa,useImperativeHandle:ha,useLayoutEffect:fa,useMemo:ya,useReducer:ia,useRef:sa,useState:function(){return ia(ra)},useDebugValue:ga,useResponder:Hi,useDeferredValue:function(e,t){var n=ia(ra),r=n[0],o=n[1];return pa((function(){var n=Wi.suspense;Wi.suspense=void 0===t?null:t;try{o(e)}finally{Wi.suspense=n}}),[e,t]),r},useTransition:function(e){var t=ia(ra),n=t[0];return t=t[1],[va(wa.bind(null,t,e),[t,e]),n]}},_a=null,Ca=null,za=!1;function Aa(e,t){var n=Us(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.effectTag=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Pa(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function La(e){if(za){var t=Ca;if(t){var n=t;if(!Pa(e,t)){if(!(t=Cn(n.nextSibling))||!Pa(e,t))return e.effectTag=-1025&e.effectTag|2,za=!1,void(_a=e);Aa(_a,n)}_a=e,Ca=Cn(t.firstChild)}else e.effectTag=-1025&e.effectTag|2,za=!1,_a=e}}function Ia(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;_a=e}function Ra(e){if(e!==_a)return!1;if(!za)return Ia(e),za=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Sn(t,e.memoizedProps))for(t=Ca;t;)Aa(e,t),t=Cn(t.nextSibling);if(Ia(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if(n===vn){if(0===t){Ca=Cn(e.nextSibling);break e}t--}else n!==bn&&n!==wn&&n!==yn||t++}e=e.nextSibling}Ca=null}}else Ca=_a?Cn(e.stateNode.nextSibling):null;return!0}function Na(){Ca=_a=null,za=!1}var Da=K.ReactCurrentOwner,Oa=!1;function Fa(e,t,n,r){t.child=null===e?Ii(t,null,n,r):Li(t,e.child,n,r)}function Ma(e,t,n,r,o){n=n.render;var i=t.ref;return ci(t,o),r=ea(e,t,n,r,i,o),null===e||Oa?(t.effectTag|=1,Fa(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=o&&(e.expirationTime=0),tl(e,t,o))}function Ba(e,t,n,r,o,i){if(null===e){var a=n.type;return"function"!=typeof a||$s(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Hs(n.type,null,r,null,t.mode,i)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,ja(e,t,a,r,o,i))}return a=e.child,o<i&&(o=a.memoizedProps,(n=null!==(n=n.compare)?n:Gr)(o,r)&&e.ref===t.ref)?tl(e,t,i):(t.effectTag|=1,(e=qs(a,r)).ref=t.ref,e.return=t,t.child=e)}function ja(e,t,n,r,o,i){return null!==e&&Gr(e.memoizedProps,r)&&e.ref===t.ref&&(Oa=!1,o<i)?(t.expirationTime=e.expirationTime,tl(e,t,i)):$a(e,t,n,r,i)}function Ua(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.effectTag|=128)}function $a(e,t,n,r,o){var i=Eo(n)?wo:vo.current;return i=ko(t,i),ci(t,o),n=ea(e,t,n,r,i,o),null===e||Oa?(t.effectTag|=1,Fa(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=o&&(e.expirationTime=0),tl(e,t,o))}function qa(e,t,n,r,o){if(Eo(n)){var i=!0;_o(t)}else i=!1;if(ci(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),Si(t,n,r),_i(t,n,r,o),r=!0;else if(null===e){var a=t.stateNode,l=t.memoizedProps;a.props=l;var s=a.context,c=n.contextType;"object"==typeof c&&null!==c?c=ui(c):c=ko(t,c=Eo(n)?wo:vo.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof a.getSnapshotBeforeUpdate;d||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(l!==r||s!==c)&&Ti(t,a,r,c),di=!1;var p=t.memoizedState;a.state=p,bi(t,r,a,o),s=t.memoizedState,l!==r||p!==s||yo.current||di?("function"==typeof u&&(ki(t,n,u,r),s=t.memoizedState),(l=di||xi(t,n,l,r,p,s,c))?(d||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||("function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),"function"==typeof a.componentDidMount&&(t.effectTag|=4)):("function"==typeof a.componentDidMount&&(t.effectTag|=4),t.memoizedProps=r,t.memoizedState=s),a.props=r,a.state=s,a.context=c,r=l):("function"==typeof a.componentDidMount&&(t.effectTag|=4),r=!1)}else a=t.stateNode,fi(e,t),l=t.memoizedProps,a.props=t.type===t.elementType?l:ti(t.type,l),s=a.context,"object"==typeof(c=n.contextType)&&null!==c?c=ui(c):c=ko(t,c=Eo(n)?wo:vo.current),(d="function"==typeof(u=n.getDerivedStateFromProps)||"function"==typeof a.getSnapshotBeforeUpdate)||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(l!==r||s!==c)&&Ti(t,a,r,c),di=!1,s=t.memoizedState,a.state=s,bi(t,r,a,o),p=t.memoizedState,l!==r||s!==p||yo.current||di?("function"==typeof u&&(ki(t,n,u,r),p=t.memoizedState),(u=di||xi(t,n,l,r,s,p,c))?(d||"function"!=typeof a.UNSAFE_componentWillUpdate&&"function"!=typeof a.componentWillUpdate||("function"==typeof a.componentWillUpdate&&a.componentWillUpdate(r,p,c),"function"==typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(r,p,c)),"function"==typeof a.componentDidUpdate&&(t.effectTag|=4),"function"==typeof a.getSnapshotBeforeUpdate&&(t.effectTag|=256)):("function"!=typeof a.componentDidUpdate||l===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=4),"function"!=typeof a.getSnapshotBeforeUpdate||l===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=256),t.memoizedProps=r,t.memoizedState=p),a.props=r,a.state=p,a.context=c,r=u):("function"!=typeof a.componentDidUpdate||l===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=4),"function"!=typeof a.getSnapshotBeforeUpdate||l===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=256),r=!1);return Ha(e,t,n,r,i,o)}function Ha(e,t,n,r,o,i){Ua(e,t);var a=0!=(64&t.effectTag);if(!r&&!a)return o&&Co(t,n,!1),tl(e,t,i);r=t.stateNode,Da.current=t;var l=a&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.effectTag|=1,null!==e&&a?(t.child=Li(t,e.child,null,i),t.child=Li(t,null,l,i)):Fa(e,t,l,i),t.memoizedState=r.state,o&&Co(t,n,!0),t.child}function Ga(e){var t=e.stateNode;t.pendingContext?So(0,t.pendingContext,t.pendingContext!==t.context):t.context&&So(0,t.context,!1),Mi(e,t.containerInfo)}var Wa,Za,Va,Ya,Ka={dehydrated:null,retryTime:0};function Qa(e,t,n){var r,o=t.mode,i=t.pendingProps,a=$i.current,l=!1;if((r=0!=(64&t.effectTag))||(r=0!=(2&a)&&(null===e||null!==e.memoizedState)),r?(l=!0,t.effectTag&=-65):null!==e&&null===e.memoizedState||void 0===i.fallback||!0===i.unstable_avoidThisFallback||(a|=1),go($i,1&a),null===e){if(void 0!==i.fallback&&La(t),l){if(l=i.fallback,(i=Gs(null,o,0,null)).return=t,0==(2&t.mode))for(e=null!==t.memoizedState?t.child.child:t.child,i.child=e;null!==e;)e.return=i,e=e.sibling;return(n=Gs(l,o,n,null)).return=t,i.sibling=n,t.memoizedState=Ka,t.child=i,n}return o=i.children,t.memoizedState=null,t.child=Ii(t,null,o,n)}if(null!==e.memoizedState){if(o=(e=e.child).sibling,l){if(i=i.fallback,(n=qs(e,e.pendingProps)).return=t,0==(2&t.mode)&&(l=null!==t.memoizedState?t.child.child:t.child)!==e.child)for(n.child=l;null!==l;)l.return=n,l=l.sibling;return(o=qs(o,i)).return=t,n.sibling=o,n.childExpirationTime=0,t.memoizedState=Ka,t.child=n,o}return n=Li(t,e.child,i.children,n),t.memoizedState=null,t.child=n}if(e=e.child,l){if(l=i.fallback,(i=Gs(null,o,0,null)).return=t,i.child=e,null!==e&&(e.return=i),0==(2&t.mode))for(e=null!==t.memoizedState?t.child.child:t.child,i.child=e;null!==e;)e.return=i,e=e.sibling;return(n=Gs(l,o,n,null)).return=t,i.sibling=n,n.effectTag|=2,i.childExpirationTime=0,t.memoizedState=Ka,t.child=i,n}return t.memoizedState=null,t.child=Li(t,e,i.children,n)}function Xa(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.alternate;null!==n&&n.expirationTime<t&&(n.expirationTime=t),si(e.return,t)}function Ja(e,t,n,r,o,i){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailExpiration:0,tailMode:o,lastEffect:i}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailExpiration=0,a.tailMode=o,a.lastEffect=i)}function el(e,t,n){var r=t.pendingProps,o=r.revealOrder,i=r.tail;if(Fa(e,t,r.children,n),0!=(2&(r=$i.current)))r=1&r|2,t.effectTag|=64;else{if(null!==e&&0!=(64&e.effectTag))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Xa(e,n);else if(19===e.tag)Xa(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(go($i,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===qi(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),Ja(t,!1,o,n,i,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===qi(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}Ja(t,!0,n,null,i,t.lastEffect);break;case"together":Ja(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function tl(e,t,n){null!==e&&(t.dependencies=e.dependencies);var r=t.expirationTime;if(0!==r&&xs(r),t.childExpirationTime<n)return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=qs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=qs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function nl(e,t){switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function rl(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return Eo(t.type)&&xo(),null;case 3:return Bi(),ho(yo),ho(vo),(n=t.stateNode).pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),null!==e&&null!==e.child||!Ra(t)||(t.effectTag|=4),Za(t),null;case 5:Ui(t),n=Fi(Oi.current);var i=t.type;if(null!==e&&null!=t.stateNode)Va(e,t,i,r,n),e.ref!==t.ref&&(t.effectTag|=128);else{if(!r){if(null===t.stateNode)throw Error(a(166));return null}if(e=Fi(Ni.current),Ra(t)){r=t.stateNode,i=t.type;var l=t.memoizedProps;switch(r[Pn]=t,r[Ln]=l,i){case"iframe":case"object":case"embed":Vt("load",r);break;case"video":case"audio":for(e=0;e<Qe.length;e++)Vt(Qe[e],r);break;case"source":Vt("error",r);break;case"img":case"image":case"link":Vt("error",r),Vt("load",r);break;case"form":Vt("reset",r),Vt("submit",r);break;case"details":Vt("toggle",r);break;case"input":xe(r,l),Vt("invalid",r),cn(n,"onChange");break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Vt("invalid",r),cn(n,"onChange");break;case"textarea":Le(r,l),Vt("invalid",r),cn(n,"onChange")}for(var s in an(i,l),e=null,l)if(l.hasOwnProperty(s)){var c=l[s];"children"===s?"string"==typeof c?r.textContent!==c&&(e=["children",c]):"number"==typeof c&&r.textContent!==""+c&&(e=["children",""+c]):S.hasOwnProperty(s)&&null!=c&&cn(n,s)}switch(i){case"input":we(r),_e(r,l,!0);break;case"textarea":we(r),Re(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=un)}n=e,t.updateQueue=n,null!==n&&(t.effectTag|=4)}else{switch(s=9===n.nodeType?n:n.ownerDocument,e===sn&&(e=Oe(i)),e===sn?"script"===i?((e=s.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=s.createElement(i,{is:r.is}):(e=s.createElement(i),"select"===i&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,i),e[Pn]=t,e[Ln]=r,Wa(e,t,!1,!1),t.stateNode=e,s=ln(i,r),i){case"iframe":case"object":case"embed":Vt("load",e),c=r;break;case"video":case"audio":for(c=0;c<Qe.length;c++)Vt(Qe[c],e);c=r;break;case"source":Vt("error",e),c=r;break;case"img":case"image":case"link":Vt("error",e),Vt("load",e),c=r;break;case"form":Vt("reset",e),Vt("submit",e),c=r;break;case"details":Vt("toggle",e),c=r;break;case"input":xe(e,r),c=Ee(e,r),Vt("invalid",e),cn(n,"onChange");break;case"option":c=ze(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},c=o({},r,{value:void 0}),Vt("invalid",e),cn(n,"onChange");break;case"textarea":Le(e,r),c=Pe(e,r),Vt("invalid",e),cn(n,"onChange");break;default:c=r}an(i,c);var u=c;for(l in u)if(u.hasOwnProperty(l)){var d=u[l];"style"===l?rn(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&je(e,d):"children"===l?"string"==typeof d?("textarea"!==i||""!==d)&&Ue(e,d):"number"==typeof d&&Ue(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(S.hasOwnProperty(l)?null!=d&&cn(n,l):null!=d&&Q(e,l,d,s))}switch(i){case"input":we(e),_e(e,r,!1);break;case"textarea":we(e),Re(e);break;case"option":null!=r.value&&e.setAttribute("value",""+ve(r.value));break;case"select":e.multiple=!!r.multiple,null!=(n=r.value)?Ae(e,!!r.multiple,n,!1):null!=r.defaultValue&&Ae(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof c.onClick&&(e.onclick=un)}xn(i,r)&&(t.effectTag|=4)}null!==t.ref&&(t.effectTag|=128)}return null;case 6:if(e&&null!=t.stateNode)Ya(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));n=Fi(Oi.current),Fi(Ni.current),Ra(t)?(n=t.stateNode,r=t.memoizedProps,n[Pn]=t,n.nodeValue!==r&&(t.effectTag|=4)):((n=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Pn]=t,t.stateNode=n)}return null;case 13:return ho($i),r=t.memoizedState,0!=(64&t.effectTag)?(t.expirationTime=n,t):(n=null!==r,r=!1,null===e?void 0!==t.memoizedProps.fallback&&Ra(t):(r=null!==(i=e.memoizedState),n||null===i||null!==(i=e.child.sibling)&&(null!==(l=t.firstEffect)?(t.firstEffect=i,i.nextEffect=l):(t.firstEffect=t.lastEffect=i,i.nextEffect=null),i.effectTag=8)),n&&!r&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&$i.current)?ql===Rl&&(ql=Ol):(ql!==Rl&&ql!==Ol||(ql=Fl),0!==Vl&&null!==jl&&(Ks(jl,$l),Qs(jl,Vl)))),(n||r)&&(t.effectTag|=4),null);case 4:return Bi(),Za(t),null;case 10:return li(t),null;case 19:if(ho($i),null===(r=t.memoizedState))return null;if(i=0!=(64&t.effectTag),null===(l=r.rendering)){if(i)nl(r,!1);else if(ql!==Rl||null!==e&&0!=(64&e.effectTag))for(l=t.child;null!==l;){if(null!==(e=qi(l))){for(t.effectTag|=64,nl(r,!1),null!==(i=e.updateQueue)&&(t.updateQueue=i,t.effectTag|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=t.child;null!==r;)l=n,(i=r).effectTag&=2,i.nextEffect=null,i.firstEffect=null,i.lastEffect=null,null===(e=i.alternate)?(i.childExpirationTime=0,i.expirationTime=l,i.child=null,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null):(i.childExpirationTime=e.childExpirationTime,i.expirationTime=e.expirationTime,i.child=e.child,i.memoizedProps=e.memoizedProps,i.memoizedState=e.memoizedState,i.updateQueue=e.updateQueue,l=e.dependencies,i.dependencies=null===l?null:{expirationTime:l.expirationTime,firstContext:l.firstContext,responders:l.responders}),r=r.sibling;return go($i,1&$i.current|2),t.child}l=l.sibling}}else{if(!i)if(null!==(e=qi(l))){if(t.effectTag|=64,i=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.effectTag|=4),nl(r,!0),null===r.tail&&"hidden"===r.tailMode&&!l.alternate)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Wo()-r.renderingStartTime>r.tailExpiration&&1<n&&(t.effectTag|=64,i=!0,nl(r,!1),t.expirationTime=t.childExpirationTime=n-1);r.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=r.last)?n.sibling=l:t.child=l,r.last=l)}return null!==r.tail?(0===r.tailExpiration&&(r.tailExpiration=Wo()+500),n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Wo(),n.sibling=null,t=$i.current,go($i,i?1&t|2:1&t),n):null}throw Error(a(156,t.tag))}function ol(e){switch(e.tag){case 1:Eo(e.type)&&xo();var t=e.effectTag;return 4096&t?(e.effectTag=-4097&t|64,e):null;case 3:if(Bi(),ho(yo),ho(vo),0!=(64&(t=e.effectTag)))throw Error(a(285));return e.effectTag=-4097&t|64,e;case 5:return Ui(e),null;case 13:return ho($i),4096&(t=e.effectTag)?(e.effectTag=-4097&t|64,e):null;case 19:return ho($i),null;case 4:return Bi(),null;case 10:return li(e),null;default:return null}}function il(e,t){return{value:e,source:t,stack:be(t)}}Wa=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Za=function(){},Va=function(e,t,n,r,i){var a=e.memoizedProps;if(a!==r){var l,s,c=t.stateNode;switch(Fi(Ni.current),e=null,n){case"input":a=Ee(c,a),r=Ee(c,r),e=[];break;case"option":a=ze(c,a),r=ze(c,r),e=[];break;case"select":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),e=[];break;case"textarea":a=Pe(c,a),r=Pe(c,r),e=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(c.onclick=un)}for(l in an(n,r),n=null,a)if(!r.hasOwnProperty(l)&&a.hasOwnProperty(l)&&null!=a[l])if("style"===l)for(s in c=a[l])c.hasOwnProperty(s)&&(n||(n={}),n[s]="");else"dangerouslySetInnerHTML"!==l&&"children"!==l&&"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(S.hasOwnProperty(l)?e||(e=[]):(e=e||[]).push(l,null));for(l in r){var u=r[l];if(c=null!=a?a[l]:void 0,r.hasOwnProperty(l)&&u!==c&&(null!=u||null!=c))if("style"===l)if(c){for(s in c)!c.hasOwnProperty(s)||u&&u.hasOwnProperty(s)||(n||(n={}),n[s]="");for(s in u)u.hasOwnProperty(s)&&c[s]!==u[s]&&(n||(n={}),n[s]=u[s])}else n||(e||(e=[]),e.push(l,n)),n=u;else"dangerouslySetInnerHTML"===l?(u=u?u.__html:void 0,c=c?c.__html:void 0,null!=u&&c!==u&&(e=e||[]).push(l,u)):"children"===l?c===u||"string"!=typeof u&&"number"!=typeof u||(e=e||[]).push(l,""+u):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&(S.hasOwnProperty(l)?(null!=u&&cn(i,l),e||c===u||(e=[])):(e=e||[]).push(l,u))}n&&(e=e||[]).push("style",n),i=e,(t.updateQueue=i)&&(t.effectTag|=4)}},Ya=function(e,t,n,r){n!==r&&(t.effectTag|=4)};var al="function"==typeof WeakSet?WeakSet:Set;function ll(e,t){var n=t.source,r=t.stack;null===r&&null!==n&&(r=be(n)),null!==n&&ge(n.type),t=t.value,null!==e&&1===e.tag&&ge(e.type);try{console.error(t)}catch(o){setTimeout((function(){throw o}))}}function sl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){Ds(e,n)}else t.current=null}function cl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 3:case 5:case 6:case 4:case 17:return;case 1:if(256&t.effectTag&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:ti(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return}throw Error(a(163))}function ul(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.destroy;n.destroy=void 0,void 0!==r&&r()}n=n.next}while(n!==t)}}function dl(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function pl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:return void dl(3,n);case 1:if(e=n.stateNode,4&n.effectTag)if(null===t)e.componentDidMount();else{var r=n.elementType===n.type?t.memoizedProps:ti(n.type,t.memoizedProps);e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate)}return void(null!==(t=n.updateQueue)&&vi(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}vi(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.effectTag&&xn(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Ft(n)))))}throw Error(a(163))}function fl(e,t,n){switch("function"==typeof Bs&&Bs(t),t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var r=e.next;Yo(97<n?97:n,(function(){var e=r;do{var n=e.destroy;if(void 0!==n){var o=t;try{n()}catch(i){Ds(o,i)}}e=e.next}while(e!==r)}))}break;case 1:sl(t),"function"==typeof(n=t.stateNode).componentWillUnmount&&function(e,t){try{t.props=e.memoizedProps,t.state=e.memoizedState,t.componentWillUnmount()}catch(n){Ds(e,n)}}(t,n);break;case 5:sl(t);break;case 4:yl(e,t,n)}}function ml(e){var t=e.alternate;e.return=null,e.child=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.alternate=null,e.firstEffect=null,e.lastEffect=null,e.pendingProps=null,e.memoizedProps=null,e.stateNode=null,null!==t&&ml(t)}function hl(e){return 5===e.tag||3===e.tag||4===e.tag}function gl(e){e:{for(var t=e.return;null!==t;){if(hl(t)){var n=t;break e}t=t.return}throw Error(a(160))}switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(a(161))}16&n.effectTag&&(Ue(t,""),n.effectTag&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||hl(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.effectTag)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.effectTag)){n=n.stateNode;break e}}r?bl(e,n,t):vl(e,n,t)}function bl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=un));else if(4!==r&&null!==(e=e.child))for(bl(e,t,n),e=e.sibling;null!==e;)bl(e,t,n),e=e.sibling}function vl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(vl(e,t,n),e=e.sibling;null!==e;)vl(e,t,n),e=e.sibling}function yl(e,t,n){for(var r,o,i=t,l=!1;;){if(!l){l=i.return;e:for(;;){if(null===l)throw Error(a(160));switch(r=l.stateNode,l.tag){case 5:o=!1;break e;case 3:case 4:r=r.containerInfo,o=!0;break e}l=l.return}l=!0}if(5===i.tag||6===i.tag){e:for(var s=e,c=i,u=n,d=c;;)if(fl(s,d,u),null!==d.child&&4!==d.tag)d.child.return=d,d=d.child;else{if(d===c)break e;for(;null===d.sibling;){if(null===d.return||d.return===c)break e;d=d.return}d.sibling.return=d.return,d=d.sibling}o?(s=r,c=i.stateNode,8===s.nodeType?s.parentNode.removeChild(c):s.removeChild(c)):r.removeChild(i.stateNode)}else if(4===i.tag){if(null!==i.child){r=i.stateNode.containerInfo,o=!0,i.child.return=i,i=i.child;continue}}else if(fl(e,i,n),null!==i.child){i.child.return=i,i=i.child;continue}if(i===t)break;for(;null===i.sibling;){if(null===i.return||i.return===t)return;4===(i=i.return).tag&&(l=!1)}i.sibling.return=i.return,i=i.sibling}}function wl(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:return void ul(3,t);case 1:case 12:case 17:return;case 5:var n=t.stateNode;if(null!=n){var r=t.memoizedProps,o=null!==e?e.memoizedProps:r;e=t.type;var i=t.updateQueue;if(t.updateQueue=null,null!==i){for(n[Ln]=r,"input"===e&&"radio"===r.type&&null!=r.name&&Se(n,r),ln(e,o),t=ln(e,r),o=0;o<i.length;o+=2){var l=i[o],s=i[o+1];"style"===l?rn(n,s):"dangerouslySetInnerHTML"===l?je(n,s):"children"===l?Ue(n,s):Q(n,l,s,t)}switch(e){case"input":Te(n,r);break;case"textarea":Ie(n,r);break;case"select":t=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(e=r.value)?Ae(n,!!r.multiple,e,!1):t!==!!r.multiple&&(null!=r.defaultValue?Ae(n,!!r.multiple,r.defaultValue,!0):Ae(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(a(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((t=t.stateNode).hydrate&&(t.hydrate=!1,Ft(t.containerInfo)));case 13:if(n=t,null===t.memoizedState?r=!1:(r=!0,n=t.child,Kl=Wo()),null!==n)e:for(e=n;;){if(5===e.tag)i=e.stateNode,r?"function"==typeof(i=i.style).setProperty?i.setProperty("display","none","important"):i.display="none":(i=e.stateNode,o=null!=(o=e.memoizedProps.style)&&o.hasOwnProperty("display")?o.display:null,i.style.display=nn("display",o));else if(6===e.tag)e.stateNode.nodeValue=r?"":e.memoizedProps;else{if(13===e.tag&&null!==e.memoizedState&&null===e.memoizedState.dehydrated){(i=e.child.sibling).return=e,e=i;continue}if(null!==e.child){e.child.return=e,e=e.child;continue}}if(e===n)break;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}return void kl(t);case 19:return void kl(t)}throw Error(a(163))}function kl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new al),t.forEach((function(t){var r=Fs.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}var El="function"==typeof WeakMap?WeakMap:Map;function xl(e,t,n){(n=mi(n,null)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Jl||(Jl=!0,es=r),ll(e,t)},n}function Sl(e,t,n){(n=mi(n,null)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return ll(e,t),r(o)}}var i=e.stateNode;return null!==i&&"function"==typeof i.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===ts?ts=new Set([this]):ts.add(this),ll(e,t));var n=t.stack;this.componentDidCatch(t.value,{componentStack:null!==n?n:""})}),n}var Tl,_l=Math.ceil,Cl=K.ReactCurrentDispatcher,zl=K.ReactCurrentOwner,Al=0,Pl=8,Ll=16,Il=32,Rl=0,Nl=1,Dl=2,Ol=3,Fl=4,Ml=5,Bl=Al,jl=null,Ul=null,$l=0,ql=Rl,Hl=null,Gl=1073741823,Wl=1073741823,Zl=null,Vl=0,Yl=!1,Kl=0,Ql=500,Xl=null,Jl=!1,es=null,ts=null,ns=!1,rs=null,os=90,is=null,as=0,ls=null,ss=0;function cs(){return(Bl&(Ll|Il))!==Al?1073741821-(Wo()/10|0):0!==ss?ss:ss=1073741821-(Wo()/10|0)}function us(e,t,n){if(0==(2&(t=t.mode)))return 1073741823;var r=Zo();if(0==(4&t))return 99===r?1073741823:1073741822;if((Bl&Ll)!==Al)return $l;if(null!==n)e=ei(e,0|n.timeoutMs||5e3,250);else switch(r){case 99:e=1073741823;break;case 98:e=ei(e,150,100);break;case 97:case 96:e=ei(e,5e3,250);break;case 95:e=2;break;default:throw Error(a(326))}return null!==jl&&e===$l&&--e,e}function ds(e,t){if(50<as)throw as=0,ls=null,Error(a(185));if(null!==(e=ps(e,t))){var n=Zo();1073741823===t?(Bl&Pl)!==Al&&(Bl&(Ll|Il))===Al?gs(e):(ms(e),Bl===Al&&Xo()):ms(e),(4&Bl)===Al||98!==n&&99!==n||(null===is?is=new Map([[e,t]]):(void 0===(n=is.get(e))||n>t)&&is.set(e,t))}}function ps(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.alternate;null!==n&&n.expirationTime<t&&(n.expirationTime=t);var r=e.return,o=null;if(null===r&&3===e.tag)o=e.stateNode;else for(;null!==r;){if(n=r.alternate,r.childExpirationTime<t&&(r.childExpirationTime=t),null!==n&&n.childExpirationTime<t&&(n.childExpirationTime=t),null===r.return&&3===r.tag){o=r.stateNode;break}r=r.return}return null!==o&&(jl===o&&(xs(t),ql===Fl&&Ks(o,$l)),Qs(o,t)),o}function fs(e){var t=e.lastExpiredTime;if(0!==t)return t;if(!Ys(e,t=e.firstPendingTime))return t;var n=e.lastPingedTime;return 2>=(e=n>(e=e.nextKnownPendingLevel)?n:e)&&t!==e?0:e}function ms(e){if(0!==e.lastExpiredTime)e.callbackExpirationTime=1073741823,e.callbackPriority=99,e.callbackNode=Qo(gs.bind(null,e));else{var t=fs(e),n=e.callbackNode;if(0===t)null!==n&&(e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90);else{var r=cs();if(1073741823===t?r=99:1===t||2===t?r=95:r=0>=(r=10*(1073741821-t)-10*(1073741821-r))?99:250>=r?98:5250>=r?97:95,null!==n){var o=e.callbackPriority;if(e.callbackExpirationTime===t&&o>=r)return;n!==Bo&&Po(n)}e.callbackExpirationTime=t,e.callbackPriority=r,t=1073741823===t?Qo(gs.bind(null,e)):Ko(r,hs.bind(null,e),{timeout:10*(1073741821-t)-Wo()}),e.callbackNode=t}}}function hs(e,t){if(ss=0,t)return Xs(e,t=cs()),ms(e),null;var n=fs(e);if(0!==n){if(t=e.callbackNode,(Bl&(Ll|Il))!==Al)throw Error(a(327));if(Is(),e===jl&&n===$l||ys(e,n),null!==Ul){var r=Bl;Bl|=Ll;for(var o=ks();;)try{Ts();break}catch(s){ws(e,s)}if(ai(),Bl=r,Cl.current=o,ql===Nl)throw t=Hl,ys(e,n),Ks(e,n),ms(e),t;if(null===Ul)switch(o=e.finishedWork=e.current.alternate,e.finishedExpirationTime=n,r=ql,jl=null,r){case Rl:case Nl:throw Error(a(345));case Dl:Xs(e,2<n?2:n);break;case Ol:if(Ks(e,n),n===(r=e.lastSuspendedTime)&&(e.nextKnownPendingLevel=zs(o)),1073741823===Gl&&10<(o=Kl+Ql-Wo())){if(Yl){var i=e.lastPingedTime;if(0===i||i>=n){e.lastPingedTime=n,ys(e,n);break}}if(0!==(i=fs(e))&&i!==n)break;if(0!==r&&r!==n){e.lastPingedTime=r;break}e.timeoutHandle=Tn(As.bind(null,e),o);break}As(e);break;case Fl:if(Ks(e,n),n===(r=e.lastSuspendedTime)&&(e.nextKnownPendingLevel=zs(o)),Yl&&(0===(o=e.lastPingedTime)||o>=n)){e.lastPingedTime=n,ys(e,n);break}if(0!==(o=fs(e))&&o!==n)break;if(0!==r&&r!==n){e.lastPingedTime=r;break}if(1073741823!==Wl?r=10*(1073741821-Wl)-Wo():1073741823===Gl?r=0:(r=10*(1073741821-Gl)-5e3,0>(r=(o=Wo())-r)&&(r=0),(n=10*(1073741821-n)-o)<(r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*_l(r/1960))-r)&&(r=n)),10<r){e.timeoutHandle=Tn(As.bind(null,e),r);break}As(e);break;case Ml:if(1073741823!==Gl&&null!==Zl){i=Gl;var l=Zl;if(0>=(r=0|l.busyMinDurationMs)?r=0:(o=0|l.busyDelayMs,r=(i=Wo()-(10*(1073741821-i)-(0|l.timeoutMs||5e3)))<=o?0:o+r-i),10<r){Ks(e,n),e.timeoutHandle=Tn(As.bind(null,e),r);break}}As(e);break;default:throw Error(a(329))}if(ms(e),e.callbackNode===t)return hs.bind(null,e)}}return null}function gs(e){var t=e.lastExpiredTime;if(t=0!==t?t:1073741823,(Bl&(Ll|Il))!==Al)throw Error(a(327));if(Is(),e===jl&&t===$l||ys(e,t),null!==Ul){var n=Bl;Bl|=Ll;for(var r=ks();;)try{Ss();break}catch(o){ws(e,o)}if(ai(),Bl=n,Cl.current=r,ql===Nl)throw n=Hl,ys(e,t),Ks(e,t),ms(e),n;if(null!==Ul)throw Error(a(261));e.finishedWork=e.current.alternate,e.finishedExpirationTime=t,jl=null,As(e),ms(e)}return null}function bs(e,t){var n=Bl;Bl|=1;try{return e(t)}finally{(Bl=n)===Al&&Xo()}}function vs(e,t){var n=Bl;Bl&=-2,Bl|=Pl;try{return e(t)}finally{(Bl=n)===Al&&Xo()}}function ys(e,t){e.finishedWork=null,e.finishedExpirationTime=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,_n(n)),null!==Ul)for(n=Ul.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&xo();break;case 3:Bi(),ho(yo),ho(vo);break;case 5:Ui(r);break;case 4:Bi();break;case 13:case 19:ho($i);break;case 10:li(r)}n=n.return}jl=e,Ul=qs(e.current,null),$l=t,ql=Rl,Hl=null,Wl=Gl=1073741823,Zl=null,Vl=0,Yl=!1}function ws(e,t){for(;;){try{if(ai(),Gi.current=Ea,Qi)for(var n=Vi.memoizedState;null!==n;){var r=n.queue;null!==r&&(r.pending=null),n=n.next}if(Zi=0,Ki=Yi=Vi=null,Qi=!1,null===Ul||null===Ul.return)return ql=Nl,Hl=t,Ul=null;e:{var o=e,i=Ul.return,a=Ul,l=t;if(t=$l,a.effectTag|=2048,a.firstEffect=a.lastEffect=null,null!==l&&"object"==typeof l&&"function"==typeof l.then){var s=l;if(0==(2&a.mode)){var c=a.alternate;c?(a.updateQueue=c.updateQueue,a.memoizedState=c.memoizedState,a.expirationTime=c.expirationTime):(a.updateQueue=null,a.memoizedState=null)}var u=0!=(1&$i.current),d=i;do{var p;if(p=13===d.tag){var f=d.memoizedState;if(null!==f)p=null!==f.dehydrated;else{var m=d.memoizedProps;p=void 0!==m.fallback&&(!0!==m.unstable_avoidThisFallback||!u)}}if(p){var h=d.updateQueue;if(null===h){var g=new Set;g.add(s),d.updateQueue=g}else h.add(s);if(0==(2&d.mode)){if(d.effectTag|=64,a.effectTag&=-2981,1===a.tag)if(null===a.alternate)a.tag=17;else{var b=mi(1073741823,null);b.tag=2,hi(a,b)}a.expirationTime=1073741823;break e}l=void 0,a=t;var v=o.pingCache;if(null===v?(v=o.pingCache=new El,l=new Set,v.set(s,l)):void 0===(l=v.get(s))&&(l=new Set,v.set(s,l)),!l.has(a)){l.add(a);var y=Os.bind(null,o,s,a);s.then(y,y)}d.effectTag|=4096,d.expirationTime=t;break e}d=d.return}while(null!==d);l=Error((ge(a.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display."+be(a))}ql!==Ml&&(ql=Dl),l=il(l,a),d=i;do{switch(d.tag){case 3:s=l,d.effectTag|=4096,d.expirationTime=t,gi(d,xl(d,s,t));break e;case 1:s=l;var w=d.type,k=d.stateNode;if(0==(64&d.effectTag)&&("function"==typeof w.getDerivedStateFromError||null!==k&&"function"==typeof k.componentDidCatch&&(null===ts||!ts.has(k)))){d.effectTag|=4096,d.expirationTime=t,gi(d,Sl(d,s,t));break e}}d=d.return}while(null!==d)}Ul=Cs(Ul)}catch(E){t=E;continue}break}}function ks(){var e=Cl.current;return Cl.current=Ea,null===e?Ea:e}function Es(e,t){e<Gl&&2<e&&(Gl=e),null!==t&&e<Wl&&2<e&&(Wl=e,Zl=t)}function xs(e){e>Vl&&(Vl=e)}function Ss(){for(;null!==Ul;)Ul=_s(Ul)}function Ts(){for(;null!==Ul&&!jo();)Ul=_s(Ul)}function _s(e){var t=Tl(e.alternate,e,$l);return e.memoizedProps=e.pendingProps,null===t&&(t=Cs(e)),zl.current=null,t}function Cs(e){Ul=e;do{var t=Ul.alternate;if(e=Ul.return,0==(2048&Ul.effectTag)){if(t=rl(t,Ul,$l),1===$l||1!==Ul.childExpirationTime){for(var n=0,r=Ul.child;null!==r;){var o=r.expirationTime,i=r.childExpirationTime;o>n&&(n=o),i>n&&(n=i),r=r.sibling}Ul.childExpirationTime=n}if(null!==t)return t;null!==e&&0==(2048&e.effectTag)&&(null===e.firstEffect&&(e.firstEffect=Ul.firstEffect),null!==Ul.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=Ul.firstEffect),e.lastEffect=Ul.lastEffect),1<Ul.effectTag&&(null!==e.lastEffect?e.lastEffect.nextEffect=Ul:e.firstEffect=Ul,e.lastEffect=Ul))}else{if(null!==(t=ol(Ul)))return t.effectTag&=2047,t;null!==e&&(e.firstEffect=e.lastEffect=null,e.effectTag|=2048)}if(null!==(t=Ul.sibling))return t;Ul=e}while(null!==Ul);return ql===Rl&&(ql=Ml),null}function zs(e){var t=e.expirationTime;return t>(e=e.childExpirationTime)?t:e}function As(e){var t=Zo();return Yo(99,Ps.bind(null,e,t)),null}function Ps(e,t){do{Is()}while(null!==rs);if((Bl&(Ll|Il))!==Al)throw Error(a(327));var n=e.finishedWork,r=e.finishedExpirationTime;if(null===n)return null;if(e.finishedWork=null,e.finishedExpirationTime=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90,e.nextKnownPendingLevel=0;var o=zs(n);if(e.firstPendingTime=o,r<=e.lastSuspendedTime?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:r<=e.firstSuspendedTime&&(e.firstSuspendedTime=r-1),r<=e.lastPingedTime&&(e.lastPingedTime=0),r<=e.lastExpiredTime&&(e.lastExpiredTime=0),e===jl&&(Ul=jl=null,$l=0),1<n.effectTag?null!==n.lastEffect?(n.lastEffect.nextEffect=n,o=n.firstEffect):o=n:o=n.firstEffect,null!==o){var i=Bl;Bl|=Il,zl.current=null,kn=Zt;var l=hn();if(gn(l)){if("selectionStart"in l)var s={start:l.selectionStart,end:l.selectionEnd};else e:{var c=(s=(s=l.ownerDocument)&&s.defaultView||window).getSelection&&s.getSelection();if(c&&0!==c.rangeCount){s=c.anchorNode;var u=c.anchorOffset,d=c.focusNode;c=c.focusOffset;try{s.nodeType,d.nodeType}catch(_){s=null;break e}var p=0,f=-1,m=-1,h=0,g=0,b=l,v=null;t:for(;;){for(var y;b!==s||0!==u&&3!==b.nodeType||(f=p+u),b!==d||0!==c&&3!==b.nodeType||(m=p+c),3===b.nodeType&&(p+=b.nodeValue.length),null!==(y=b.firstChild);)v=b,b=y;for(;;){if(b===l)break t;if(v===s&&++h===u&&(f=p),v===d&&++g===c&&(m=p),null!==(y=b.nextSibling))break;v=(b=v).parentNode}b=y}s=-1===f||-1===m?null:{start:f,end:m}}else s=null}s=s||{start:0,end:0}}else s=null;En={activeElementDetached:null,focusedElem:l,selectionRange:s},Zt=!1,Xl=o;do{try{Ls()}catch(_){if(null===Xl)throw Error(a(330));Ds(Xl,_),Xl=Xl.nextEffect}}while(null!==Xl);Xl=o;do{try{for(l=e,s=t;null!==Xl;){var w=Xl.effectTag;if(16&w&&Ue(Xl.stateNode,""),128&w){var k=Xl.alternate;if(null!==k){var E=k.ref;null!==E&&("function"==typeof E?E(null):E.current=null)}}switch(1038&w){case 2:gl(Xl),Xl.effectTag&=-3;break;case 6:gl(Xl),Xl.effectTag&=-3,wl(Xl.alternate,Xl);break;case 1024:Xl.effectTag&=-1025;break;case 1028:Xl.effectTag&=-1025,wl(Xl.alternate,Xl);break;case 4:wl(Xl.alternate,Xl);break;case 8:yl(l,u=Xl,s),ml(u)}Xl=Xl.nextEffect}}catch(_){if(null===Xl)throw Error(a(330));Ds(Xl,_),Xl=Xl.nextEffect}}while(null!==Xl);if(E=En,k=hn(),w=E.focusedElem,s=E.selectionRange,k!==w&&w&&w.ownerDocument&&mn(w.ownerDocument.documentElement,w)){null!==s&&gn(w)&&(k=s.start,void 0===(E=s.end)&&(E=k),"selectionStart"in w?(w.selectionStart=k,w.selectionEnd=Math.min(E,w.value.length)):(E=(k=w.ownerDocument||document)&&k.defaultView||window).getSelection&&(E=E.getSelection(),u=w.textContent.length,l=Math.min(s.start,u),s=void 0===s.end?l:Math.min(s.end,u),!E.extend&&l>s&&(u=s,s=l,l=u),u=fn(w,l),d=fn(w,s),u&&d&&(1!==E.rangeCount||E.anchorNode!==u.node||E.anchorOffset!==u.offset||E.focusNode!==d.node||E.focusOffset!==d.offset)&&((k=k.createRange()).setStart(u.node,u.offset),E.removeAllRanges(),l>s?(E.addRange(k),E.extend(d.node,d.offset)):(k.setEnd(d.node,d.offset),E.addRange(k))))),k=[];for(E=w;E=E.parentNode;)1===E.nodeType&&k.push({element:E,left:E.scrollLeft,top:E.scrollTop});for("function"==typeof w.focus&&w.focus(),w=0;w<k.length;w++)(E=k[w]).element.scrollLeft=E.left,E.element.scrollTop=E.top}Zt=!!kn,En=kn=null,e.current=n,Xl=o;do{try{for(w=e;null!==Xl;){var x=Xl.effectTag;if(36&x&&pl(w,Xl.alternate,Xl),128&x){k=void 0;var S=Xl.ref;if(null!==S){var T=Xl.stateNode;Xl.tag,k=T,"function"==typeof S?S(k):S.current=k}}Xl=Xl.nextEffect}}catch(_){if(null===Xl)throw Error(a(330));Ds(Xl,_),Xl=Xl.nextEffect}}while(null!==Xl);Xl=null,Uo(),Bl=i}else e.current=n;if(ns)ns=!1,rs=e,os=t;else for(Xl=o;null!==Xl;)t=Xl.nextEffect,Xl.nextEffect=null,Xl=t;if(0===(t=e.firstPendingTime)&&(ts=null),1073741823===t?e===ls?as++:(as=0,ls=e):as=0,"function"==typeof Ms&&Ms(n.stateNode,r),ms(e),Jl)throw Jl=!1,e=es,es=null,e;return(Bl&Pl)!==Al||Xo(),null}function Ls(){for(;null!==Xl;){var e=Xl.effectTag;0!=(256&e)&&cl(Xl.alternate,Xl),0==(512&e)||ns||(ns=!0,Ko(97,(function(){return Is(),null}))),Xl=Xl.nextEffect}}function Is(){if(90!==os){var e=97<os?97:os;return os=90,Yo(e,Rs)}}function Rs(){if(null===rs)return!1;var e=rs;if(rs=null,(Bl&(Ll|Il))!==Al)throw Error(a(331));var t=Bl;for(Bl|=Il,e=e.current.firstEffect;null!==e;){try{var n=e;if(0!=(512&n.effectTag))switch(n.tag){case 0:case 11:case 15:case 22:ul(5,n),dl(5,n)}}catch(r){if(null===e)throw Error(a(330));Ds(e,r)}n=e.nextEffect,e.nextEffect=null,e=n}return Bl=t,Xo(),!0}function Ns(e,t,n){hi(e,t=xl(e,t=il(n,t),1073741823)),null!==(e=ps(e,1073741823))&&ms(e)}function Ds(e,t){if(3===e.tag)Ns(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Ns(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===ts||!ts.has(r))){hi(n,e=Sl(n,e=il(t,e),1073741823)),null!==(n=ps(n,1073741823))&&ms(n);break}}n=n.return}}function Os(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),jl===e&&$l===n?ql===Fl||ql===Ol&&1073741823===Gl&&Wo()-Kl<Ql?ys(e,$l):Yl=!0:Ys(e,n)&&(0!==(t=e.lastPingedTime)&&t<n||(e.lastPingedTime=n,ms(e)))}function Fs(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(t=us(t=cs(),e,null)),null!==(e=ps(e,t))&&ms(e)}Tl=function(e,t,n){var r=t.expirationTime;if(null!==e){var o=t.pendingProps;if(e.memoizedProps!==o||yo.current)Oa=!0;else{if(r<n){switch(Oa=!1,t.tag){case 3:Ga(t),Na();break;case 5:if(ji(t),4&t.mode&&1!==n&&o.hidden)return t.expirationTime=t.childExpirationTime=1,null;break;case 1:Eo(t.type)&&_o(t);break;case 4:Mi(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value,o=t.type._context,go(ni,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!==(r=t.child.childExpirationTime)&&r>=n?Qa(e,t,n):(go($i,1&$i.current),null!==(t=tl(e,t,n))?t.sibling:null);go($i,1&$i.current);break;case 19:if(r=t.childExpirationTime>=n,0!=(64&e.effectTag)){if(r)return el(e,t,n);t.effectTag|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null),go($i,$i.current),!r)return null}return tl(e,t,n)}Oa=!1}}else Oa=!1;switch(t.expirationTime=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),e=t.pendingProps,o=ko(t,vo.current),ci(t,n),o=ea(null,t,r,e,o,n),t.effectTag|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,Eo(r)){var i=!0;_o(t)}else i=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,pi(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&ki(t,r,l,e),o.updater=Ei,t.stateNode=o,o._reactInternalFiber=t,_i(t,r,e,n),t=Ha(null,t,r,!0,i,n)}else t.tag=0,Fa(null,t,o,n),t=t.child;return t;case 16:e:{if(o=t.elementType,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),e=t.pendingProps,function(e){if(-1===e._status){e._status=0;var t=e._ctor;t=t(),e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}}(o),1!==o._status)throw o._result;switch(o=o._result,t.type=o,i=t.tag=function(e){if("function"==typeof e)return $s(e)?1:0;if(null!=e){if((e=e.$$typeof)===se)return 11;if(e===de)return 14}return 2}(o),e=ti(o,e),i){case 0:t=$a(null,t,o,e,n);break e;case 1:t=qa(null,t,o,e,n);break e;case 11:t=Ma(null,t,o,e,n);break e;case 14:t=Ba(null,t,o,ti(o.type,e),r,n);break e}throw Error(a(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,$a(e,t,r,o=t.elementType===r?o:ti(r,o),n);case 1:return r=t.type,o=t.pendingProps,qa(e,t,r,o=t.elementType===r?o:ti(r,o),n);case 3:if(Ga(t),r=t.updateQueue,null===e||null===r)throw Error(a(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,fi(e,t),bi(t,r,null,n),(r=t.memoizedState.element)===o)Na(),t=tl(e,t,n);else{if((o=t.stateNode.hydrate)&&(Ca=Cn(t.stateNode.containerInfo.firstChild),_a=t,o=za=!0),o)for(n=Ii(t,null,r,n),t.child=n;n;)n.effectTag=-3&n.effectTag|1024,n=n.sibling;else Fa(e,t,r,n),Na();t=t.child}return t;case 5:return ji(t),null===e&&La(t),r=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,l=o.children,Sn(r,o)?l=null:null!==i&&Sn(r,i)&&(t.effectTag|=16),Ua(e,t),4&t.mode&&1!==n&&o.hidden?(t.expirationTime=t.childExpirationTime=1,t=null):(Fa(e,t,l,n),t=t.child),t;case 6:return null===e&&La(t),null;case 13:return Qa(e,t,n);case 4:return Mi(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Li(t,null,r,n):Fa(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Ma(e,t,r,o=t.elementType===r?o:ti(r,o),n);case 7:return Fa(e,t,t.pendingProps,n),t.child;case 8:case 12:return Fa(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,l=t.memoizedProps,i=o.value;var s=t.type._context;if(go(ni,s._currentValue),s._currentValue=i,null!==l)if(s=l.value,0===(i=qr(s,i)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,i):1073741823))){if(l.children===o.children&&!yo.current){t=tl(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var c=s.dependencies;if(null!==c){l=s.child;for(var u=c.firstContext;null!==u;){if(u.context===r&&0!=(u.observedBits&i)){1===s.tag&&((u=mi(n,null)).tag=2,hi(s,u)),s.expirationTime<n&&(s.expirationTime=n),null!==(u=s.alternate)&&u.expirationTime<n&&(u.expirationTime=n),si(s.return,n),c.expirationTime<n&&(c.expirationTime=n);break}u=u.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Fa(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(i=t.pendingProps).children,ci(t,n),r=r(o=ui(o,i.unstable_observedBits)),t.effectTag|=1,Fa(e,t,r,n),t.child;case 14:return i=ti(o=t.type,t.pendingProps),Ba(e,t,o,i=ti(o.type,i),r,n);case 15:return ja(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ti(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),t.tag=1,Eo(r)?(e=!0,_o(t)):e=!1,ci(t,n),Si(t,r,o),_i(t,r,o,n),Ha(null,t,r,!0,e,n);case 19:return el(e,t,n)}throw Error(a(156,t.tag))};var Ms=null,Bs=null;function js(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Us(e,t,n,r){return new js(e,t,n,r)}function $s(e){return!(!(e=e.prototype)||!e.isReactComponent)}function qs(e,t){var n=e.alternate;return null===n?((n=Us(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.effectTag=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childExpirationTime=e.childExpirationTime,n.expirationTime=e.expirationTime,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{expirationTime:t.expirationTime,firstContext:t.firstContext,responders:t.responders},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Hs(e,t,n,r,o,i){var l=2;if(r=e,"function"==typeof e)$s(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case ne:return Gs(n.children,o,i,t);case le:l=8,o|=7;break;case re:l=8,o|=1;break;case oe:return(e=Us(12,n,t,8|o)).elementType=oe,e.type=oe,e.expirationTime=i,e;case ce:return(e=Us(13,n,t,o)).type=ce,e.elementType=ce,e.expirationTime=i,e;case ue:return(e=Us(19,n,t,o)).elementType=ue,e.expirationTime=i,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case ie:l=10;break e;case ae:l=9;break e;case se:l=11;break e;case de:l=14;break e;case pe:l=16,r=null;break e;case fe:l=22;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Us(l,n,t,o)).elementType=e,t.type=r,t.expirationTime=i,t}function Gs(e,t,n,r){return(e=Us(7,e,r,t)).expirationTime=n,e}function Ws(e,t,n){return(e=Us(6,e,null,t)).expirationTime=n,e}function Zs(e,t,n){return(t=Us(4,null!==e.children?e.children:[],e.key,t)).expirationTime=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Vs(e,t,n){this.tag=t,this.current=null,this.containerInfo=e,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function Ys(e,t){var n=e.firstSuspendedTime;return e=e.lastSuspendedTime,0!==n&&n>=t&&e<=t}function Ks(e,t){var n=e.firstSuspendedTime,r=e.lastSuspendedTime;n<t&&(e.firstSuspendedTime=t),(r>t||0===n)&&(e.lastSuspendedTime=t),t<=e.lastPingedTime&&(e.lastPingedTime=0),t<=e.lastExpiredTime&&(e.lastExpiredTime=0)}function Qs(e,t){t>e.firstPendingTime&&(e.firstPendingTime=t);var n=e.firstSuspendedTime;0!==n&&(t>=n?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:t>=e.lastSuspendedTime&&(e.lastSuspendedTime=t+1),t>e.nextKnownPendingLevel&&(e.nextKnownPendingLevel=t))}function Xs(e,t){var n=e.lastExpiredTime;(0===n||n>t)&&(e.lastExpiredTime=t)}function Js(e,t,n,r){var o=t.current,i=cs(),l=yi.suspense;i=us(i,o,l);e:if(n){t:{if(et(n=n._reactInternalFiber)!==n||1!==n.tag)throw Error(a(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(Eo(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(a(171))}if(1===n.tag){var c=n.type;if(Eo(c)){n=To(n,c,s);break e}}n=s}else n=bo;return null===t.context?t.context=n:t.pendingContext=n,(t=mi(i,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),hi(o,t),ds(o,i),i}function ec(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tc(e,t){null!==(e=e.memoizedState)&&null!==e.dehydrated&&e.retryTime<t&&(e.retryTime=t)}function nc(e,t){tc(e,t),(e=e.alternate)&&tc(e,t)}function rc(e,t,n){var r=new Vs(e,t,n=null!=n&&!0===n.hydrate),o=Us(3,null,null,2===t?7:1===t?3:0);r.current=o,o.stateNode=r,pi(o),e[In]=r.current,n&&0!==t&&function(e,t){var n=Je(t);Ct.forEach((function(e){ht(e,t,n)})),zt.forEach((function(e){ht(e,t,n)}))}(0,9===e.nodeType?e:e.ownerDocument),this._internalRoot=r}function oc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function ic(e,t,n,r,o){var i=n._reactRootContainer;if(i){var a=i._internalRoot;if("function"==typeof o){var l=o;o=function(){var e=ec(a);l.call(e)}}Js(t,a,e,o)}else{if(i=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new rc(e,0,t?{hydrate:!0}:void 0)}(n,r),a=i._internalRoot,"function"==typeof o){var s=o;o=function(){var e=ec(a);s.call(e)}}vs((function(){Js(t,a,e,o)}))}return ec(a)}function ac(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!oc(t))throw Error(a(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:te,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}rc.prototype.render=function(e){Js(e,this._internalRoot,null,null)},rc.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Js(null,e,null,(function(){t[In]=null}))},gt=function(e){if(13===e.tag){var t=ei(cs(),150,100);ds(e,t),nc(e,t)}},bt=function(e){13===e.tag&&(ds(e,3),nc(e,3))},vt=function(e){if(13===e.tag){var t=cs();ds(e,t=us(t,e,null)),nc(e,t)}},z=function(e,t,n){switch(t){case"input":if(Te(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=On(r);if(!o)throw Error(a(90));ke(r),Te(r,o)}}}break;case"textarea":Ie(e,n);break;case"select":null!=(t=n.value)&&Ae(e,!!n.multiple,t,!1)}},N=bs,D=function(e,t,n,r,o){var i=Bl;Bl|=4;try{return Yo(98,e.bind(null,t,n,r,o))}finally{(Bl=i)===Al&&Xo()}},O=function(){(Bl&(1|Ll|Il))===Al&&(function(){if(null!==is){var e=is;is=null,e.forEach((function(e,t){Xs(t,e),ms(t)})),Xo()}}(),Is())},F=function(e,t){var n=Bl;Bl|=2;try{return e(t)}finally{(Bl=n)===Al&&Xo()}};var lc={Events:[Nn,Dn,On,_,x,qn,function(e){it(e,$n)},I,R,Xt,st,Is,{current:!1}]};!function(e){var t=e.findFiberByHostInstance;(function(e){if("undefined"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)return!0;try{var n=t.inject(e);Ms=function(e){try{t.onCommitFiberRoot(n,e,void 0,64==(64&e.current.effectTag))}catch(r){}},Bs=function(e){try{t.onCommitFiberUnmount(n,e)}catch(r){}}}catch(r){}})(o({},e,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:K.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=rt(e))?null:e.stateNode},findFiberByHostInstance:function(e){return t?t(e):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null}))}({findFiberByHostInstance:Rn,bundleType:0,version:"16.14.0",rendererPackageName:"react-dom"}),t.hydrate=function(e,t,n){if(!oc(t))throw Error(a(200));return ic(null,e,t,!0,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function i(e,a){if(e===a)return!0;if(e&&a&&"object"==typeof e&&"object"==typeof a){if(e.constructor!==a.constructor)return!1;var l,s,c,u;if(Array.isArray(e)){if((l=e.length)!=a.length)return!1;for(s=l;0!=s--;)if(!i(e[s],a[s]))return!1;return!0}if(n&&e instanceof Map&&a instanceof Map){if(e.size!==a.size)return!1;for(u=e.entries();!(s=u.next()).done;)if(!a.has(s.value[0]))return!1;for(u=e.entries();!(s=u.next()).done;)if(!i(s.value[1],a.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&a instanceof Set){if(e.size!==a.size)return!1;for(u=e.entries();!(s=u.next()).done;)if(!a.has(s.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(a)){if((l=e.length)!=a.length)return!1;for(s=l;0!=s--;)if(e[s]!==a[s])return!1;return!0}if(e.constructor===RegExp)return e.source===a.source&&e.flags===a.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof a.valueOf)return e.valueOf()===a.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof a.toString)return e.toString()===a.toString();if((l=(c=Object.keys(e)).length)!==Object.keys(a).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(a,c[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==c[s]&&"__v"!==c[s]&&"__o"!==c[s]||!e.$$typeof)&&!i(e[c[s]],a[c[s]]))return!1;return!0}return e!=e&&a!=a}e.exports=function(e,t){try{return i(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>G,ql:()=>J});var r=n(7294),o=n(5697),i=n.n(o),a=n(9590),l=n.n(a),s=n(1143),c=n.n(s),u=n(6774),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t.indexOf(n=i[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},E=Object.keys(k).reduce((function(e,t){return e[k[t]]=t,e}),{}),x=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},S=function(e){var t=x(e,g.TITLE),n=x(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=x(e,"defaultTitle");return t||r||void 0},T=function(e){return x(e,"onChangeClientState")||function(){}},_=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},C=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var i=r[o].toLowerCase();if(-1!==e.indexOf(i)&&n[i])return t.concat(n)}return t}),[])},z=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,i=Object.keys(e),a=0;a<i.length;a+=1){var l=i[a],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][c]&&(o[n][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var i=Object.keys(o),a=0;a<i.length;a+=1){var l=i[a],s=p({},r[l],o[l]);r[l]=s}return e}),[]).reverse()},A=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},P=function(e){return Array.isArray(e)?e.join(""):e},L=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},I=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},R=[g.NOSCRIPT,g.SCRIPT,g.STYLE],N=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},D=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},O=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[k[n]||n]=e[n],t}),t)},F=function(e,t){return t.map((function(t,n){var o,i=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=k[e]||e;"innerHTML"===n||"cssText"===n?i.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:i[n]=t[e]})),r.createElement(e,i)}))},M=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,i=O(n,o),[r.createElement(g.TITLE,i,e)];var e,n,o,i},toString:function(){return function(e,t,n,r){var o=D(n),i=P(t);return o?"<"+e+' data-rh="true" '+o+">"+N(i,r)+"</"+e+">":"<"+e+' data-rh="true">'+N(i,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return O(t)},toString:function(){return D(t)}};default:return{toComponent:function(){return F(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+N(r[t],n)+'"';return e?e+" "+o:o}),""),i=r.innerHTML||r.cssText||"",a=-1===R.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(a?"/>":">"+i+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,i=e.noscriptTags,a=e.styleTags,l=e.title,s=void 0===l?"":l,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=L(e.metaTags,y),i=L(t,b),a=L(n,v);return{priorityMethods:{toComponent:function(){return[].concat(F(g.META,o.priority),F(g.LINK,i.priority),F(g.SCRIPT,a.priority))},toString:function(){return M(g.META,o.priority,r)+" "+M(g.LINK,i.priority,r)+" "+M(g.SCRIPT,a.priority,r)}},metaTags:o.default,linkTags:i.default,scriptTags:a.default}}(e);f=m.priorityMethods,u=m.linkTags,d=m.metaTags,p=m.scriptTags}return{priority:f,base:M(g.BASE,t,r),bodyAttributes:M("bodyAttributes",n,r),htmlAttributes:M("htmlAttributes",o,r),link:M(g.LINK,u,r),meta:M(g.META,d,r),noscript:M(g.NOSCRIPT,i,r),script:M(g.SCRIPT,p,r),style:M(g.STYLE,a,r),title:M(g.TITLE,{title:s,titleAttributes:c},r)}},j=[],U=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?j:n.instances},add:function(e){(n.canUseDOM?j:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?j:n.instances).indexOf(e);(n.canUseDOM?j:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=r.createContext({}),q=i().shape({setHelmet:i().func,helmetInstances:i().shape({get:i().func,add:i().func,remove:i().func})}),H="undefined"!=typeof document,G=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new U(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);G.canUseDOM=H,G.propTypes={context:i().shape({helmet:i().shape()}),children:i().node.isRequired},G.defaultProps={context:{}},G.displayName="HelmetProvider";var W=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),i=[].slice.call(o),a=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),i.some((function(e,t){return n=t,r.isEqualNode(e)}))?i.splice(n,1):a.push(r)})),i.forEach((function(e){return e.parentNode.removeChild(e)})),a.forEach((function(e){return r.appendChild(e)})),{oldTags:i,newTags:a}},Z=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],i=[].concat(o),a=Object.keys(t),l=0;l<a.length;l+=1){var s=a[l],c=t[s]||"";n.getAttribute(s)!==c&&n.setAttribute(s,c),-1===o.indexOf(s)&&o.push(s);var u=i.indexOf(s);-1!==u&&i.splice(u,1)}for(var d=i.length-1;d>=0;d-=1)n.removeAttribute(i[d]);o.length===i.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==a.join(",")&&n.setAttribute("data-rh",a.join(","))}},V=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,i=e.metaTags,a=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;Z(g.BODY,e.bodyAttributes),Z(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=P(e)),Z(g.TITLE,t)}(u,d);var p={baseTag:W(g.BASE,n),linkTags:W(g.LINK,o),metaTags:W(g.META,i),noscriptTags:W(g.NOSCRIPT,a),scriptTags:W(g.SCRIPT,s),styleTags:W(g.STYLE,c)},f={},m={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(m[e]=p[e].oldTags)})),t&&t(),l(e,f,m)},Y=null,K=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,i=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:C(["href"],e),bodyAttributes:_("bodyAttributes",e),defer:x(e,"defer"),encode:x(e,"encodeSpecialCharacters"),htmlAttributes:_("htmlAttributes",e),linkTags:z(g.LINK,["rel","href"],e),metaTags:z(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:z(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:T(e),scriptTags:z(g.SCRIPT,["src","innerHTML"],e),styleTags:z(g.STYLE,["cssText"],e),title:S(e),titleAttributes:_("titleAttributes",e),prioritizeSeoTags:A(e,"prioritizeSeoTags")});G.canUseDOM?(t=i,Y&&cancelAnimationFrame(Y),t.defer?Y=requestAnimationFrame((function(){V(t,(function(){Y=null}))})):(V(t),Y=null)):B&&(o=B(i)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);K.propTypes={context:q.isRequired},K.displayName="HelmetDispatcher";var Q=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(I(this.props,"helmetData"),I(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,i=e.newChildProps,a=e.nestedChildren;switch(r.type){case g.TITLE:return p({},o,((t={})[r.type]=a,t.titleAttributes=p({},i),t));case g.BODY:return p({},o,{bodyAttributes:p({},i)});case g.HTML:return p({},o,{htmlAttributes:p({},i)});default:return p({},o,((n={})[r.type]=p({},i),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,i=r.children,a=h(r,Q),l=Object.keys(a).reduce((function(e,t){return e[E[t]||t]=a[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,i),s){case g.FRAGMENT:t=n.mapChildrenToProps(i,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:l,nestedChildren:i});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:i})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,X),o=p({},n),i=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!i||i instanceof U||(i=new U(i.context,i.instances)),i?r.createElement(K,p({},o,{context:i.value,helmetData:void 0})):r.createElement($.Consumer,null,(function(e){return r.createElement(K,p({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:i().object,bodyAttributes:i().object,children:i().oneOfType([i().arrayOf(i().node),i().node]),defaultTitle:i().string,defer:i().bool,encodeSpecialCharacters:i().bool,htmlAttributes:i().object,link:i().arrayOf(i().object),meta:i().arrayOf(i().object),noscript:i().arrayOf(i().object),onChangeClientState:i().func,script:i().arrayOf(i().object),style:i().arrayOf(i().object),title:i().string,titleAttributes:i().object,titleTemplate:i().string,prioritizeSeoTags:i().bool,helmetData:i().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,i=n?Symbol.for("react.fragment"):60107,a=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case i:case l:case a:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case g:case h:case s:return e;default:return t}}case o:return t}}}function E(e){return k(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=s,t.Element=r,t.ForwardRef=p,t.Fragment=i,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=l,t.StrictMode=a,t.Suspense=f,t.isAsyncMode=function(e){return E(e)||k(e)===u},t.isConcurrentMode=E,t.isContextConsumer=function(e){return k(e)===c},t.isContextProvider=function(e){return k(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===p},t.isFragment=function(e){return k(e)===i},t.isLazy=function(e){return k(e)===g},t.isMemo=function(e){return k(e)===h},t.isPortal=function(e){return k(e)===o},t.isProfiler=function(e){return k(e)===l},t.isStrictMode=function(e){return k(e)===a},t.isSuspense=function(e){return k(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===i||e===d||e===l||e===a||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===s||e.$$typeof===c||e.$$typeof===p||e.$$typeof===v||e.$$typeof===y||e.$$typeof===w||e.$$typeof===b)},t.typeOf=k},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(){return a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}var l=n(7294),s=n(5697),c=[],u=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=a({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return c.push(g),"function"==typeof m.webpack&&u.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),p=d=function(t){function n(n){var r;return i(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};var a=n.prototype;return a.UNSAFE_componentWillMount=function(){this._loadModule()},a.componentDidMount=function(){this._mounted=!0},a._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},a.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},a._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},a.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),i(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),p}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(p,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}i(g,"propTypes",{report:s.func.isRequired}),i(g,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){b(c).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){b(u).then(e,e)}))},e.exports=h},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>a});var r=n(6550),o=n(3117),i=n(7294);function a(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&a(e.routes,t,n)),o})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?i.createElement(r.rs,n,e.map((function(e,n){return i.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):i.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>y,VK:()=>u,rU:()=>g});var r=n(6550),o=n(144),i=n(7294),a=n(9318),l=(n(5697),n(3117)),s=n(102),c=n(2177),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,a.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return i.createElement(r.F0,{history:this.history,children:this.props.children})},t}(i.Component);i.Component;var d=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,a.ob)(e,null,null,t):e},f=function(e){return e},m=i.forwardRef;void 0===m&&(m=f);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,a=(0,s.Z)(e,["innerRef","navigate","onClick"]),c=a.target,u=(0,l.Z)({},a,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=f!==m&&t||n,i.createElement("a",u)}));var g=m((function(e,t){var n=e.component,o=void 0===n?h:n,u=e.replace,g=e.to,b=e.innerRef,v=(0,s.Z)(e,["component","replace","to","innerRef"]);return i.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=e.history,r=p(d(g,e.location),e.location),s=r?n.createHref(r):"",h=(0,l.Z)({},v,{href:s,navigate:function(){var t=d(g,e.location),r=(0,a.Ep)(e.location)===(0,a.Ep)(p(t));(u||r?n.replace:n.push)(t)}});return f!==m?h.ref=t||b:h.innerRef=b,i.createElement(o,h)}))})),b=function(e){return e},v=i.forwardRef;void 0===v&&(v=b);var y=v((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,a=e.activeClassName,u=void 0===a?"active":a,f=e.activeStyle,m=e.className,h=e.exact,y=e.isActive,w=e.location,k=e.sensitive,E=e.strict,x=e.style,S=e.to,T=e.innerRef,_=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return i.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=w||e.location,a=p(d(S,n),n),s=a.pathname,C=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),z=C?(0,r.LX)(n.pathname,{path:C,exact:h,sensitive:k,strict:E}):null,A=!!(y?y(z,n):z),P="function"==typeof m?m(A):m,L="function"==typeof x?x(A):x;A&&(P=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(P,u),L=(0,l.Z)({},L,f));var I=(0,l.Z)({"aria-current":A&&o||null,className:P,style:L,to:a},_);return b!==v?I.ref=t||T:I.innerRef=T,i.createElement(g,I)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>S,F0:()=>y,LX:()=>x,TH:()=>R,k6:()=>I,rs:()=>P,s6:()=>v});var r=n(144),o=n(7294),i=n(5697),a=n.n(i),l=n(9318),s=n(2177),c=n(3117),u=n(9658),d=n.n(u),p=(n(9864),n(102)),f=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=o.createContext||function(e,t){var n,i,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n,r,o=arguments.length,i=new Array(o),a=0;a<o;a++)i[a]=arguments[a];return(t=e.call.apply(e,[this].concat(i))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((i=r)===(a=o)?0!==i||1/i==1/a:i!=i&&a!=a)?n=0:(n="function"==typeof t?t(r,o):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var i,a},o.render=function(){return this.props.children},n}(o.Component);s.childContextTypes=((n={})[l]=a().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},o.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},o.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},o.getValue=function(){return this.context[l]?this.context[l].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return c.contextTypes=((i={})[l]=a().object,i),{Provider:s,Consumer:c}},g=function(e){var t=h();return t.displayName=e,t},b=g("Router-History"),v=g("Router"),y=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(v.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},k=1e4,E=0;function x(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,i=void 0!==o&&o,a=n.strict,l=void 0!==a&&a,s=n.sensitive,c=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],i={regexp:d()(e,o,t),keys:o};return E<k&&(r[e]=i,E++),i}(n,{end:i,strict:l,sensitive:c}),o=r.regexp,a=r.keys,s=o.exec(e);if(!s)return null;var u=s[0],p=s.slice(1),f=e===u;return i&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:a.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var S=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?x(n.pathname,e.props):t.match,i=(0,c.Z)({},t,{location:n,match:r}),a=e.props,l=a.children,u=a.component,d=a.render;return Array.isArray(l)&&function(e){return 0===o.Children.count(e)}(l)&&(l=null),o.createElement(v.Provider,{value:i},i.match?l?"function"==typeof l?l(i):l:u?o.createElement(u,i):d?d(i):null:"function"==typeof l?l(i):null)}))},t}(o.Component);function T(e){return"/"===e.charAt(0)?e:"/"+e}function _(e,t){if(!e)return t;var n=T(e);return 0!==t.pathname.indexOf(n)?t:(0,c.Z)({},t,{pathname:t.pathname.substr(n.length)})}function C(e){return"string"==typeof e?e:(0,l.Ep)(e)}function z(e){return function(){(0,s.Z)(!1)}}function A(){}o.Component;var P=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n,r,i=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var a=e.props.path||e.props.from;r=a?x(i.pathname,(0,c.Z)({},e.props,{path:a})):t.match}})),r?o.cloneElement(n,{location:i,computedMatch:r}):null}))},t}(o.Component);var L=o.useContext;function I(){return L(b)}function R(){return L(v).location}},9658:(e,t,n)=>{var r=n(5826);e.exports=f,e.exports.parse=i,e.exports.compile=function(e,t){return l(i(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function i(e,t){for(var n,r=[],i=0,a=0,l="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(l+=e.slice(a,f),a=f+d.length,p)l+=p[1];else{var m=e[a],h=n[2],g=n[3],b=n[4],v=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=h&&null!=m&&m!==h,E="+"===y||"*"===y,x="?"===y||"*"===y,S=n[2]||u,T=b||v;r.push({name:g||i++,prefix:h||"",delimiter:S,optional:x,repeat:E,partial:k,asterisk:!!w,pattern:T?c(T):w?".*":"[^"+s(S)+"]+?"})}}return a<e.length&&(l+=e.substr(a)),l&&r.push(l),r}function a(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var i="",l=t||{},s=(o||{}).pretty?a:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,p=l[u.name];if(null==p){if(u.optional){u.partial&&(i+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(r(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=s(p[f]),!n[c].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");i+=(0===f?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(p),!n[c].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');i+=u.prefix+d}}else i+=u}return i}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,i=!1!==n.end,a="",l=0;l<e.length;l++){var c=e[l];if("string"==typeof c)a+=s(c);else{var p=s(c.prefix),f="(?:"+c.pattern+")";t.push(c),c.repeat&&(f+="(?:"+p+f+")*"),a+=f=c.optional?c.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var m=s(n.delimiter||"/"),h=a.slice(-m.length)===m;return o||(a=(h?a.slice(0,-m.length):a)+"(?:"+m+"(?=$))?"),a+=i?"$":o&&h?"":"(?="+m+"|$)",u(new RegExp("^"+a,d(n)),t)}function f(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(f(e[o],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(i(e,n),t,n)}(e,t,n)}},2408:(e,t,n)=>{"use strict";var r=n(7418),o="function"==typeof Symbol&&Symbol.for,i=o?Symbol.for("react.element"):60103,a=o?Symbol.for("react.portal"):60106,l=o?Symbol.for("react.fragment"):60107,s=o?Symbol.for("react.strict_mode"):60108,c=o?Symbol.for("react.profiler"):60114,u=o?Symbol.for("react.provider"):60109,d=o?Symbol.for("react.context"):60110,p=o?Symbol.for("react.forward_ref"):60112,f=o?Symbol.for("react.suspense"):60113,m=o?Symbol.for("react.memo"):60115,h=o?Symbol.for("react.lazy"):60116,g="function"==typeof Symbol&&Symbol.iterator;function b(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var v={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},y={};function w(e,t,n){this.props=e,this.context=t,this.refs=y,this.updater=n||v}function k(){}function E(e,t,n){this.props=e,this.context=t,this.refs=y,this.updater=n||v}w.prototype.isReactComponent={},w.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(b(85));this.updater.enqueueSetState(this,e,t,"setState")},w.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},k.prototype=w.prototype;var x=E.prototype=new k;x.constructor=E,r(x,w.prototype),x.isPureReactComponent=!0;var S={current:null},T=Object.prototype.hasOwnProperty,_={key:!0,ref:!0,__self:!0,__source:!0};function C(e,t,n){var r,o={},a=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(a=""+t.key),t)T.call(t,r)&&!_.hasOwnProperty(r)&&(o[r]=t[r]);var s=arguments.length-2;if(1===s)o.children=n;else if(1<s){for(var c=Array(s),u=0;u<s;u++)c[u]=arguments[u+2];o.children=c}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===o[r]&&(o[r]=s[r]);return{$$typeof:i,type:e,key:a,ref:l,props:o,_owner:S.current}}function z(e){return"object"==typeof e&&null!==e&&e.$$typeof===i}var A=/\/+/g,P=[];function L(e,t,n,r){if(P.length){var o=P.pop();return o.result=e,o.keyPrefix=t,o.func=n,o.context=r,o.count=0,o}return{result:e,keyPrefix:t,func:n,context:r,count:0}}function I(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>P.length&&P.push(e)}function R(e,t,n,r){var o=typeof e;"undefined"!==o&&"boolean"!==o||(e=null);var l=!1;if(null===e)l=!0;else switch(o){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case i:case a:l=!0}}if(l)return n(r,e,""===t?"."+D(e,0):t),1;if(l=0,t=""===t?".":t+":",Array.isArray(e))for(var s=0;s<e.length;s++){var c=t+D(o=e[s],s);l+=R(o,c,n,r)}else if(null===e||"object"!=typeof e?c=null:c="function"==typeof(c=g&&e[g]||e["@@iterator"])?c:null,"function"==typeof c)for(e=c.call(e),s=0;!(o=e.next()).done;)l+=R(o=o.value,c=t+D(o,s++),n,r);else if("object"===o)throw n=""+e,Error(b(31,"[object Object]"===n?"object with keys {"+Object.keys(e).join(", ")+"}":n,""));return l}function N(e,t,n){return null==e?0:R(e,"",t,n)}function D(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,(function(e){return t[e]}))}(e.key):t.toString(36)}function O(e,t){e.func.call(e.context,t,e.count++)}function F(e,t,n){var r=e.result,o=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?M(e,r,n,(function(e){return e})):null!=e&&(z(e)&&(e=function(e,t){return{$$typeof:i,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(e,o+(!e.key||t&&t.key===e.key?"":(""+e.key).replace(A,"$&/")+"/")+n)),r.push(e))}function M(e,t,n,r,o){var i="";null!=n&&(i=(""+n).replace(A,"$&/")+"/"),N(e,F,t=L(t,i,r,o)),I(t)}var B={current:null};function j(){var e=B.current;if(null===e)throw Error(b(321));return e}var U={ReactCurrentDispatcher:B,ReactCurrentBatchConfig:{suspense:null},ReactCurrentOwner:S,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:function(e,t,n){if(null==e)return e;var r=[];return M(e,r,null,t,n),r},forEach:function(e,t,n){if(null==e)return e;N(e,O,t=L(null,null,t,n)),I(t)},count:function(e){return N(e,(function(){return null}),null)},toArray:function(e){var t=[];return M(e,t,null,(function(e){return e})),t},only:function(e){if(!z(e))throw Error(b(143));return e}},t.Component=w,t.Fragment=l,t.Profiler=c,t.PureComponent=E,t.StrictMode=s,t.Suspense=f,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=U,t.cloneElement=function(e,t,n){if(null==e)throw Error(b(267,e));var o=r({},e.props),a=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=S.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(u in t)T.call(t,u)&&!_.hasOwnProperty(u)&&(o[u]=void 0===t[u]&&void 0!==c?c[u]:t[u])}var u=arguments.length-2;if(1===u)o.children=n;else if(1<u){c=Array(u);for(var d=0;d<u;d++)c[d]=arguments[d+2];o.children=c}return{$$typeof:i,type:e.type,key:a,ref:l,props:o,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:d,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:u,_context:e},e.Consumer=e},t.createElement=C,t.createFactory=function(e){var t=C.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:p,render:e}},t.isValidElement=z,t.lazy=function(e){return{$$typeof:h,_ctor:e,_status:-1,_result:null}},t.memo=function(e,t){return{$$typeof:m,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return j().useCallback(e,t)},t.useContext=function(e,t){return j().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return j().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return j().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return j().useLayoutEffect(e,t)},t.useMemo=function(e,t){return j().useMemo(e,t)},t.useReducer=function(e,t,n){return j().useReducer(e,t,n)},t.useRef=function(e){return j().useRef(e)},t.useState=function(e){return j().useState(e)},t.version="16.14.0"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,o,i,a;if("undefined"==typeof window||"function"!=typeof MessageChannel){var l=null,s=null,c=function(){if(null!==l)try{var e=t.unstable_now();l(!0,e),l=null}catch(n){throw setTimeout(c,0),n}},u=Date.now();t.unstable_now=function(){return Date.now()-u},n=function(e){null!==l?setTimeout(n,0,e):(l=e,setTimeout(c,0))},r=function(e,t){s=setTimeout(e,t)},o=function(){clearTimeout(s)},i=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var d=window.performance,p=window.Date,f=window.setTimeout,m=window.clearTimeout;if("undefined"!=typeof console){var h=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),"function"!=typeof h&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")}if("object"==typeof d&&"function"==typeof d.now)t.unstable_now=function(){return d.now()};else{var g=p.now();t.unstable_now=function(){return p.now()-g}}var b=!1,v=null,y=-1,w=5,k=0;i=function(){return t.unstable_now()>=k},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported"):w=0<e?Math.floor(1e3/e):5};var E=new MessageChannel,x=E.port2;E.port1.onmessage=function(){if(null!==v){var e=t.unstable_now();k=e+w;try{v(!0,e)?x.postMessage(null):(b=!1,v=null)}catch(n){throw x.postMessage(null),n}}else b=!1},n=function(e){v=e,b||(b=!0,x.postMessage(null))},r=function(e,n){y=f((function(){e(t.unstable_now())}),n)},o=function(){m(y),y=-1}}function S(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<C(o,t)))break e;e[r]=t,e[n]=o,n=r}}function T(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var i=2*(r+1)-1,a=e[i],l=i+1,s=e[l];if(void 0!==a&&0>C(a,n))void 0!==s&&0>C(s,a)?(e[r]=s,e[l]=n,r=l):(e[r]=a,e[i]=n,r=i);else{if(!(void 0!==s&&0>C(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function C(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var z=[],A=[],P=1,L=null,I=3,R=!1,N=!1,D=!1;function O(e){for(var t=T(A);null!==t;){if(null===t.callback)_(A);else{if(!(t.startTime<=e))break;_(A),t.sortIndex=t.expirationTime,S(z,t)}t=T(A)}}function F(e){if(D=!1,O(e),!N)if(null!==T(z))N=!0,n(M);else{var t=T(A);null!==t&&r(F,t.startTime-e)}}function M(e,n){N=!1,D&&(D=!1,o()),R=!0;var a=I;try{for(O(n),L=T(z);null!==L&&(!(L.expirationTime>n)||e&&!i());){var l=L.callback;if(null!==l){L.callback=null,I=L.priorityLevel;var s=l(L.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?L.callback=s:L===T(z)&&_(z),O(n)}else _(z);L=T(z)}if(null!==L)var c=!0;else{var u=T(A);null!==u&&r(F,u.startTime-n),c=!1}return c}finally{L=null,I=a,R=!1}}function B(e){switch(e){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var j=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||R||(N=!0,n(M))},t.unstable_getCurrentPriorityLevel=function(){return I},t.unstable_getFirstCallbackNode=function(){return T(z)},t.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=j,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},t.unstable_scheduleCallback=function(e,i,a){var l=t.unstable_now();if("object"==typeof a&&null!==a){var s=a.delay;s="number"==typeof s&&0<s?l+s:l,a="number"==typeof a.timeout?a.timeout:B(e)}else a=B(e),s=l;return e={id:P++,callback:i,priorityLevel:e,startTime:s,expirationTime:a=s+a,sortIndex:-1},s>l?(e.sortIndex=s,S(A,e),null===T(z)&&e===T(A)&&(D?o():D=!0,r(F,s-l))):(e.sortIndex=a,S(z,e),N||R||(N=!0,n(M))),e},t.unstable_shouldYield=function(){var e=t.unstable_now();O(e);var n=T(z);return n!==L&&null!==L&&null!==n&&null!==n.callback&&n.startTime<=e&&n.expirationTime<L.expirationTime||i()},t.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var i=Object.keys(e),a=Object.keys(t);if(i.length!==a.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<i.length;s++){var c=i[s];if(!l(c))return!1;var u=e[c],d=t[c];if(!1===(o=n?n.call(r,u,d,c):void 0)||void 0===o&&u!==d)return!1}return!0}},2177:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r="Invariant failed";const o=function(e,t){if(!e)throw new Error(r)}},3250:(e,t,n)=>{"use strict";var r=n(7294);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},i=r.useState,a=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(r){return!0}}var u="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=i({inst:{value:n,getSnapshot:t}}),o=r[0].inst,u=r[1];return l((function(){o.value=n,o.getSnapshot=t,c(o)&&u({inst:o})}),[e,n,t]),a((function(){return c(o)&&u({inst:o}),e((function(){c(o)&&u({inst:o})}))}),[e]),s(n),n};void 0!==r.useSyncExternalStore&&r.useSyncExternalStore},1688:(e,t,n)=>{"use strict";n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Franzininho",tagline:"O projeto Franzininho tem o objetivo de incentivar as pessoas na tecnologia atrav\xe9s da cultura maker e do fa\xe7a voc\xea mesmo.",url:"https://franzininho.github.io",baseUrl:"/",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",favicon:"img/favicon.png",organizationName:"Franzininho",projectName:"docs-franzininho-site",themeConfig:{image:"img/logo.svg",metadata:[{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"630"}],navbar:{title:"Franzininho",logo:{alt:"Logo do site",src:"img/logo.svg",href:"https://franzininho.com.br/"},items:[{to:"/docs",activeBasePath:"/docs",label:"Documenta\xe7\xe3o",position:"left"},{href:"https://franzininho.com.br/",label:"Site",position:"right"},{href:"https://franzininho.com.br/blog/",label:"Blog",position:"right"},{href:"https://franzininho.com.br/#contato",label:"Contato",position:"right"},{type:"localeDropdown",position:"right",dropdownItemsBefore:[],dropdownItemsAfter:[]}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Documenta\xe7\xe3o",items:[{label:"Franzininho DIY",to:"docs/franzininho-diy/sobre"},{label:"Franzininho WiFi",to:"docs/franzininho-wifi/franzininho-wifi"}]},{title:"Comunidade",items:[{label:"Discord",href:"https://discord.gg/H5kENmWGaz"},{label:"Grupo no Facebook",href:"https://www.facebook.com/groups/299236843857849/"}]},{title:"Redes Sociais",items:[{label:"Instagram",href:"https://www.instagram.com/franzininho/"},{label:"Facebook",href:"https://facebook.com/franzininho/"},{label:"Youtube",href:"https://www.youtube.com/channel/UCxyabOm4teS0kx0EgJW78_g"}]},{title:"Mais",items:[{label:"Site",href:"https://franzininho.com.br/"},{label:"GitHub",href:"https://github.com/franzininho"},{label:"Contato",href:"mailto:contato@franzininho.com.br"}]}],copyright:"Copyright \xa9 2021 Franzininho. Constru\xeddo com Docusaurus."},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},prism:{additionalLanguages:[],theme:{plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"/media/fabio/Dados/Projetos/docs-franzininho-site/sidebars.js",editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/"},theme:{customCss:"/media/fabio/Dados/Projetos/docs-franzininho-site/src/css/custom.css"}}]],i18n:{defaultLocale:"pt-BR",locales:["pt-BR","en"],localeConfigs:{"pt-BR":{label:"Portugu\xeas (Brasil)",direction:"ltr"},en:{label:"English",direction:"ltr"}},path:"i18n"},baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},plugins:[],themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},3117:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},144:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},102:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},7529:e=>{"use strict";e.exports=JSON.parse('{"theme.AnnouncementBar.closeButtonAriaLabel":"Fechar","theme.BackToTopButton.buttonAriaLabel":"Volte para o topo","theme.CodeBlock.copied":"Copiado","theme.CodeBlock.copy":"Copiar","theme.CodeBlock.copyButtonAriaLabel":"Copiar o c\xf3digo para a \xe1rea de transfer\xeancia","theme.CodeBlock.wordWrapToggle":"Toggle word wrap","theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel":"Toggle the collapsible sidebar category \'{label}\'","theme.ErrorPageContent.title":"This page crashed.","theme.ErrorPageContent.tryAgain":"Try again","theme.NavBar.navAriaLabel":"Main","theme.NotFound.p1":"N\xe3o foi poss\xedvel encontrar o que voc\xea estava procurando.","theme.NotFound.p2":"Entre em contato com o propriet\xe1rio do site que vinculou a URL original e informe a ele que o link est\xe1 quebrado.","theme.NotFound.title":"P\xe1gina n\xe3o encontrada","theme.TOCCollapsible.toggleButtonLabel":"Nessa p\xe1gina","theme.admonition.caution":"caution","theme.admonition.danger":"danger","theme.admonition.info":"info","theme.admonition.note":"note","theme.admonition.tip":"tip","theme.blog.archive.description":"Arquivo","theme.blog.archive.title":"Arquivo","theme.blog.paginator.navAriaLabel":"Navega\xe7\xe3o da p\xe1gina da lista de blogs","theme.blog.paginator.newerEntries":"Novas Entradas","theme.blog.paginator.olderEntries":"Entradas Antigas","theme.blog.post.paginator.navAriaLabel":"Navega\xe7\xe3o na p\xe1gina de postagem do blog","theme.blog.post.paginator.newerPost":"Postagem mais recente","theme.blog.post.paginator.olderPost":"Postagem mais antiga","theme.blog.post.plurals":"Uma postagem|{count} postagens","theme.blog.post.readMore":"Leia Mais","theme.blog.post.readMoreLabel":"Read more about {title}","theme.blog.post.readingTime.plurals":"Um minuto lido|{readingTime} minutos lidos","theme.blog.sidebar.navAriaLabel":"Blog recent posts navigation","theme.blog.tagTitle":"{nPosts} tagged with \\"{tagName}\\"","theme.colorToggle.ariaLabel":"Switch between dark and light mode (currently {mode})","theme.colorToggle.ariaLabel.mode.dark":"dark mode","theme.colorToggle.ariaLabel.mode.light":"light mode","theme.common.editThisPage":"Editar essa p\xe1gina","theme.common.headingLinkTitle":"Link direto para o t\xedtulo","theme.common.skipToMainContent":"Ir para o conte\xfado principal","theme.docs.DocCard.categoryDescription":"{count} items","theme.docs.breadcrumbs.home":"Home page","theme.docs.breadcrumbs.navAriaLabel":"Breadcrumbs","theme.docs.paginator.navAriaLabel":"Navega\xe7\xe3o nas p\xe1ginas do Documentos","theme.docs.paginator.next":"Pr\xf3ximo","theme.docs.paginator.previous":"Anterior","theme.docs.sidebar.closeSidebarButtonAriaLabel":"Close navigation bar","theme.docs.sidebar.collapseButtonAriaLabel":"Recolher barra lateral","theme.docs.sidebar.collapseButtonTitle":"Recolher barra lateral","theme.docs.sidebar.expandButtonAriaLabel":"Expandir barra lateral","theme.docs.sidebar.expandButtonTitle":"Expandir barra lateral","theme.docs.sidebar.navAriaLabel":"Docs sidebar","theme.docs.sidebar.toggleSidebarButtonAriaLabel":"Toggle navigation bar","theme.docs.tagDocListPageTitle":"{nDocsTagged} com \\"{tagName}\\"","theme.docs.tagDocListPageTitle.nDocsTagged":"Um documento selecionado|{count} documentos selecionados","theme.docs.versionBadge.label":"Version: {versionLabel}","theme.docs.versions.latestVersionLinkLabel":"\xfaltima vers\xe3o","theme.docs.versions.latestVersionSuggestionLabel":"Para documenta\xe7\xe3o atualizada, consulte a {latestVersionLink} ({versionLabel}).","theme.docs.versions.unmaintainedVersionLabel":"Esta \xe9 a documenta\xe7\xe3o para {siteTitle} {versionLabel}, que n\xe3o \xe9 mais mantido ativamente.","theme.docs.versions.unreleasedVersionLabel":"Esta \xe9 uma documenta\xe7\xe3o n\xe3o lan\xe7ada para {siteTitle} na vers\xe3o {versionLabel}.","theme.lastUpdated.atDate":" em {date}","theme.lastUpdated.byUser":" por {user}","theme.lastUpdated.lastUpdatedAtBy":"Ultima atualiza\xe7\xe3o{atDate}{byUser}","theme.navbar.mobileLanguageDropdown.label":"Languages","theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel":"\u2190 Voltar para o menu principal","theme.navbar.mobileVersionsDropdown.label":"Versions","theme.tags.tagsListLabel":"Tags:","theme.tags.tagsPageLink":"Exibir todas as tags","theme.tags.tagsPageTitle":"Tags","theme.docs.sidebar.responsiveCloseButtonLabel":"Fechar menu","theme.docs.sidebar.responsiveOpenButtonLabel":"Abrir menu","theme.SearchPage.documentsFound.plurals":"Um documento encontrado|{count} documentos encontrados","theme.SearchPage.existingResultsTitle":"Resultados da busca por \\"{query}\\"","theme.SearchPage.emptyResultsTitle":"Pesquise a documenta\xe7\xe3o","theme.SearchPage.inputPlaceholder":"Digite sua pesquisa aqui","theme.SearchPage.inputLabel":"Procurar","theme.SearchPage.algoliaLabel":"Pesquisa por Algolia","theme.SearchPage.noResultsText":"Nenhum resultado foi encontrado","theme.SearchPage.fetchingNewResults":"Buscando novos resultados...","theme.SearchBar.label":"Procurar","theme.Tip.label":"Dica"}')},6887:e=>{"use strict";e.exports=JSON.parse('{"/blog-8a4":{"__comp":"a6aa9e1f","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"},{"content":"3570154c"},{"content":"8e9f0a8a"}],"metadata":"b2b675dd"},"/blog/archive-4bc":{"__comp":"9e4087bc","__context":{"plugin":"09e1b884"},"archive":"b2f554cd"},"/blog/hello-world-741":{"__comp":"ccc49370","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","content":"d610846f"},"/blog/hola-fdd":{"__comp":"ccc49370","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","content":"bdd709f1"},"/blog/tags-546":{"__comp":"01a85c17","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","tags":"a7023ddc"},"/blog/tags/docusaurus-e69":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"},{"content":"3570154c"},{"content":"8e9f0a8a"}],"tag":"a80da1cf","listMetadata":"608ae6a4"},"/blog/tags/facebook-640":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"}],"tag":"031793e1","listMetadata":"096bfee4"},"/blog/tags/hello-a30":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"},{"content":"3570154c"}],"tag":"30a24c52","listMetadata":"66406991"},"/blog/tags/hola-b04":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"8e9f0a8a"}],"tag":"e16015ca","listMetadata":"4c9e35b1"},"/blog/welcome-f8c":{"__comp":"ccc49370","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","content":"2868cdab"},"/docs-993":{"__comp":"1be78505","__context":{"plugin":"43004a8a"},"versionMetadata":"935f2afb"},"/docs/-5e9":{"__comp":"17896441","content":"f5313f89"},"/docs/badge/badge-caf":{"__comp":"17896441","content":"6e2ab842"},"/docs/FranzBoy/franzboy-ac9":{"__comp":"17896441","content":"7561b0ae"},"/docs/franzininho-c0/arduino-identificacao-pinos-20e":{"__comp":"17896441","content":"94c955d1"},"/docs/franzininho-c0/arduino-primeiros-passos-f45":{"__comp":"17896441","content":"449acc1f"},"/docs/franzininho-c0/arduino-todolist-a97":{"__comp":"17896441","content":"ff1c69f3"},"/docs/franzininho-c0/config-franzininho-c0-stm32cubeide-af7":{"__comp":"17896441","content":"4cb2f106"},"/docs/franzininho-c0/franzininho-c0-board-58d":{"__comp":"17896441","content":"d7336970"},"/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist-4a5":{"__comp":"17896441","content":"cfe204fd"},"/docs/franzininho-diy/bootloader-ad5":{"__comp":"17896441","content":"3ab9b561"},"/docs/franzininho-diy/brilho-led-153":{"__comp":"17896441","content":"f3019b90"},"/docs/franzininho-diy/drivers-micronucleus-9cb":{"__comp":"17896441","content":"6da7bcf7"},"/docs/franzininho-diy/elefante-colorido-ced":{"__comp":"17896441","content":"69d6b121"},"/docs/franzininho-diy/entradas-analogicas-064":{"__comp":"17896441","content":"ff8b9623"},"/docs/franzininho-diy/entradas-saidas-digitais-804":{"__comp":"17896441","content":"4c503f6c"},"/docs/franzininho-diy/exemplos-avr-libc/buzzer-583":{"__comp":"17896441","content":"7e45b7ad"},"/docs/franzininho-diy/exemplos-avr-libc/contadores-4de":{"__comp":"17896441","content":"bdb4d3e5"},"/docs/franzininho-diy/exemplos-avr-libc/entrada-digital-2df":{"__comp":"17896441","content":"3ab35d9f"},"/docs/franzininho-diy/exemplos-avr-libc/hello-world-c3e":{"__comp":"17896441","content":"b55e0f56"},"/docs/franzininho-diy/exemplos-avr-libc/int-ext-994":{"__comp":"17896441","content":"b677b176"},"/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos-f7b":{"__comp":"17896441","content":"bc475886"},"/docs/franzininho-diy/exemplos-avr-libc/saida-digital-be0":{"__comp":"17896441","content":"f6af7cfc"},"/docs/franzininho-diy/exemplos-avr-libc/timer0-37f":{"__comp":"17896441","content":"c720cb85"},"/docs/franzininho-diy/exemplos-avr-libc/timer0-int-a3e":{"__comp":"17896441","content":"bb7fee19"},"/docs/franzininho-diy/exemplos-avr-libc/todo-d87":{"__comp":"17896441","content":"6b289e1f"},"/docs/franzininho-diy/girassol-automatizado-227":{"__comp":"17896441","content":"d9a3a88a"},"/docs/franzininho-diy/identificando-componentes-b0e":{"__comp":"17896441","content":"68401cc9"},"/docs/franzininho-diy/led-rgb-fb7":{"__comp":"17896441","content":"52090148"},"/docs/franzininho-diy/leitura-tecla-8e6":{"__comp":"17896441","content":"d5f74b3b"},"/docs/franzininho-diy/lista-de-materiais-381":{"__comp":"17896441","content":"e586c302"},"/docs/franzininho-diy/montagem-480":{"__comp":"17896441","content":"9ccd4375"},"/docs/franzininho-diy/pacote-158":{"__comp":"17896441","content":"21c04bfb"},"/docs/franzininho-diy/picsimlab/primeiros-passos-48d":{"__comp":"17896441","content":"a34fb63a"},"/docs/franzininho-diy/pisca-led-254":{"__comp":"17896441","content":"92ef60c0"},"/docs/franzininho-diy/saidas-pwm-83a":{"__comp":"17896441","content":"be54388e"},"/docs/franzininho-diy/semaforo-5de":{"__comp":"17896441","content":"a47310cc"},"/docs/franzininho-diy/sensor-luz-ldr-c1b":{"__comp":"17896441","content":"5cfa1a80"},"/docs/franzininho-diy/sobre-d9a":{"__comp":"17896441","content":"fd69b436"},"/docs/franzininho-diy/tecla-liga-desliga-72b":{"__comp":"17896441","content":"55ee410e"},"/docs/franzininho-diy/theremim-155":{"__comp":"17896441","content":"8b8a5829"},"/docs/franzininho-diy/tutoriais-i2c-60e":{"__comp":"17896441","content":"558e6545"},"/docs/franzininho-diy/wokwi/primeiros-passos-6de":{"__comp":"17896441","content":"f67a9ad7"},"/docs/franzininho-tiny/franzininho-tiny-7bd":{"__comp":"17896441","content":"52fc124a"},"/docs/franzininho-wifi-lab01-b1a":{"__comp":"17896441","content":"d75a6ad4"},"/docs/franzininho-wifi/exemplos-arduino/blink-3e1":{"__comp":"17896441","content":"9cf82e51"},"/docs/franzininho-wifi/exemplos-arduino/dht11-101":{"__comp":"17896441","content":"45a448cc"},"/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard-e88":{"__comp":"17896441","content":"8f8a0b80"},"/docs/franzininho-wifi/exemplos-arduino/primeiros-passos-f3a":{"__comp":"17896441","content":"5115f6b0"},"/docs/franzininho-wifi/exemplos-circuitpython/dht11-e55":{"__comp":"17896441","content":"d0c422fb"},"/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c-478":{"__comp":"17896441","content":"55a63e59"},"/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas-3fa":{"__comp":"17896441","content":"8f70110c"},"/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais-a1a":{"__comp":"17896441","content":"d268d7c6"},"/docs/franzininho-wifi/exemplos-circuitpython/ferramentas-5aa":{"__comp":"17896441","content":"032edc05"},"/docs/franzininho-wifi/exemplos-circuitpython/hello-world-211":{"__comp":"17896441","content":"b0d3cd30"},"/docs/franzininho-wifi/exemplos-circuitpython/irrigacao-ab4":{"__comp":"17896441","content":"58231389"},"/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos-417":{"__comp":"17896441","content":"c397fa15"},"/docs/franzininho-wifi/exemplos-circuitpython/pwm-d39":{"__comp":"17896441","content":"5f765f30"},"/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04-e55":{"__comp":"17896441","content":"d29449f8"},"/docs/franzininho-wifi/exemplos-circuitpython/serial-console-d7a":{"__comp":"17896441","content":"3cf26f2f"},"/docs/franzininho-wifi/exemplos-circuitpython/servo-motor-6c3":{"__comp":"17896441","content":"4e4cd8a0"},"/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo-64b":{"__comp":"17896441","content":"ec054302"},"/docs/franzininho-wifi/exemplos-espidf/aws-3a6":{"__comp":"17896441","content":"af2b9553"},"/docs/franzininho-wifi/exemplos-espidf/entrada-analogica-213":{"__comp":"17896441","content":"06f5a5e3"},"/docs/franzininho-wifi/exemplos-espidf/entrada-digital-1f7":{"__comp":"17896441","content":"f64cfe00"},"/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf-7ea":{"__comp":"17896441","content":"dcf87b66"},"/docs/franzininho-wifi/exemplos-espidf/ledc-8eb":{"__comp":"17896441","content":"249d28c1"},"/docs/franzininho-wifi/exemplos-espidf/primeiros-passos-bc1":{"__comp":"17896441","content":"2e8bb407"},"/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais-fe6":{"__comp":"17896441","content":"5f9a86e6"},"/docs/franzininho-wifi/exemplos-micropython/primeiros-passos-473":{"__comp":"17896441","content":"d69ae106"},"/docs/franzininho-wifi/franzininho-wifi-ad0":{"__comp":"17896441","content":"cdcae78f"},"/docs/franzininho-wifi/franzininho-wifi-dev-edition-ad4":{"__comp":"17896441","content":"6d6d470f"},"/docs/franzininho-wifi/wokwi/primeiros-passos-0b8":{"__comp":"17896441","content":"66e66c27"},"/docs/Franzino/franzino-74f":{"__comp":"17896441","content":"27079279"},"/docs/Franzino/upload-com-arduino-uno-eb6":{"__comp":"17896441","content":"daddf4d9"},"/docs/Franzino/upload-conversor-serial-32f":{"__comp":"17896441","content":"e6a1d5e9"},"/docs/FranzMakey/franzmakey-16c":{"__comp":"17896441","content":"5c90fd8c"},"/docs/FranzMakey/primeiros-passos-e82":{"__comp":"17896441","content":"bc0ca366"},"/docs/LaboratorioSistemasIot/adaptadores/arduino-uno-294":{"__comp":"17896441","content":"445992cb"},"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-038":{"__comp":"17896441","content":"c4380c1f"},"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO-54b":{"__comp":"17896441","content":"db00da42"},"/docs/LaboratorioSistemasIot/LaboratorioSistemasIot-609":{"__comp":"17896441","content":"b311b2c7"},"/docs/programacao/tutoriais-introducao-c9f":{"__comp":"17896441","content":"bc0f2708"},"/-0c3":{"__comp":"c4f5d8e4","__context":{"plugin":"4f3ccf13"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=7221,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.d9f5e5ee.js b/assets/js/main.d9f5e5ee.js new file mode 100755 index 000000000..fe37d5ccb --- /dev/null +++ b/assets/js/main.d9f5e5ee.js @@ -0,0 +1,2 @@ +/*! For license information please see main.d9f5e5ee.js.LICENSE.txt */ +(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1590],{628:(e,t,n)=>{"use strict";n.d(t,{c:()=>p});n(11504);var r=n(98852),o=n.n(r),a=n(14504);const i={"01a85c17":[()=>Promise.all([n.e(2176),n.e(8412)]).then(n.bind(n,43024)),"@theme/BlogTagsListPage",43024],"031793e1":[()=>n.e(8908).then(n.t.bind(n,3272,19)),"~blog/default/blog-tags-facebook-038.json",3272],"032edc05":[()=>n.e(1288).then(n.bind(n,25444)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/instalacao-ferramentas.md",25444],"06f5a5e3":[()=>n.e(7952).then(n.bind(n,15644)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x03-entrada-analogica.md",15644],"096bfee4":[()=>n.e(4124).then(n.t.bind(n,39696,19)),"~blog/default/blog-tags-facebook-038-list.json",39696],"09e1b884":[()=>n.e(7804).then(n.t.bind(n,6792,19)),"/media/fabio/Dados/Projetos/docs-franzininho-site/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",6792],17896441:[()=>Promise.all([n.e(2176),n.e(9968),n.e(6752)]).then(n.bind(n,29752)),"@theme/DocItem",29752],"21c04bfb":[()=>n.e(8968).then(n.bind(n,93232)),"@site/docs/FranzininhoDIY/exemplos-arduino/pacote.md",93232],"249d28c1":[()=>n.e(6332).then(n.bind(n,58960)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x04-LEDC.md",58960],27079279:[()=>n.e(468).then(n.bind(n,5372)),"@site/docs/Franzino/franzino.md",5372],"2868cdab":[()=>n.e(1784).then(n.bind(n,49116)),"@site/blog/2019-05-30-welcome.md",49116],"2e8bb407":[()=>n.e(5240).then(n.bind(n,28388)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x00-Primeiros-passos.md",28388],"30a24c52":[()=>n.e(4608).then(n.t.bind(n,4244,19)),"~blog/default/blog-tags-hello-039.json",4244],"3570154c":[()=>n.e(1052).then(n.bind(n,86444)),"@site/blog/2019-05-29-hello-world.md?truncated=true",86444],"3ab35d9f":[()=>n.e(6550).then(n.bind(n,57632)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/entrada-digital.md",57632],"3ab9b561":[()=>n.e(8817).then(n.bind(n,75080)),"@site/docs/FranzininhoDIY/bootloader/bootloader.md",75080],"3cf26f2f":[()=>n.e(1680).then(n.bind(n,38988)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/serial-console.md",38988],"43004a8a":[()=>n.e(400).then(n.t.bind(n,2080,19)),"/media/fabio/Dados/Projetos/docs-franzininho-site/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",2080],"445992cb":[()=>n.e(6980).then(n.bind(n,87004)),"@site/docs/LaboratorioSistemasIot/adaptadores/adaptador-arduino.md",87004],"449acc1f":[()=>n.e(1208).then(n.bind(n,90752)),"@site/docs/franzininhoSTM32C0/exemplos-arduino/primeiros-passos.md",90752],"45a448cc":[()=>n.e(1456).then(n.bind(n,48832)),"@site/docs/FranzininhoWifi/exemplos-arduino/dht11.md",48832],"4c503f6c":[()=>n.e(6472).then(n.bind(n,20188)),"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais.md",20188],"4c9e35b1":[()=>n.e(2512).then(n.t.bind(n,60632,19)),"~blog/default/blog-tags-hola-ea2-list.json",60632],"4cb2f106":[()=>n.e(3280).then(n.bind(n,28020)),"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/configurando-projeto-stmcubeide.md",28020],"4e4cd8a0":[()=>n.e(2160).then(n.bind(n,24888)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/servo-motor.md",24888],"4f3ccf13":[()=>n.e(9508).then(n.t.bind(n,50590,19)),"/media/fabio/Dados/Projetos/docs-franzininho-site/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",50590],"5115f6b0":[()=>n.e(5336).then(n.bind(n,63816)),"@site/docs/FranzininhoWifi/exemplos-arduino/arduino.md",63816],52090148:[()=>n.e(8324).then(n.bind(n,26936)),"@site/docs/FranzininhoDIY/exemplos-arduino/led-rgb.md",26936],"52fc124a":[()=>n.e(3744).then(n.bind(n,4060)),"@site/docs/FranzininhoTiny/franzininho-tiny.md",4060],"558e6545":[()=>n.e(1020).then(n.bind(n,70760)),"@site/docs/FranzininhoDIY/exemplos-arduino/i2c.md",70760],"55a63e59":[()=>n.e(6312).then(n.bind(n,22796)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/display-oled-i2c.md",22796],"55ee410e":[()=>n.e(1196).then(n.bind(n,85452)),"@site/docs/FranzininhoDIY/exemplos-arduino/tecla-liga-desliga.md",85452],58231389:[()=>n.e(1520).then(n.bind(n,89172)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/irrigacao.md",89172],"5c90fd8c":[()=>n.e(2212).then(n.bind(n,29456)),"@site/docs/FranzMakey/franzmakey.md",29456],"5cfa1a80":[()=>n.e(6780).then(n.bind(n,61184)),"@site/docs/FranzininhoDIY/exemplos-arduino/sensor-luz.md",61184],"5e95c892":[()=>n.e(4304).then(n.bind(n,43564)),"@theme/DocsRoot",43564],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,97768)),"@generated/docusaurus.config",97768],"5f765f30":[()=>n.e(7024).then(n.bind(n,77092)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/pwm.md",77092],"5f9a86e6":[()=>n.e(6280).then(n.bind(n,51032)),"@site/docs/FranzininhoWifi/exemplos-micropython/entradas-saidas-digitais.md",51032],"608ae6a4":[()=>n.e(5168).then(n.t.bind(n,3120,19)),"~blog/default/blog-tags-docusaurus-0e0-list.json",3120],66406991:[()=>n.e(6956).then(n.t.bind(n,38960,19)),"~blog/default/blog-tags-hello-039-list.json",38960],"66e66c27":[()=>n.e(1676).then(n.bind(n,66016)),"@site/docs/FranzininhoWifi/wokwi/franzininho-wifi-wokwi.md",66016],"68401cc9":[()=>n.e(1168).then(n.bind(n,19864)),"@site/docs/FranzininhoDIY/identificando-componentes.md",19864],"6875c492":[()=>Promise.all([n.e(2176),n.e(9968),n.e(2220),n.e(2392)]).then(n.bind(n,62948)),"@theme/BlogTagsPostsPage",62948],"69d6b121":[()=>n.e(6316).then(n.bind(n,2788)),"@site/docs/FranzininhoDIY/exemplos-arduino/elefante-colorido.md",2788],"6b289e1f":[()=>n.e(7560).then(n.bind(n,92472)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/avr-libc-todo.md",92472],"6d6d470f":[()=>n.e(8448).then(n.bind(n,2008)),"@site/docs/FranzininhoWifi/franzininho-wifi-dev-edition.md",2008],"6da7bcf7":[()=>n.e(8292).then(n.bind(n,69484)),"@site/docs/FranzininhoDIY/bootloader/drivers.md",69484],"6e2ab842":[()=>n.e(4268).then(n.bind(n,23156)),"@site/docs/Badge/badge.md",23156],"7561b0ae":[()=>n.e(9488).then(n.bind(n,89976)),"@site/docs/FranzBoy/franzboy.md",89976],"7e45b7ad":[()=>n.e(1744).then(n.bind(n,84220)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/buzzer.md",84220],"814f3328":[()=>n.e(5512).then(n.t.bind(n,4352,19)),"~blog/default/blog-post-list-prop-default.json",4352],"8b8a5829":[()=>n.e(6116).then(n.bind(n,82076)),"@site/docs/FranzininhoDIY/exemplos-arduino/theremim.md",82076],"8e9f0a8a":[()=>n.e(3496).then(n.bind(n,75224)),"@site/blog/2019-05-28-hola.md?truncated=true",75224],"8f70110c":[()=>n.e(2496).then(n.bind(n,99920)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-analogica.md",99920],"8f8a0b80":[()=>n.e(5752).then(n.bind(n,60060)),"@site/docs/FranzininhoWifi/exemplos-arduino/onboard-rgb-led-example.md",60060],"92ef60c0":[()=>n.e(9964).then(n.bind(n,86100)),"@site/docs/FranzininhoDIY/exemplos-arduino/pisca-led.md",86100],"935f2afb":[()=>n.e(5696).then(n.t.bind(n,35988,19)),"~docs/default/version-current-metadata-prop-751.json",35988],"94c955d1":[()=>n.e(6200).then(n.bind(n,6604)),"@site/docs/franzininhoSTM32C0/exemplos-arduino/identificacao-pinos.md",6604],"9ccd4375":[()=>n.e(4640).then(n.bind(n,97192)),"@site/docs/FranzininhoDIY/montagem.md",97192],"9cf82e51":[()=>n.e(6992).then(n.bind(n,16560)),"@site/docs/FranzininhoWifi/exemplos-arduino/blink.md",16560],"9e4087bc":[()=>n.e(7028).then(n.bind(n,56140)),"@theme/BlogArchivePage",56140],a34fb63a:[()=>n.e(8336).then(n.bind(n,70676)),"@site/docs/FranzininhoDIY/picsimlab/franzininho-picsimlab.md",70676],a47310cc:[()=>n.e(2976).then(n.bind(n,38568)),"@site/docs/FranzininhoDIY/exemplos-arduino/semaforo.md",38568],a6aa9e1f:[()=>Promise.all([n.e(2176),n.e(9968),n.e(2220),n.e(4976)]).then(n.bind(n,16960)),"@theme/BlogListPage",16960],a7023ddc:[()=>n.e(9112).then(n.t.bind(n,61568,19)),"~blog/default/blog-tags-tags-4c2.json",61568],a7bd4aaa:[()=>n.e(6500).then(n.bind(n,22e3)),"@theme/DocVersionRoot",22e3],a80da1cf:[()=>n.e(8600).then(n.t.bind(n,92338,19)),"~blog/default/blog-tags-docusaurus-0e0.json",92338],a94703ab:[()=>Promise.all([n.e(2176),n.e(4666)]).then(n.bind(n,20996)),"@theme/DocRoot",20996],acecf23e:[()=>n.e(6360).then(n.t.bind(n,81112,19)),"~blog/default/blogMetadata-default.json",81112],af172acd:[()=>n.e(1560).then(n.bind(n,92368)),"@site/blog/2019-05-30-welcome.md?truncated=true",92368],af2b9553:[()=>n.e(2660).then(n.bind(n,68240)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x05-AWS-IoT-Core.md",68240],b0d3cd30:[()=>n.e(5632).then(n.bind(n,73412)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/hello-world.md",73412],b2b675dd:[()=>n.e(6292).then(n.t.bind(n,76180,19)),"~blog/default/blog-c06.json",76180],b2f554cd:[()=>n.e(6880).then(n.t.bind(n,38256,19)),"~blog/default/blog-archive-80c.json",38256],b311b2c7:[()=>n.e(3183).then(n.bind(n,70512)),"@site/docs/LaboratorioSistemasIot/laboratorio-sistemas-iot.md",70512],b55e0f56:[()=>n.e(576).then(n.bind(n,56068)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/hello-world.md",56068],b677b176:[()=>n.e(7296).then(n.bind(n,94024)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/int-externa.md",94024],bb7fee19:[()=>n.e(1392).then(n.bind(n,6567)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0-int.md",6567],bc0ca366:[()=>n.e(9628).then(n.bind(n,60108)),"@site/docs/FranzMakey/primeiros-passos.md",60108],bc0f2708:[()=>n.e(148).then(n.bind(n,37092)),"@site/docs/FranzininhoDIY/exemplos-arduino/introducao.md",37092],bc475886:[()=>n.e(6974).then(n.bind(n,50308)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/primeiros-passos.md",50308],bdb4d3e5:[()=>n.e(9484).then(n.bind(n,41828)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/contadores.md",41828],bdd709f1:[()=>n.e(2760).then(n.bind(n,59436)),"@site/blog/2019-05-28-hola.md",59436],be54388e:[()=>n.e(8040).then(n.bind(n,24892)),"@site/docs/FranzininhoDIY/exemplos-arduino/pwm.md",24892],c397fa15:[()=>n.e(5280).then(n.bind(n,18276)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/circuitpython.md",18276],c4380c1f:[()=>n.e(6776).then(n.bind(n,6580)),"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW.md",6580],c4f5d8e4:[()=>Promise.all([n.e(2176),n.e(2632)]).then(n.bind(n,15908)),"@site/src/pages/index.js",15908],c720cb85:[()=>n.e(3916).then(n.bind(n,77584)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0.md",77584],ccc49370:[()=>Promise.all([n.e(2176),n.e(9968),n.e(2220),n.e(6344)]).then(n.bind(n,26448)),"@theme/BlogPostPage",26448],cdcae78f:[()=>n.e(7272).then(n.bind(n,67340)),"@site/docs/FranzininhoWifi/franzininho-wifi.md",67340],cfe204fd:[()=>n.e(8658).then(n.bind(n,37904)),"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/stm32cube-ide-todolist.md",37904],d0c422fb:[()=>n.e(5944).then(n.bind(n,73880)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/dht11.md",73880],d268d7c6:[()=>n.e(3630).then(n.bind(n,87604)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-saidas-digitais.md",87604],d29449f8:[()=>n.e(560).then(n.bind(n,61052)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/hcsr04.md",61052],d5f74b3b:[()=>n.e(7888).then(n.bind(n,89360)),"@site/docs/FranzininhoDIY/exemplos-arduino/leitura-tecla.md",89360],d610846f:[()=>n.e(6552).then(n.bind(n,41508)),"@site/blog/2019-05-29-hello-world.md",41508],d69ae106:[()=>n.e(8930).then(n.bind(n,21204)),"@site/docs/FranzininhoWifi/exemplos-micropython/primeiros-passos.md",21204],d7336970:[()=>n.e(7073).then(n.bind(n,24236)),"@site/docs/franzininhoSTM32C0/franzininho-stm32c0-board.md",24236],d75a6ad4:[()=>n.e(1363).then(n.bind(n,44972)),"@site/docs/FranzininhoWiFiLAB01/franzininho-wifi-lab01.md",44972],d9a3a88a:[()=>n.e(4672).then(n.bind(n,18208)),"@site/docs/FranzininhoDIY/exemplos-arduino/girassol-automatizado.md",18208],daddf4d9:[()=>n.e(1140).then(n.bind(n,5472)),"@site/docs/Franzino/upload-com-arduino-uno.md",5472],db00da42:[()=>n.e(6728).then(n.bind(n,27652)),"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO.md",27652],dcf87b66:[()=>n.e(4298).then(n.bind(n,40620)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x01-Hello-world.md",40620],e16015ca:[()=>n.e(7552).then(n.t.bind(n,77616,19)),"~blog/default/blog-tags-hola-ea2.json",77616],e586c302:[()=>n.e(872).then(n.bind(n,24400)),"@site/docs/FranzininhoDIY/lista-de-materiais.md",24400],e6a1d5e9:[()=>n.e(5758).then(n.bind(n,1996)),"@site/docs/Franzino/upload-conversor-serial.md",1996],ec054302:[()=>n.e(1880).then(n.bind(n,66376)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/touch-capacitivo.md",66376],f3019b90:[()=>n.e(952).then(n.bind(n,71484)),"@site/docs/FranzininhoDIY/exemplos-arduino/brilho-led.md",71484],f5313f89:[()=>n.e(8800).then(n.bind(n,91976)),"@site/docs/sobre.md",91976],f64cfe00:[()=>n.e(9464).then(n.bind(n,29960)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x02-entrada-digital.md",29960],f67a9ad7:[()=>n.e(8812).then(n.bind(n,10508)),"@site/docs/FranzininhoDIY/wokwi/franzininho-wokwi.md",10508],f6af7cfc:[()=>n.e(1576).then(n.bind(n,59724)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/saida-digital.md",59724],fd69b436:[()=>n.e(9386).then(n.bind(n,92304)),"@site/docs/FranzininhoDIY/franzininho-diy.md",92304],ff1c69f3:[()=>n.e(3420).then(n.bind(n,33300)),"@site/docs/franzininhoSTM32C0/exemplos-arduino/exemplos-arduino-todolist.md",33300],ff8b9623:[()=>n.e(6004).then(n.bind(n,4212)),"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-analogicas.md",4212]};var s=n(17624);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(78120),u=n(25548);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(4552).then(n.bind(n,54552)),modules:["@theme/NotFound"],webpack:()=>[54552],render(e,t){const n=e.default;return(0,s.jsx)(u.Y,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,c.c)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,s.jsx)(u.Y,{value:i,children:(0,s.jsx)(a,{...o,...n})})}})}const p=[{path:"/blog",component:d("/blog","8a4"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","4bc"),exact:!0},{path:"/blog/hello-world",component:d("/blog/hello-world","50c"),exact:!0},{path:"/blog/hola",component:d("/blog/hola","5f5"),exact:!0},{path:"/blog/tags",component:d("/blog/tags","546"),exact:!0},{path:"/blog/tags/docusaurus",component:d("/blog/tags/docusaurus","e69"),exact:!0},{path:"/blog/tags/facebook",component:d("/blog/tags/facebook","640"),exact:!0},{path:"/blog/tags/hello",component:d("/blog/tags/hello","a30"),exact:!0},{path:"/blog/tags/hola",component:d("/blog/tags/hola","b04"),exact:!0},{path:"/blog/welcome",component:d("/blog/welcome","49c"),exact:!0},{path:"/docs",component:d("/docs","47e"),routes:[{path:"/docs",component:d("/docs","dd4"),routes:[{path:"/docs",component:d("/docs","b7d"),routes:[{path:"/docs/",component:d("/docs/","252"),exact:!0,sidebar:"docs"},{path:"/docs/badge/badge",component:d("/docs/badge/badge","13f"),exact:!0,sidebar:"docs"},{path:"/docs/FranzBoy/franzboy",component:d("/docs/FranzBoy/franzboy","4e0"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-c0/arduino-identificacao-pinos",component:d("/docs/franzininho-c0/arduino-identificacao-pinos","bb7"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-c0/arduino-primeiros-passos",component:d("/docs/franzininho-c0/arduino-primeiros-passos","caa"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-c0/arduino-todolist",component:d("/docs/franzininho-c0/arduino-todolist","0e4"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-c0/config-franzininho-c0-stm32cubeide",component:d("/docs/franzininho-c0/config-franzininho-c0-stm32cubeide","990"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-c0/franzininho-c0-board",component:d("/docs/franzininho-c0/franzininho-c0-board","cbb"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist",component:d("/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist","a03"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/bootloader",component:d("/docs/franzininho-diy/bootloader","077"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/brilho-led",component:d("/docs/franzininho-diy/brilho-led","7de"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/drivers-micronucleus",component:d("/docs/franzininho-diy/drivers-micronucleus","775"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/elefante-colorido",component:d("/docs/franzininho-diy/elefante-colorido","4b1"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/entradas-analogicas",component:d("/docs/franzininho-diy/entradas-analogicas","d41"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/entradas-saidas-digitais",component:d("/docs/franzininho-diy/entradas-saidas-digitais","440"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/buzzer",component:d("/docs/franzininho-diy/exemplos-avr-libc/buzzer","aff"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/contadores",component:d("/docs/franzininho-diy/exemplos-avr-libc/contadores","87b"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/entrada-digital",component:d("/docs/franzininho-diy/exemplos-avr-libc/entrada-digital","2d2"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/hello-world",component:d("/docs/franzininho-diy/exemplos-avr-libc/hello-world","e41"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/int-ext",component:d("/docs/franzininho-diy/exemplos-avr-libc/int-ext","f9d"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos",component:d("/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos","2bc"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/saida-digital",component:d("/docs/franzininho-diy/exemplos-avr-libc/saida-digital","6a4"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/timer0",component:d("/docs/franzininho-diy/exemplos-avr-libc/timer0","f17"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/timer0-int",component:d("/docs/franzininho-diy/exemplos-avr-libc/timer0-int","136"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/exemplos-avr-libc/todo",component:d("/docs/franzininho-diy/exemplos-avr-libc/todo","d50"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/girassol-automatizado",component:d("/docs/franzininho-diy/girassol-automatizado","bbc"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/identificando-componentes",component:d("/docs/franzininho-diy/identificando-componentes","5e7"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/led-rgb",component:d("/docs/franzininho-diy/led-rgb","a73"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/leitura-tecla",component:d("/docs/franzininho-diy/leitura-tecla","8bc"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/lista-de-materiais",component:d("/docs/franzininho-diy/lista-de-materiais","a66"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/montagem",component:d("/docs/franzininho-diy/montagem","7a2"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/pacote",component:d("/docs/franzininho-diy/pacote","036"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/picsimlab/primeiros-passos",component:d("/docs/franzininho-diy/picsimlab/primeiros-passos","0a0"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/pisca-led",component:d("/docs/franzininho-diy/pisca-led","238"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/saidas-pwm",component:d("/docs/franzininho-diy/saidas-pwm","c49"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/semaforo",component:d("/docs/franzininho-diy/semaforo","8fa"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/sensor-luz-ldr",component:d("/docs/franzininho-diy/sensor-luz-ldr","98c"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/sobre",component:d("/docs/franzininho-diy/sobre","722"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/tecla-liga-desliga",component:d("/docs/franzininho-diy/tecla-liga-desliga","75d"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/theremim",component:d("/docs/franzininho-diy/theremim","330"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-diy/tutoriais-i2c",component:d("/docs/franzininho-diy/tutoriais-i2c","7c3"),exact:!0},{path:"/docs/franzininho-diy/wokwi/primeiros-passos",component:d("/docs/franzininho-diy/wokwi/primeiros-passos","099"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-tiny/franzininho-tiny",component:d("/docs/franzininho-tiny/franzininho-tiny","97b"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi-lab01",component:d("/docs/franzininho-wifi-lab01","9ce"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-arduino/blink",component:d("/docs/franzininho-wifi/exemplos-arduino/blink","e2e"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-arduino/dht11",component:d("/docs/franzininho-wifi/exemplos-arduino/dht11","a77"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard",component:d("/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard","3df"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-arduino/primeiros-passos",component:d("/docs/franzininho-wifi/exemplos-arduino/primeiros-passos","baf"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/dht11",component:d("/docs/franzininho-wifi/exemplos-circuitpython/dht11","a35"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",component:d("/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c","f84"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",component:d("/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas","349"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",component:d("/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais","686"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/ferramentas",component:d("/docs/franzininho-wifi/exemplos-circuitpython/ferramentas","4ba"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/hello-world",component:d("/docs/franzininho-wifi/exemplos-circuitpython/hello-world","9e6"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/irrigacao",component:d("/docs/franzininho-wifi/exemplos-circuitpython/irrigacao","1f7"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos",component:d("/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos","9b7"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/pwm",component:d("/docs/franzininho-wifi/exemplos-circuitpython/pwm","041"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",component:d("/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04","687"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/serial-console",component:d("/docs/franzininho-wifi/exemplos-circuitpython/serial-console","c3d"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/servo-motor",component:d("/docs/franzininho-wifi/exemplos-circuitpython/servo-motor","149"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",component:d("/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo","210"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-espidf/aws",component:d("/docs/franzininho-wifi/exemplos-espidf/aws","a86"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-espidf/entrada-analogica",component:d("/docs/franzininho-wifi/exemplos-espidf/entrada-analogica","885"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-espidf/entrada-digital",component:d("/docs/franzininho-wifi/exemplos-espidf/entrada-digital","48e"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",component:d("/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf","a9c"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-espidf/ledc",component:d("/docs/franzininho-wifi/exemplos-espidf/ledc","fec"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-espidf/primeiros-passos",component:d("/docs/franzininho-wifi/exemplos-espidf/primeiros-passos","d57"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",component:d("/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais","18a"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/exemplos-micropython/primeiros-passos",component:d("/docs/franzininho-wifi/exemplos-micropython/primeiros-passos","8f4"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/franzininho-wifi",component:d("/docs/franzininho-wifi/franzininho-wifi","783"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/franzininho-wifi-dev-edition",component:d("/docs/franzininho-wifi/franzininho-wifi-dev-edition","5f1"),exact:!0,sidebar:"docs"},{path:"/docs/franzininho-wifi/wokwi/primeiros-passos",component:d("/docs/franzininho-wifi/wokwi/primeiros-passos","ebc"),exact:!0,sidebar:"docs"},{path:"/docs/Franzino/franzino",component:d("/docs/Franzino/franzino","4df"),exact:!0,sidebar:"docs"},{path:"/docs/Franzino/upload-com-arduino-uno",component:d("/docs/Franzino/upload-com-arduino-uno","423"),exact:!0,sidebar:"docs"},{path:"/docs/Franzino/upload-conversor-serial",component:d("/docs/Franzino/upload-conversor-serial","84e"),exact:!0,sidebar:"docs"},{path:"/docs/FranzMakey/franzmakey",component:d("/docs/FranzMakey/franzmakey","f53"),exact:!0,sidebar:"docs"},{path:"/docs/FranzMakey/primeiros-passos",component:d("/docs/FranzMakey/primeiros-passos","9be"),exact:!0,sidebar:"docs"},{path:"/docs/LaboratorioSistemasIot/adaptadores/arduino-uno",component:d("/docs/LaboratorioSistemasIot/adaptadores/arduino-uno","234"),exact:!0,sidebar:"docs"},{path:"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",component:d("/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","549"),exact:!0,sidebar:"docs"},{path:"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO",component:d("/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO","862"),exact:!0,sidebar:"docs"},{path:"/docs/LaboratorioSistemasIot/LaboratorioSistemasIot",component:d("/docs/LaboratorioSistemasIot/LaboratorioSistemasIot","157"),exact:!0,sidebar:"docs"},{path:"/docs/programacao/tutoriais-introducao",component:d("/docs/programacao/tutoriais-introducao","123"),exact:!0}]}]}]},{path:"/",component:d("/","f4b"),exact:!0},{path:"*",component:d("*")}]},30240:(e,t,n)=>{"use strict";n.d(t,{e:()=>a,g:()=>i});var r=n(11504),o=n(17624);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},28808:(e,t,n)=>{"use strict";var r=n(11504),o=n(28352),a=n(70440),i=n(32160),s=n(98684);const l=[n(1462),n(85396),n(31976),n(71496)];var c=n(628),u=n(55592),d=n(85464),p=n(17624);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var m=n(56952),h=n(28264),g=n(70964),b=n(21824),y=n(68900),v=n(1616),w=n(60204),x=n(14456),k=n(15684),S=n(48712);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,h.c)(),r=(0,v.D)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,p.jsxs)(m.c,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.c)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.c)(),{pathname:r}=(0,u.IT)();return e+(0,k.applyTrailingSlash)((0,g.c)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,p.jsxs)(m.c,{children:[(0,p.jsx)("meta",{property:"og:url",content:o}),(0,p.jsx)("link",{rel:"canonical",href:o})]})}function C(){const{i18n:{currentLocale:e}}=(0,h.c)(),{metadata:t,image:n}=(0,b.y)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(m.c,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:w.m})]}),n&&(0,p.jsx)(y.U7,{image:n}),(0,p.jsx)(_,{}),(0,p.jsx)(E,{}),(0,p.jsx)(S.c,{tag:x.e6,locale:e}),(0,p.jsx)(m.c,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const z=new Map;function T(e){if(z.has(e.pathname))return{...e,pathname:z.get(e.pathname)};if((0,d.C)(c.c,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return z.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return z.set(e.pathname,t),{...e,pathname:t}}var L=n(30240),j=n(136),A=n(95288);function F(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=l.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const P=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,A.c)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),F("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.C)(c.c,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class R extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.c.canUseDOM?F("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=F("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,p.jsx)(P,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(u.kX,{location:t,render:()=>e})})}}const D=R,I="__docusaurus-base-url-issue-banner-container",O="__docusaurus-base-url-issue-banner",M="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${I}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${O}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${M}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n document.body.prepend(bannerContainer);\n var suggestionContainer = document.getElementById('${M}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function U(){const{siteConfig:{baseUrl:e}}=(0,h.c)();return(0,p.jsx)(p.Fragment,{children:!s.c.canUseDOM&&(0,p.jsx)(m.c,{children:(0,p.jsx)("script",{children:B(e)})})})}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.c)(),{pathname:n}=(0,u.IT)();return t&&n===e?(0,p.jsx)(U,{}):null}function q(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:o}}=(0,h.c)(),a=(0,g.c)(e),{htmlLang:i,direction:s}=o[r];return(0,p.jsxs)(m.c,{children:[(0,p.jsx)("html",{lang:i,dir:s}),(0,p.jsx)("title",{children:t}),(0,p.jsx)("meta",{property:"og:title",content:t}),(0,p.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,p.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,p.jsx)("link",{rel:"icon",href:a})]})}var W=n(75852),H=n(93664);function G(){const e=(0,H.c)();return(0,p.jsx)(m.c,{children:(0,p.jsx)("html",{"data-has-hydrated":e})})}function V(){const e=(0,d.k)(c.c),t=(0,u.IT)();return(0,p.jsx)(W.c,{children:(0,p.jsx)(j.y,{children:(0,p.jsxs)(L.g,{children:[(0,p.jsxs)(f,{children:[(0,p.jsx)(q,{}),(0,p.jsx)(C,{}),(0,p.jsx)($,{}),(0,p.jsx)(D,{location:T(t),children:e})]}),(0,p.jsx)(G,{})]})})})}var Y=n(14504);const Q=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var K=n(78120);const X=new Set,Z=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!Z.has(e)&&!X.has(e))(e))return!1;X.add(e);const t=(0,d.C)(c.c,e).flatMap((e=>{return t=e.route.path,Object.entries(Y).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.c)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Q(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!Z.has(e))(e)&&(Z.add(e),N(e))},te=Object.freeze(ee),ne=Boolean(!0);if(s.c.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(i.EN,{children:(0,p.jsx)(a.kn,{children:(0,p.jsx)(V,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},s=()=>{if(ne)r.startTransition((()=>{o.hydrateRoot(e,t,{onRecoverableError:n})}));else{const a=o.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{a.render(t)}))}};N(window.location.pathname).then(s)}},136:(e,t,n)=>{"use strict";n.d(t,{e:()=>d,y:()=>p});var r=n(11504),o=n(97768);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Pr\xf3ximo","isLast":true,"path":"/docs","mainDocId":"sobre","docs":[{"id":"Badge/badge","path":"/docs/badge/badge","sidebar":"docs"},{"id":"FranzBoy/franzboy","path":"/docs/FranzBoy/franzboy","sidebar":"docs"},{"id":"FranzininhoDIY/bootloader/bootloader","path":"/docs/franzininho-diy/bootloader","sidebar":"docs"},{"id":"FranzininhoDIY/bootloader/drivers-micronucleus","path":"/docs/franzininho-diy/drivers-micronucleus","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/brilho-led","path":"/docs/franzininho-diy/brilho-led","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/elefante-colorido","path":"/docs/franzininho-diy/elefante-colorido","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/entradas-analogicas","path":"/docs/franzininho-diy/entradas-analogicas","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais","path":"/docs/franzininho-diy/entradas-saidas-digitais","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/girassol-automatizado","path":"/docs/franzininho-diy/girassol-automatizado","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/led-rgb","path":"/docs/franzininho-diy/led-rgb","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/leitura-tecla","path":"/docs/franzininho-diy/leitura-tecla","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/pacote","path":"/docs/franzininho-diy/pacote","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/pisca-led","path":"/docs/franzininho-diy/pisca-led","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/saidas-pwm","path":"/docs/franzininho-diy/saidas-pwm","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/semaforo","path":"/docs/franzininho-diy/semaforo","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr","path":"/docs/franzininho-diy/sensor-luz-ldr","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga","path":"/docs/franzininho-diy/tecla-liga-desliga","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/theremim","path":"/docs/franzininho-diy/theremim","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-i2c","path":"/docs/franzininho-diy/tutoriais-i2c"},{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-introducao","path":"/docs/programacao/tutoriais-introducao"},{"id":"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo","path":"/docs/franzininho-diy/exemplos-avr-libc/todo","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/buzzer","path":"/docs/franzininho-diy/exemplos-avr-libc/buzzer","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/contadores","path":"/docs/franzininho-diy/exemplos-avr-libc/contadores","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/entrada-digital","path":"/docs/franzininho-diy/exemplos-avr-libc/entrada-digital","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/hello-world","path":"/docs/franzininho-diy/exemplos-avr-libc/hello-world","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/int-externa","path":"/docs/franzininho-diy/exemplos-avr-libc/int-ext","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/primeiros-passos","path":"/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/saida-digital","path":"/docs/franzininho-diy/exemplos-avr-libc/saida-digital","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/timer0","path":"/docs/franzininho-diy/exemplos-avr-libc/timer0","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/timer0-int","path":"/docs/franzininho-diy/exemplos-avr-libc/timer0-int","sidebar":"docs"},{"id":"FranzininhoDIY/franzininho-diy","path":"/docs/franzininho-diy/sobre","sidebar":"docs"},{"id":"FranzininhoDIY/identificando-componentes","path":"/docs/franzininho-diy/identificando-componentes","sidebar":"docs"},{"id":"FranzininhoDIY/lista-de-materiais","path":"/docs/franzininho-diy/lista-de-materiais","sidebar":"docs"},{"id":"FranzininhoDIY/montagem","path":"/docs/franzininho-diy/montagem","sidebar":"docs"},{"id":"FranzininhoDIY/picsimlab/picsimlab-intro","path":"/docs/franzininho-diy/picsimlab/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoDIY/wokwi/wokwi-intro","path":"/docs/franzininho-diy/wokwi/primeiros-passos","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos","path":"/docs/franzininho-c0/arduino-identificacao-pinos","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos","path":"/docs/franzininho-c0/arduino-primeiros-passos","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist","path":"/docs/franzininho-c0/arduino-todolist","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide","path":"/docs/franzininho-c0/config-franzininho-c0-stm32cubeide","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist","path":"/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist","sidebar":"docs"},{"id":"franzininhoSTM32C0/franzininho-stm32c0","path":"/docs/franzininho-c0/franzininho-c0-board","sidebar":"docs"},{"id":"FranzininhoTiny/franzininho-tiny","path":"/docs/franzininho-tiny/franzininho-tiny","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino","path":"/docs/franzininho-wifi/exemplos-arduino/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino-blink","path":"/docs/franzininho-wifi/exemplos-arduino/blink","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino-dht11","path":"/docs/franzininho-wifi/exemplos-arduino/dht11","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino-neopixel","path":"/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11","path":"/docs/franzininho-wifi/exemplos-circuitpython/dht11","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c","path":"/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas","path":"/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais","path":"/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas","path":"/docs/franzininho-wifi/exemplos-circuitpython/ferramentas","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world","path":"/docs/franzininho-wifi/exemplos-circuitpython/hello-world","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos","path":"/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm","path":"/docs/franzininho-wifi/exemplos-circuitpython/pwm","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04","path":"/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console","path":"/docs/franzininho-wifi/exemplos-circuitpython/serial-console","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor","path":"/docs/franzininho-wifi/exemplos-circuitpython/servo-motor","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o","path":"/docs/franzininho-wifi/exemplos-circuitpython/irrigacao","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo","path":"/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00","path":"/docs/franzininho-wifi/exemplos-espidf/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01","path":"/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02","path":"/docs/franzininho-wifi/exemplos-espidf/entrada-digital","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03","path":"/docs/franzininho-wifi/exemplos-espidf/entrada-analogica","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04","path":"/docs/franzininho-wifi/exemplos-espidf/ledc","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05","path":"/docs/franzininho-wifi/exemplos-espidf/aws","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais","path":"/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos","path":"/docs/franzininho-wifi/exemplos-micropython/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/franzininho-wifi","path":"/docs/franzininho-wifi/franzininho-wifi","sidebar":"docs"},{"id":"FranzininhoWifi/franzininho-wifi-dev-edition","path":"/docs/franzininho-wifi/franzininho-wifi-dev-edition","sidebar":"docs"},{"id":"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro","path":"/docs/franzininho-wifi/wokwi/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWiFiLAB01/franzininho-wifi-lab01","path":"/docs/franzininho-wifi-lab01","sidebar":"docs"},{"id":"Franzino/franzino","path":"/docs/Franzino/franzino","sidebar":"docs"},{"id":"Franzino/upload-com-arduino-uno","path":"/docs/Franzino/upload-com-arduino-uno","sidebar":"docs"},{"id":"Franzino/upload-conversor-serial","path":"/docs/Franzino/upload-conversor-serial","sidebar":"docs"},{"id":"FranzMakey/franzmakey","path":"/docs/FranzMakey/franzmakey","sidebar":"docs"},{"id":"FranzMakey/primeiros-passos","path":"/docs/FranzMakey/primeiros-passos","sidebar":"docs"},{"id":"LaboratorioSistemasIot/adaptadores/adaptador-arduino","path":"/docs/LaboratorioSistemasIot/adaptadores/arduino-uno","sidebar":"docs"},{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","path":"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","sidebar":"docs"},{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO","path":"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO","sidebar":"docs"},{"id":"LaboratorioSistemasIot/laboratorio-sistemas-iot","path":"/docs/LaboratorioSistemasIot/LaboratorioSistemasIot","sidebar":"docs"},{"id":"sobre","path":"/docs/","sidebar":"docs"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/docs/","label":"sobre"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"pt-BR","locales":["pt-BR","en"],"path":"i18n","currentLocale":"pt-BR","localeConfigs":{"pt-BR":{"label":"Portugu\xeas (Brasil)","direction":"ltr","htmlLang":"pt-BR","calendar":"gregory","path":"pt-BR"},"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(60144);const l=JSON.parse('{"docusaurusVersion":"3.2.1","siteVersion":"1.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.2.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.2.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.2.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.2.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.2.1"}}}');var c=n(17624);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},75852:(e,t,n)=>{"use strict";n.d(t,{c:()=>h});var r=n(11504),o=n(98684),a=n(56952),i=n(15684),s=n(99012),l=n(25548),c=n(17624);function u(e){let{error:t,tryAgain:n}=e;return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,c.jsx)(l.Y,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)(p,{children:(0,c.jsxs)(h,{fallback:()=>(0,c.jsx)(u,{error:t,tryAgain:n}),children:[(0,c.jsx)(a.c,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(s.c,{children:(0,c.jsx)(u,{error:t,tryAgain:n})})]})})}const m=e=>(0,c.jsx)(f,{...e});class h extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.c.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??m)(e)}return e??null}}},98684:(e,t,n)=>{"use strict";n.d(t,{c:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},56952:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});n(11504);var r=n(32160),o=n(17624);function a(e){return(0,o.jsx)(r.So,{...e})}},10867:(e,t,n)=>{"use strict";n.d(t,{c:()=>f});var r=n(11504),o=n(70440),a=n(15684),i=n(28264),s=n(18136),l=n(98684),c=n(5976),u=n(70964),d=n(17624);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,i.c)(),{withBaseUrl:x}=(0,u.E)(),k=(0,c.c)(),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const E=p||f;const _=(0,s.c)(E),C=E?.replace("pathname://","");let z=void 0!==C?(T=C,b&&(e=>e.startsWith("/"))(T)?x(T):T):void 0;var T;z&&_&&(z=(0,a.applyTrailingSlash)(z,{trailingSlash:v,baseUrl:w}));const L=(0,r.useRef)(!1),j=n?o.Af:o.cH,A=l.c.canUseIntersectionObserver,F=(0,r.useRef)(),P=()=>{L.current||null==z||(window.docusaurus.preload(z),L.current=!0)};(0,r.useEffect)((()=>(!A&&_&&null!=z&&window.docusaurus.prefetch(z),()=>{A&&F.current&&F.current.disconnect()})),[F,z,A,_]);const N=z?.startsWith("#")??!1,R=!y.target||"_self"===y.target,D=!z||!_||!R||N;return g||!N&&D||k.collectLink(z),y.id&&k.collectAnchor(y.id),D?(0,d.jsx)("a",{ref:S,href:z,...E&&!_&&{target:"_blank",rel:"noopener noreferrer"},...y}):(0,d.jsx)(j,{...y,onMouseEnter:P,onTouchStart:P,innerRef:e=>{S.current=e,A&&e&&_&&(F.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(F.current.unobserve(e),F.current.disconnect(),null!=z&&window.docusaurus.prefetch(z))}))})),F.current.observe(e))},to:z,...n&&{isActive:h,activeClassName:m}})}const f=r.forwardRef(p)},82944:(e,t,n)=>{"use strict";n.d(t,{c:()=>r});const r=()=>null},84357:(e,t,n)=>{"use strict";n.d(t,{c:()=>c,G:()=>l});var r=n(11504),o=n(17624);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(60144);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const i=s({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},52488:(e,t,n)=>{"use strict";n.d(t,{M:()=>r});const r="default"},18136:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{_:()=>r,c:()=>o})},70964:(e,t,n)=>{"use strict";n.d(t,{E:()=>i,c:()=>s});var r=n(11504),o=n(28264),a=n(18136);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.c)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a._)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},5976:(e,t,n)=>{"use strict";n.d(t,{c:()=>i});var r=n(11504);n(17624);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},28264:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(11504),o=n(136);function a(){return(0,r.useContext)(o.e)}},93664:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(11504),o=n(30240);function a(){return(0,r.useContext)(o.e)}},95288:(e,t,n)=>{"use strict";n.d(t,{c:()=>o});var r=n(11504);const o=n(98684).c.canUseDOM?r.useLayoutEffect:r.useEffect},85308:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(11504),o=n(25548);function a(){const e=r.useContext(o.e);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}},78120:(e,t,n)=>{"use strict";n.d(t,{c:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i}))}(e),t}},25548:(e,t,n)=>{"use strict";n.d(t,{Y:()=>i,e:()=>a});var r=n(11504),o=n(17624);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:s,children:t})}},62840:(e,t,n)=>{"use strict";n.d(t,{wB:()=>h,UF:()=>p,L0:()=>u,i8:()=>g,OK:()=>d,aA:()=>m,gN:()=>f});var r=n(55592),o=n(28264),a=n(52488);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.c)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=function(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.ot)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.ot)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>{try{return function(e,t,n){void 0===t&&(t=a.M),void 0===n&&(n={});const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function p(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.IT)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.ot)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return s(t)}function h(e){const t=d(e),{pathname:n}=(0,r.IT)();return l(t,n)}function g(e){const t=d(e),{pathname:n}=(0,r.IT)();return function(e,t){const n=s(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},31976:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(22272),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},85396:(e,t,n)=>{"use strict";n.r(t);var r=n(46756),o=n(97768);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(71808),n(58660)(`./prism-${e}`)})),delete globalThis.Prism}(r.sp)},56448:(e,t,n)=>{"use strict";n.d(t,{c:()=>u});n(11504);var r=n(34064),o=n(84357),a=n(21824),i=n(10867),s=n(5976);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(17624);function u(e){let{as:t,id:n,...u}=e;const d=(0,s.c)(),{navbar:{hideOnScroll:p}}=(0,a.y)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const f=(0,o.G)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.c)("anchor",p?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(i.c,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},3232:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});n(11504);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(17624);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},99012:(e,t,n)=>{"use strict";n.d(t,{c:()=>ft});var r=n(11504),o=n(34064),a=n(75852),i=n(68900),s=n(55592),l=n(84357),c=n(27124),u=n(17624);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.Uz)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.c)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,l.G)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var g=n(45864),b=n(60204);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(h,{className:y.skipToContent})}var w=n(21824),x=n(43868);function k(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.G)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.c)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(k,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.y)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.c)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const z={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,w.y)(),{isActive:t,close:n}=(0,x.el)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:z.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:z.announcementBarPlaceholder}),(0,u.jsx)(C,{className:z.announcementBarContent}),a&&(0,u.jsx)(E,{onClick:n,className:z.announcementBarClose})]})}var L=n(41336),j=n(53943);var A=n(91100),F=n(45168);const P=r.createContext(null);function N(e){let{children:t}=e;const n=function(){const e=(0,L.q)(),t=(0,F.MF)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,A.i0)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,u.jsx)(P.Provider,{value:n,children:t})}function R(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function D(){const e=(0,r.useContext)(P);if(!e)throw new A.AH("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,F.MF)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:R(a)})),[o,a,t])}function I(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=D();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.c)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var O=n(66528),M=n(93664);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function U(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,M.c)(),s=(0,l.G)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.G)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.G)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.c)($.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.c)("clean-btn",$.toggleButton,!i&&$.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(B,{className:(0,o.c)($.toggleIcon,$.lightToggleIcon)}),(0,u.jsx)(U,{className:(0,o.c)($.toggleIcon,$.darkToggleIcon)})]})})}const W=r.memo(q),H={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function G(e){let{className:t}=e;const n=(0,w.y)().navbar.style,r=(0,w.y)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,O.U)();return r?null:(0,u.jsx)(W,{className:t,buttonClassName:"dark"===n?H.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var V=n(68164);function Y(){return(0,u.jsx)(V.c,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Q(){const e=(0,L.q)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.G)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(k,{color:"var(--ifm-color-emphasis-600)"})})}function K(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(Y,{}),(0,u.jsx)(G,{className:"margin-right--md"}),(0,u.jsx)(Q,{})]})}var X=n(10867),Z=n(70964),J=n(18136);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3232);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,Z.c)(r),p=(0,Z.c)(t),f=(0,Z.c)(o,{forcePrependBaseUrl:!0}),m=a&&o&&!(0,J.c)(o),h=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,m&&(0,u.jsx)(te.c,{...s&&{width:12,height:12}})]})};return o?(0,u.jsx)(X.c,{href:l?f:o,...c,...h}):(0,u.jsx)(X.c,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...c,...h})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,u.jsx)(ne,{className:(0,o.c)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.c)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,u.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(58448),se=n(13376),le=n(28264);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.Sc)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.c)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.c)("navbar__link",a),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(_e,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:a,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.c)(),{pathname:t}=(0,s.IT)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.a)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),(0,u.jsxs)("li",{className:(0,o.c)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.c)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(ie.U,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(_e,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var me=n(1616);function he(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const ge="iconLanguage_nlXk";var be=n(82944);const ye={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ve(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,o.c)(n,ye.navbarSearchContainer),children:t})}var we=n(62840),xe=n(79940);var ke=n(94592);const Se=e=>e.docs.find((t=>t.id===e.mainDocId));const Ee={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.c)(),p=(0,me.D)(),{search:f,hash:m}=(0,s.IT)(),h=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}${o}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],g=t?(0,l.G)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(fe,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(he,{className:ge}),g]}),items:h})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(ve,{className:n,children:(0,u.jsx)(be.c,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,u.jsx)(i,{className:(0,o.c)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.wB)(r),i=(0,xe.Qf)(t,r),s=a?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>s||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.wB)(r),i=(0,xe.Ab)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,xe.b7)(r)[0],i=t??a.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ae,{...o,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:c,hash:d}=(0,s.IT)(),p=(0,we.wB)(n),f=(0,we.gN)(n),{savePreferredVersionName:m}=(0,ke.iy)(n),h=[...o,...f.map((e=>{const t=p.alternateDocVersions[e.name]??Se(e);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...a],g=(0,xe.b7)(n)[0],b=t&&h.length>1?(0,l.G)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):g.label,y=t&&h.length>1?void 0:Se(g).path;return h.length<=1?(0,u.jsx)(ae,{...i,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,u.jsx)(fe,{...i,mobile:t,label:b,to:y,items:h,isActive:r?()=>!1:void 0})}};function _e(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ee[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...n})}function Ce(){const e=(0,L.q)(),t=(0,w.y)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(_e,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function ze(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.c,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Te(){const e=0===(0,w.y)().navbar.items.length,t=D();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(ze,{onClick:()=>t.hide()}),t.content]})}function Le(){const e=(0,L.q)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(I,{header:(0,u.jsx)(K,{}),primaryMenu:(0,u.jsx)(Ce,{}),secondaryMenu:(0,u.jsx)(Te,{})}):null}const je={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ae(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.c)("navbar-sidebar__backdrop",e.className)})}function Fe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.y)(),i=(0,L.q)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,j.SM)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void n(!0);if(o.current)return void(o.current=!1);const s=r?.scrollY,l=document.documentElement.scrollHeight-a.current,c=window.innerHeight;s&&i>=s?n(!1):i+c<l&&n(!0)})),(0,c.c)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.G)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.c)("navbar","navbar--fixed-top",n&&[je.navbarHideable,!d&&je.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Ae,{onClick:i.toggle}),(0,u.jsx)(Le,{})]})}var Pe=n(15684);const Ne={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function Re(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(l.c,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function De(e){let{error:t}=e;const n=(0,Pe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:Ne.errorBoundaryError,children:n})}class Ie extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Oe="right";function Me(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Be(){const{toggle:e,shown:t}=(0,L.q)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.G)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(Me,{})})}const Ue={colorModeToggle:"colorModeToggle_DEke"};function $e(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(Ie,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(_e,{...e})},t)))})}function qe(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function We(){const e=(0,L.q)(),t=(0,w.y)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Oe)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(qe,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(Be,{}),(0,u.jsx)(Y,{}),(0,u.jsx)($e,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)($e,{items:r}),(0,u.jsx)(G,{className:Ue.colorModeToggle}),!o&&(0,u.jsx)(ve,{children:(0,u.jsx)(be.c,{})})]})})}function He(){return(0,u.jsx)(Fe,{children:(0,u.jsx)(We,{})})}function Ge(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,s=(0,Z.c)(n),l=(0,Z.c)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(X.c,{className:"footer__link-item",...r?{href:a?l:r}:{to:s},...i,children:[o,r&&!(0,J.c)(r)&&(0,u.jsx)(te.c,{})]})}function Ve(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(Ge,{item:t})},t.href??t.to)}function Ye(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(Ve,{item:e},t)))})]})}function Qe(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(Ye,{column:e},t)))})}function Ke(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Xe(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(Ge,{item:t})}function Ze(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(Xe,{item:e}),t.length!==n+1&&(0,u.jsx)(Ke,{})]},n)))})})}function Je(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(Qe,{columns:t}):(0,u.jsx)(Ze,{links:t})}var et=n(61964);const tt={footerLogoLink:"footerLogoLink_BH7S"};function nt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,Z.E)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(et.c,{className:(0,o.c)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function rt(e){let{logo:t}=e;return t.href?(0,u.jsx)(X.c,{href:t.href,className:tt.footerLogoLink,target:t.target,children:(0,u.jsx)(nt,{logo:t})}):(0,u.jsx)(nt,{logo:t})}function ot(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function at(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.c)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function it(){const{footer:e}=(0,w.y)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(at,{style:o,links:n&&n.length>0&&(0,u.jsx)(Je,{links:n}),logo:r&&(0,u.jsx)(rt,{logo:r}),copyright:t&&(0,u.jsx)(ot,{copyright:t})})}const st=r.memo(it),lt=(0,A.qY)([O.C,x.qu,j.S2,ke.gc,i.w7,function(e){let{children:t}=e;return(0,u.jsx)(F.Ub,{children:(0,u.jsx)(L.y,{children:(0,u.jsx)(N,{children:t})})})}]);function ct(e){let{children:t}=e;return(0,u.jsx)(lt,{children:t})}var ut=n(56448);function dt(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(ut.c,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.c,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(Re,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(De,{error:t})})]})})})}const pt={mainWrapper:"mainWrapper_z2l0"};function ft(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,b.W)(),(0,u.jsxs)(ct,{children:[(0,u.jsx)(i.U7,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(T,{}),(0,u.jsx)(He,{}),(0,u.jsx)("div",{id:d,className:(0,o.c)(g.W.wrapper.main,pt.mainWrapper,r),children:(0,u.jsx)(a.c,{fallback:e=>(0,u.jsx)(dt,{...e}),children:t})}),!n&&(0,u.jsx)(st,{})]})}},68164:(e,t,n)=>{"use strict";n.d(t,{c:()=>u});n(11504);var r=n(10867),o=n(70964),a=n(28264),i=n(21824),s=n(61964),l=n(17624);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.c)(t.src),dark:(0,o.c)(t.srcDark||t.src)},i=(0,l.jsx)(s.c,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,a.c)(),{navbar:{title:n,logo:s}}=(0,i.y)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,o.c)(s?.href||"/"),m=n?"":t,h=s?.alt??m;return(0,l.jsxs)(r.c,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:h,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},48712:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});n(11504);var r=n(56952),o=n(17624);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.c,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},61964:(e,t,n)=>{"use strict";n.d(t,{c:()=>u});var r=n(11504),o=n(15420),a=n(93664),i=n(66528);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(17624);function c(e){let{className:t,children:n}=e;const c=(0,a.c)(),{colorMode:u}=(0,i.U)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.c)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},58448:(e,t,n)=>{"use strict";n.d(t,{U:()=>b,a:()=>c});var r=n(11504),o=n(98684),a=n(95288),i=n(13856),s=n(17624);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,i.I)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function m(e){if(!o.c.canUseDOM)return e?u:d}function h(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),(0,s.jsx)(t,{ref:u,style:c?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),i?.(n))},className:l,children:o})}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,a.c)((()=>{t||i(!0)}),[t]),(0,a.c)((()=>{o&&c(t)}),[o,t]),o?(0,s.jsx)(h,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?g:h;return(0,s.jsx)(r,{...n})}},43868:(e,t,n)=>{"use strict";n.d(t,{el:()=>h,qu:()=>m});var r=n(11504),o=n(93664),a=n(21148),i=n(91100),s=n(21824),l=n(17624);const c=(0,a.GS)("docusaurus.announcement.dismiss"),u=(0,a.GS)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.y)(),t=(0,o.c)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function h(){const e=(0,r.useContext)(f);if(!e)throw new i.AH("AnnouncementBarProvider");return e}},66528:(e,t,n)=>{"use strict";n.d(t,{C:()=>g,U:()=>b});var r=n(11504),o=n(98684),a=n(91100),i=n(21148),s=n(21824),l=n(17624);const c=r.createContext(void 0),u="theme",d=(0,i.GS)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>o.c.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),h=e=>{d.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.y)(),[o,a]=(0,r.useState)(m(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&h(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(c);if(null==e)throw new a.AH("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},94592:(e,t,n)=>{"use strict";n.d(t,{gc:()=>b,iy:()=>v});var r=n(11504),o=n(62840),a=n(52488),i=n(21824),s=n(79940),l=n(91100),c=n(21148),u=n(17624);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,c.GS)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.GS)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.GS)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=r.createContext(null);function h(){const e=(0,o.L0)(),t=(0,i.y)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=h();return(0,u.jsx)(m.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return s.c1?(0,u.jsx)(g,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function y(){const e=(0,r.useContext)(m);if(!e)throw new l.AH("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.M);const t=(0,o.OK)(e),[n,i]=y(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},46192:(e,t,n)=>{"use strict";n.d(t,{m:()=>c,y:()=>l});var r=n(11504),o=n(91100),a=n(17624);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new o.AH("DocsSidebarProvider");return e}},69920:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,Q:()=>s});var r=n(11504),o=n(91100),a=n(17624);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new o.AH("DocsVersionProvider");return e}},41336:(e,t,n)=>{"use strict";n.d(t,{y:()=>f,q:()=>m});var r=n(11504),o=n(45168),a=n(11432),i=n(55592),s=n(91100);function l(e){!function(e){const t=(0,i.Uz)(),n=(0,s.yA)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(21824),u=n(17624);const d=r.createContext(void 0);function p(){const e=function(){const e=(0,o.MF)(),{items:t}=(0,c.y)().navbar;return 0===t.length&&!e.component}(),t=(0,a.U)(),n=!e&&"mobile"===t,[i,s]=(0,r.useState)(!1);l((()=>{if(i)return s(!1),!1}));const u=(0,r.useCallback)((()=>{s((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:i})),[e,n,u,i])}function f(e){let{children:t}=e;const n=p();return(0,u.jsx)(d.Provider,{value:n,children:t})}function m(){const e=r.useContext(d);if(void 0===e)throw new s.AH("NavbarMobileSidebarProvider");return e}},45168:(e,t,n)=>{"use strict";n.d(t,{MF:()=>l,Mx:()=>c,Ub:()=>s});var r=n(11504),o=n(91100),a=n(17624);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new o.AH("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.AH("NavbarSecondaryMenuContentProvider");const[,s]=a,l=(0,o.Mh)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},60204:(e,t,n)=>{"use strict";n.d(t,{m:()=>o,W:()=>a});var r=n(11504);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},11432:(e,t,n)=>{"use strict";n.d(t,{U:()=>s});var r=n(11504),o=n(98684);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!o.c.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},45864:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"}}},13856:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{I:()=>r})},79940:(e,t,n)=>{"use strict";n.d(t,{Gw:()=>f,Md:()=>g,c1:()=>p,Uj:()=>E,b7:()=>x,Qf:()=>S,Ab:()=>k,js:()=>w,mg:()=>y});var r=n(11504),o=n(55592),a=n(85464),i=n(62840),s=n(94592),l=n(69920),c=n(46192);function u(e){return Array.from(new Set(e))}var d=n(13376);const p=!!i.L0;function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}const m=(e,t)=>void 0!==e&&(0,d.Sc)(e,t),h=(e,t)=>e.some((e=>g(e,t)));function g(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||h(e.items,t))}function b(e,t){switch(e.type){case"category":return g(e,t)||e.items.some((e=>b(e,t)));case"link":return!e.unlisted||g(e,t);default:return!0}}function y(e,t){return(0,r.useMemo)((()=>e.filter((e=>b(e,t)))),[e,t])}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.Sc)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.Sc)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function w(){const e=(0,c.m)(),{pathname:t}=(0,o.IT)(),n=(0,i.UF)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function x(e){const{activeVersion:t}=(0,i.wB)(e),{preferredVersion:n}=(0,s.iy)(e),o=(0,i.aA)(e);return(0,r.useMemo)((()=>u([t,n,o].filter(Boolean))),[t,n,o])}function k(e,t){const n=x(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=x(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t}=e;const n=(0,o.IT)(),r=(0,l.E)(),i=t.routes,s=i.find((e=>(0,o.ot)(n.pathname,e)));if(!s)return null;const c=s.sidebar,u=c?r.docsSidebars[c]:void 0;return{docElement:(0,a.k)(i),sidebarName:c,sidebarItems:u}}},68900:(e,t,n)=>{"use strict";n.d(t,{cr:()=>p,U7:()=>u,w7:()=>f});var r=n(11504),o=n(15420),a=n(56952),i=n(85308),s=n(70964),l=n(28264);var c=n(17624);function u(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const u=function(e){const{siteConfig:t}=(0,l.c)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.E)(),p=o?d(o,{absolute:!0}):void 0;return(0,c.jsxs)(a.c,{children:[t&&(0,c.jsx)("title",{children:u}),t&&(0,c.jsx)("meta",{property:"og:title",content:u}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,c.jsx)("meta",{property:"og:image",content:p}),p&&(0,c.jsx)("meta",{name:"twitter:image",content:p}),i]})}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),s=(0,o.c)(i,t);return(0,c.jsxs)(d.Provider,{value:s,children:[(0,c.jsx)(a.c,{children:(0,c.jsx)("html",{className:s})}),n]})}function f(e){let{children:t}=e;const n=(0,i.c)(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(p,{className:(0,o.c)(r,a),children:t})}},91100:(e,t,n)=>{"use strict";n.d(t,{AH:()=>l,Mh:()=>c,i0:()=>s,qY:()=>u,yA:()=>i});var r=n(11504),o=n(95288),a=n(17624);function i(e){const t=(0,r.useRef)(e);return(0,o.c)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,o.c)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},13376:(e,t,n)=>{"use strict";n.d(t,{Sc:()=>i,Y5:()=>s});var r=n(11504),o=n(628),a=n(28264);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,a.c)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.c,baseUrl:e})),[e])}},53943:(e,t,n)=>{"use strict";n.d(t,{S2:()=>c,SM:()=>p,yI:()=>f});var r=n(11504),o=n(98684),a=n(93664),i=(n(95288),n(91100)),s=n(17624);const l=r.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,s.jsx)(l.Provider,{value:n,children:t})}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.AH("ScrollControllerProvider");return e}const d=()=>o.c.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(d()),a=(0,i.yA)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,a.c)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},14456:(e,t,n)=>{"use strict";n.d(t,{SE:()=>o,e6:()=>r});n(28264);const r="default";function o(e,t){return`docs-${e}-${t}`}},21148:(e,t,n)=>{"use strict";n.d(t,{GS:()=>l});n(11504);const r="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=a(t?.persistence);return null===n?s:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},1616:(e,t,n)=>{"use strict";n.d(t,{D:()=>i});var r=n(28264),o=n(55592),a=n(15684);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.c)(),{pathname:l}=(0,o.IT)(),c=(0,a.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},27124:(e,t,n)=>{"use strict";n.d(t,{c:()=>i});var r=n(11504),o=n(55592),a=n(91100);function i(e){const t=(0,o.IT)(),n=(0,a.i0)(t),i=(0,a.yA)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},21824:(e,t,n)=>{"use strict";n.d(t,{y:()=>o});var r=n(28264);function o(){return(0,r.c)().siteConfig.themeConfig}},21600:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=void 0;const r=n(32112);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,r.removeSuffix)(e,"/")}t.addTrailingSlash=o,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),s="/"===i||i===r?i:(l=i,n?o(l):a(l));var l;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=a},64292:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},15684:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(21600);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}}),Object.defineProperty(t,"addTrailingSlash",{enumerable:!0,get:function(){return o.addTrailingSlash}}),Object.defineProperty(t,"addLeadingSlash",{enumerable:!0,get:function(){return o.addLeadingSlash}}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return o.removeTrailingSlash}});var a=n(32112);Object.defineProperty(t,"addPrefix",{enumerable:!0,get:function(){return a.addPrefix}}),Object.defineProperty(t,"removeSuffix",{enumerable:!0,get:function(){return a.removeSuffix}}),Object.defineProperty(t,"addSuffix",{enumerable:!0,get:function(){return a.addSuffix}}),Object.defineProperty(t,"removePrefix",{enumerable:!0,get:function(){return a.removePrefix}});var i=n(64292);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},32112:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=void 0,t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){return""===t?e:e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},58064:(e,t,n)=>{"use strict";n.d(t,{iU:()=>w,Yf:()=>C,gh:()=>f,Wi:()=>T,Ep:()=>p});var r=n(86404);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],s=e&&o(e),l=t&&o(t),c=s||l;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var u=i[i.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=i.length;p>=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(66136);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.c)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var h=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var b="popstate",y="hashchange";function v(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,s.c)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,c=i.forceRefresh,w=void 0!==c&&c,x=i.getUserConfirmation,k=void 0===x?g:x,S=i.keyLength,E=void 0===S?6:S,_=e.basename?d(l(e.basename)):"";function C(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return _&&(a=u(a,_)),f(a,r,n)}function z(){return Math.random().toString(36).substr(2,E)}var T=m();function L(e){(0,r.c)(U,e),U.length=n.length,T.notifyListeners(U.location,U.action)}function j(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||P(C(e.state))}function A(){P(C(v()))}var F=!1;function P(e){if(F)F=!1,L();else{T.confirmTransitionTo(e,"POP",k,(function(t){t?L({action:"POP",location:e}):function(e){var t=U.location,n=R.indexOf(t.key);-1===n&&(n=0);var r=R.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(F=!0,I(o))}(e)}))}}var N=C(v()),R=[N.key];function D(e){return _+p(e)}function I(e){n.go(e)}var O=0;function M(e){1===(O+=e)&&1===e?(window.addEventListener(b,j),a&&window.addEventListener(y,A)):0===O&&(window.removeEventListener(b,j),a&&window.removeEventListener(y,A))}var B=!1;var U={length:n.length,action:"POP",location:N,createHref:D,push:function(e,t){var r="PUSH",a=f(e,t,z(),U.location);T.confirmTransitionTo(a,r,k,(function(e){if(e){var t=D(a),i=a.key,s=a.state;if(o)if(n.pushState({key:i,state:s},null,t),w)window.location.href=t;else{var l=R.indexOf(U.location.key),c=R.slice(0,l+1);c.push(a.key),R=c,L({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,z(),U.location);T.confirmTransitionTo(a,r,k,(function(e){if(e){var t=D(a),i=a.key,s=a.state;if(o)if(n.replaceState({key:i,state:s},null,t),w)window.location.replace(t);else{var l=R.indexOf(U.location.key);-1!==l&&(R[l]=a.key),L({action:r,location:a})}else window.location.replace(t)}}))},go:I,goBack:function(){I(-1)},goForward:function(){I(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return B||(M(1),B=!0),function(){return B&&(B=!1,M(-1)),t()}},listen:function(e){var t=T.appendListener(e);return M(1),function(){M(-1),t()}}};return U}var x="hashchange",k={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:l},slash:{encodePath:l,decodePath:l}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function E(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function _(e){window.location.replace(S(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),h||(0,s.c)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?g:o,i=n.hashType,c=void 0===i?"slash":i,b=e.basename?d(l(e.basename)):"",y=k[c],v=y.encodePath,w=y.decodePath;function C(){var e=w(E());return b&&(e=u(e,b)),f(e)}var z=m();function T(e){(0,r.c)(B,e),B.length=t.length,z.notifyListeners(B.location,B.action)}var L=!1,j=null;function A(){var e,t,n=E(),r=v(n);if(n!==r)_(r);else{var o=C(),i=B.location;if(!L&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(j===p(o))return;j=null,function(e){if(L)L=!1,T();else{var t="POP";z.confirmTransitionTo(e,t,a,(function(n){n?T({action:t,location:e}):function(e){var t=B.location,n=R.lastIndexOf(p(t));-1===n&&(n=0);var r=R.lastIndexOf(p(e));-1===r&&(r=0);var o=n-r;o&&(L=!0,D(o))}(e)}))}}(o)}}var F=E(),P=v(F);F!==P&&_(P);var N=C(),R=[p(N)];function D(e){t.go(e)}var I=0;function O(e){1===(I+=e)&&1===e?window.addEventListener(x,A):0===I&&window.removeEventListener(x,A)}var M=!1;var B={length:t.length,action:"POP",location:N,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+v(b+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,B.location);z.confirmTransitionTo(r,n,a,(function(e){if(e){var t=p(r),o=v(b+t);if(E()!==o){j=t,function(e){window.location.hash=e}(o);var a=R.lastIndexOf(p(B.location)),i=R.slice(0,a+1);i.push(t),R=i,T({action:n,location:r})}else T()}}))},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,B.location);z.confirmTransitionTo(r,n,a,(function(e){if(e){var t=p(r),o=v(b+t);E()!==o&&(j=t,_(o));var a=R.indexOf(p(B.location));-1!==a&&(R[a]=t),T({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=z.setPrompt(e);return M||(O(1),M=!0),function(){return M&&(M=!1,O(-1)),t()}},listen:function(e){var t=z.appendListener(e);return O(1),function(){O(-1),t()}}};return B}function z(e,t,n){return Math.min(Math.max(e,t),n)}function T(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,s=void 0===i?0:i,l=t.keyLength,c=void 0===l?6:l,u=m();function d(e){(0,r.c)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,c)}var g=z(s,0,a.length-1),b=a.map((function(e){return f(e,void 0,"string"==typeof e?h():e.key||h())})),y=p;function v(e){var t=z(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[g],index:g,entries:b,createHref:y,push:function(e,t){var r="PUSH",o=f(e,t,h(),w.location);u.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,h(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},84792:(e,t,n)=>{"use strict";var r=n(62168),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),h=l(n),g=0;g<i.length;++g){var b=i[g];if(!(a[b]||r&&r[b]||h&&h[b]||s&&s[b])){var y=p(n,b);try{c(t,b,y)}catch(v){}}}}return t}},79328:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},59600:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},1462:(e,t,n)=>{"use strict";n.r(t)},71496:(e,t,n)=>{"use strict";n.r(t)},22272:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),s=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},37248:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},90452:(e,t,n)=>{const r=n(37248),o=n(88284),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(51976).resolve(t)],delete Prism.languages[e],n(51976)(t),a.add(e)}))}i.silent=!1,e.exports=i},71808:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(r,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(s){for(var l=0;l<s.length&&!(o>=a.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++o;var h=p.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),y=[];h&&y.push.apply(y,i([h])),y.push(g),b&&y.push.apply(y,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},58660:(e,t,n)=>{var r={"./":90452};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=58660},51976:(e,t,n)=>{var r={"./":90452};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=51976},88284:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function o(r,a){if(!(r in n)){a.push(r);var i=a.indexOf(r);if(i<a.length-1)throw new Error("Circular dependency: "+a.slice(i).join(" -> "));var s={},l=e[r];if(l){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in s))for(var i in o(t,a),s[t]=!0,n[t])s[i]=!0}t(l.require,c),t(l.optional,c),t(l.modify,c)}n[r]=s,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,s){var l=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(l);i=i.map(c),s=(s||[]).map(c);var u=n(i),d=n(s);i.forEach((function e(n){var r=l[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var p,f=r(l),m=u;o(m);){for(var h in p={},m){var g=l[h];t(g&&g.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in u))for(var y in f(b))if(y in u){p[b]=!0;break}for(var v in m=p)u[v]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,s={},l={};function c(e){if(e in s)return s[e];l[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=r(e);else{var p=i(u.map((function(e){var t=c(e);return delete l[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return s[e]=o}for(var u in n)c(u);var d=[];for(var p in l)d.push(s[p]);return i(d)}(f,u,t,n)}};return w}}();e.exports=t},39776:(e,t,n)=>{"use strict";var r=n(69143);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},3268:(e,t,n)=>{e.exports=n(39776)()},69143:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},79516:(e,t,n)=>{"use strict";var r=n(11504),o=n(14712);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i=new Set,s={};function l(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)i.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},m={};function h(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var g={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){g[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];g[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){g[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){g[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){g[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){g[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){g[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){g[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){g[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function v(e,t,n,r){var o=g.hasOwnProperty(t)?g[t]:null;(null!==o?0!==o.type:r||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!d.call(m,e)||!d.call(f,e)&&(p.test(e)?m[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,y);g[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,y);g[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,y);g[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){g[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),g.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){g[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,x=Symbol.for("react.element"),k=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),E=Symbol.for("react.strict_mode"),_=Symbol.for("react.profiler"),C=Symbol.for("react.provider"),z=Symbol.for("react.context"),T=Symbol.for("react.forward_ref"),L=Symbol.for("react.suspense"),j=Symbol.for("react.suspense_list"),A=Symbol.for("react.memo"),F=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var P=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var N=Symbol.iterator;function R(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=N&&e[N]||e["@@iterator"])?e:null}var D,I=Object.assign;function O(e){if(void 0===D)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);D=t&&t[1]||""}return"\n"+D+e}var M=!1;function B(e,t){if(!e||M)return"";M=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var r=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){r=c}e.call(t.prototype)}else{try{throw Error()}catch(c){r=c}e()}}catch(c){if(c&&r&&"string"==typeof c.stack){for(var o=c.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,s=a.length-1;1<=i&&0<=s&&o[i]!==a[s];)s--;for(;1<=i&&0<=s;i--,s--)if(o[i]!==a[s]){if(1!==i||1!==s)do{if(i--,0>--s||o[i]!==a[s]){var l="\n"+o[i].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}}while(1<=i&&0<=s);break}}}finally{M=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?O(e):""}function U(e){switch(e.tag){case 5:return O(e.type);case 16:return O("Lazy");case 13:return O("Suspense");case 19:return O("SuspenseList");case 0:case 2:case 15:return e=B(e.type,!1);case 11:return e=B(e.type.render,!1);case 1:return e=B(e.type,!0);default:return""}}function $(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case S:return"Fragment";case k:return"Portal";case _:return"Profiler";case E:return"StrictMode";case L:return"Suspense";case j:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case z:return(e.displayName||"Context")+".Consumer";case C:return(e._context.displayName||"Context")+".Provider";case T:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case A:return null!==(t=e.displayName||null)?t:$(e.type)||"Memo";case F:t=e._payload,e=e._init;try{return $(e(t))}catch(n){}}return null}function q(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return $(t);case 8:return t===E?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function W(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function H(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function G(e){e._valueTracker||(e._valueTracker=function(e){var t=H(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function V(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=H(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function Y(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function Q(e,t){var n=t.checked;return I({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function K(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=W(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function X(e,t){null!=(t=t.checked)&&v(e,"checked",t,!1)}function Z(e,t){X(e,t);var n=W(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,W(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&Y(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+W(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return I({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(te(n)){if(1<n.length)throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:W(n)}}function ae(e,t){var n=W(t.value),r=W(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ie(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function se(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function le(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?se(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ce,ue,de=(ue=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ce=ce||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function pe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},me=["Webkit","ms","Moz","O"];function he(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function ge(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=he(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(fe).forEach((function(e){me.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var be=I({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ye(e,t){if(t){if(be[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function ve(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var ke=null,Se=null,Ee=null;function _e(e){if(e=wo(e)){if("function"!=typeof ke)throw Error(a(280));var t=e.stateNode;t&&(t=ko(t),ke(e.stateNode,e.type,t))}}function Ce(e){Se?Ee?Ee.push(e):Ee=[e]:Se=e}function ze(){if(Se){var e=Se,t=Ee;if(Ee=Se=null,_e(e),t)for(e=0;e<t.length;e++)_e(t[e])}}function Te(e,t){return e(t)}function Le(){}var je=!1;function Ae(e,t,n){if(je)return e(t,n);je=!0;try{return Te(e,t,n)}finally{je=!1,(null!==Se||null!==Ee)&&(Le(),ze())}}function Fe(e,t){var n=e.stateNode;if(null===n)return null;var r=ko(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}var Pe=!1;if(u)try{var Ne={};Object.defineProperty(Ne,"passive",{get:function(){Pe=!0}}),window.addEventListener("test",Ne,Ne),window.removeEventListener("test",Ne,Ne)}catch(ue){Pe=!1}function Re(e,t,n,r,o,a,i,s,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(u){this.onError(u)}}var De=!1,Ie=null,Oe=!1,Me=null,Be={onError:function(e){De=!0,Ie=e}};function Ue(e,t,n,r,o,a,i,s,l){De=!1,Ie=null,Re.apply(Be,arguments)}function $e(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function qe(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function We(e){if($e(e)!==e)throw Error(a(188))}function He(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=$e(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(r=o.return)){n=r;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return We(o),e;if(i===r)return We(o),t;i=i.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=i;else{for(var s=!1,l=o.child;l;){if(l===n){s=!0,n=o,r=i;break}if(l===r){s=!0,r=o,n=i;break}l=l.sibling}if(!s){for(l=i.child;l;){if(l===n){s=!0,n=i,r=o;break}if(l===r){s=!0,r=i,n=o;break}l=l.sibling}if(!s)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e))?Ge(e):null}function Ge(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=Ge(e);if(null!==t)return t;e=e.sibling}return null}var Ve=o.unstable_scheduleCallback,Ye=o.unstable_cancelCallback,Qe=o.unstable_shouldYield,Ke=o.unstable_requestPaint,Xe=o.unstable_now,Ze=o.unstable_getCurrentPriorityLevel,Je=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,nt=o.unstable_LowPriority,rt=o.unstable_IdlePriority,ot=null,at=null;var it=Math.clz32?Math.clz32:function(e){return e>>>=0,0===e?32:31-(st(e)/lt|0)|0},st=Math.log,lt=Math.LN2;var ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,o=e.suspendedLanes,a=e.pingedLanes,i=268435455&n;if(0!==i){var s=i&~o;0!==s?r=dt(s):0!==(a&=i)&&(r=dt(a))}else 0!==(i=n&~o)?r=dt(i):0!==a&&(r=dt(a));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&o)&&((o=r&-r)>=(a=t&-t)||16===o&&0!=(4194240&a)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-it(t)),r|=e[n],t&=~o;return r}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function mt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function ht(){var e=ct;return 0==(4194240&(ct<<=1))&&(ct=64),e}function gt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function bt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function yt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-it(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}var vt=0;function wt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var xt,kt,St,Et,_t,Ct=!1,zt=[],Tt=null,Lt=null,jt=null,At=new Map,Ft=new Map,Pt=[],Nt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function Rt(e,t){switch(e){case"focusin":case"focusout":Tt=null;break;case"dragenter":case"dragleave":Lt=null;break;case"mouseover":case"mouseout":jt=null;break;case"pointerover":case"pointerout":At.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Ft.delete(t.pointerId)}}function Dt(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&(null!==(t=wo(t))&&kt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function It(e){var t=vo(e.target);if(null!==t){var n=$e(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=qe(n)))return e.blockedOn=t,void _t(e.priority,(function(){St(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Ot(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Qt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=wo(n))&&kt(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);we=r,n.target.dispatchEvent(r),we=null,t.shift()}return!0}function Mt(e,t,n){Ot(e)&&n.delete(t)}function Bt(){Ct=!1,null!==Tt&&Ot(Tt)&&(Tt=null),null!==Lt&&Ot(Lt)&&(Lt=null),null!==jt&&Ot(jt)&&(jt=null),At.forEach(Mt),Ft.forEach(Mt)}function Ut(e,t){e.blockedOn===t&&(e.blockedOn=null,Ct||(Ct=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,Bt)))}function $t(e){function t(t){return Ut(t,e)}if(0<zt.length){Ut(zt[0],e);for(var n=1;n<zt.length;n++){var r=zt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==Tt&&Ut(Tt,e),null!==Lt&&Ut(Lt,e),null!==jt&&Ut(jt,e),At.forEach(t),Ft.forEach(t),n=0;n<Pt.length;n++)(r=Pt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<Pt.length&&null===(n=Pt[0]).blockedOn;)It(n),null===n.blockedOn&&Pt.shift()}var qt=w.ReactCurrentBatchConfig,Wt=!0;function Ht(e,t,n,r){var o=vt,a=qt.transition;qt.transition=null;try{vt=1,Vt(e,t,n,r)}finally{vt=o,qt.transition=a}}function Gt(e,t,n,r){var o=vt,a=qt.transition;qt.transition=null;try{vt=4,Vt(e,t,n,r)}finally{vt=o,qt.transition=a}}function Vt(e,t,n,r){if(Wt){var o=Qt(e,t,n,r);if(null===o)Wr(e,t,r,Yt,n),Rt(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return Tt=Dt(Tt,e,t,n,r,o),!0;case"dragenter":return Lt=Dt(Lt,e,t,n,r,o),!0;case"mouseover":return jt=Dt(jt,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return At.set(a,Dt(At.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,Ft.set(a,Dt(Ft.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(Rt(e,r),4&t&&-1<Nt.indexOf(e)){for(;null!==o;){var a=wo(o);if(null!==a&&xt(a),null===(a=Qt(e,t,n,r))&&Wr(e,t,r,Yt,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Wr(e,t,r,null,n)}}var Yt=null;function Qt(e,t,n,r){if(Yt=null,null!==(e=vo(e=xe(r))))if(null===(t=$e(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=qe(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Yt=e,null}function Kt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Ze()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case rt:return 536870912;default:return 16}default:return 16}}var Xt=null,Zt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Zt,r=n.length,o="value"in Xt?Xt.value:Xt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return Jt=o.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function rn(){return!1}function on(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nn:rn,this.isPropagationStopped=rn,this}return I(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var an,sn,ln,cn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},un=on(cn),dn=I({},cn,{view:0,detail:0}),pn=on(dn),fn=I({},dn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:_n,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==ln&&(ln&&"mousemove"===e.type?(an=e.screenX-ln.screenX,sn=e.screenY-ln.screenY):sn=an=0,ln=e),an)},movementY:function(e){return"movementY"in e?e.movementY:sn}}),mn=on(fn),hn=on(I({},fn,{dataTransfer:0})),gn=on(I({},dn,{relatedTarget:0})),bn=on(I({},cn,{animationName:0,elapsedTime:0,pseudoElement:0})),yn=I({},cn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),vn=on(yn),wn=on(I({},cn,{data:0})),xn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},kn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Sn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function En(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Sn[e])&&!!t[e]}function _n(){return En}var Cn=I({},dn,{key:function(e){if(e.key){var t=xn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?kn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:_n,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),zn=on(Cn),Tn=on(I({},fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Ln=on(I({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:_n})),jn=on(I({},cn,{propertyName:0,elapsedTime:0,pseudoElement:0})),An=I({},fn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Fn=on(An),Pn=[9,13,27,32],Nn=u&&"CompositionEvent"in window,Rn=null;u&&"documentMode"in document&&(Rn=document.documentMode);var Dn=u&&"TextEvent"in window&&!Rn,In=u&&(!Nn||Rn&&8<Rn&&11>=Rn),On=String.fromCharCode(32),Mn=!1;function Bn(e,t){switch(e){case"keyup":return-1!==Pn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Un(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var $n=!1;var qn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Wn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!qn[e.type]:"textarea"===t}function Hn(e,t,n,r){Ce(r),0<(t=Gr(t,"onChange")).length&&(n=new un("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Gn=null,Vn=null;function Yn(e){Or(e,0)}function Qn(e){if(V(xo(e)))return e}function Kn(e,t){if("change"===e)return t}var Xn=!1;if(u){var Zn;if(u){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Zn=Jn}else Zn=!1;Xn=Zn&&(!document.documentMode||9<document.documentMode)}function tr(){Gn&&(Gn.detachEvent("onpropertychange",nr),Vn=Gn=null)}function nr(e){if("value"===e.propertyName&&Qn(Vn)){var t=[];Hn(t,Vn,e,xe(e)),Ae(Yn,t)}}function rr(e,t,n){"focusin"===e?(tr(),Vn=n,(Gn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function or(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Qn(Vn)}function ar(e,t){if("click"===e)return Qn(t)}function ir(e,t){if("input"===e||"change"===e)return Qn(t)}var sr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function lr(e,t){if(sr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!d.call(t,o)||!sr(e[o],t[o]))return!1}return!0}function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ur(e,t){var n,r=cr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=Y();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=Y((e=t.contentWindow).document)}return t}function fr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function mr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&fr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,a=Math.min(r.start,o);r=void 0===r.end?a:Math.min(r.end,o),!e.extend&&a>r&&(o=r,r=a,a=o),o=ur(n,a);var i=ur(n,r);o&&i&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),a>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var hr=u&&"documentMode"in document&&11>=document.documentMode,gr=null,br=null,yr=null,vr=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;vr||null==gr||gr!==Y(r)||("selectionStart"in(r=gr)&&fr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},yr&&lr(yr,r)||(yr=r,0<(r=Gr(br,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=gr)))}function xr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var kr={animationend:xr("Animation","AnimationEnd"),animationiteration:xr("Animation","AnimationIteration"),animationstart:xr("Animation","AnimationStart"),transitionend:xr("Transition","TransitionEnd")},Sr={},Er={};function _r(e){if(Sr[e])return Sr[e];if(!kr[e])return e;var t,n=kr[e];for(t in n)if(n.hasOwnProperty(t)&&t in Er)return Sr[e]=n[t];return e}u&&(Er=document.createElement("div").style,"AnimationEvent"in window||(delete kr.animationend.animation,delete kr.animationiteration.animation,delete kr.animationstart.animation),"TransitionEvent"in window||delete kr.transitionend.transition);var Cr=_r("animationend"),zr=_r("animationiteration"),Tr=_r("animationstart"),Lr=_r("transitionend"),jr=new Map,Ar="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Fr(e,t){jr.set(e,t),l(t,[e])}for(var Pr=0;Pr<Ar.length;Pr++){var Nr=Ar[Pr];Fr(Nr.toLowerCase(),"on"+(Nr[0].toUpperCase()+Nr.slice(1)))}Fr(Cr,"onAnimationEnd"),Fr(zr,"onAnimationIteration"),Fr(Tr,"onAnimationStart"),Fr("dblclick","onDoubleClick"),Fr("focusin","onFocus"),Fr("focusout","onBlur"),Fr(Lr,"onTransitionEnd"),c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),l("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),l("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),l("onBeforeInput",["compositionend","keypress","textInput","paste"]),l("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Rr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Dr=new Set("cancel close invalid load scroll toggle".split(" ").concat(Rr));function Ir(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,i,s,l,c){if(Ue.apply(this,arguments),De){if(!De)throw Error(a(198));var u=Ie;De=!1,Ie=null,Oe||(Oe=!0,Me=u)}}(r,t,void 0,e),e.currentTarget=null}function Or(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==a&&o.isPropagationStopped())break e;Ir(o,s,c),a=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,c=s.currentTarget,s=s.listener,l!==a&&o.isPropagationStopped())break e;Ir(o,s,c),a=l}}}if(Oe)throw e=Me,Oe=!1,Me=null,e}function Mr(e,t){var n=t[go];void 0===n&&(n=t[go]=new Set);var r=e+"__bubble";n.has(r)||(qr(t,e,2,!1),n.add(r))}function Br(e,t,n){var r=0;t&&(r|=4),qr(n,e,r,t)}var Ur="_reactListening"+Math.random().toString(36).slice(2);function $r(e){if(!e[Ur]){e[Ur]=!0,i.forEach((function(t){"selectionchange"!==t&&(Dr.has(t)||Br(t,!1,e),Br(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[Ur]||(t[Ur]=!0,Br("selectionchange",!1,t))}}function qr(e,t,n,r){switch(Kt(t)){case 1:var o=Ht;break;case 4:o=Gt;break;default:o=Vt}n=o.bind(null,t,n,e),o=void 0,!Pe||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Wr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var s=r.stateNode.containerInfo;if(s===o||8===s.nodeType&&s.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var l=i.tag;if((3===l||4===l)&&((l=i.stateNode.containerInfo)===o||8===l.nodeType&&l.parentNode===o))return;i=i.return}for(;null!==s;){if(null===(i=vo(s)))return;if(5===(l=i.tag)||6===l){r=a=i;continue e}s=s.parentNode}}r=r.return}Ae((function(){var r=a,o=xe(n),i=[];e:{var s=jr.get(e);if(void 0!==s){var l=un,c=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":l=zn;break;case"focusin":c="focus",l=gn;break;case"focusout":c="blur",l=gn;break;case"beforeblur":case"afterblur":l=gn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=mn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=hn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=Ln;break;case Cr:case zr:case Tr:l=bn;break;case Lr:l=jn;break;case"scroll":l=pn;break;case"wheel":l=Fn;break;case"copy":case"cut":case"paste":l=vn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=Tn}var u=0!=(4&t),d=!u&&"scroll"===e,p=u?null!==s?s+"Capture":null:s;u=[];for(var f,m=r;null!==m;){var h=(f=m).stateNode;if(5===f.tag&&null!==h&&(f=h,null!==p&&(null!=(h=Fe(m,p))&&u.push(Hr(m,h,f)))),d)break;m=m.return}0<u.length&&(s=new l(s,c,null,n,o),i.push({event:s,listeners:u}))}}if(0==(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||n===we||!(c=n.relatedTarget||n.fromElement)||!vo(c)&&!c[ho])&&(l||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,l?(l=r,null!==(c=(c=n.relatedTarget||n.toElement)?vo(c):null)&&(c!==(d=$e(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=mn,h="onMouseLeave",p="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(u=Tn,h="onPointerLeave",p="onPointerEnter",m="pointer"),d=null==l?s:xo(l),f=null==c?s:xo(c),(s=new u(h,m+"leave",l,n,o)).target=d,s.relatedTarget=f,h=null,vo(o)===r&&((u=new u(p,m+"enter",c,n,o)).target=f,u.relatedTarget=d,h=u),d=h,l&&c)e:{for(p=c,m=0,f=u=l;f;f=Vr(f))m++;for(f=0,h=p;h;h=Vr(h))f++;for(;0<m-f;)u=Vr(u),m--;for(;0<f-m;)p=Vr(p),f--;for(;m--;){if(u===p||null!==p&&u===p.alternate)break e;u=Vr(u),p=Vr(p)}u=null}else u=null;null!==l&&Yr(i,s,l,u,!1),null!==c&&null!==d&&Yr(i,d,c,u,!0)}if("select"===(l=(s=r?xo(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var g=Kn;else if(Wn(s))if(Xn)g=ir;else{g=or;var b=rr}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(g=ar);switch(g&&(g=g(e,r))?Hn(i,g,n,o):(b&&b(e,s,r),"focusout"===e&&(b=s._wrapperState)&&b.controlled&&"number"===s.type&&ee(s,"number",s.value)),b=r?xo(r):window,e){case"focusin":(Wn(b)||"true"===b.contentEditable)&&(gr=b,br=r,yr=null);break;case"focusout":yr=br=gr=null;break;case"mousedown":vr=!0;break;case"contextmenu":case"mouseup":case"dragend":vr=!1,wr(i,n,o);break;case"selectionchange":if(hr)break;case"keydown":case"keyup":wr(i,n,o)}var y;if(Nn)e:{switch(e){case"compositionstart":var v="onCompositionStart";break e;case"compositionend":v="onCompositionEnd";break e;case"compositionupdate":v="onCompositionUpdate";break e}v=void 0}else $n?Bn(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(In&&"ko"!==n.locale&&($n||"onCompositionStart"!==v?"onCompositionEnd"===v&&$n&&(y=en()):(Zt="value"in(Xt=o)?Xt.value:Xt.textContent,$n=!0)),0<(b=Gr(r,v)).length&&(v=new wn(v,e,null,n,o),i.push({event:v,listeners:b}),y?v.data=y:null!==(y=Un(n))&&(v.data=y))),(y=Dn?function(e,t){switch(e){case"compositionend":return Un(t);case"keypress":return 32!==t.which?null:(Mn=!0,On);case"textInput":return(e=t.data)===On&&Mn?null:e;default:return null}}(e,n):function(e,t){if($n)return"compositionend"===e||!Nn&&Bn(e,t)?(e=en(),Jt=Zt=Xt=null,$n=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return In&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Gr(r,"onBeforeInput")).length&&(o=new wn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=y))}Or(i,t)}))}function Hr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Gr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Fe(e,n))&&r.unshift(Hr(e,a,o)),null!=(a=Fe(e,t))&&r.push(Hr(e,a,o))),e=e.return}return r}function Vr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Yr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var s=n,l=s.alternate,c=s.stateNode;if(null!==l&&l===r)break;5===s.tag&&null!==c&&(s=c,o?null!=(l=Fe(n,a))&&i.unshift(Hr(n,l,s)):o||null!=(l=Fe(n,a))&&i.push(Hr(n,l,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Qr=/\r\n?/g,Kr=/\u0000|\uFFFD/g;function Xr(e){return("string"==typeof e?e:""+e).replace(Qr,"\n").replace(Kr,"")}function Zr(e,t,n){if(t=Xr(t),Xr(e)!==t&&n)throw Error(a(425))}function Jr(){}var eo=null,to=null;function no(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ro="function"==typeof setTimeout?setTimeout:void 0,oo="function"==typeof clearTimeout?clearTimeout:void 0,ao="function"==typeof Promise?Promise:void 0,io="function"==typeof queueMicrotask?queueMicrotask:void 0!==ao?function(e){return ao.resolve(null).then(e).catch(so)}:ro;function so(e){setTimeout((function(){throw e}))}function lo(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType)if("/$"===(n=o.data)){if(0===r)return e.removeChild(o),void $t(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=o}while(n);$t(t)}function co(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function uo(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var po=Math.random().toString(36).slice(2),fo="__reactFiber$"+po,mo="__reactProps$"+po,ho="__reactContainer$"+po,go="__reactEvents$"+po,bo="__reactListeners$"+po,yo="__reactHandles$"+po;function vo(e){var t=e[fo];if(t)return t;for(var n=e.parentNode;n;){if(t=n[ho]||n[fo]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=uo(e);null!==e;){if(n=e[fo])return n;e=uo(e)}return t}n=(e=n).parentNode}return null}function wo(e){return!(e=e[fo]||e[ho])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function xo(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function ko(e){return e[mo]||null}var So=[],Eo=-1;function _o(e){return{current:e}}function Co(e){0>Eo||(e.current=So[Eo],So[Eo]=null,Eo--)}function zo(e,t){Eo++,So[Eo]=e.current,e.current=t}var To={},Lo=_o(To),jo=_o(!1),Ao=To;function Fo(e,t){var n=e.type.contextTypes;if(!n)return To;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function Po(e){return null!=(e=e.childContextTypes)}function No(){Co(jo),Co(Lo)}function Ro(e,t,n){if(Lo.current!==To)throw Error(a(168));zo(Lo,t),zo(jo,n)}function Do(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in t))throw Error(a(108,q(e)||"Unknown",o));return I({},n,r)}function Io(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||To,Ao=Lo.current,zo(Lo,e),zo(jo,jo.current),!0}function Oo(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=Do(e,t,Ao),r.__reactInternalMemoizedMergedChildContext=e,Co(jo),Co(Lo),zo(Lo,e)):Co(jo),zo(jo,n)}var Mo=null,Bo=!1,Uo=!1;function $o(e){null===Mo?Mo=[e]:Mo.push(e)}function qo(){if(!Uo&&null!==Mo){Uo=!0;var e=0,t=vt;try{var n=Mo;for(vt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}Mo=null,Bo=!1}catch(o){throw null!==Mo&&(Mo=Mo.slice(e+1)),Ve(Je,qo),o}finally{vt=t,Uo=!1}}return null}var Wo=[],Ho=0,Go=null,Vo=0,Yo=[],Qo=0,Ko=null,Xo=1,Zo="";function Jo(e,t){Wo[Ho++]=Vo,Wo[Ho++]=Go,Go=e,Vo=t}function ea(e,t,n){Yo[Qo++]=Xo,Yo[Qo++]=Zo,Yo[Qo++]=Ko,Ko=e;var r=Xo;e=Zo;var o=32-it(r)-1;r&=~(1<<o),n+=1;var a=32-it(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,Xo=1<<32-it(t)+o|n<<o|r,Zo=a+e}else Xo=1<<a|n<<o|r,Zo=e}function ta(e){null!==e.return&&(Jo(e,1),ea(e,1,0))}function na(e){for(;e===Go;)Go=Wo[--Ho],Wo[Ho]=null,Vo=Wo[--Ho],Wo[Ho]=null;for(;e===Ko;)Ko=Yo[--Qo],Yo[Qo]=null,Zo=Yo[--Qo],Yo[Qo]=null,Xo=Yo[--Qo],Yo[Qo]=null}var ra=null,oa=null,aa=!1,ia=null;function sa(e,t){var n=Fc(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function la(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,ra=e,oa=co(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,ra=e,oa=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Ko?{id:Xo,overflow:Zo}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Fc(18,null,null,0)).stateNode=t,n.return=e,e.child=n,ra=e,oa=null,!0);default:return!1}}function ca(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function ua(e){if(aa){var t=oa;if(t){var n=t;if(!la(e,t)){if(ca(e))throw Error(a(418));t=co(n.nextSibling);var r=ra;t&&la(e,t)?sa(r,n):(e.flags=-4097&e.flags|2,aa=!1,ra=e)}}else{if(ca(e))throw Error(a(418));e.flags=-4097&e.flags|2,aa=!1,ra=e}}}function da(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ra=e}function pa(e){if(e!==ra)return!1;if(!aa)return da(e),aa=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!no(e.type,e.memoizedProps)),t&&(t=oa)){if(ca(e))throw fa(),Error(a(418));for(;t;)sa(e,t),t=co(t.nextSibling)}if(da(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){oa=co(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}oa=null}}else oa=ra?co(e.stateNode.nextSibling):null;return!0}function fa(){for(var e=oa;e;)e=co(e.nextSibling)}function ma(){oa=ra=null,aa=!1}function ha(e){null===ia?ia=[e]:ia.push(e)}var ga=w.ReactCurrentBatchConfig;function ba(e,t){if(e&&e.defaultProps){for(var n in t=I({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var ya=_o(null),va=null,wa=null,xa=null;function ka(){xa=wa=va=null}function Sa(e){var t=ya.current;Co(ya),e._currentValue=t}function Ea(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function _a(e,t){va=e,xa=wa=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(ws=!0),e.firstContext=null)}function Ca(e){var t=e._currentValue;if(xa!==e)if(e={context:e,memoizedValue:t,next:null},null===wa){if(null===va)throw Error(a(308));wa=e,va.dependencies={lanes:0,firstContext:e}}else wa=wa.next=e;return t}var za=null;function Ta(e){null===za?za=[e]:za.push(e)}function La(e,t,n,r){var o=t.interleaved;return null===o?(n.next=n,Ta(t)):(n.next=o.next,o.next=n),t.interleaved=n,ja(e,r)}function ja(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Aa=!1;function Fa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Pa(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Na(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ra(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&Ll)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,ja(e,n)}return null===(o=r.interleaved)?(t.next=t,Ta(r)):(t.next=o.next,o.next=t),r.interleaved=t,ja(e,n)}function Da(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}function Ia(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Oa(e,t,n,r){var o=e.updateQueue;Aa=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var l=s,c=l.next;l.next=null,null===i?a=c:i.next=c,i=l;var u=e.alternate;null!==u&&((s=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===s?u.firstBaseUpdate=c:s.next=c,u.lastBaseUpdate=l))}if(null!==a){var d=o.baseState;for(i=0,u=c=l=null,s=a;;){var p=s.lane,f=s.eventTime;if((r&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var m=e,h=s;switch(p=t,f=n,h.tag){case 1:if("function"==typeof(m=h.payload)){d=m.call(f,d,p);break e}d=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null==(p="function"==typeof(m=h.payload)?m.call(f,d,p):m))break e;d=I({},d,p);break e;case 2:Aa=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(p=o.effects)?o.effects=[s]:p.push(s))}else f={eventTime:f,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(c=u=f,l=d):u=u.next=f,i|=p;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;s=(p=s).next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}if(null===u&&(l=d),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null!==(t=o.shared.interleaved)){o=t;do{i|=o.lane,o=o.next}while(o!==t)}else null===a&&(o.shared.lanes=0);Il|=i,e.lanes=i,e.memoizedState=d}}function Ma(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(a(191,o));o.call(r)}}}var Ba=(new r.Component).refs;function Ua(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:I({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var $a={isMounted:function(e){return!!(e=e._reactInternals)&&$e(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=tc(),o=nc(e),a=Na(r,o);a.payload=t,null!=n&&(a.callback=n),null!==(t=Ra(e,a,o))&&(rc(t,e,o,r),Da(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=tc(),o=nc(e),a=Na(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),null!==(t=Ra(e,a,o))&&(rc(t,e,o,r),Da(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=tc(),r=nc(e),o=Na(n,r);o.tag=2,null!=t&&(o.callback=t),null!==(t=Ra(e,o,r))&&(rc(t,e,r,n),Da(t,e,r))}};function qa(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!lr(n,r)||!lr(o,a))}function Wa(e,t,n){var r=!1,o=To,a=t.contextType;return"object"==typeof a&&null!==a?a=Ca(a):(o=Po(t)?Ao:Lo.current,a=(r=null!=(r=t.contextTypes))?Fo(e,o):To),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=$a,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function Ha(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&$a.enqueueReplaceState(t,t.state,null)}function Ga(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=Ba,Fa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=Ca(a):(a=Po(t)?Ao:Lo.current,o.context=Fo(e,a)),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(Ua(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&$a.enqueueReplaceState(o,o.state,null),Oa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function Va(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=r,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=o.refs;t===Ba&&(t=o.refs={}),null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function Ya(e,t){throw e=Object.prototype.toString.call(t),Error(a(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Qa(e){return(0,e._init)(e._payload)}function Ka(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Nc(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=2,n):r:(t.flags|=2,n):(t.flags|=1048576,n)}function s(t){return e&&null===t.alternate&&(t.flags|=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Oc(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){var a=n.type;return a===S?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===F&&Qa(a)===t.type)?((r=o(t,n.props)).ref=Va(e,t,n),r.return=e,r):((r=Rc(n.type,n.key,n.props,null,e.mode,r)).ref=Va(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Mc(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Dc(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Oc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case x:return(n=Rc(t.type,t.key,t.props,null,e.mode,n)).ref=Va(e,null,t),n.return=e,n;case k:return(t=Mc(t,e.mode,n)).return=e,t;case F:return p(e,(0,t._init)(t._payload),n)}if(te(t)||R(t))return(t=Dc(t,e.mode,n,null)).return=e,t;Ya(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==o?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case x:return n.key===o?c(e,t,n,r):null;case k:return n.key===o?u(e,t,n,r):null;case F:return f(e,t,(o=n._init)(n._payload),r)}if(te(n)||R(n))return null!==o?null:d(e,t,n,r,null);Ya(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r&&""!==r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case x:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case k:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case F:return m(e,t,n,(0,r._init)(r._payload),o)}if(te(r)||R(r))return d(t,e=e.get(n)||null,r,o,null);Ya(t,r)}return null}function h(o,a,s,l){for(var c=null,u=null,d=a,h=a=0,g=null;null!==d&&h<s.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var b=f(o,d,s[h],l);if(null===b){null===d&&(d=g);break}e&&d&&null===b.alternate&&t(o,d),a=i(b,a,h),null===u?c=b:u.sibling=b,u=b,d=g}if(h===s.length)return n(o,d),aa&&Jo(o,h),c;if(null===d){for(;h<s.length;h++)null!==(d=p(o,s[h],l))&&(a=i(d,a,h),null===u?c=d:u.sibling=d,u=d);return aa&&Jo(o,h),c}for(d=r(o,d);h<s.length;h++)null!==(g=m(d,o,h,s[h],l))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),a=i(g,a,h),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach((function(e){return t(o,e)})),aa&&Jo(o,h),c}function g(o,s,l,c){var u=R(l);if("function"!=typeof u)throw Error(a(150));if(null==(l=u.call(l)))throw Error(a(151));for(var d=u=null,h=s,g=s=0,b=null,y=l.next();null!==h&&!y.done;g++,y=l.next()){h.index>g?(b=h,h=null):b=h.sibling;var v=f(o,h,y.value,c);if(null===v){null===h&&(h=b);break}e&&h&&null===v.alternate&&t(o,h),s=i(v,s,g),null===d?u=v:d.sibling=v,d=v,h=b}if(y.done)return n(o,h),aa&&Jo(o,g),u;if(null===h){for(;!y.done;g++,y=l.next())null!==(y=p(o,y.value,c))&&(s=i(y,s,g),null===d?u=y:d.sibling=y,d=y);return aa&&Jo(o,g),u}for(h=r(o,h);!y.done;g++,y=l.next())null!==(y=m(h,o,g,y.value,c))&&(e&&null!==y.alternate&&h.delete(null===y.key?g:y.key),s=i(y,s,g),null===d?u=y:d.sibling=y,d=y);return e&&h.forEach((function(e){return t(o,e)})),aa&&Jo(o,g),u}return function e(r,a,i,l){if("object"==typeof i&&null!==i&&i.type===S&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case x:e:{for(var c=i.key,u=a;null!==u;){if(u.key===c){if((c=i.type)===S){if(7===u.tag){n(r,u.sibling),(a=o(u,i.props.children)).return=r,r=a;break e}}else if(u.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===F&&Qa(c)===u.type){n(r,u.sibling),(a=o(u,i.props)).ref=Va(r,u,i),a.return=r,r=a;break e}n(r,u);break}t(r,u),u=u.sibling}i.type===S?((a=Dc(i.props.children,r.mode,l,i.key)).return=r,r=a):((l=Rc(i.type,i.key,i.props,null,r.mode,l)).ref=Va(r,a,i),l.return=r,r=l)}return s(r);case k:e:{for(u=i.key;null!==a;){if(a.key===u){if(4===a.tag&&a.stateNode.containerInfo===i.containerInfo&&a.stateNode.implementation===i.implementation){n(r,a.sibling),(a=o(a,i.children||[])).return=r,r=a;break e}n(r,a);break}t(r,a),a=a.sibling}(a=Mc(i,r.mode,l)).return=r,r=a}return s(r);case F:return e(r,a,(u=i._init)(i._payload),l)}if(te(i))return h(r,a,i,l);if(R(i))return g(r,a,i,l);Ya(r,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==a&&6===a.tag?(n(r,a.sibling),(a=o(a,i)).return=r,r=a):(n(r,a),(a=Oc(i,r.mode,l)).return=r,r=a),s(r)):n(r,a)}}var Xa=Ka(!0),Za=Ka(!1),Ja={},ei=_o(Ja),ti=_o(Ja),ni=_o(Ja);function ri(e){if(e===Ja)throw Error(a(174));return e}function oi(e,t){switch(zo(ni,t),zo(ti,e),zo(ei,Ja),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:le(null,"");break;default:t=le(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}Co(ei),zo(ei,t)}function ai(){Co(ei),Co(ti),Co(ni)}function ii(e){ri(ni.current);var t=ri(ei.current),n=le(t,e.type);t!==n&&(zo(ti,e),zo(ei,n))}function si(e){ti.current===e&&(Co(ei),Co(ti))}var li=_o(0);function ci(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ui=[];function di(){for(var e=0;e<ui.length;e++)ui[e]._workInProgressVersionPrimary=null;ui.length=0}var pi=w.ReactCurrentDispatcher,fi=w.ReactCurrentBatchConfig,mi=0,hi=null,gi=null,bi=null,yi=!1,vi=!1,wi=0,xi=0;function ki(){throw Error(a(321))}function Si(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!sr(e[n],t[n]))return!1;return!0}function Ei(e,t,n,r,o,i){if(mi=i,hi=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,pi.current=null===e||null===e.memoizedState?ss:ls,e=n(r,o),vi){i=0;do{if(vi=!1,wi=0,25<=i)throw Error(a(301));i+=1,bi=gi=null,t.updateQueue=null,pi.current=cs,e=n(r,o)}while(vi)}if(pi.current=is,t=null!==gi&&null!==gi.next,mi=0,bi=gi=hi=null,yi=!1,t)throw Error(a(300));return e}function _i(){var e=0!==wi;return wi=0,e}function Ci(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===bi?hi.memoizedState=bi=e:bi=bi.next=e,bi}function zi(){if(null===gi){var e=hi.alternate;e=null!==e?e.memoizedState:null}else e=gi.next;var t=null===bi?hi.memoizedState:bi.next;if(null!==t)bi=t,gi=e;else{if(null===e)throw Error(a(310));e={memoizedState:(gi=e).memoizedState,baseState:gi.baseState,baseQueue:gi.baseQueue,queue:gi.queue,next:null},null===bi?hi.memoizedState=bi=e:bi=bi.next=e}return bi}function Ti(e,t){return"function"==typeof t?t(e):t}function Li(e){var t=zi(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=gi,o=r.baseQueue,i=n.pending;if(null!==i){if(null!==o){var s=o.next;o.next=i.next,i.next=s}r.baseQueue=o=i,n.pending=null}if(null!==o){i=o.next,r=r.baseState;var l=s=null,c=null,u=i;do{var d=u.lane;if((mi&d)===d)null!==c&&(c=c.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var p={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===c?(l=c=p,s=r):c=c.next=p,hi.lanes|=d,Il|=d}u=u.next}while(null!==u&&u!==i);null===c?s=r:c.next=l,sr(r,t.memoizedState)||(ws=!0),t.memoizedState=r,t.baseState=s,t.baseQueue=c,n.lastRenderedState=r}if(null!==(e=n.interleaved)){o=e;do{i=o.lane,hi.lanes|=i,Il|=i,o=o.next}while(o!==e)}else null===o&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function ji(e){var t=zi(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var s=o=o.next;do{i=e(i,s.action),s=s.next}while(s!==o);sr(i,t.memoizedState)||(ws=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Ai(){}function Fi(e,t){var n=hi,r=zi(),o=t(),i=!sr(r.memoizedState,o);if(i&&(r.memoizedState=o,ws=!0),r=r.queue,Wi(Ri.bind(null,n,r,e),[e]),r.getSnapshot!==t||i||null!==bi&&1&bi.memoizedState.tag){if(n.flags|=2048,Mi(9,Ni.bind(null,n,r,o,t),void 0,null),null===jl)throw Error(a(349));0!=(30&mi)||Pi(n,t,o)}return o}function Pi(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=hi.updateQueue)?(t={lastEffect:null,stores:null},hi.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Ni(e,t,n,r){t.value=n,t.getSnapshot=r,Di(t)&&Ii(e)}function Ri(e,t,n){return n((function(){Di(t)&&Ii(e)}))}function Di(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!sr(e,n)}catch(r){return!0}}function Ii(e){var t=ja(e,1);null!==t&&rc(t,e,1,-1)}function Oi(e){var t=Ci();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ti,lastRenderedState:e},t.queue=e,e=e.dispatch=ns.bind(null,hi,e),[t.memoizedState,e]}function Mi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=hi.updateQueue)?(t={lastEffect:null,stores:null},hi.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function Bi(){return zi().memoizedState}function Ui(e,t,n,r){var o=Ci();hi.flags|=e,o.memoizedState=Mi(1|t,n,void 0,void 0===r?null:r)}function $i(e,t,n,r){var o=zi();r=void 0===r?null:r;var a=void 0;if(null!==gi){var i=gi.memoizedState;if(a=i.destroy,null!==r&&Si(r,i.deps))return void(o.memoizedState=Mi(t,n,a,r))}hi.flags|=e,o.memoizedState=Mi(1|t,n,a,r)}function qi(e,t){return Ui(8390656,8,e,t)}function Wi(e,t){return $i(2048,8,e,t)}function Hi(e,t){return $i(4,2,e,t)}function Gi(e,t){return $i(4,4,e,t)}function Vi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Yi(e,t,n){return n=null!=n?n.concat([e]):null,$i(4,4,Vi.bind(null,t,e),n)}function Qi(){}function Ki(e,t){var n=zi();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Si(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Xi(e,t){var n=zi();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Si(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Zi(e,t,n){return 0==(21&mi)?(e.baseState&&(e.baseState=!1,ws=!0),e.memoizedState=n):(sr(n,t)||(n=ht(),hi.lanes|=n,Il|=n,e.baseState=!0),t)}function Ji(e,t){var n=vt;vt=0!==n&&4>n?n:4,e(!0);var r=fi.transition;fi.transition={};try{e(!1),t()}finally{vt=n,fi.transition=r}}function es(){return zi().memoizedState}function ts(e,t,n){var r=nc(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},rs(e))os(t,n);else if(null!==(n=La(e,t,n,r))){rc(n,e,r,tc()),as(n,t,r)}}function ns(e,t,n){var r=nc(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(rs(e))os(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=a(i,n);if(o.hasEagerState=!0,o.eagerState=s,sr(s,i)){var l=t.interleaved;return null===l?(o.next=o,Ta(t)):(o.next=l.next,l.next=o),void(t.interleaved=o)}}catch(c){}null!==(n=La(e,t,o,r))&&(rc(n,e,r,o=tc()),as(n,t,r))}}function rs(e){var t=e.alternate;return e===hi||null!==t&&t===hi}function os(e,t){vi=yi=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function as(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}var is={readContext:Ca,useCallback:ki,useContext:ki,useEffect:ki,useImperativeHandle:ki,useInsertionEffect:ki,useLayoutEffect:ki,useMemo:ki,useReducer:ki,useRef:ki,useState:ki,useDebugValue:ki,useDeferredValue:ki,useTransition:ki,useMutableSource:ki,useSyncExternalStore:ki,useId:ki,unstable_isNewReconciler:!1},ss={readContext:Ca,useCallback:function(e,t){return Ci().memoizedState=[e,void 0===t?null:t],e},useContext:Ca,useEffect:qi,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,Ui(4194308,4,Vi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Ui(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ui(4,2,e,t)},useMemo:function(e,t){var n=Ci();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Ci();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=ts.bind(null,hi,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Ci().memoizedState=e},useState:Oi,useDebugValue:Qi,useDeferredValue:function(e){return Ci().memoizedState=e},useTransition:function(){var e=Oi(!1),t=e[0];return e=Ji.bind(null,e[1]),Ci().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=hi,o=Ci();if(aa){if(void 0===n)throw Error(a(407));n=n()}else{if(n=t(),null===jl)throw Error(a(349));0!=(30&mi)||Pi(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,qi(Ri.bind(null,r,i,e),[e]),r.flags|=2048,Mi(9,Ni.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=Ci(),t=jl.identifierPrefix;if(aa){var n=Zo;t=":"+t+"R"+(n=(Xo&~(1<<32-it(Xo)-1)).toString(32)+n),0<(n=wi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=xi++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},ls={readContext:Ca,useCallback:Ki,useContext:Ca,useEffect:Wi,useImperativeHandle:Yi,useInsertionEffect:Hi,useLayoutEffect:Gi,useMemo:Xi,useReducer:Li,useRef:Bi,useState:function(){return Li(Ti)},useDebugValue:Qi,useDeferredValue:function(e){return Zi(zi(),gi.memoizedState,e)},useTransition:function(){return[Li(Ti)[0],zi().memoizedState]},useMutableSource:Ai,useSyncExternalStore:Fi,useId:es,unstable_isNewReconciler:!1},cs={readContext:Ca,useCallback:Ki,useContext:Ca,useEffect:Wi,useImperativeHandle:Yi,useInsertionEffect:Hi,useLayoutEffect:Gi,useMemo:Xi,useReducer:ji,useRef:Bi,useState:function(){return ji(Ti)},useDebugValue:Qi,useDeferredValue:function(e){var t=zi();return null===gi?t.memoizedState=e:Zi(t,gi.memoizedState,e)},useTransition:function(){return[ji(Ti)[0],zi().memoizedState]},useMutableSource:Ai,useSyncExternalStore:Fi,useId:es,unstable_isNewReconciler:!1};function us(e,t){try{var n="",r=t;do{n+=U(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o,digest:null}}function ds(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function ps(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var fs="function"==typeof WeakMap?WeakMap:Map;function ms(e,t,n){(n=Na(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Hl||(Hl=!0,Gl=r),ps(0,t)},n}function hs(e,t,n){(n=Na(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){ps(0,t)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){ps(0,t),"function"!=typeof r&&(null===Vl?Vl=new Set([this]):Vl.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function gs(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new fs;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=Cc.bind(null,e,t,n),t.then(e,e))}function bs(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function ys(e,t,n,r,o){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=Na(-1,1)).tag=2,Ra(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var vs=w.ReactCurrentOwner,ws=!1;function xs(e,t,n,r){t.child=null===e?Za(t,null,n,r):Xa(t,e.child,n,r)}function ks(e,t,n,r,o){n=n.render;var a=t.ref;return _a(t,o),r=Ei(e,t,n,r,a,o),n=_i(),null===e||ws?(aa&&n&&ta(t),t.flags|=1,xs(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Hs(e,t,o))}function Ss(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||Pc(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Rc(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,Es(e,t,a,r,o))}if(a=e.child,0==(e.lanes&o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:lr)(i,r)&&e.ref===t.ref)return Hs(e,t,o)}return t.flags|=1,(e=Nc(a,r)).ref=t.ref,e.return=t,t.child=e}function Es(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(lr(a,r)&&e.ref===t.ref){if(ws=!1,t.pendingProps=r=a,0==(e.lanes&o))return t.lanes=e.lanes,Hs(e,t,o);0!=(131072&e.flags)&&(ws=!0)}}return zs(e,t,n,r,o)}function _s(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},zo(Nl,Pl),Pl|=n;else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,zo(Nl,Pl),Pl|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:n,zo(Nl,Pl),Pl|=r}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,zo(Nl,Pl),Pl|=r;return xs(e,t,o,n),t.child}function Cs(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function zs(e,t,n,r,o){var a=Po(n)?Ao:Lo.current;return a=Fo(t,a),_a(t,o),n=Ei(e,t,n,r,a,o),r=_i(),null===e||ws?(aa&&r&&ta(t),t.flags|=1,xs(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Hs(e,t,o))}function Ts(e,t,n,r,o){if(Po(n)){var a=!0;Io(t)}else a=!1;if(_a(t,o),null===t.stateNode)Ws(e,t),Wa(t,n,r),Ga(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,c=n.contextType;"object"==typeof c&&null!==c?c=Ca(c):c=Fo(t,c=Po(n)?Ao:Lo.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==r||l!==c)&&Ha(t,i,r,c),Aa=!1;var p=t.memoizedState;i.state=p,Oa(t,r,i,o),l=t.memoizedState,s!==r||p!==l||jo.current||Aa?("function"==typeof u&&(Ua(t,n,u,r),l=t.memoizedState),(s=Aa||qa(t,n,s,r,p,l,c))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,Pa(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:ba(t.type,s),i.props=c,d=t.pendingProps,p=i.context,"object"==typeof(l=n.contextType)&&null!==l?l=Ca(l):l=Fo(t,l=Po(n)?Ao:Lo.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||p!==l)&&Ha(t,i,r,l),Aa=!1,p=t.memoizedState,i.state=p,Oa(t,r,i,o);var m=t.memoizedState;s!==d||p!==m||jo.current||Aa?("function"==typeof f&&(Ua(t,n,f,r),m=t.memoizedState),(c=Aa||qa(t,n,c,r,p,m,l)||!1)?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,l),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,l)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=l,r=c):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return Ls(e,t,n,r,a,o)}function Ls(e,t,n,r,o,a){Cs(e,t);var i=0!=(128&t.flags);if(!r&&!i)return o&&Oo(t,n,!1),Hs(e,t,a);r=t.stateNode,vs.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Xa(t,e.child,null,a),t.child=Xa(t,null,s,a)):xs(e,t,s,a),t.memoizedState=r.state,o&&Oo(t,n,!0),t.child}function js(e){var t=e.stateNode;t.pendingContext?Ro(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Ro(0,t.context,!1),oi(e,t.containerInfo)}function As(e,t,n,r,o){return ma(),ha(o),t.flags|=256,xs(e,t,n,r),t.child}var Fs,Ps,Ns,Rs,Ds={dehydrated:null,treeContext:null,retryLane:0};function Is(e){return{baseLanes:e,cachePool:null,transitions:null}}function Os(e,t,n){var r,o=t.pendingProps,i=li.current,s=!1,l=0!=(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&0!=(2&i)),r?(s=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),zo(li,1&i),null===e)return ua(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(l=o.children,e=o.fallback,s?(o=t.mode,s=t.child,l={mode:"hidden",children:l},0==(1&o)&&null!==s?(s.childLanes=0,s.pendingProps=l):s=Ic(l,o,0,null),e=Dc(e,o,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Is(n),t.memoizedState=Ds,e):Ms(t,l));if(null!==(i=e.memoizedState)&&null!==(r=i.dehydrated))return function(e,t,n,r,o,i,s){if(n)return 256&t.flags?(t.flags&=-257,Bs(e,t,s,r=ds(Error(a(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=r.fallback,o=t.mode,r=Ic({mode:"visible",children:r.children},o,0,null),(i=Dc(i,o,s,null)).flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,0!=(1&t.mode)&&Xa(t,e.child,null,s),t.child.memoizedState=Is(s),t.memoizedState=Ds,i);if(0==(1&t.mode))return Bs(e,t,s,null);if("$!"===o.data){if(r=o.nextSibling&&o.nextSibling.dataset)var l=r.dgst;return r=l,Bs(e,t,s,r=ds(i=Error(a(419)),r,void 0))}if(l=0!=(s&e.childLanes),ws||l){if(null!==(r=jl)){switch(s&-s){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!=(o&(r.suspendedLanes|s))?0:o)&&o!==i.retryLane&&(i.retryLane=o,ja(e,o),rc(r,e,o,-1))}return gc(),Bs(e,t,s,r=ds(Error(a(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=Tc.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,oa=co(o.nextSibling),ra=t,aa=!0,ia=null,null!==e&&(Yo[Qo++]=Xo,Yo[Qo++]=Zo,Yo[Qo++]=Ko,Xo=e.id,Zo=e.overflow,Ko=t),t=Ms(t,r.children),t.flags|=4096,t)}(e,t,l,o,r,i,n);if(s){s=o.fallback,l=t.mode,r=(i=e.child).sibling;var c={mode:"hidden",children:o.children};return 0==(1&l)&&t.child!==i?((o=t.child).childLanes=0,o.pendingProps=c,t.deletions=null):(o=Nc(i,c)).subtreeFlags=14680064&i.subtreeFlags,null!==r?s=Nc(r,s):(s=Dc(s,l,n,null)).flags|=2,s.return=t,o.return=t,o.sibling=s,t.child=o,o=s,s=t.child,l=null===(l=e.child.memoizedState)?Is(n):{baseLanes:l.baseLanes|n,cachePool:null,transitions:l.transitions},s.memoizedState=l,s.childLanes=e.childLanes&~n,t.memoizedState=Ds,o}return e=(s=e.child).sibling,o=Nc(s,{mode:"visible",children:o.children}),0==(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function Ms(e,t){return(t=Ic({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function Bs(e,t,n,r){return null!==r&&ha(r),Xa(t,e.child,null,n),(e=Ms(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Us(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),Ea(e.return,t,n)}function $s(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function qs(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(xs(e,t,r.children,n),0!=(2&(r=li.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Us(e,n,t);else if(19===e.tag)Us(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(zo(li,r),0==(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===ci(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),$s(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===ci(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}$s(t,!0,n,null,a);break;case"together":$s(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Ws(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Hs(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Il|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=Nc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Nc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Gs(e,t){if(!aa)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Vs(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=14680064&o.subtreeFlags,r|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Ys(e,t,n){var r=t.pendingProps;switch(na(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Vs(t),null;case 1:case 17:return Po(t.type)&&No(),Vs(t),null;case 3:return r=t.stateNode,ai(),Co(jo),Co(Lo),di(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(pa(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==ia&&(sc(ia),ia=null))),Ps(e,t),Vs(t),null;case 5:si(t);var o=ri(ni.current);if(n=t.type,null!==e&&null!=t.stateNode)Ns(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(a(166));return Vs(t),null}if(e=ri(ei.current),pa(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[fo]=t,r[mo]=i,e=0!=(1&t.mode),n){case"dialog":Mr("cancel",r),Mr("close",r);break;case"iframe":case"object":case"embed":Mr("load",r);break;case"video":case"audio":for(o=0;o<Rr.length;o++)Mr(Rr[o],r);break;case"source":Mr("error",r);break;case"img":case"image":case"link":Mr("error",r),Mr("load",r);break;case"details":Mr("toggle",r);break;case"input":K(r,i),Mr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!i.multiple},Mr("invalid",r);break;case"textarea":oe(r,i),Mr("invalid",r)}for(var l in ye(n,i),o=null,i)if(i.hasOwnProperty(l)){var c=i[l];"children"===l?"string"==typeof c?r.textContent!==c&&(!0!==i.suppressHydrationWarning&&Zr(r.textContent,c,e),o=["children",c]):"number"==typeof c&&r.textContent!==""+c&&(!0!==i.suppressHydrationWarning&&Zr(r.textContent,c,e),o=["children",""+c]):s.hasOwnProperty(l)&&null!=c&&"onScroll"===l&&Mr("scroll",r)}switch(n){case"input":G(r),J(r,i,!0);break;case"textarea":G(r),ie(r);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(r.onclick=Jr)}r=o,t.updateQueue=r,null!==r&&(t.flags|=4)}else{l=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=se(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=l.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),"select"===n&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[fo]=t,e[mo]=r,Fs(e,t,!1,!1),t.stateNode=e;e:{switch(l=ve(n,r),n){case"dialog":Mr("cancel",e),Mr("close",e),o=r;break;case"iframe":case"object":case"embed":Mr("load",e),o=r;break;case"video":case"audio":for(o=0;o<Rr.length;o++)Mr(Rr[o],e);o=r;break;case"source":Mr("error",e),o=r;break;case"img":case"image":case"link":Mr("error",e),Mr("load",e),o=r;break;case"details":Mr("toggle",e),o=r;break;case"input":K(e,r),o=Q(e,r),Mr("invalid",e);break;case"option":default:o=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=I({},r,{value:void 0}),Mr("invalid",e);break;case"textarea":oe(e,r),o=re(e,r),Mr("invalid",e)}for(i in ye(n,o),c=o)if(c.hasOwnProperty(i)){var u=c[i];"style"===i?ge(e,u):"dangerouslySetInnerHTML"===i?null!=(u=u?u.__html:void 0)&&de(e,u):"children"===i?"string"==typeof u?("textarea"!==n||""!==u)&&pe(e,u):"number"==typeof u&&pe(e,""+u):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(s.hasOwnProperty(i)?null!=u&&"onScroll"===i&&Mr("scroll",e):null!=u&&v(e,i,u,l))}switch(n){case"input":G(e),J(e,r,!1);break;case"textarea":G(e),ie(e);break;case"option":null!=r.value&&e.setAttribute("value",""+W(r.value));break;case"select":e.multiple=!!r.multiple,null!=(i=r.value)?ne(e,!!r.multiple,i,!1):null!=r.defaultValue&&ne(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=Jr)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return Vs(t),null;case 6:if(e&&null!=t.stateNode)Rs(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));if(n=ri(ni.current),ri(ei.current),pa(t)){if(r=t.stateNode,n=t.memoizedProps,r[fo]=t,(i=r.nodeValue!==n)&&null!==(e=ra))switch(e.tag){case 3:Zr(r.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Zr(r.nodeValue,n,0!=(1&e.mode))}i&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[fo]=t,t.stateNode=r}return Vs(t),null;case 13:if(Co(li),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(aa&&null!==oa&&0!=(1&t.mode)&&0==(128&t.flags))fa(),ma(),t.flags|=98560,i=!1;else if(i=pa(t),null!==r&&null!==r.dehydrated){if(null===e){if(!i)throw Error(a(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(a(317));i[fo]=t}else ma(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;Vs(t),i=!1}else null!==ia&&(sc(ia),ia=null),i=!0;if(!i)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=n,t):((r=null!==r)!==(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&li.current)?0===Rl&&(Rl=3):gc())),null!==t.updateQueue&&(t.flags|=4),Vs(t),null);case 4:return ai(),Ps(e,t),null===e&&$r(t.stateNode.containerInfo),Vs(t),null;case 10:return Sa(t.type._context),Vs(t),null;case 19:if(Co(li),null===(i=t.memoizedState))return Vs(t),null;if(r=0!=(128&t.flags),null===(l=i.rendering))if(r)Gs(i,!1);else{if(0!==Rl||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(l=ci(e))){for(t.flags|=128,Gs(i,!1),null!==(r=l.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)e=r,(i=n).flags&=14680066,null===(l=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=l.childLanes,i.lanes=l.lanes,i.child=l.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=l.memoizedProps,i.memoizedState=l.memoizedState,i.updateQueue=l.updateQueue,i.type=l.type,e=l.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return zo(li,1&li.current|2),t.child}e=e.sibling}null!==i.tail&&Xe()>ql&&(t.flags|=128,r=!0,Gs(i,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ci(l))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Gs(i,!0),null===i.tail&&"hidden"===i.tailMode&&!l.alternate&&!aa)return Vs(t),null}else 2*Xe()-i.renderingStartTime>ql&&1073741824!==n&&(t.flags|=128,r=!0,Gs(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=i.last)?n.sibling=l:t.child=l,i.last=l)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Xe(),t.sibling=null,n=li.current,zo(li,r?1&n|2:1&n),t):(Vs(t),null);case 22:case 23:return pc(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&Pl)&&(Vs(t),6&t.subtreeFlags&&(t.flags|=8192)):Vs(t),null;case 24:case 25:return null}throw Error(a(156,t.tag))}function Qs(e,t){switch(na(t),t.tag){case 1:return Po(t.type)&&No(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return ai(),Co(jo),Co(Lo),di(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return si(t),null;case 13:if(Co(li),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(a(340));ma()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Co(li),null;case 4:return ai(),null;case 10:return Sa(t.type._context),null;case 22:case 23:return pc(),null;default:return null}}Fs=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Ps=function(){},Ns=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,ri(ei.current);var a,i=null;switch(n){case"input":o=Q(e,o),r=Q(e,r),i=[];break;case"select":o=I({},o,{value:void 0}),r=I({},r,{value:void 0}),i=[];break;case"textarea":o=re(e,o),r=re(e,r),i=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(u in ye(n,r),n=null,o)if(!r.hasOwnProperty(u)&&o.hasOwnProperty(u)&&null!=o[u])if("style"===u){var l=o[u];for(a in l)l.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(s.hasOwnProperty(u)?i||(i=[]):(i=i||[]).push(u,null));for(u in r){var c=r[u];if(l=null!=o?o[u]:void 0,r.hasOwnProperty(u)&&c!==l&&(null!=c||null!=l))if("style"===u)if(l){for(a in l)!l.hasOwnProperty(a)||c&&c.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in c)c.hasOwnProperty(a)&&l[a]!==c[a]&&(n||(n={}),n[a]=c[a])}else n||(i||(i=[]),i.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(i=i||[]).push(u,c)):"children"===u?"string"!=typeof c&&"number"!=typeof c||(i=i||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(s.hasOwnProperty(u)?(null!=c&&"onScroll"===u&&Mr("scroll",e),i||l===c||(i=[])):(i=i||[]).push(u,c))}n&&(i=i||[]).push("style",n);var u=i;(t.updateQueue=u)&&(t.flags|=4)}},Rs=function(e,t,n,r){n!==r&&(t.flags|=4)};var Ks=!1,Xs=!1,Zs="function"==typeof WeakSet?WeakSet:Set,Js=null;function el(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(r){_c(e,t,r)}else n.current=null}function tl(e,t,n){try{n()}catch(r){_c(e,t,r)}}var nl=!1;function rl(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var o=r=r.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,void 0!==a&&tl(t,n,a)}o=o.next}while(o!==r)}}function ol(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function al(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function il(e){var t=e.alternate;null!==t&&(e.alternate=null,il(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[fo],delete t[mo],delete t[go],delete t[bo],delete t[yo])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function sl(e){return 5===e.tag||3===e.tag||4===e.tag}function ll(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||sl(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function cl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Jr));else if(4!==r&&null!==(e=e.child))for(cl(e,t,n),e=e.sibling;null!==e;)cl(e,t,n),e=e.sibling}function ul(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(ul(e,t,n),e=e.sibling;null!==e;)ul(e,t,n),e=e.sibling}var dl=null,pl=!1;function fl(e,t,n){for(n=n.child;null!==n;)ml(e,t,n),n=n.sibling}function ml(e,t,n){if(at&&"function"==typeof at.onCommitFiberUnmount)try{at.onCommitFiberUnmount(ot,n)}catch(s){}switch(n.tag){case 5:Xs||el(n,t);case 6:var r=dl,o=pl;dl=null,fl(e,t,n),pl=o,null!==(dl=r)&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):dl.removeChild(n.stateNode));break;case 18:null!==dl&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?lo(e.parentNode,n):1===e.nodeType&&lo(e,n),$t(e)):lo(dl,n.stateNode));break;case 4:r=dl,o=pl,dl=n.stateNode.containerInfo,pl=!0,fl(e,t,n),dl=r,pl=o;break;case 0:case 11:case 14:case 15:if(!Xs&&(null!==(r=n.updateQueue)&&null!==(r=r.lastEffect))){o=r=r.next;do{var a=o,i=a.destroy;a=a.tag,void 0!==i&&(0!=(2&a)||0!=(4&a))&&tl(n,t,i),o=o.next}while(o!==r)}fl(e,t,n);break;case 1:if(!Xs&&(el(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){_c(n,t,s)}fl(e,t,n);break;case 21:fl(e,t,n);break;case 22:1&n.mode?(Xs=(r=Xs)||null!==n.memoizedState,fl(e,t,n),Xs=r):fl(e,t,n);break;default:fl(e,t,n)}}function hl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Zs),t.forEach((function(t){var r=Lc.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function gl(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r];try{var i=e,s=t,l=s;e:for(;null!==l;){switch(l.tag){case 5:dl=l.stateNode,pl=!1;break e;case 3:case 4:dl=l.stateNode.containerInfo,pl=!0;break e}l=l.return}if(null===dl)throw Error(a(160));ml(i,s,o),dl=null,pl=!1;var c=o.alternate;null!==c&&(c.return=null),o.return=null}catch(u){_c(o,t,u)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)bl(t,e),t=t.sibling}function bl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(gl(t,e),yl(e),4&r){try{rl(3,e,e.return),ol(3,e)}catch(g){_c(e,e.return,g)}try{rl(5,e,e.return)}catch(g){_c(e,e.return,g)}}break;case 1:gl(t,e),yl(e),512&r&&null!==n&&el(n,n.return);break;case 5:if(gl(t,e),yl(e),512&r&&null!==n&&el(n,n.return),32&e.flags){var o=e.stateNode;try{pe(o,"")}catch(g){_c(e,e.return,g)}}if(4&r&&null!=(o=e.stateNode)){var i=e.memoizedProps,s=null!==n?n.memoizedProps:i,l=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{"input"===l&&"radio"===i.type&&null!=i.name&&X(o,i),ve(l,s);var u=ve(l,i);for(s=0;s<c.length;s+=2){var d=c[s],p=c[s+1];"style"===d?ge(o,p):"dangerouslySetInnerHTML"===d?de(o,p):"children"===d?pe(o,p):v(o,d,p,u)}switch(l){case"input":Z(o,i);break;case"textarea":ae(o,i);break;case"select":var f=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!i.multiple;var m=i.value;null!=m?ne(o,!!i.multiple,m,!1):f!==!!i.multiple&&(null!=i.defaultValue?ne(o,!!i.multiple,i.defaultValue,!0):ne(o,!!i.multiple,i.multiple?[]:"",!1))}o[mo]=i}catch(g){_c(e,e.return,g)}}break;case 6:if(gl(t,e),yl(e),4&r){if(null===e.stateNode)throw Error(a(162));o=e.stateNode,i=e.memoizedProps;try{o.nodeValue=i}catch(g){_c(e,e.return,g)}}break;case 3:if(gl(t,e),yl(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{$t(t.containerInfo)}catch(g){_c(e,e.return,g)}break;case 4:default:gl(t,e),yl(e);break;case 13:gl(t,e),yl(e),8192&(o=e.child).flags&&(i=null!==o.memoizedState,o.stateNode.isHidden=i,!i||null!==o.alternate&&null!==o.alternate.memoizedState||($l=Xe())),4&r&&hl(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Xs=(u=Xs)||d,gl(t,e),Xs=u):gl(t,e),yl(e),8192&r){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!d&&0!=(1&e.mode))for(Js=e,d=e.child;null!==d;){for(p=Js=d;null!==Js;){switch(m=(f=Js).child,f.tag){case 0:case 11:case 14:case 15:rl(4,f,f.return);break;case 1:el(f,f.return);var h=f.stateNode;if("function"==typeof h.componentWillUnmount){r=f,n=f.return;try{t=r,h.props=t.memoizedProps,h.state=t.memoizedState,h.componentWillUnmount()}catch(g){_c(r,n,g)}}break;case 5:el(f,f.return);break;case 22:if(null!==f.memoizedState){kl(p);continue}}null!==m?(m.return=f,Js=m):kl(p)}d=d.sibling}e:for(d=null,p=e;;){if(5===p.tag){if(null===d){d=p;try{o=p.stateNode,u?"function"==typeof(i=o.style).setProperty?i.setProperty("display","none","important"):i.display="none":(l=p.stateNode,s=null!=(c=p.memoizedProps.style)&&c.hasOwnProperty("display")?c.display:null,l.style.display=he("display",s))}catch(g){_c(e,e.return,g)}}}else if(6===p.tag){if(null===d)try{p.stateNode.nodeValue=u?"":p.memoizedProps}catch(g){_c(e,e.return,g)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;d===p&&(d=null),p=p.return}d===p&&(d=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:gl(t,e),yl(e),4&r&&hl(e);case 21:}}function yl(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(sl(n)){var r=n;break e}n=n.return}throw Error(a(160))}switch(r.tag){case 5:var o=r.stateNode;32&r.flags&&(pe(o,""),r.flags&=-33),ul(e,ll(e),o);break;case 3:case 4:var i=r.stateNode.containerInfo;cl(e,ll(e),i);break;default:throw Error(a(161))}}catch(s){_c(e,e.return,s)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function vl(e,t,n){Js=e,wl(e,t,n)}function wl(e,t,n){for(var r=0!=(1&e.mode);null!==Js;){var o=Js,a=o.child;if(22===o.tag&&r){var i=null!==o.memoizedState||Ks;if(!i){var s=o.alternate,l=null!==s&&null!==s.memoizedState||Xs;s=Ks;var c=Xs;if(Ks=i,(Xs=l)&&!c)for(Js=o;null!==Js;)l=(i=Js).child,22===i.tag&&null!==i.memoizedState?Sl(o):null!==l?(l.return=i,Js=l):Sl(o);for(;null!==a;)Js=a,wl(a,t,n),a=a.sibling;Js=o,Ks=s,Xs=c}xl(e)}else 0!=(8772&o.subtreeFlags)&&null!==a?(a.return=o,Js=a):xl(e)}}function xl(e){for(;null!==Js;){var t=Js;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Xs||ol(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Xs)if(null===n)r.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:ba(t.type,n.memoizedProps);r.componentDidUpdate(o,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&Ma(t,i,r);break;case 3:var s=t.updateQueue;if(null!==s){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}Ma(t,s,n)}break;case 5:var l=t.stateNode;if(null===n&&4&t.flags){n=l;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&n.focus();break;case"img":c.src&&(n.src=c.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var d=u.memoizedState;if(null!==d){var p=d.dehydrated;null!==p&&$t(p)}}}break;default:throw Error(a(163))}Xs||512&t.flags&&al(t)}catch(f){_c(t,t.return,f)}}if(t===e){Js=null;break}if(null!==(n=t.sibling)){n.return=t.return,Js=n;break}Js=t.return}}function kl(e){for(;null!==Js;){var t=Js;if(t===e){Js=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Js=n;break}Js=t.return}}function Sl(e){for(;null!==Js;){var t=Js;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{ol(4,t)}catch(l){_c(t,n,l)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var o=t.return;try{r.componentDidMount()}catch(l){_c(t,o,l)}}var a=t.return;try{al(t)}catch(l){_c(t,a,l)}break;case 5:var i=t.return;try{al(t)}catch(l){_c(t,i,l)}}}catch(l){_c(t,t.return,l)}if(t===e){Js=null;break}var s=t.sibling;if(null!==s){s.return=t.return,Js=s;break}Js=t.return}}var El,_l=Math.ceil,Cl=w.ReactCurrentDispatcher,zl=w.ReactCurrentOwner,Tl=w.ReactCurrentBatchConfig,Ll=0,jl=null,Al=null,Fl=0,Pl=0,Nl=_o(0),Rl=0,Dl=null,Il=0,Ol=0,Ml=0,Bl=null,Ul=null,$l=0,ql=1/0,Wl=null,Hl=!1,Gl=null,Vl=null,Yl=!1,Ql=null,Kl=0,Xl=0,Zl=null,Jl=-1,ec=0;function tc(){return 0!=(6&Ll)?Xe():-1!==Jl?Jl:Jl=Xe()}function nc(e){return 0==(1&e.mode)?1:0!=(2&Ll)&&0!==Fl?Fl&-Fl:null!==ga.transition?(0===ec&&(ec=ht()),ec):0!==(e=vt)?e:e=void 0===(e=window.event)?16:Kt(e.type)}function rc(e,t,n,r){if(50<Xl)throw Xl=0,Zl=null,Error(a(185));bt(e,n,r),0!=(2&Ll)&&e===jl||(e===jl&&(0==(2&Ll)&&(Ol|=n),4===Rl&&lc(e,Fl)),oc(e,r),1===n&&0===Ll&&0==(1&t.mode)&&(ql=Xe()+500,Bo&&qo()))}function oc(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=e.pendingLanes;0<a;){var i=31-it(a),s=1<<i,l=o[i];-1===l?0!=(s&n)&&0==(s&r)||(o[i]=ft(s,t)):l<=t&&(e.expiredLanes|=s),a&=~s}}(e,t);var r=pt(e,e===jl?Fl:0);if(0===r)null!==n&&Ye(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&Ye(n),1===t)0===e.tag?function(e){Bo=!0,$o(e)}(cc.bind(null,e)):$o(cc.bind(null,e)),io((function(){0==(6&Ll)&&qo()})),n=null;else{switch(wt(r)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=rt}n=jc(n,ac.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function ac(e,t){if(Jl=-1,ec=0,0!=(6&Ll))throw Error(a(327));var n=e.callbackNode;if(Sc()&&e.callbackNode!==n)return null;var r=pt(e,e===jl?Fl:0);if(0===r)return null;if(0!=(30&r)||0!=(r&e.expiredLanes)||t)t=bc(e,r);else{t=r;var o=Ll;Ll|=2;var i=hc();for(jl===e&&Fl===t||(Wl=null,ql=Xe()+500,fc(e,t));;)try{vc();break}catch(l){mc(e,l)}ka(),Cl.current=i,Ll=o,null!==Al?t=0:(jl=null,Fl=0,t=Rl)}if(0!==t){if(2===t&&(0!==(o=mt(e))&&(r=o,t=ic(e,o))),1===t)throw n=Dl,fc(e,0),lc(e,r),oc(e,Xe()),n;if(6===t)lc(e,r);else{if(o=e.current.alternate,0==(30&r)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!sr(a(),o))return!1}catch(s){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)&&(2===(t=bc(e,r))&&(0!==(i=mt(e))&&(r=i,t=ic(e,i))),1===t))throw n=Dl,fc(e,0),lc(e,r),oc(e,Xe()),n;switch(e.finishedWork=o,e.finishedLanes=r,t){case 0:case 1:throw Error(a(345));case 2:case 5:kc(e,Ul,Wl);break;case 3:if(lc(e,r),(130023424&r)===r&&10<(t=$l+500-Xe())){if(0!==pt(e,0))break;if(((o=e.suspendedLanes)&r)!==r){tc(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=ro(kc.bind(null,e,Ul,Wl),t);break}kc(e,Ul,Wl);break;case 4:if(lc(e,r),(4194240&r)===r)break;for(t=e.eventTimes,o=-1;0<r;){var s=31-it(r);i=1<<s,(s=t[s])>o&&(o=s),r&=~i}if(r=o,10<(r=(120>(r=Xe()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*_l(r/1960))-r)){e.timeoutHandle=ro(kc.bind(null,e,Ul,Wl),r);break}kc(e,Ul,Wl);break;default:throw Error(a(329))}}}return oc(e,Xe()),e.callbackNode===n?ac.bind(null,e):null}function ic(e,t){var n=Bl;return e.current.memoizedState.isDehydrated&&(fc(e,t).flags|=256),2!==(e=bc(e,t))&&(t=Ul,Ul=n,null!==t&&sc(t)),e}function sc(e){null===Ul?Ul=e:Ul.push.apply(Ul,e)}function lc(e,t){for(t&=~Ml,t&=~Ol,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-it(t),r=1<<n;e[n]=-1,t&=~r}}function cc(e){if(0!=(6&Ll))throw Error(a(327));Sc();var t=pt(e,0);if(0==(1&t))return oc(e,Xe()),null;var n=bc(e,t);if(0!==e.tag&&2===n){var r=mt(e);0!==r&&(t=r,n=ic(e,r))}if(1===n)throw n=Dl,fc(e,0),lc(e,t),oc(e,Xe()),n;if(6===n)throw Error(a(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,kc(e,Ul,Wl),oc(e,Xe()),null}function uc(e,t){var n=Ll;Ll|=1;try{return e(t)}finally{0===(Ll=n)&&(ql=Xe()+500,Bo&&qo())}}function dc(e){null!==Ql&&0===Ql.tag&&0==(6&Ll)&&Sc();var t=Ll;Ll|=1;var n=Tl.transition,r=vt;try{if(Tl.transition=null,vt=1,e)return e()}finally{vt=r,Tl.transition=n,0==(6&(Ll=t))&&qo()}}function pc(){Pl=Nl.current,Co(Nl)}function fc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,oo(n)),null!==Al)for(n=Al.return;null!==n;){var r=n;switch(na(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&No();break;case 3:ai(),Co(jo),Co(Lo),di();break;case 5:si(r);break;case 4:ai();break;case 13:case 19:Co(li);break;case 10:Sa(r.type._context);break;case 22:case 23:pc()}n=n.return}if(jl=e,Al=e=Nc(e.current,null),Fl=Pl=t,Rl=0,Dl=null,Ml=Ol=Il=0,Ul=Bl=null,null!==za){for(t=0;t<za.length;t++)if(null!==(r=(n=za[t]).interleaved)){n.interleaved=null;var o=r.next,a=n.pending;if(null!==a){var i=a.next;a.next=o,r.next=i}n.pending=r}za=null}return e}function mc(e,t){for(;;){var n=Al;try{if(ka(),pi.current=is,yi){for(var r=hi.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}yi=!1}if(mi=0,bi=gi=hi=null,vi=!1,wi=0,zl.current=null,null===n||null===n.return){Rl=1,Dl=t,Al=null;break}e:{var i=e,s=n.return,l=n,c=t;if(t=Fl,l.flags|=32768,null!==c&&"object"==typeof c&&"function"==typeof c.then){var u=c,d=l,p=d.tag;if(0==(1&d.mode)&&(0===p||11===p||15===p)){var f=d.alternate;f?(d.updateQueue=f.updateQueue,d.memoizedState=f.memoizedState,d.lanes=f.lanes):(d.updateQueue=null,d.memoizedState=null)}var m=bs(s);if(null!==m){m.flags&=-257,ys(m,s,l,0,t),1&m.mode&&gs(i,u,t),c=u;var h=(t=m).updateQueue;if(null===h){var g=new Set;g.add(c),t.updateQueue=g}else h.add(c);break e}if(0==(1&t)){gs(i,u,t),gc();break e}c=Error(a(426))}else if(aa&&1&l.mode){var b=bs(s);if(null!==b){0==(65536&b.flags)&&(b.flags|=256),ys(b,s,l,0,t),ha(us(c,l));break e}}i=c=us(c,l),4!==Rl&&(Rl=2),null===Bl?Bl=[i]:Bl.push(i),i=s;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,Ia(i,ms(0,c,t));break e;case 1:l=c;var y=i.type,v=i.stateNode;if(0==(128&i.flags)&&("function"==typeof y.getDerivedStateFromError||null!==v&&"function"==typeof v.componentDidCatch&&(null===Vl||!Vl.has(v)))){i.flags|=65536,t&=-t,i.lanes|=t,Ia(i,hs(i,l,t));break e}}i=i.return}while(null!==i)}xc(n)}catch(w){t=w,Al===n&&null!==n&&(Al=n=n.return);continue}break}}function hc(){var e=Cl.current;return Cl.current=is,null===e?is:e}function gc(){0!==Rl&&3!==Rl&&2!==Rl||(Rl=4),null===jl||0==(268435455&Il)&&0==(268435455&Ol)||lc(jl,Fl)}function bc(e,t){var n=Ll;Ll|=2;var r=hc();for(jl===e&&Fl===t||(Wl=null,fc(e,t));;)try{yc();break}catch(o){mc(e,o)}if(ka(),Ll=n,Cl.current=r,null!==Al)throw Error(a(261));return jl=null,Fl=0,Rl}function yc(){for(;null!==Al;)wc(Al)}function vc(){for(;null!==Al&&!Qe();)wc(Al)}function wc(e){var t=El(e.alternate,e,Pl);e.memoizedProps=e.pendingProps,null===t?xc(e):Al=t,zl.current=null}function xc(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=Ys(n,t,Pl)))return void(Al=n)}else{if(null!==(n=Qs(n,t)))return n.flags&=32767,void(Al=n);if(null===e)return Rl=6,void(Al=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Al=t);Al=t=e}while(null!==t);0===Rl&&(Rl=5)}function kc(e,t,n){var r=vt,o=Tl.transition;try{Tl.transition=null,vt=1,function(e,t,n,r){do{Sc()}while(null!==Ql);if(0!=(6&Ll))throw Error(a(327));n=e.finishedWork;var o=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackPriority=0;var i=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-it(n),a=1<<o;t[o]=0,r[o]=-1,e[o]=-1,n&=~a}}(e,i),e===jl&&(Al=jl=null,Fl=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||Yl||(Yl=!0,jc(tt,(function(){return Sc(),null}))),i=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||i){i=Tl.transition,Tl.transition=null;var s=vt;vt=1;var l=Ll;Ll|=4,zl.current=null,function(e,t){if(eo=Wt,fr(e=pr())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch(x){n=null;break e}var s=0,l=-1,c=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var m;p!==n||0!==o&&3!==p.nodeType||(l=s+o),p!==i||0!==r&&3!==p.nodeType||(c=s+r),3===p.nodeType&&(s+=p.nodeValue.length),null!==(m=p.firstChild);)f=p,p=m;for(;;){if(p===e)break t;if(f===n&&++u===o&&(l=s),f===i&&++d===r&&(c=s),null!==(m=p.nextSibling))break;f=(p=f).parentNode}p=m}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(to={focusedElem:e,selectionRange:n},Wt=!1,Js=t;null!==Js;)if(e=(t=Js).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,Js=e;else for(;null!==Js;){t=Js;try{var h=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==h){var g=h.memoizedProps,b=h.memoizedState,y=t.stateNode,v=y.getSnapshotBeforeUpdate(t.elementType===t.type?g:ba(t.type,g),b);y.__reactInternalSnapshotBeforeUpdate=v}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(a(163))}}catch(x){_c(t,t.return,x)}if(null!==(e=t.sibling)){e.return=t.return,Js=e;break}Js=t.return}h=nl,nl=!1}(e,n),bl(n,e),mr(to),Wt=!!eo,to=eo=null,e.current=n,vl(n,e,o),Ke(),Ll=l,vt=s,Tl.transition=i}else e.current=n;if(Yl&&(Yl=!1,Ql=e,Kl=o),i=e.pendingLanes,0===i&&(Vl=null),function(e){if(at&&"function"==typeof at.onCommitFiberRoot)try{at.onCommitFiberRoot(ot,e,void 0,128==(128&e.current.flags))}catch(t){}}(n.stateNode),oc(e,Xe()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)o=t[n],r(o.value,{componentStack:o.stack,digest:o.digest});if(Hl)throw Hl=!1,e=Gl,Gl=null,e;0!=(1&Kl)&&0!==e.tag&&Sc(),i=e.pendingLanes,0!=(1&i)?e===Zl?Xl++:(Xl=0,Zl=e):Xl=0,qo()}(e,t,n,r)}finally{Tl.transition=o,vt=r}return null}function Sc(){if(null!==Ql){var e=wt(Kl),t=Tl.transition,n=vt;try{if(Tl.transition=null,vt=16>e?16:e,null===Ql)var r=!1;else{if(e=Ql,Ql=null,Kl=0,0!=(6&Ll))throw Error(a(331));var o=Ll;for(Ll|=4,Js=e.current;null!==Js;){var i=Js,s=i.child;if(0!=(16&Js.flags)){var l=i.deletions;if(null!==l){for(var c=0;c<l.length;c++){var u=l[c];for(Js=u;null!==Js;){var d=Js;switch(d.tag){case 0:case 11:case 15:rl(8,d,i)}var p=d.child;if(null!==p)p.return=d,Js=p;else for(;null!==Js;){var f=(d=Js).sibling,m=d.return;if(il(d),d===u){Js=null;break}if(null!==f){f.return=m,Js=f;break}Js=m}}}var h=i.alternate;if(null!==h){var g=h.child;if(null!==g){h.child=null;do{var b=g.sibling;g.sibling=null,g=b}while(null!==g)}}Js=i}}if(0!=(2064&i.subtreeFlags)&&null!==s)s.return=i,Js=s;else e:for(;null!==Js;){if(0!=(2048&(i=Js).flags))switch(i.tag){case 0:case 11:case 15:rl(9,i,i.return)}var y=i.sibling;if(null!==y){y.return=i.return,Js=y;break e}Js=i.return}}var v=e.current;for(Js=v;null!==Js;){var w=(s=Js).child;if(0!=(2064&s.subtreeFlags)&&null!==w)w.return=s,Js=w;else e:for(s=v;null!==Js;){if(0!=(2048&(l=Js).flags))try{switch(l.tag){case 0:case 11:case 15:ol(9,l)}}catch(k){_c(l,l.return,k)}if(l===s){Js=null;break e}var x=l.sibling;if(null!==x){x.return=l.return,Js=x;break e}Js=l.return}}if(Ll=o,qo(),at&&"function"==typeof at.onPostCommitFiberRoot)try{at.onPostCommitFiberRoot(ot,e)}catch(k){}r=!0}return r}finally{vt=n,Tl.transition=t}}return!1}function Ec(e,t,n){e=Ra(e,t=ms(0,t=us(n,t),1),1),t=tc(),null!==e&&(bt(e,1,t),oc(e,t))}function _c(e,t,n){if(3===e.tag)Ec(e,e,n);else for(;null!==t;){if(3===t.tag){Ec(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Vl||!Vl.has(r))){t=Ra(t,e=hs(t,e=us(n,e),1),1),e=tc(),null!==t&&(bt(t,1,e),oc(t,e));break}}t=t.return}}function Cc(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=tc(),e.pingedLanes|=e.suspendedLanes&n,jl===e&&(Fl&n)===n&&(4===Rl||3===Rl&&(130023424&Fl)===Fl&&500>Xe()-$l?fc(e,0):Ml|=n),oc(e,t)}function zc(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ut,0==(130023424&(ut<<=1))&&(ut=4194304)));var n=tc();null!==(e=ja(e,t))&&(bt(e,t,n),oc(e,n))}function Tc(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),zc(e,n)}function Lc(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(a(314))}null!==r&&r.delete(t),zc(e,n)}function jc(e,t){return Ve(e,t)}function Ac(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Fc(e,t,n,r){return new Ac(e,t,n,r)}function Pc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Nc(e,t){var n=e.alternate;return null===n?((n=Fc(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Rc(e,t,n,r,o,i){var s=2;if(r=e,"function"==typeof e)Pc(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case S:return Dc(n.children,o,i,t);case E:s=8,o|=8;break;case _:return(e=Fc(12,n,t,2|o)).elementType=_,e.lanes=i,e;case L:return(e=Fc(13,n,t,o)).elementType=L,e.lanes=i,e;case j:return(e=Fc(19,n,t,o)).elementType=j,e.lanes=i,e;case P:return Ic(n,o,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case C:s=10;break e;case z:s=9;break e;case T:s=11;break e;case A:s=14;break e;case F:s=16,r=null;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Fc(s,n,t,o)).elementType=e,t.type=r,t.lanes=i,t}function Dc(e,t,n,r){return(e=Fc(7,e,r,t)).lanes=n,e}function Ic(e,t,n,r){return(e=Fc(22,e,r,t)).elementType=P,e.lanes=n,e.stateNode={isHidden:!1},e}function Oc(e,t,n){return(e=Fc(6,e,null,t)).lanes=n,e}function Mc(e,t,n){return(t=Fc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Bc(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=gt(0),this.expirationTimes=gt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=gt(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Uc(e,t,n,r,o,a,i,s,l){return e=new Bc(e,t,n,s,l),1===t?(t=1,!0===a&&(t|=8)):t=0,a=Fc(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Fa(a),e}function $c(e){if(!e)return To;e:{if($e(e=e._reactInternals)!==e||1!==e.tag)throw Error(a(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Po(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(a(171))}if(1===e.tag){var n=e.type;if(Po(n))return Do(e,n,t)}return t}function qc(e,t,n,r,o,a,i,s,l){return(e=Uc(n,r,!0,e,0,a,0,s,l)).context=$c(null),n=e.current,(a=Na(r=tc(),o=nc(n))).callback=null!=t?t:null,Ra(n,a,o),e.current.lanes=o,bt(e,o,r),oc(e,r),e}function Wc(e,t,n,r){var o=t.current,a=tc(),i=nc(o);return n=$c(n),null===t.context?t.context=n:t.pendingContext=n,(t=Na(a,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=Ra(o,t,i))&&(rc(e,o,i,a),Da(e,o,i)),i}function Hc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Gc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Vc(e,t){Gc(e,t),(e=e.alternate)&&Gc(e,t)}El=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||jo.current)ws=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return ws=!1,function(e,t,n){switch(t.tag){case 3:js(t),ma();break;case 5:ii(t);break;case 1:Po(t.type)&&Io(t);break;case 4:oi(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,o=t.memoizedProps.value;zo(ya,r._currentValue),r._currentValue=o;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(zo(li,1&li.current),t.flags|=128,null):0!=(n&t.child.childLanes)?Os(e,t,n):(zo(li,1&li.current),null!==(e=Hs(e,t,n))?e.sibling:null);zo(li,1&li.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(128&e.flags)){if(r)return qs(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),zo(li,li.current),r)break;return null;case 22:case 23:return t.lanes=0,_s(e,t,n)}return Hs(e,t,n)}(e,t,n);ws=0!=(131072&e.flags)}else ws=!1,aa&&0!=(1048576&t.flags)&&ea(t,Vo,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Ws(e,t),e=t.pendingProps;var o=Fo(t,Lo.current);_a(t,n),o=Ei(null,t,r,e,o,n);var i=_i();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Po(r)?(i=!0,Io(t)):i=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,Fa(t),o.updater=$a,t.stateNode=o,o._reactInternals=t,Ga(t,r,e,n),t=Ls(null,t,r,!0,i,n)):(t.tag=0,aa&&i&&ta(t),xs(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Ws(e,t),e=t.pendingProps,r=(o=r._init)(r._payload),t.type=r,o=t.tag=function(e){if("function"==typeof e)return Pc(e)?1:0;if(null!=e){if((e=e.$$typeof)===T)return 11;if(e===A)return 14}return 2}(r),e=ba(r,e),o){case 0:t=zs(null,t,r,e,n);break e;case 1:t=Ts(null,t,r,e,n);break e;case 11:t=ks(null,t,r,e,n);break e;case 14:t=Ss(null,t,r,ba(r.type,e),n);break e}throw Error(a(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,zs(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 1:return r=t.type,o=t.pendingProps,Ts(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 3:e:{if(js(t),null===e)throw Error(a(387));r=t.pendingProps,o=(i=t.memoizedState).element,Pa(e,t),Oa(t,r,null,n);var s=t.memoizedState;if(r=s.element,i.isDehydrated){if(i={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=i,t.memoizedState=i,256&t.flags){t=As(e,t,r,n,o=us(Error(a(423)),t));break e}if(r!==o){t=As(e,t,r,n,o=us(Error(a(424)),t));break e}for(oa=co(t.stateNode.containerInfo.firstChild),ra=t,aa=!0,ia=null,n=Za(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ma(),r===o){t=Hs(e,t,n);break e}xs(e,t,r,n)}t=t.child}return t;case 5:return ii(t),null===e&&ua(t),r=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,s=o.children,no(r,o)?s=null:null!==i&&no(r,i)&&(t.flags|=32),Cs(e,t),xs(e,t,s,n),t.child;case 6:return null===e&&ua(t),null;case 13:return Os(e,t,n);case 4:return oi(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Xa(t,null,r,n):xs(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,ks(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 7:return xs(e,t,t.pendingProps,n),t.child;case 8:case 12:return xs(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,s=o.value,zo(ya,r._currentValue),r._currentValue=s,null!==i)if(sr(i.value,s)){if(i.children===o.children&&!jo.current){t=Hs(e,t,n);break e}}else for(null!==(i=t.child)&&(i.return=t);null!==i;){var l=i.dependencies;if(null!==l){s=i.child;for(var c=l.firstContext;null!==c;){if(c.context===r){if(1===i.tag){(c=Na(-1,n&-n)).tag=2;var u=i.updateQueue;if(null!==u){var d=(u=u.shared).pending;null===d?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}i.lanes|=n,null!==(c=i.alternate)&&(c.lanes|=n),Ea(i.return,n,t),l.lanes|=n;break}c=c.next}}else if(10===i.tag)s=i.type===t.type?null:i.child;else if(18===i.tag){if(null===(s=i.return))throw Error(a(341));s.lanes|=n,null!==(l=s.alternate)&&(l.lanes|=n),Ea(s,n,t),s=i.sibling}else s=i.child;if(null!==s)s.return=i;else for(s=i;null!==s;){if(s===t){s=null;break}if(null!==(i=s.sibling)){i.return=s.return,s=i;break}s=s.return}i=s}xs(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,_a(t,n),r=r(o=Ca(o)),t.flags|=1,xs(e,t,r,n),t.child;case 14:return o=ba(r=t.type,t.pendingProps),Ss(e,t,r,o=ba(r.type,o),n);case 15:return Es(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ba(r,o),Ws(e,t),t.tag=1,Po(r)?(e=!0,Io(t)):e=!1,_a(t,n),Wa(t,r,o),Ga(t,r,o,n),Ls(null,t,r,!0,e,n);case 19:return qs(e,t,n);case 22:return _s(e,t,n)}throw Error(a(156,t.tag))};var Yc="function"==typeof reportError?reportError:function(e){console.error(e)};function Qc(e){this._internalRoot=e}function Kc(e){this._internalRoot=e}function Xc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Zc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Jc(){}function eu(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a;if("function"==typeof o){var s=o;o=function(){var e=Hc(i);s.call(e)}}Wc(t,i,e,o)}else i=function(e,t,n,r,o){if(o){if("function"==typeof r){var a=r;r=function(){var e=Hc(i);a.call(e)}}var i=qc(t,r,e,0,null,!1,0,"",Jc);return e._reactRootContainer=i,e[ho]=i.current,$r(8===e.nodeType?e.parentNode:e),dc(),i}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof r){var s=r;r=function(){var e=Hc(l);s.call(e)}}var l=Uc(e,0,!1,null,0,!1,0,"",Jc);return e._reactRootContainer=l,e[ho]=l.current,$r(8===e.nodeType?e.parentNode:e),dc((function(){Wc(t,l,n,r)})),l}(n,t,e,o,r);return Hc(i)}Kc.prototype.render=Qc.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(a(409));Wc(e,t,null,null)},Kc.prototype.unmount=Qc.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;dc((function(){Wc(null,e,null,null)})),t[ho]=null}},Kc.prototype.unstable_scheduleHydration=function(e){if(e){var t=Et();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Pt.length&&0!==t&&t<Pt[n].priority;n++);Pt.splice(n,0,e),0===n&&It(e)}},xt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(yt(t,1|n),oc(t,Xe()),0==(6&Ll)&&(ql=Xe()+500,qo()))}break;case 13:dc((function(){var t=ja(e,1);if(null!==t){var n=tc();rc(t,e,1,n)}})),Vc(e,1)}},kt=function(e){if(13===e.tag){var t=ja(e,134217728);if(null!==t)rc(t,e,134217728,tc());Vc(e,134217728)}},St=function(e){if(13===e.tag){var t=nc(e),n=ja(e,t);if(null!==n)rc(n,e,t,tc());Vc(e,t)}},Et=function(){return vt},_t=function(e,t){var n=vt;try{return vt=e,t()}finally{vt=n}},ke=function(e,t,n){switch(t){case"input":if(Z(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=ko(r);if(!o)throw Error(a(90));V(r),Z(r,o)}}}break;case"textarea":ae(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Te=uc,Le=dc;var tu={usingClientEntryPoint:!1,Events:[wo,xo,ko,Ce,ze,uc]},nu={findFiberByHostInstance:vo,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},ru={bundleType:nu.bundleType,version:nu.version,rendererPackageName:nu.rendererPackageName,rendererConfig:nu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=He(e))?null:e.stateNode},findFiberByHostInstance:nu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ou=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ou.isDisabled&&ou.supportsFiber)try{ot=ou.inject(ru),at=ou}catch(ue){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tu,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Xc(t))throw Error(a(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.createRoot=function(e,t){if(!Xc(e))throw Error(a(299));var n=!1,r="",o=Yc;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=Uc(e,1,!1,null,0,n,0,r,o),e[ho]=t.current,$r(8===e.nodeType?e.parentNode:e),new Qc(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw e=Object.keys(e).join(","),Error(a(268,e))}return e=null===(e=He(t))?null:e.stateNode},t.flushSync=function(e){return dc(e)},t.hydrate=function(e,t,n){if(!Zc(t))throw Error(a(200));return eu(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Xc(e))throw Error(a(405));var r=null!=n&&n.hydratedSources||null,o=!1,i="",s=Yc;if(null!=n&&(!0===n.unstable_strictMode&&(o=!0),void 0!==n.identifierPrefix&&(i=n.identifierPrefix),void 0!==n.onRecoverableError&&(s=n.onRecoverableError)),t=qc(t,null,e,1,null!=n?n:null,o,0,i,s),e[ho]=t.current,$r(e),r)for(e=0;e<r.length;e++)o=(o=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o);return new Kc(t)},t.render=function(e,t,n){if(!Zc(t))throw Error(a(200));return eu(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Zc(e))throw Error(a(40));return!!e._reactRootContainer&&(dc((function(){eu(null,null,e,!1,(function(){e._reactRootContainer=null,e[ho]=null}))})),!0)},t.unstable_batchedUpdates=uc,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Zc(n))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return eu(e,t,n,!1,r)},t.version="18.2.0-next-9e3b772b8-20220608"},28352:(e,t,n)=>{"use strict";var r=n(97104);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},97104:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(79516)},20448:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var s,l,c,u;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(!a(e[l],i[l]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;for(u=e.entries();!(l=u.next()).done;)if(!a(l.value[1],i.get(l.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(e[l]!==i[l])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((s=(c=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(l=s;0!=l--;)if(!Object.prototype.hasOwnProperty.call(i,c[l]))return!1;if(t&&e instanceof Element)return!1;for(l=s;0!=l--;)if(("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!e.$$typeof)&&!a(e[c[l]],i[c[l]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},32160:(e,t,n)=>{"use strict";n.d(t,{EN:()=>H,So:()=>J});var r=n(11504),o=n(3268),a=n.n(o),i=n(20448),s=n.n(i),l=n(79328),c=n.n(l),u=n(21072),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},y={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),x={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},k=Object.keys(x).reduce((function(e,t){return e[x[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},E=function(e){var t=S(e,g.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=S(e,"defaultTitle");return t||r||void 0},_=function(e){return S(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},z=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},T=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var s=a[i],l=s.toLowerCase();-1===t.indexOf(l)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===l&&"stylesheet"===e[l].toLowerCase()||(n=l),-1===t.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(n=s)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][c]&&(o[n][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var s=a[i],l=p({},r[s],o[s]);r[s]=l}return e}),[]).reverse()},L=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},j=function(e){return Array.isArray(e)?e.join(""):e},A=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},F=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},P=[g.NOSCRIPT,g.SCRIPT,g.STYLE],N=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},R=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[x[n]||n]=e[n],t}),t)},I=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=x[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},O=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=D(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=R(n),a=j(t);return o?"<"+e+' data-rh="true" '+o+">"+N(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+N(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return R(t)}};default:return{toComponent:function(){return I(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+N(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===P.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},M=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,s=e.title,l=void 0===s?"":s,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=A(e.metaTags,v),a=A(t,b),i=A(n,y);return{priorityMethods:{toComponent:function(){return[].concat(I(g.META,o.priority),I(g.LINK,a.priority),I(g.SCRIPT,i.priority))},toString:function(){return O(g.META,o.priority,r)+" "+O(g.LINK,a.priority,r)+" "+O(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);f=m.priorityMethods,u=m.linkTags,d=m.metaTags,p=m.scriptTags}return{priority:f,base:O(g.BASE,t,r),bodyAttributes:O("bodyAttributes",n,r),htmlAttributes:O("htmlAttributes",o,r),link:O(g.LINK,u,r),meta:O(g.META,d,r),noscript:O(g.NOSCRIPT,a,r),script:O(g.SCRIPT,p,r),style:O(g.STYLE,i,r),title:O(g.TITLE,{title:l,titleAttributes:c},r)}},B=[],U=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?B:n.instances},add:function(e){(n.canUseDOM?B:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?B:n.instances).indexOf(e);(n.canUseDOM?B:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=M({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=r.createContext({}),q=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),W="undefined"!=typeof document,H=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new U(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);H.canUseDOM=W,H.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},H.defaultProps={context:{}},H.displayName="HelmetProvider";var G=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},V=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),s=0;s<i.length;s+=1){var l=i[s],c=t[l]||"";n.getAttribute(l)!==c&&n.setAttribute(l,c),-1===o.indexOf(l)&&o.push(l);var u=a.indexOf(l);-1!==u&&a.splice(u,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},Y=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,l=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;V(g.BODY,e.bodyAttributes),V(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=j(e)),V(g.TITLE,t)}(u,d);var p={baseTag:G(g.BASE,n),linkTags:G(g.LINK,o),metaTags:G(g.META,a),noscriptTags:G(g.NOSCRIPT,i),scriptTags:G(g.SCRIPT,l),styleTags:G(g.STYLE,c)},f={},m={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(m[e]=p[e].oldTags)})),t&&t(),s(e,f,m)},Q=null,K=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:z(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:S(e,"defer"),encode:S(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:T(g.LINK,["rel","href"],e),metaTags:T(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:T(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:_(e),scriptTags:T(g.SCRIPT,["src","innerHTML"],e),styleTags:T(g.STYLE,["cssText"],e),title:E(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:L(e,"prioritizeSeoTags")});H.canUseDOM?(t=a,Q&&cancelAnimationFrame(Q),t.defer?Q=requestAnimationFrame((function(){Y(t,(function(){Q=null}))})):(Y(t),Q=null)):M&&(o=M(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);K.propTypes={context:q.isRequired},K.displayName="HelmetDispatcher";var X=["children"],Z=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!s()(F(this.props,"helmetData"),F(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return p({},o,((t={})[r.type]=i,t.titleAttributes=p({},a),t));case g.BODY:return p({},o,{bodyAttributes:p({},a)});case g.HTML:return p({},o,{htmlAttributes:p({},a)});default:return p({},o,((n={})[r.type]=p({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=h(r,X),s=Object.keys(i).reduce((function(e,t){return e[k[t]||t]=i[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,a),l){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:s,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,Z),o=p({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof U||(a=new U(a.context,a.instances)),a?r.createElement(K,p({},o,{context:a.value,helmetData:void 0})):r.createElement($.Consumer,null,(function(e){return r.createElement(K,p({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},59764:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function x(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case g:case h:case l:return e;default:return t}}case o:return t}}}function k(e){return x(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return k(e)||x(e)===u},t.isConcurrentMode=k,t.isContextConsumer=function(e){return x(e)===c},t.isContextProvider=function(e){return x(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return x(e)===p},t.isFragment=function(e){return x(e)===a},t.isLazy=function(e){return x(e)===g},t.isMemo=function(e){return x(e)===h},t.isPortal=function(e){return x(e)===o},t.isProfiler=function(e){return x(e)===s},t.isStrictMode=function(e){return x(e)===i},t.isSuspense=function(e){return x(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===s||e===i||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===y||e.$$typeof===v||e.$$typeof===w||e.$$typeof===b)},t.typeOf=x},62168:(e,t,n)=>{"use strict";e.exports=n(59764)},98852:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var s=n(11504),l=n(3268),c=[],u=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return s.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return c.push(g),"function"==typeof m.webpack&&u.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),p=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?s.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(s.Component),a(d,"contextTypes",{loadable:l.shape({report:l.func.isRequired})}),p}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(p,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return s.Children.only(this.props.children)},t}(s.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}a(g,"propTypes",{report:l.func.isRequired}),a(g,"childContextTypes",{loadable:l.shape({report:l.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){b(c).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){b(u).then(e,e)}))},e.exports=h},85464:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,k:()=>s});var r=n(55592),o=n(86404),a=n(11504);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.ot)(t,e):n.length?n[n.length-1].match:r.E5.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.Wk,n,e.map((function(e,n){return a.createElement(r.kX,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.c)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.c)({},n,t,{route:e}))}})}))):null}},70440:(e,t,n)=>{"use strict";n.d(t,{Af:()=>v,cH:()=>g,kn:()=>u});var r=n(55592),o=n(39948),a=n(11504),i=n(58064),s=(n(3268),n(86404)),l=n(14384),c=n(66136),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.iU)(t.props),t}return(0,o.c)(t,e),t.prototype.render=function(){return a.createElement(r.E5,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,i.gh)(e,null,null,t):e},f=function(e){return e},m=a.forwardRef;void 0===m&&(m=f);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,l.c)(e,["innerRef","navigate","onClick"]),c=i.target,u=(0,s.c)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=f!==m&&t||n,a.createElement("a",u)}));var g=m((function(e,t){var n=e.component,o=void 0===n?h:n,u=e.replace,g=e.to,b=e.innerRef,y=(0,l.c)(e,["component","replace","to","innerRef"]);return a.createElement(r.Os.Consumer,null,(function(e){e||(0,c.c)(!1);var n=e.history,r=p(d(g,e.location),e.location),l=r?n.createHref(r):"",h=(0,s.c)({},y,{href:l,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(p(t));(u||r?n.replace:n.push)(t)}});return f!==m?h.ref=t||b:h.innerRef=b,a.createElement(o,h)}))})),b=function(e){return e},y=a.forwardRef;void 0===y&&(y=b);var v=y((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,u=void 0===i?"active":i,f=e.activeStyle,m=e.className,h=e.exact,v=e.isActive,w=e.location,x=e.sensitive,k=e.strict,S=e.style,E=e.to,_=e.innerRef,C=(0,l.c)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.Os.Consumer,null,(function(e){e||(0,c.c)(!1);var n=w||e.location,i=p(d(E,n),n),l=i.pathname,z=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),T=z?(0,r.ot)(n.pathname,{path:z,exact:h,sensitive:x,strict:k}):null,L=!!(v?v(T,n):T),j="function"==typeof m?m(L):m,A="function"==typeof S?S(L):S;L&&(j=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(j,u),A=(0,s.c)({},A,f));var F=(0,s.c)({"aria-current":L&&o||null,className:j,style:A,to:i},C);return b!==y?F.ref=t||_:F.innerRef=_,a.createElement(g,F)}))}))},55592:(e,t,n)=>{"use strict";n.d(t,{E5:()=>v,IT:()=>P,Os:()=>y,Uz:()=>F,Wk:()=>j,kX:()=>E,ot:()=>S});var r=n(39948),o=n(11504),a=n(3268),i=n.n(a),s=n(58064),l=n(66136),c=n(86404),u=n(58216),d=n.n(u),p=(n(62168),n(14384)),f=(n(84792),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=o.createContext||function(e,t){var n,a,s="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",l=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.c)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[s]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);l.childContextTypes=((n={})[s]=i().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.c)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},o.componentDidMount=function(){this.context[s]&&this.context[s].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},o.componentWillUnmount=function(){this.context[s]&&this.context[s].off(this.onUpdate)},o.getValue=function(){return this.context[s]?this.context[s].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return c.contextTypes=((a={})[s]=i().object,a),{Provider:l,Consumer:c}},g=function(e){var t=h();return t.displayName=e,t},b=g("Router-History"),y=g("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.c)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(y.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},x=1e4,k=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,s=void 0!==i&&i,l=n.sensitive,c=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return k<x&&(r[e]=a,k++),a}(n,{end:a,strict:s,sensitive:c}),o=r.regexp,i=r.keys,l=o.exec(e);if(!l)return null;var u=l[0],p=l.slice(1),f=e===u;return a&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:i.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var E=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.c)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,l.c)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,a=(0,c.c)({},t,{location:n,match:r}),i=e.props,s=i.children,u=i.component,d=i.render;return Array.isArray(s)&&function(e){return 0===o.Children.count(e)}(s)&&(s=null),o.createElement(y.Provider,{value:a},a.match?s?"function"==typeof s?s(a):s:u?o.createElement(u,a):d?d(a):null:"function"==typeof s?s(a):null)}))},t}(o.Component);function _(e){return"/"===e.charAt(0)?e:"/"+e}function C(e,t){if(!e)return t;var n=_(e);return 0!==t.pathname.indexOf(n)?t:(0,c.c)({},t,{pathname:t.pathname.substr(n.length)})}function z(e){return"string"==typeof e?e:(0,s.Ep)(e)}function T(e){return function(){(0,l.c)(!1)}}function L(){}o.Component;var j=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.c)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,l.c)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?S(a.pathname,(0,c.c)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var A=o.useContext;function F(){return A(b)}function P(){return A(y).location}},58216:(e,t,n)=>{var r=n(59600);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var m=e[i],h=n[2],g=n[3],b=n[4],y=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var x=null!=h&&null!=m&&m!==h,k="+"===v||"*"===v,S="?"===v||"*"===v,E=n[2]||u,_=b||y;r.push({name:g||a++,prefix:h||"",delimiter:E,optional:S,repeat:k,partial:x,asterisk:!!w,pattern:_?c(_):w?".*":"[^"+l(E)+"]+?"})}}return i<e.length&&(s+=e.substr(i)),s&&r.push(s),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",s=t||{},l=(o||{}).pretty?i:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,p=s[u.name];if(null==p){if(u.optional){u.partial&&(a+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(r(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=l(p[f]),!n[c].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===f?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):l(p),!n[c].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');a+=u.prefix+d}}else a+=u}return a}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",s=0;s<e.length;s++){var c=e[s];if("string"==typeof c)i+=l(c);else{var p=l(c.prefix),f="(?:"+c.pattern+")";t.push(c),c.repeat&&(f+="(?:"+p+f+")*"),i+=f=c.optional?c.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var m=l(n.delimiter||"/"),h=i.slice(-m.length)===m;return o||(i=(h?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=a?"$":o&&h?"":"(?="+m+"|$)",u(new RegExp("^"+i,d(n)),t)}function f(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(f(e[o],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(a(e,n),t,n)}(e,t,n)}},44808:(e,t,n)=>{"use strict";var r=n(11504),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,a={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===a[r]&&(a[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:a,_owner:s.current}}t.Fragment=a,t.jsx=c,t.jsxs=c},73028:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h=Object.assign,g={};function b(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=b.prototype;var w=v.prototype=new y;w.constructor=v,h(w,b.prototype),w.isPureReactComponent=!0;var x=Array.isArray,k=Object.prototype.hasOwnProperty,S={current:null},E={key:!0,ref:!0,__self:!0,__source:!0};function _(e,t,r){var o,a={},i=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)k.call(t,o)&&!E.hasOwnProperty(o)&&(a[o]=t[o]);var l=arguments.length-2;if(1===l)a.children=r;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];a.children=c}if(e&&e.defaultProps)for(o in l=e.defaultProps)void 0===a[o]&&(a[o]=l[o]);return{$$typeof:n,type:e,key:i,ref:s,props:a,_owner:S.current}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var z=/\/+/g;function T(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function L(e,t,o,a,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l=!1;if(null===e)l=!0;else switch(s){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case n:case r:l=!0}}if(l)return i=i(l=e),e=""===a?"."+T(l,0):a,x(i)?(o="",null!=e&&(o=e.replace(z,"$&/")+"/"),L(i,t,o,"",(function(e){return e}))):null!=i&&(C(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,o+(!i.key||l&&l.key===i.key?"":(""+i.key).replace(z,"$&/")+"/")+e)),t.push(i)),1;if(l=0,a=""===a?".":a+":",x(e))for(var c=0;c<e.length;c++){var u=a+T(s=e[c],c);l+=L(s,t,o,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(s=e.next()).done;)l+=L(s=s.value,t,o,u=a+T(s,c++),i);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return l}function j(e,t,n){if(null==e)return e;var r=[],o=0;return L(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function A(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var F={current:null},P={transition:null},N={ReactCurrentDispatcher:F,ReactCurrentBatchConfig:P,ReactCurrentOwner:S};t.Children={map:j,forEach:function(e,t,n){j(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return j(e,(function(){t++})),t},toArray:function(e){return j(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=b,t.Fragment=o,t.Profiler=i,t.PureComponent=v,t.StrictMode=a,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=N,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=h({},e.props),a=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=S.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)k.call(t,c)&&!E.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==l?l[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=r;else if(1<c){l=Array(c);for(var u=0;u<c;u++)l[u]=arguments[u+2];o.children=l}return{$$typeof:n,type:e.type,key:a,ref:i,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=_,t.createFactory=function(e){var t=_.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:A}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=P.transition;P.transition={};try{e()}finally{P.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return F.current.useCallback(e,t)},t.useContext=function(e){return F.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return F.current.useDeferredValue(e)},t.useEffect=function(e,t){return F.current.useEffect(e,t)},t.useId=function(){return F.current.useId()},t.useImperativeHandle=function(e,t,n){return F.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return F.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return F.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return F.current.useMemo(e,t)},t.useReducer=function(e,t,n){return F.current.useReducer(e,t,n)},t.useRef=function(e){return F.current.useRef(e)},t.useState=function(e){return F.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return F.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return F.current.useTransition()},t.version="18.2.0"},11504:(e,t,n)=>{"use strict";e.exports=n(73028)},17624:(e,t,n)=>{"use strict";e.exports=n(44808)},58328:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,i=o>>>1;r<i;){var s=2*(r+1)-1,l=e[s],c=s+1,u=e[c];if(0>a(l,n))c<o&&0>a(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else{if(!(c<o&&0>a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],u=[],d=1,p=null,f=3,m=!1,h=!1,g=!1,b="function"==typeof setTimeout?setTimeout:null,y="function"==typeof clearTimeout?clearTimeout:null,v="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function x(e){if(g=!1,w(e),!h)if(null!==r(c))h=!0,P(k);else{var t=r(u);null!==t&&N(x,t.startTime-e)}}function k(e,n){h=!1,g&&(g=!1,y(C),C=-1),m=!0;var a=f;try{for(w(n),p=r(c);null!==p&&(!(p.expirationTime>n)||e&&!L());){var i=p.callback;if("function"==typeof i){p.callback=null,f=p.priorityLevel;var s=i(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?p.callback=s:p===r(c)&&o(c),w(n)}else o(c);p=r(c)}if(null!==p)var l=!0;else{var d=r(u);null!==d&&N(x,d.startTime-n),l=!1}return l}finally{p=null,f=a,m=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var S,E=!1,_=null,C=-1,z=5,T=-1;function L(){return!(t.unstable_now()-T<z)}function j(){if(null!==_){var e=t.unstable_now();T=e;var n=!0;try{n=_(!0,e)}finally{n?S():(E=!1,_=null)}}else E=!1}if("function"==typeof v)S=function(){v(j)};else if("undefined"!=typeof MessageChannel){var A=new MessageChannel,F=A.port2;A.port1.onmessage=j,S=function(){F.postMessage(null)}}else S=function(){b(j,0)};function P(e){_=e,E||(E=!0,S())}function N(e,n){C=b((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){h||m||(h=!0,P(k))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):z=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return r(c)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0<a?i+a:i:a=i,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:s=a+s,sortIndex:-1},a>i?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(g?(y(C),C=-1):g=!0,N(x,a-i))):(e.sortIndex=s,n(c,e),h||m||(h=!0,P(k))),e},t.unstable_shouldYield=L,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},14712:(e,t,n)=>{"use strict";e.exports=n(58328)},21072:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),l=0;l<a.length;l++){var c=a[l];if(!s(c))return!1;var u=e[c],d=t[c];if(!1===(o=n?n.call(r,u,d,c):void 0)||void 0===o&&u!==d)return!1}return!0}},66136:(e,t,n)=>{"use strict";n.d(t,{c:()=>o});var r="Invariant failed";const o=function(e,t){if(!e)throw new Error(r)}},97768:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Franzininho",tagline:"O projeto Franzininho tem o objetivo de incentivar as pessoas na tecnologia atrav\xe9s da cultura maker e do fa\xe7a voc\xea mesmo.",url:"https://franzininho.github.io",baseUrl:"/",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",favicon:"img/favicon.png",organizationName:"Franzininho",projectName:"docs-franzininho-site",themeConfig:{image:"img/logo.svg",metadata:[{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"630"}],navbar:{title:"Franzininho",logo:{alt:"Logo do site",src:"img/logo.svg",href:"https://franzininho.com.br/"},items:[{to:"/docs",activeBasePath:"/docs",label:"Documenta\xe7\xe3o",position:"left"},{href:"https://franzininho.com.br/",label:"Site",position:"right"},{href:"https://franzininho.com.br/blog/",label:"Blog",position:"right"},{href:"https://franzininho.com.br/#contato",label:"Contato",position:"right"},{type:"localeDropdown",position:"right",dropdownItemsBefore:[],dropdownItemsAfter:[]}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Documenta\xe7\xe3o",items:[{label:"Franzininho DIY",to:"docs/franzininho-diy/sobre"},{label:"Franzininho WiFi",to:"docs/franzininho-wifi/franzininho-wifi"}]},{title:"Comunidade",items:[{label:"Discord",href:"https://discord.gg/H5kENmWGaz"},{label:"Grupo no Facebook",href:"https://www.facebook.com/groups/299236843857849/"}]},{title:"Redes Sociais",items:[{label:"Instagram",href:"https://www.instagram.com/franzininho/"},{label:"Facebook",href:"https://facebook.com/franzininho/"},{label:"Youtube",href:"https://www.youtube.com/channel/UCxyabOm4teS0kx0EgJW78_g"}]},{title:"Mais",items:[{label:"Site",href:"https://franzininho.com.br/"},{label:"GitHub",href:"https://github.com/franzininho"},{label:"Contato",href:"mailto:contato@franzininho.com.br"}]}],copyright:"Copyright \xa9 2021 Franzininho. Constru\xeddo com Docusaurus."},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},prism:{additionalLanguages:[],theme:{plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"/media/fabio/Dados/Projetos/docs-franzininho-site/sidebars.js",editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/"},theme:{customCss:"/media/fabio/Dados/Projetos/docs-franzininho-site/src/css/custom.css"}}]],i18n:{defaultLocale:"pt-BR",locales:["pt-BR","en"],localeConfigs:{"pt-BR":{label:"Portugu\xeas (Brasil)",direction:"ltr"},en:{label:"English",direction:"ltr"}},path:"i18n"},baseUrlIssueBanner:!0,onBrokenAnchors:"warn",onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},plugins:[],themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{format:"mdx",mermaid:!1,mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0}}}},86404:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{c:()=>r})},39948:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{c:()=>o})},14384:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{c:()=>r})},34064:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n)}else for(n in e)e[n]&&(o&&(o+=" "),o+=n);return o}n.d(t,{c:()=>o});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},15420:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n)}else for(n in e)e[n]&&(o&&(o+=" "),o+=n);return o}n.d(t,{c:()=>o});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},46756:(e,t,n)=>{"use strict";n.d(t,{gl:()=>J,sp:()=>C});var r=n(11504);function o(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=o(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}const a=function(){for(var e,t,n=0,r="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=o(e))&&(r&&(r+=" "),r+=t);return r};var i,s,l,c,u,d=Object.create,p=Object.defineProperty,f=Object.defineProperties,m=Object.getOwnPropertyDescriptor,h=Object.getOwnPropertyDescriptors,g=Object.getOwnPropertyNames,b=Object.getOwnPropertySymbols,y=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty,w=Object.prototype.propertyIsEnumerable,x=(e,t,n)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,k=(e,t)=>{for(var n in t||(t={}))v.call(t,n)&&x(e,n,t[n]);if(b)for(var n of b(t))w.call(t,n)&&x(e,n,t[n]);return e},S=(e,t)=>f(e,h(t)),E=(e,t)=>{var n={};for(var r in e)v.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&b)for(var r of b(e))t.indexOf(r)<0&&w.call(e,r)&&(n[r]=e[r]);return n},_=(i={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var s in a)if(a.hasOwnProperty(s)){if(s==t)for(var l in n)n.hasOwnProperty(l)&&(i[l]=n[l]);n.hasOwnProperty(s)||(i[s]=a[s])}var c=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===c&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],o||s);var l=t[s],c=r.util.type(l);"Object"!==c||a[i(l)]?"Array"!==c||a[i(l)]||(a[i(l)]=!0,e(l,n,s,a)):(a[i(l)]=!0,e(l,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",a),!a.grammar)throw new Error('The language "'+a.language+'" has no grammar.');return a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new s;return l(o,o.head,e),i(e,o,t,o.head,0),function(e){for(var t=[],n=e.head.next;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,s,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var m=0;m<f.length;++m){if(d&&d.cause==p+","+m)return;var h=f[m],g=h.inside,b=!!h.lookbehind,y=!!h.greedy,v=h.alias;if(y&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var x=h.pattern||h,k=s.next,S=u;k!==t.tail&&!(d&&S>=d.reach);S+=k.value.length,k=k.next){var E=k.value;if(t.length>e.length)return;if(!(E instanceof o)){var _,C=1;if(y){if(!(_=a(x,S,e,b))||_.index>=e.length)break;var z=_.index,T=_.index+_[0].length,L=S;for(L+=k.value.length;z>=L;)L+=(k=k.next).value.length;if(S=L-=k.value.length,k.value instanceof o)continue;for(var j=k;j!==t.tail&&(L<T||"string"==typeof j.value);j=j.next)C++,L+=j.value.length;C--,E=e.slice(S,L),_.index-=S}else if(!(_=a(x,0,E,b)))continue;z=_.index;var A=_[0],F=E.slice(0,z),P=E.slice(z+A.length),N=S+E.length;d&&N>d.reach&&(d.reach=N);var R=k.prev;if(F&&(R=l(t,R,F),S+=F.length),c(t,R,C),k=l(t,R,new o(p,g?r.tokenize(A,g):A,v,A)),P&&l(t,k,P),C>1){var D={cause:p+","+m,reach:N};i(e,t,n,k.prev,S,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function c(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var s="";for(var l in a.attributes)s+=" "+l+'="'+(a.attributes[l]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+s+">"+a.content+"</"+a.tag+">"},r}();t.exports=n,n.default=n}},function(){return s||(0,i[g(i)[0]])((s={exports:{}}).exports,s),s.exports}),C=((e,t,n)=>(n=null!=e?d(y(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of g(t))v.call(e,o)||o===n||p(e,o,{get:()=>t[o],enumerable:!(r=m(t,o))||r.enumerable});return e})(!t&&e&&e.__esModule?n:p(n,"default",{value:e,enumerable:!0}),e)))(_());C.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},C.languages.markup.tag.inside["attr-value"].inside.entity=C.languages.markup.entity,C.languages.markup.doctype.inside["internal-subset"].inside=C.languages.markup,C.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(C.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:C.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:C.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:n},C.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(C.languages.markup.tag,"addAttribute",{value:function(e,t){C.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:C.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),C.languages.html=C.languages.markup,C.languages.mathml=C.languages.markup,C.languages.svg=C.languages.markup,C.languages.xml=C.languages.extend("markup",{}),C.languages.ssml=C.languages.xml,C.languages.atom=C.languages.xml,C.languages.rss=C.languages.xml,function(e){var t={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},n=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/,r="(?:[^\\\\-]|"+n.source+")",o=(r=RegExp(r+"-"+r),{pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"});e.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:r,inside:{escape:n,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":t,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:n}},"special-escape":t,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":o}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:n,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":o}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}}}(C),C.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},C.languages.javascript=C.languages.extend("clike",{"class-name":[C.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),C.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,C.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:C.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:C.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:C.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:C.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:C.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),C.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:C.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),C.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),C.languages.markup&&(C.languages.markup.tag.addInlined("script","javascript"),C.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),C.languages.js=C.languages.javascript,C.languages.actionscript=C.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),C.languages.actionscript["class-name"].alias="function",delete C.languages.actionscript.parameter,delete C.languages.actionscript["literal-property"],C.languages.markup&&C.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:C.languages.markup}}),c=/#(?!\{).+/,u={pattern:/#\{[^}]+\}/,alias:"variable"},(l=C).languages.coffeescript=l.languages.extend("javascript",{comment:c,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:u}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),l.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:c,interpolation:u}}}),l.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:l.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:u}}]}),l.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete l.languages.coffeescript["template-string"],l.languages.coffee=l.languages.coffeescript,function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){(t="string"==typeof t?[t]:t).forEach((function(t){var r=function(e){e.inside||(e.inside={}),e.inside.rest=n},o="doc-comment";if(a=e.languages[t]){var a,i=a[o];if((i=i||(a=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[o])instanceof RegExp&&(i=a[o]={pattern:i}),Array.isArray(i))for(var s=0,l=i.length;s<l;s++)i[s]instanceof RegExp&&(i[s]={pattern:i[s]}),r(i[s]);else r(i)}}))}}),t.addSupport(["java","javascript","php"],t)}(C),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;(t=(e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css,e.languages.markup))&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(C),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,n=(t=(e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(C),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(C),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,i=(e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o,a=t[n];"code"!==a.type?e(a.content):(o=a.content[1],a=a.content[3],o&&a&&"code-language"===o.type&&"code-block"===a.type&&"string"==typeof o.content&&(o=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),o="language-"+(o=(/[a-z][\w-]*/i.exec(o)||[""])[0].toLowerCase()),a.alias?"string"==typeof a.alias?a.alias=[a.alias,o]:a.alias.push(o):a.alias=[o]))}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r];if(a=/language-(.+)/.exec(a)){n=a[1];break}}var c,u=e.languages[n];u?t.content=e.highlight(t.content.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;return"#"===(t=t.toLowerCase())[0]?(n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n)):s[t]||e})),u,n):n&&"none"!==n&&e.plugins.autoloader&&(c="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=c,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(c);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))})))}})),RegExp(e.languages.markup.tag.pattern.source,"gi")),s={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(C),C.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:C.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},C.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var a=p(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=u(0);"variable"===i.type&&(f(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),0<o.length)){var s=p(/^\{$/,/^\}$/);if(-1!==s)for(var l=n;l<s;l++){var c=t[l];"variable"===c.type&&0<=o.indexOf(c.content)&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return}return 1}function p(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],s=i.content;if("punctuation"===i.type&&"string"==typeof s)if(e.test(s))o++;else if(r.test(s)&&0==--o)return a}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),C.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(t,n,r){return t={code:t,grammar:n,language:r},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}function l(t,n,i){var l=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),c=0,u={},d=(l=s(l.map((function(e){if("string"==typeof e)return e;var n,r;for(e=e.content;-1!==t.indexOf((r=c++,n="___"+i.toUpperCase()+"_"+r+"___")););return u[n]=e,n})).join(""),n,i),Object.keys(u));return c=0,function t(n){for(var a=0;a<n.length;a++){if(c>=d.length)return;var i,l,p,f,m,h,g,b=n[a];"string"==typeof b||"string"==typeof b.content?(i=d[c],-1!==(g=(h="string"==typeof b?b:b.content).indexOf(i))&&(++c,l=h.substring(0,g),m=u[i],p=void 0,(f={})["interpolation-punctuation"]=o,3===(f=e.tokenize(m,f)).length&&((p=[1,1]).push.apply(p,s(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,p)),p=new e.Token("interpolation",f,r.alias,m),f=h.substring(g+i.length),m=[],l&&m.push(l),m.push(p),f&&(t(h=[f]),m.push.apply(m,h)),"string"==typeof b?(n.splice.apply(n,[a,1].concat(m)),a+=m.length-1):b.content=m)):(g=b.content,Array.isArray(g)?t(g):t([g]))}}(l),new e.Token(i,l,"language-"+i,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var c={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function u(e){return"string"==typeof e?e:Array.isArray(e)?e.map(u).join(""):u(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in c&&function t(n){for(var r=0,o=n.length;r<o;r++){var a,i,s,c=n[r];"string"!=typeof c&&(a=c.content,Array.isArray(a)?"template-string"===c.type?(c=a[1],3===a.length&&"string"!=typeof c&&"embedded-code"===c.type&&(i=u(c),c=c.alias,c=Array.isArray(c)?c[0]:c,s=e.languages[c])&&(a[1]=l(i,s,c))):t(a):"string"!=typeof a&&t([a]))}}(t.tokens)}))}(C),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(C),function(e){var t=e.languages.javascript,n=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,r="(@(?:arg|argument|param|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(r+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(r+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g,(function(){return n}))),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:t.string,number:t.number,boolean:t.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(C),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(C),C.languages.n4js=C.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),C.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),C.languages.n4jsd=C.languages.n4js,function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];o=(a="RegExp"===e.util.type(a)?e.languages.javascript[o]={pattern:a}:a).inside||{};(a.inside=o)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(C),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}function i(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;"string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?0<n.length&&n[n.length-1].tagName===s(o.content[0].content[1])&&n.pop():"/>"!==o.content[o.content.length-1].content&&n.push({tagName:s(o.content[0].content[1]),openedBraces:0}):0<n.length&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:0<n.length&&0<n[n.length-1].openedBraces&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&0<n.length&&0===n[n.length-1].openedBraces&&(a=s(o),r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(a+=s(t[r+1]),t.splice(r+1,1)),0<r&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(a=s(t[r-1])+a,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",a,null,a)),o.content&&"string"!=typeof o.content&&i(o.content)}}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var s=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(s).join(""):""};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||i(e.tokens)}))}(C),function(e){var t=e.util.clone(e.languages.typescript);(t=(e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(C),C.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},C.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=C.languages.swift})),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(C),C.languages.c=C.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),C.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),C.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},C.languages.c.string],char:C.languages.c.char,comment:C.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:C.languages.c}}}}),C.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete C.languages.c.boolean,C.languages.objectivec=C.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete C.languages.objectivec["class-name"],C.languages.objc=C.languages.objectivec,C.languages.reason=C.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),C.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete C.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(C),C.languages.go=C.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),C.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete C.languages.go["class-name"],function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(C),C.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},C.languages.python["string-interpolation"].inside.interpolation.inside.rest=C.languages.python,C.languages.py=C.languages.python;((e,t)=>{for(var n in t)p(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>z,duotoneDark:()=>T,duotoneLight:()=>L,github:()=>j,jettwaveDark:()=>q,jettwaveLight:()=>W,nightOwl:()=>A,nightOwlLight:()=>F,oceanicNext:()=>R,okaidia:()=>D,oneDark:()=>H,oneLight:()=>G,palenight:()=>I,shadesOfPurple:()=>O,synthwave84:()=>M,ultramin:()=>B,vsDark:()=>U,vsLight:()=>$});var z={plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},T={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},L={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#896724"}}]},j={plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},A={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},F={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},P="#c5a5c5",N="#8dc891",R={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:P}},{types:["attr-value"],style:{color:N}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:"#999999"}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:"#5a9bcf"}},{types:["boolean"],style:{color:"#ff8b50"}},{types:["tag"],style:{color:"#fc929e"}},{types:["string"],style:{color:N}},{types:["punctuation"],style:{color:N}},{types:["selector","char","builtin","inserted"],style:{color:"#D8DEE9"}},{types:["function"],style:{color:"#79b6f2"}},{types:["operator","entity","url","variable"],style:{color:"#d7deea"}},{types:["keyword"],style:{color:P}},{types:["atrule","class-name"],style:{color:"#FAC863"}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},D={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},I={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},O={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},M={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},B={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},U={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},$={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},q={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},W={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},H={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(220, 14%, 71%)"}}]},G={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(230, 8%, 24%)"}}]},V=(e,t)=>{const{plain:n}=e,r=e.styles.reduce(((e,n)=>{const{languages:r,style:o}=n;return r&&!r.includes(t)||n.types.forEach((t=>{const n=k(k({},e[t]),o);e[t]=n})),e}),{});return r.root=n,r.plain=S(k({},n),{backgroundColor:void 0}),r},Y=/\r\n|\r|\n/,Q=e=>{0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},K=(e,t)=>{const n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},X=e=>{const t=[[]],n=[e],r=[0],o=[e.length];let a=0,i=0,s=[];const l=[s];for(;i>-1;){for(;(a=r[i]++)<o[i];){let e,c=t[i];const u=n[i][a];if("string"==typeof u?(c=i>0?c:["plain"],e=u):(c=K(c,u.type),u.alias&&(c=K(c,u.alias)),e=u.content),"string"!=typeof e){i++,t.push(c),n.push(e),r.push(0),o.push(e.length);continue}const d=e.split(Y),p=d.length;s.push({types:c,content:d[0]});for(let t=1;t<p;t++)Q(s),l.push(s=[]),s.push({types:c,content:d[t]})}i--,t.pop(),n.pop(),r.pop(),o.pop()}return Q(s),l},Z=({children:e,language:t,code:n,theme:o,prism:i})=>{const s=t.toLowerCase(),l=((e,t)=>{const[n,o]=(0,r.useState)(V(t,e)),a=(0,r.useRef)(),i=(0,r.useRef)();return(0,r.useEffect)((()=>{t===a.current&&e===i.current||(a.current=t,i.current=e,o(V(t,e)))}),[e,t]),n})(s,o),c=(e=>(0,r.useCallback)((t=>{var n=t,{className:r,style:o,line:i}=n,s=E(n,["className","style","line"]);const l=S(k({},s),{className:a("token-line",r)});return"object"==typeof e&&"plain"in e&&(l.style=e.plain),"object"==typeof o&&(l.style=k(k({},l.style||{}),o)),l}),[e]))(l),u=(e=>{const t=(0,r.useCallback)((({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,r.useCallback)((e=>{var n=e,{token:r,className:o,style:i}=n,s=E(n,["token","className","style"]);const l=S(k({},s),{className:a("token",...r.types,o),children:r.content,style:t(r)});return null!=i&&(l.style=k(k({},l.style||{}),i)),l}),[t])})(l),d=(({prism:e,code:t,grammar:n,language:o})=>{const a=(0,r.useRef)(e);return(0,r.useMemo)((()=>{if(null==n)return X([t]);const e={code:t,grammar:n,language:o,tokens:[]};return a.current.hooks.run("before-tokenize",e),e.tokens=a.current.tokenize(t,n),a.current.hooks.run("after-tokenize",e),X(e.tokens)}),[t,n,o])})({prism:i,language:s,code:n,grammar:i.languages[s]});return e({tokens:d,className:`prism-code language-${s}`,style:null!=l?l.root:{},getLineProps:c,getTokenProps:u})},J=e=>(0,r.createElement)(Z,S(k({},e),{prism:e.prism||C,theme:e.theme||U,code:e.code,language:e.language}))},60144:e=>{"use strict";e.exports=JSON.parse('{"theme.AnnouncementBar.closeButtonAriaLabel":"Fechar","theme.BackToTopButton.buttonAriaLabel":"Volte para o topo","theme.CodeBlock.copied":"Copiado","theme.CodeBlock.copy":"Copiar","theme.CodeBlock.copyButtonAriaLabel":"Copiar o c\xf3digo para a \xe1rea de transfer\xeancia","theme.CodeBlock.wordWrapToggle":"Alternar quebra de linha","theme.DocSidebarItem.collapseCategoryAriaLabel":"Fechar a categoria lateral \'{label}\'","theme.DocSidebarItem.expandCategoryAriaLabel":"Expandir a categoria lateral \'{label}\'","theme.ErrorPageContent.title":"Esta p\xe1gina deu erro.","theme.ErrorPageContent.tryAgain":"Tente novamente","theme.NavBar.navAriaLabel":"Main","theme.NotFound.p1":"N\xe3o foi poss\xedvel encontrar o que voc\xea estava procurando.","theme.NotFound.p2":"Entre em contato com o propriet\xe1rio do site que vinculou a URL original e informe a ele que o link est\xe1 quebrado.","theme.NotFound.title":"P\xe1gina n\xe3o encontrada","theme.TOCCollapsible.toggleButtonLabel":"Nessa p\xe1gina","theme.admonition.caution":"cuidado","theme.admonition.danger":"perigo","theme.admonition.info":"info","theme.admonition.note":"nota","theme.admonition.tip":"dica","theme.admonition.warning":"aten\xe7\xe3o","theme.blog.archive.description":"Arquivo","theme.blog.archive.title":"Arquivo","theme.blog.paginator.navAriaLabel":"Navega\xe7\xe3o da p\xe1gina da lista de blogs","theme.blog.paginator.newerEntries":"Novas Entradas","theme.blog.paginator.olderEntries":"Entradas Antigas","theme.blog.post.paginator.navAriaLabel":"Navega\xe7\xe3o na p\xe1gina de postagem do blog","theme.blog.post.paginator.newerPost":"Postagem mais recente","theme.blog.post.paginator.olderPost":"Postagem mais antiga","theme.blog.post.plurals":"Uma postagem|{count} postagens","theme.blog.post.readMore":"Leia Mais","theme.blog.post.readMoreLabel":"Ler mais sobre {title}","theme.blog.post.readingTime.plurals":"Um minuto lido|{readingTime} minutos lidos","theme.blog.sidebar.navAriaLabel":"Blog recent posts navigation","theme.blog.tagTitle":"{nPosts} tagged with \\"{tagName}\\"","theme.colorToggle.ariaLabel":"Alterar entre os modos claro e escuro (modo {mode} ativado)","theme.colorToggle.ariaLabel.mode.dark":"modo escuro","theme.colorToggle.ariaLabel.mode.light":"modo claro","theme.common.editThisPage":"Editar essa p\xe1gina","theme.common.headingLinkTitle":"Link direto para o t\xedtulo","theme.common.skipToMainContent":"Ir para o conte\xfado principal","theme.docs.DocCard.categoryDescription.plurals":"{count} items","theme.docs.breadcrumbs.home":"P\xe1gina Inicial","theme.docs.breadcrumbs.navAriaLabel":"Breadcrumbs","theme.docs.paginator.navAriaLabel":"Navega\xe7\xe3o nas p\xe1ginas do Documentos","theme.docs.paginator.next":"Pr\xf3ximo","theme.docs.paginator.previous":"Anterior","theme.docs.sidebar.closeSidebarButtonAriaLabel":"Fechar barra de navega\xe7\xe3o","theme.docs.sidebar.collapseButtonAriaLabel":"Recolher barra lateral","theme.docs.sidebar.collapseButtonTitle":"Recolher barra lateral","theme.docs.sidebar.expandButtonAriaLabel":"Expandir barra lateral","theme.docs.sidebar.expandButtonTitle":"Expandir barra lateral","theme.docs.sidebar.navAriaLabel":"Docs sidebar","theme.docs.sidebar.toggleSidebarButtonAriaLabel":"Alternar a barra de navega\xe7\xe3o","theme.docs.tagDocListPageTitle":"{nDocsTagged} com \\"{tagName}\\"","theme.docs.tagDocListPageTitle.nDocsTagged":"Um documento selecionado|{count} documentos selecionados","theme.docs.versionBadge.label":"Vers\xe3o: {versionLabel}","theme.docs.versions.latestVersionLinkLabel":"\xfaltima vers\xe3o","theme.docs.versions.latestVersionSuggestionLabel":"Para documenta\xe7\xe3o atualizada, consulte a {latestVersionLink} ({versionLabel}).","theme.docs.versions.unmaintainedVersionLabel":"Esta \xe9 a documenta\xe7\xe3o para {siteTitle} {versionLabel}, que n\xe3o \xe9 mais mantido ativamente.","theme.docs.versions.unreleasedVersionLabel":"Esta \xe9 uma documenta\xe7\xe3o n\xe3o lan\xe7ada para {siteTitle} na vers\xe3o {versionLabel}.","theme.lastUpdated.atDate":" em {date}","theme.lastUpdated.byUser":" por {user}","theme.lastUpdated.lastUpdatedAtBy":"Ultima atualiza\xe7\xe3o{atDate}{byUser}","theme.navbar.mobileLanguageDropdown.label":"Linguagens","theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel":"\u2190 Voltar para o menu principal","theme.navbar.mobileVersionsDropdown.label":"Vers\xf5es","theme.tags.tagsListLabel":"Tags:","theme.tags.tagsPageLink":"Exibir todas as tags","theme.tags.tagsPageTitle":"Tags","theme.unlistedContent.message":"This page is unlisted. Search engines will not index it, and only users having a direct link can access it.","theme.unlistedContent.title":"P\xe1gina n\xe3o listada","theme.docs.sidebar.responsiveCloseButtonLabel":"Fechar menu","theme.docs.sidebar.responsiveOpenButtonLabel":"Abrir menu","theme.SearchPage.documentsFound.plurals":"Um documento encontrado|{count} documentos encontrados","theme.SearchPage.existingResultsTitle":"Resultados da busca por \\"{query}\\"","theme.SearchPage.emptyResultsTitle":"Pesquise a documenta\xe7\xe3o","theme.SearchPage.inputPlaceholder":"Digite sua pesquisa aqui","theme.SearchPage.inputLabel":"Procurar","theme.SearchPage.algoliaLabel":"Pesquisa por Algolia","theme.SearchPage.noResultsText":"Nenhum resultado foi encontrado","theme.SearchPage.fetchingNewResults":"Buscando novos resultados...","theme.SearchBar.label":"Procurar","theme.Tip.label":"Dica"}')},14504:e=>{"use strict";e.exports=JSON.parse('{"/blog-8a4":{"__comp":"a6aa9e1f","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"},{"content":"3570154c"},{"content":"8e9f0a8a"}],"metadata":"b2b675dd"},"/blog/archive-4bc":{"__comp":"9e4087bc","__context":{"plugin":"09e1b884"},"archive":"b2f554cd"},"/blog/hello-world-50c":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"09e1b884"},"sidebar":"814f3328","content":"d610846f"},"/blog/hola-5f5":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"09e1b884"},"sidebar":"814f3328","content":"bdd709f1"},"/blog/tags-546":{"__comp":"01a85c17","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","tags":"a7023ddc"},"/blog/tags/docusaurus-e69":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"},{"content":"3570154c"},{"content":"8e9f0a8a"}],"tag":"a80da1cf","listMetadata":"608ae6a4"},"/blog/tags/facebook-640":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"}],"tag":"031793e1","listMetadata":"096bfee4"},"/blog/tags/hello-a30":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"},{"content":"3570154c"}],"tag":"30a24c52","listMetadata":"66406991"},"/blog/tags/hola-b04":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"8e9f0a8a"}],"tag":"e16015ca","listMetadata":"4c9e35b1"},"/blog/welcome-49c":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"09e1b884"},"sidebar":"814f3328","content":"2868cdab"},"/docs-47e":{"__comp":"5e95c892","__context":{"plugin":"43004a8a"}},"/docs-dd4":{"__comp":"a7bd4aaa","version":"935f2afb"},"/docs-b7d":{"__comp":"a94703ab"},"/docs/-252":{"__comp":"17896441","content":"f5313f89"},"/docs/badge/badge-13f":{"__comp":"17896441","content":"6e2ab842"},"/docs/FranzBoy/franzboy-4e0":{"__comp":"17896441","content":"7561b0ae"},"/docs/franzininho-c0/arduino-identificacao-pinos-bb7":{"__comp":"17896441","content":"94c955d1"},"/docs/franzininho-c0/arduino-primeiros-passos-caa":{"__comp":"17896441","content":"449acc1f"},"/docs/franzininho-c0/arduino-todolist-0e4":{"__comp":"17896441","content":"ff1c69f3"},"/docs/franzininho-c0/config-franzininho-c0-stm32cubeide-990":{"__comp":"17896441","content":"4cb2f106"},"/docs/franzininho-c0/franzininho-c0-board-cbb":{"__comp":"17896441","content":"d7336970"},"/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist-a03":{"__comp":"17896441","content":"cfe204fd"},"/docs/franzininho-diy/bootloader-077":{"__comp":"17896441","content":"3ab9b561"},"/docs/franzininho-diy/brilho-led-7de":{"__comp":"17896441","content":"f3019b90"},"/docs/franzininho-diy/drivers-micronucleus-775":{"__comp":"17896441","content":"6da7bcf7"},"/docs/franzininho-diy/elefante-colorido-4b1":{"__comp":"17896441","content":"69d6b121"},"/docs/franzininho-diy/entradas-analogicas-d41":{"__comp":"17896441","content":"ff8b9623"},"/docs/franzininho-diy/entradas-saidas-digitais-440":{"__comp":"17896441","content":"4c503f6c"},"/docs/franzininho-diy/exemplos-avr-libc/buzzer-aff":{"__comp":"17896441","content":"7e45b7ad"},"/docs/franzininho-diy/exemplos-avr-libc/contadores-87b":{"__comp":"17896441","content":"bdb4d3e5"},"/docs/franzininho-diy/exemplos-avr-libc/entrada-digital-2d2":{"__comp":"17896441","content":"3ab35d9f"},"/docs/franzininho-diy/exemplos-avr-libc/hello-world-e41":{"__comp":"17896441","content":"b55e0f56"},"/docs/franzininho-diy/exemplos-avr-libc/int-ext-f9d":{"__comp":"17896441","content":"b677b176"},"/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos-2bc":{"__comp":"17896441","content":"bc475886"},"/docs/franzininho-diy/exemplos-avr-libc/saida-digital-6a4":{"__comp":"17896441","content":"f6af7cfc"},"/docs/franzininho-diy/exemplos-avr-libc/timer0-f17":{"__comp":"17896441","content":"c720cb85"},"/docs/franzininho-diy/exemplos-avr-libc/timer0-int-136":{"__comp":"17896441","content":"bb7fee19"},"/docs/franzininho-diy/exemplos-avr-libc/todo-d50":{"__comp":"17896441","content":"6b289e1f"},"/docs/franzininho-diy/girassol-automatizado-bbc":{"__comp":"17896441","content":"d9a3a88a"},"/docs/franzininho-diy/identificando-componentes-5e7":{"__comp":"17896441","content":"68401cc9"},"/docs/franzininho-diy/led-rgb-a73":{"__comp":"17896441","content":"52090148"},"/docs/franzininho-diy/leitura-tecla-8bc":{"__comp":"17896441","content":"d5f74b3b"},"/docs/franzininho-diy/lista-de-materiais-a66":{"__comp":"17896441","content":"e586c302"},"/docs/franzininho-diy/montagem-7a2":{"__comp":"17896441","content":"9ccd4375"},"/docs/franzininho-diy/pacote-036":{"__comp":"17896441","content":"21c04bfb"},"/docs/franzininho-diy/picsimlab/primeiros-passos-0a0":{"__comp":"17896441","content":"a34fb63a"},"/docs/franzininho-diy/pisca-led-238":{"__comp":"17896441","content":"92ef60c0"},"/docs/franzininho-diy/saidas-pwm-c49":{"__comp":"17896441","content":"be54388e"},"/docs/franzininho-diy/semaforo-8fa":{"__comp":"17896441","content":"a47310cc"},"/docs/franzininho-diy/sensor-luz-ldr-98c":{"__comp":"17896441","content":"5cfa1a80"},"/docs/franzininho-diy/sobre-722":{"__comp":"17896441","content":"fd69b436"},"/docs/franzininho-diy/tecla-liga-desliga-75d":{"__comp":"17896441","content":"55ee410e"},"/docs/franzininho-diy/theremim-330":{"__comp":"17896441","content":"8b8a5829"},"/docs/franzininho-diy/tutoriais-i2c-7c3":{"__comp":"17896441","content":"558e6545"},"/docs/franzininho-diy/wokwi/primeiros-passos-099":{"__comp":"17896441","content":"f67a9ad7"},"/docs/franzininho-tiny/franzininho-tiny-97b":{"__comp":"17896441","content":"52fc124a"},"/docs/franzininho-wifi-lab01-9ce":{"__comp":"17896441","content":"d75a6ad4"},"/docs/franzininho-wifi/exemplos-arduino/blink-e2e":{"__comp":"17896441","content":"9cf82e51"},"/docs/franzininho-wifi/exemplos-arduino/dht11-a77":{"__comp":"17896441","content":"45a448cc"},"/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard-3df":{"__comp":"17896441","content":"8f8a0b80"},"/docs/franzininho-wifi/exemplos-arduino/primeiros-passos-baf":{"__comp":"17896441","content":"5115f6b0"},"/docs/franzininho-wifi/exemplos-circuitpython/dht11-a35":{"__comp":"17896441","content":"d0c422fb"},"/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c-f84":{"__comp":"17896441","content":"55a63e59"},"/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas-349":{"__comp":"17896441","content":"8f70110c"},"/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais-686":{"__comp":"17896441","content":"d268d7c6"},"/docs/franzininho-wifi/exemplos-circuitpython/ferramentas-4ba":{"__comp":"17896441","content":"032edc05"},"/docs/franzininho-wifi/exemplos-circuitpython/hello-world-9e6":{"__comp":"17896441","content":"b0d3cd30"},"/docs/franzininho-wifi/exemplos-circuitpython/irrigacao-1f7":{"__comp":"17896441","content":"58231389"},"/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos-9b7":{"__comp":"17896441","content":"c397fa15"},"/docs/franzininho-wifi/exemplos-circuitpython/pwm-041":{"__comp":"17896441","content":"5f765f30"},"/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04-687":{"__comp":"17896441","content":"d29449f8"},"/docs/franzininho-wifi/exemplos-circuitpython/serial-console-c3d":{"__comp":"17896441","content":"3cf26f2f"},"/docs/franzininho-wifi/exemplos-circuitpython/servo-motor-149":{"__comp":"17896441","content":"4e4cd8a0"},"/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo-210":{"__comp":"17896441","content":"ec054302"},"/docs/franzininho-wifi/exemplos-espidf/aws-a86":{"__comp":"17896441","content":"af2b9553"},"/docs/franzininho-wifi/exemplos-espidf/entrada-analogica-885":{"__comp":"17896441","content":"06f5a5e3"},"/docs/franzininho-wifi/exemplos-espidf/entrada-digital-48e":{"__comp":"17896441","content":"f64cfe00"},"/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf-a9c":{"__comp":"17896441","content":"dcf87b66"},"/docs/franzininho-wifi/exemplos-espidf/ledc-fec":{"__comp":"17896441","content":"249d28c1"},"/docs/franzininho-wifi/exemplos-espidf/primeiros-passos-d57":{"__comp":"17896441","content":"2e8bb407"},"/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais-18a":{"__comp":"17896441","content":"5f9a86e6"},"/docs/franzininho-wifi/exemplos-micropython/primeiros-passos-8f4":{"__comp":"17896441","content":"d69ae106"},"/docs/franzininho-wifi/franzininho-wifi-783":{"__comp":"17896441","content":"cdcae78f"},"/docs/franzininho-wifi/franzininho-wifi-dev-edition-5f1":{"__comp":"17896441","content":"6d6d470f"},"/docs/franzininho-wifi/wokwi/primeiros-passos-ebc":{"__comp":"17896441","content":"66e66c27"},"/docs/Franzino/franzino-4df":{"__comp":"17896441","content":"27079279"},"/docs/Franzino/upload-com-arduino-uno-423":{"__comp":"17896441","content":"daddf4d9"},"/docs/Franzino/upload-conversor-serial-84e":{"__comp":"17896441","content":"e6a1d5e9"},"/docs/FranzMakey/franzmakey-f53":{"__comp":"17896441","content":"5c90fd8c"},"/docs/FranzMakey/primeiros-passos-9be":{"__comp":"17896441","content":"bc0ca366"},"/docs/LaboratorioSistemasIot/adaptadores/arduino-uno-234":{"__comp":"17896441","content":"445992cb"},"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-549":{"__comp":"17896441","content":"c4380c1f"},"/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO-862":{"__comp":"17896441","content":"db00da42"},"/docs/LaboratorioSistemasIot/LaboratorioSistemasIot-157":{"__comp":"17896441","content":"b311b2c7"},"/docs/programacao/tutoriais-introducao-123":{"__comp":"17896441","content":"bc0f2708"},"/-f4b":{"__comp":"c4f5d8e4","__context":{"plugin":"4f3ccf13"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[2176],(()=>{return t=28808,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.2efbdb94.js.LICENSE.txt b/assets/js/main.d9f5e5ee.js.LICENSE.txt similarity index 76% rename from assets/js/main.2efbdb94.js.LICENSE.txt rename to assets/js/main.d9f5e5ee.js.LICENSE.txt index a6dec55c4..91dc89499 100755 --- a/assets/js/main.2efbdb94.js.LICENSE.txt +++ b/assets/js/main.d9f5e5ee.js.LICENSE.txt @@ -1,15 +1,22 @@ -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - /* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress * @license MIT */ +/*! Bundled license information: + +prismjs/prism.js: + (** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT <https://opensource.org/licenses/MIT> + * @author Lea Verou <https://lea.verou.me> + * @namespace + * @public + *) +*/ + /** * @license React - * use-sync-external-store-shim.production.min.js + * react-dom.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -18,16 +25,8 @@ object-assign */ /** - * Prism: Lightweight, robust, elegant syntax highlighting - * - * @license MIT <https://opensource.org/licenses/MIT> - * @author Lea Verou <https://lea.verou.me> - * @namespace - * @public - */ - -/** @license React v0.19.1 - * scheduler.production.min.js + * @license React + * react-jsx-runtime.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -35,8 +34,9 @@ object-assign * LICENSE file in the root directory of this source tree. */ -/** @license React v16.13.1 - * react-is.production.min.js +/** + * @license React + * react.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -44,8 +44,9 @@ object-assign * LICENSE file in the root directory of this source tree. */ -/** @license React v16.14.0 - * react-dom.production.min.js +/** + * @license React + * scheduler.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -53,8 +54,8 @@ object-assign * LICENSE file in the root directory of this source tree. */ -/** @license React v16.14.0 - * react.production.min.js +/** @license React v16.13.1 + * react-is.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * diff --git a/assets/js/runtime~main.a21ac732.js b/assets/js/runtime~main.a21ac732.js deleted file mode 100755 index 926bce88c..000000000 --- a/assets/js/runtime~main.a21ac732.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,c,a,f,d,b={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=b,r.c=t,e=[],r.O=(c,a,f,d)=>{if(!a){var b=1/0;for(i=0;i<e.length;i++){a=e[i][0],f=e[i][1],d=e[i][2];for(var t=!0,o=0;o<a.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d<b&&(b=d));if(t){e.splice(i--,1);var n=f();void 0!==n&&(c=n)}}return c}d=d||0;for(var i=e.length;i>0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,f,d]},r.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return r.d(c,{a:c}),c},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};c=c||[null,a({}),a([]),a(a)];for(var t=2&f&&e;"object"==typeof t&&!~c.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((c=>b[c]=()=>e[c]));return b.default=()=>e,r.d(d,b),d},r.d=(e,c)=>{for(var a in c)r.o(c,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:c[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((c,a)=>(r.f[a](e,c),c)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",110:"66406991",157:"7561b0ae",270:"43004a8a",286:"d75a6ad4",310:"c720cb85",367:"b677b176",453:"30a24c52",467:"f3019b90",533:"b2b675dd",604:"8b8a5829",694:"7e45b7ad",969:"be54388e",970:"ff1c69f3",1013:"3ab9b561",1375:"dcf87b66",1449:"af172acd",1477:"b2f554cd",1506:"f6af7cfc",1524:"bdb4d3e5",1633:"031793e1",1713:"a7023ddc",1777:"5115f6b0",1793:"cfe204fd",1829:"4cb2f106",1832:"bb7fee19",1982:"a34fb63a",2312:"d7336970",2496:"55ee410e",2517:"3ab35d9f",2535:"814f3328",2536:"4c503f6c",2559:"8f8a0b80",2654:"68401cc9",2687:"2e8bb407",2749:"52fc124a",2976:"c4380c1f",3020:"6d6d470f",3089:"a6aa9e1f",3205:"a80da1cf",3290:"e6a1d5e9",3405:"5f9a86e6",3518:"cdcae78f",3567:"6e2ab842",3608:"9e4087bc",3634:"f67a9ad7",3707:"3570154c",3931:"ff8b9623",4013:"01a85c17",4035:"8e9f0a8a",4061:"2868cdab",4123:"9ccd4375",4195:"c4f5d8e4",4242:"d29449f8",4253:"c397fa15",4334:"55a63e59",4417:"27079279",4507:"f5313f89",4669:"b0d3cd30",4679:"bc0ca366",4694:"bdd709f1",5016:"5c90fd8c",5045:"f64cfe00",5123:"249d28c1",5193:"daddf4d9",5534:"bc475886",5634:"21c04bfb",5755:"558e6545",5845:"d5f74b3b",6103:"ccc49370",6176:"d610846f",6250:"09e1b884",6251:"69d6b121",6355:"e586c302",6553:"8f70110c",6631:"b311b2c7",6657:"4e4cd8a0",6799:"92ef60c0",6803:"3cf26f2f",6817:"06f5a5e3",6938:"608ae6a4",7178:"096bfee4",7201:"d69ae106",7259:"d9a3a88a",7269:"4f3ccf13",7347:"94c955d1",7600:"5cfa1a80",7835:"bc0f2708",7918:"17896441",7932:"66e66c27",8407:"445992cb",8442:"45a448cc",8504:"fd69b436",8560:"af2b9553",8601:"5f765f30",8610:"6875c492",8615:"a47310cc",8659:"d268d7c6",8811:"d0c422fb",8911:"ec054302",9019:"449acc1f",9035:"4c9e35b1",9226:"6b289e1f",9267:"db00da42",9429:"58231389",9514:"1be78505",9515:"6da7bcf7",9700:"e16015ca",9821:"b55e0f56",9860:"032edc05",9948:"52090148",9966:"9cf82e51"}[e]||e)+"."+{53:"bea23187",110:"4cb8a3d4",157:"ceceb5c0",270:"51ba281e",286:"b9068510",310:"bbf15ecc",367:"15604a3b",453:"43dd1097",467:"a0e247d4",533:"f91c9c3c",604:"4099713a",694:"bef3f00d",969:"58e80a44",970:"2565ba45",1013:"b5687b85",1375:"e04d6994",1449:"0dcfbf19",1477:"8de24a10",1506:"74450e63",1524:"b72c15e9",1633:"f568634d",1713:"f2391359",1777:"7b0cf468",1793:"ceec565a",1829:"752b1570",1832:"c389ea7a",1982:"04161524",2312:"0aebaddb",2496:"b1ed8793",2517:"6eea7e7d",2535:"c97ab362",2536:"aeeda656",2559:"6d757495",2654:"aca0addf",2687:"49ab8395",2749:"f8810c76",2976:"f5b4cd1d",3020:"73f2445d",3089:"15a76870",3205:"3d666c94",3290:"8e2ba760",3405:"9be88000",3518:"b279e290",3567:"eb73eb7d",3608:"9685659e",3634:"89fa15f2",3707:"56a5dcac",3931:"459b86bc",4013:"933066fe",4035:"e9626fc6",4061:"e1e8fb8c",4123:"abe226f6",4195:"11f52a5e",4242:"a2736ccc",4253:"e2941658",4334:"530fbf6e",4417:"b1181c82",4507:"a4b0f419",4669:"2800b4c0",4679:"39f9de61",4694:"661db721",4972:"54ab1ffc",5016:"d9f4e602",5045:"6c8bfaa8",5123:"c288480d",5193:"7bda789f",5534:"044d5a76",5634:"7dc29b24",5755:"20aeae35",5845:"3df8d54a",6048:"6ee355ae",6103:"ed5a44eb",6176:"4a079b22",6250:"2c4adf47",6251:"c3796d17",6355:"b86ca4c3",6553:"19567802",6631:"0e44b966",6657:"d58634dc",6799:"26252886",6803:"930105a4",6817:"dbc11a81",6938:"7673e5d0",7178:"87a706e1",7201:"eb510f0f",7259:"5ce54f0f",7269:"339cdbe4",7347:"af720c33",7600:"c626c16e",7835:"d12dcd0d",7918:"5b1e31d0",7932:"164e19c2",8407:"0c43af20",8442:"7df9342c",8504:"d304b7b2",8560:"d6aeb105",8601:"773c8b61",8610:"19f388a6",8615:"24424866",8659:"f53d7ea5",8811:"53d1973d",8911:"384dcf53",9019:"2964252b",9035:"fde05e88",9226:"8cc5747c",9267:"180e3837",9429:"59443b95",9514:"0a057c22",9515:"d71e2631",9700:"20445b94",9785:"4a98800b",9821:"19070d8f",9860:"5007b327",9948:"36dda4c6",9966:"f0799621"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,c)=>Object.prototype.hasOwnProperty.call(e,c),f={},d="Franzininho:",r.l=(e,c,a,b)=>{if(f[e])f[e].push(c);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==d+a){t=u;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",d+a),t.src=e),f[e]=[c];var l=(c,a)=>{t.onerror=t.onload=null,clearTimeout(s);var d=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),c)return c(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"7918",27079279:"4417",52090148:"9948",58231389:"9429",66406991:"110","935f2afb":"53","7561b0ae":"157","43004a8a":"270",d75a6ad4:"286",c720cb85:"310",b677b176:"367","30a24c52":"453",f3019b90:"467",b2b675dd:"533","8b8a5829":"604","7e45b7ad":"694",be54388e:"969",ff1c69f3:"970","3ab9b561":"1013",dcf87b66:"1375",af172acd:"1449",b2f554cd:"1477",f6af7cfc:"1506",bdb4d3e5:"1524","031793e1":"1633",a7023ddc:"1713","5115f6b0":"1777",cfe204fd:"1793","4cb2f106":"1829",bb7fee19:"1832",a34fb63a:"1982",d7336970:"2312","55ee410e":"2496","3ab35d9f":"2517","814f3328":"2535","4c503f6c":"2536","8f8a0b80":"2559","68401cc9":"2654","2e8bb407":"2687","52fc124a":"2749",c4380c1f:"2976","6d6d470f":"3020",a6aa9e1f:"3089",a80da1cf:"3205",e6a1d5e9:"3290","5f9a86e6":"3405",cdcae78f:"3518","6e2ab842":"3567","9e4087bc":"3608",f67a9ad7:"3634","3570154c":"3707",ff8b9623:"3931","01a85c17":"4013","8e9f0a8a":"4035","2868cdab":"4061","9ccd4375":"4123",c4f5d8e4:"4195",d29449f8:"4242",c397fa15:"4253","55a63e59":"4334",f5313f89:"4507",b0d3cd30:"4669",bc0ca366:"4679",bdd709f1:"4694","5c90fd8c":"5016",f64cfe00:"5045","249d28c1":"5123",daddf4d9:"5193",bc475886:"5534","21c04bfb":"5634","558e6545":"5755",d5f74b3b:"5845",ccc49370:"6103",d610846f:"6176","09e1b884":"6250","69d6b121":"6251",e586c302:"6355","8f70110c":"6553",b311b2c7:"6631","4e4cd8a0":"6657","92ef60c0":"6799","3cf26f2f":"6803","06f5a5e3":"6817","608ae6a4":"6938","096bfee4":"7178",d69ae106:"7201",d9a3a88a:"7259","4f3ccf13":"7269","94c955d1":"7347","5cfa1a80":"7600",bc0f2708:"7835","66e66c27":"7932","445992cb":"8407","45a448cc":"8442",fd69b436:"8504",af2b9553:"8560","5f765f30":"8601","6875c492":"8610",a47310cc:"8615",d268d7c6:"8659",d0c422fb:"8811",ec054302:"8911","449acc1f":"9019","4c9e35b1":"9035","6b289e1f":"9226",db00da42:"9267","1be78505":"9514","6da7bcf7":"9515",e16015ca:"9700",b55e0f56:"9821","032edc05":"9860","9cf82e51":"9966"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(c,a)=>{var f=r.o(e,c)?e[c]:void 0;if(0!==f)if(f)a.push(f[2]);else if(/^(1303|532)$/.test(c))e[c]=0;else{var d=new Promise(((a,d)=>f=e[c]=[a,d]));a.push(f[2]=d);var b=r.p+r.u(c),t=new Error;r.l(b,(a=>{if(r.o(e,c)&&(0!==(f=e[c])&&(e[c]=void 0),f)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+c+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,f[1](t)}}),"chunk-"+c,c)}},r.O.j=c=>0===e[c];var c=(c,a)=>{var f,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((c=>0!==e[c]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(c&&c(a);n<b.length;n++)d=b[n],r.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return r.O(i)},a=self.webpackChunkFranzininho=self.webpackChunkFranzininho||[];a.forEach(c.bind(null,0)),a.push=c.bind(null,a.push.bind(a))})()})(); \ No newline at end of file diff --git a/assets/js/runtime~main.b8ad3321.js b/assets/js/runtime~main.b8ad3321.js new file mode 100755 index 000000000..b7dede316 --- /dev/null +++ b/assets/js/runtime~main.b8ad3321.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,f,c,a,b,d={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return d[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=d,r.c=t,e=[],r.O=(f,c,a,b)=>{if(!c){var d=1/0;for(i=0;i<e.length;i++){c=e[i][0],a=e[i][1],b=e[i][2];for(var t=!0,o=0;o<c.length;o++)(!1&b||d>=b)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,b<d&&(d=b));if(t){e.splice(i--,1);var n=a();void 0!==n&&(f=n)}}return f}b=b||0;for(var i=e.length;i>0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[c,a,b]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var d={};f=f||[null,c({}),c([]),c(c)];for(var t=2&a&&e;"object"==typeof t&&!~f.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((f=>d[f]=()=>e[f]));return d.default=()=>e,r.d(b,d),b},r.d=(e,f)=>{for(var c in f)r.o(f,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:f[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,c)=>(r.f[c](e,f),f)),[])),r.u=e=>"assets/js/"+({148:"bc0f2708",400:"43004a8a",468:"27079279",560:"d29449f8",576:"b55e0f56",872:"e586c302",952:"f3019b90",1020:"558e6545",1052:"3570154c",1140:"daddf4d9",1168:"68401cc9",1196:"55ee410e",1208:"449acc1f",1288:"032edc05",1363:"d75a6ad4",1392:"bb7fee19",1456:"45a448cc",1520:"58231389",1560:"af172acd",1576:"f6af7cfc",1676:"66e66c27",1680:"3cf26f2f",1744:"7e45b7ad",1784:"2868cdab",1880:"ec054302",2160:"4e4cd8a0",2212:"5c90fd8c",2392:"6875c492",2496:"8f70110c",2512:"4c9e35b1",2632:"c4f5d8e4",2660:"af2b9553",2760:"bdd709f1",2976:"a47310cc",3183:"b311b2c7",3280:"4cb2f106",3420:"ff1c69f3",3496:"8e9f0a8a",3630:"d268d7c6",3744:"52fc124a",3916:"c720cb85",4124:"096bfee4",4268:"6e2ab842",4298:"dcf87b66",4304:"5e95c892",4608:"30a24c52",4640:"9ccd4375",4666:"a94703ab",4672:"d9a3a88a",4976:"a6aa9e1f",5168:"608ae6a4",5240:"2e8bb407",5280:"c397fa15",5336:"5115f6b0",5512:"814f3328",5632:"b0d3cd30",5696:"935f2afb",5752:"8f8a0b80",5758:"e6a1d5e9",5944:"d0c422fb",6004:"ff8b9623",6116:"8b8a5829",6200:"94c955d1",6280:"5f9a86e6",6292:"b2b675dd",6312:"55a63e59",6316:"69d6b121",6332:"249d28c1",6344:"ccc49370",6360:"acecf23e",6472:"4c503f6c",6500:"a7bd4aaa",6550:"3ab35d9f",6552:"d610846f",6728:"db00da42",6752:"17896441",6776:"c4380c1f",6780:"5cfa1a80",6880:"b2f554cd",6956:"66406991",6974:"bc475886",6980:"445992cb",6992:"9cf82e51",7024:"5f765f30",7028:"9e4087bc",7073:"d7336970",7272:"cdcae78f",7296:"b677b176",7552:"e16015ca",7560:"6b289e1f",7804:"09e1b884",7888:"d5f74b3b",7952:"06f5a5e3",8040:"be54388e",8292:"6da7bcf7",8324:"52090148",8336:"a34fb63a",8412:"01a85c17",8448:"6d6d470f",8600:"a80da1cf",8658:"cfe204fd",8800:"f5313f89",8812:"f67a9ad7",8817:"3ab9b561",8908:"031793e1",8930:"d69ae106",8968:"21c04bfb",9112:"a7023ddc",9386:"fd69b436",9464:"f64cfe00",9484:"bdb4d3e5",9488:"7561b0ae",9508:"4f3ccf13",9628:"bc0ca366",9964:"92ef60c0"}[e]||e)+"."+{148:"faf18d40",400:"28060fa5",468:"ead950af",560:"14ea76d6",576:"7a44c2a0",872:"b94f355a",952:"042b83dd",1020:"303e0db1",1052:"a0901fc1",1140:"2858fa3a",1168:"082694d1",1196:"3c44d945",1208:"bbccb8c0",1288:"e046e386",1363:"f9196fd6",1392:"78d2b3a2",1456:"8c75c70f",1520:"566e0e53",1560:"b01e1b24",1576:"3ef9aa07",1676:"07918695",1680:"92a64359",1744:"829cddcf",1784:"f44856ad",1880:"918d9d0f",2160:"1f30fa5a",2212:"9527db01",2220:"7666931e",2392:"3e92a214",2496:"9828e65d",2512:"114711f0",2632:"974a644b",2660:"40ff3afa",2760:"b8420fe4",2976:"d6691628",3183:"ccb44955",3280:"81e4439a",3420:"b1e2f638",3496:"a78a4d90",3630:"48a23515",3744:"b1aa0e25",3916:"2f9ba57b",4124:"c2e51b42",4268:"4c950afc",4298:"7a62ecbd",4304:"1ebb8d2b",4552:"cc3bd259",4608:"bec8461c",4640:"6c3d6bca",4666:"7519b2d0",4672:"051d298c",4976:"d18b185f",5168:"f1559273",5240:"db969ad2",5280:"3860495d",5336:"c70666b4",5512:"055bf5fd",5632:"a376875a",5696:"4d50966b",5752:"67c3b34b",5758:"03a686d7",5944:"51cc0c7f",6004:"d6d588e7",6116:"3ea90757",6200:"021550af",6280:"086ddceb",6292:"6fd10bd0",6312:"2f05caae",6316:"8af5a6f1",6332:"5c233693",6344:"60db7232",6360:"59c08d62",6472:"83dadac7",6500:"65a9f5e3",6550:"e0ff8bac",6552:"75f419d0",6728:"0e6219f2",6752:"62d02e28",6776:"e102c5c5",6780:"26444404",6880:"ad32e1fc",6956:"e8d76155",6974:"a9f952b3",6980:"999dd738",6992:"32b38b6c",7024:"8485c53f",7028:"8937d11c",7073:"e9a75feb",7272:"d9bf9322",7296:"42603278",7552:"f90a54a3",7560:"27a89205",7804:"ba1dccda",7888:"5756181b",7952:"e2bcae0a",8040:"5c9a7930",8292:"24cf6136",8324:"83b31edf",8336:"9214a7f9",8412:"4eb05196",8448:"dd51a55f",8600:"98f39837",8658:"4bbeb1c1",8800:"789a8c19",8812:"61cd8489",8817:"d70a193a",8908:"a22511d3",8930:"8f2c25f6",8968:"8403d90e",9112:"8878d9c3",9386:"16c46d34",9464:"56c7c44d",9484:"24058297",9488:"eddfc397",9508:"1f3face7",9628:"528f158f",9964:"f802e225",9968:"84c0a0fd"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),a={},b="Franzininho:",r.l=(e,f,c,d)=>{if(a[e])a[e].push(f);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==b+c){t=u;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",b+c),t.src=e),a[e]=[f];var l=(f,c)=>{t.onerror=t.onload=null,clearTimeout(s);var b=a[e];if(delete a[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(c))),f)return f(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"6752",27079279:"468",52090148:"8324",58231389:"1520",66406991:"6956",bc0f2708:"148","43004a8a":"400",d29449f8:"560",b55e0f56:"576",e586c302:"872",f3019b90:"952","558e6545":"1020","3570154c":"1052",daddf4d9:"1140","68401cc9":"1168","55ee410e":"1196","449acc1f":"1208","032edc05":"1288",d75a6ad4:"1363",bb7fee19:"1392","45a448cc":"1456",af172acd:"1560",f6af7cfc:"1576","66e66c27":"1676","3cf26f2f":"1680","7e45b7ad":"1744","2868cdab":"1784",ec054302:"1880","4e4cd8a0":"2160","5c90fd8c":"2212","6875c492":"2392","8f70110c":"2496","4c9e35b1":"2512",c4f5d8e4:"2632",af2b9553:"2660",bdd709f1:"2760",a47310cc:"2976",b311b2c7:"3183","4cb2f106":"3280",ff1c69f3:"3420","8e9f0a8a":"3496",d268d7c6:"3630","52fc124a":"3744",c720cb85:"3916","096bfee4":"4124","6e2ab842":"4268",dcf87b66:"4298","5e95c892":"4304","30a24c52":"4608","9ccd4375":"4640",a94703ab:"4666",d9a3a88a:"4672",a6aa9e1f:"4976","608ae6a4":"5168","2e8bb407":"5240",c397fa15:"5280","5115f6b0":"5336","814f3328":"5512",b0d3cd30:"5632","935f2afb":"5696","8f8a0b80":"5752",e6a1d5e9:"5758",d0c422fb:"5944",ff8b9623:"6004","8b8a5829":"6116","94c955d1":"6200","5f9a86e6":"6280",b2b675dd:"6292","55a63e59":"6312","69d6b121":"6316","249d28c1":"6332",ccc49370:"6344",acecf23e:"6360","4c503f6c":"6472",a7bd4aaa:"6500","3ab35d9f":"6550",d610846f:"6552",db00da42:"6728",c4380c1f:"6776","5cfa1a80":"6780",b2f554cd:"6880",bc475886:"6974","445992cb":"6980","9cf82e51":"6992","5f765f30":"7024","9e4087bc":"7028",d7336970:"7073",cdcae78f:"7272",b677b176:"7296",e16015ca:"7552","6b289e1f":"7560","09e1b884":"7804",d5f74b3b:"7888","06f5a5e3":"7952",be54388e:"8040","6da7bcf7":"8292",a34fb63a:"8336","01a85c17":"8412","6d6d470f":"8448",a80da1cf:"8600",cfe204fd:"8658",f5313f89:"8800",f67a9ad7:"8812","3ab9b561":"8817","031793e1":"8908",d69ae106:"8930","21c04bfb":"8968",a7023ddc:"9112",fd69b436:"9386",f64cfe00:"9464",bdb4d3e5:"9484","7561b0ae":"9488","4f3ccf13":"9508",bc0ca366:"9628","92ef60c0":"9964"}[e]||e,r.p+r.u(e)},(()=>{var e={296:0,2176:0};r.f.j=(f,c)=>{var a=r.o(e,f)?e[f]:void 0;if(0!==a)if(a)c.push(a[2]);else if(/^2(17|9)6$/.test(f))e[f]=0;else{var b=new Promise(((c,b)=>a=e[f]=[c,b]));c.push(a[2]=b);var d=r.p+r.u(f),t=new Error;r.l(d,(c=>{if(r.o(e,f)&&(0!==(a=e[f])&&(e[f]=void 0),a)){var b=c&&("load"===c.type?"missing":c.type),d=c&&c.target&&c.target.src;t.message="Loading chunk "+f+" failed.\n("+b+": "+d+")",t.name="ChunkLoadError",t.type=b,t.request=d,a[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,c)=>{var a,b,d=c[0],t=c[1],o=c[2],n=0;if(d.some((f=>0!==e[f]))){for(a in t)r.o(t,a)&&(r.m[a]=t[a]);if(o)var i=o(r)}for(f&&f(c);n<d.length;n++)b=d[n],r.o(e,b)&&e[b]&&e[b][0](),e[b]=0;return r.O(i)},c=self.webpackChunkFranzininho=self.webpackChunkFranzininho||[];c.forEach(f.bind(null,0)),c.push=f.bind(null,c.push.bind(c))})()})(); \ No newline at end of file diff --git a/blog/archive/index.html b/blog/archive/index.html index 72b6f941c..519cd5794 100755 --- a/blog/archive/index.html +++ b/blog/archive/index.html @@ -2,16 +2,13 @@ <html lang="pt-BR" dir="ltr" class="plugin-blog plugin-id-default" data-has-hydrated="false"> <head> <meta charset="UTF-8"> -<meta name="generator" content="Docusaurus v2.4.3"> -<title data-rh="true">Arquivo | Franzininho - - - + +Arquivo | Franzininho + + + - - - + \ No newline at end of file diff --git a/blog/atom.xml b/blog/atom.xml index 95e8ea7c6..841d85adf 100755 --- a/blog/atom.xml +++ b/blog/atom.xml @@ -13,7 +13,8 @@ 2019-05-30T00:00:00.000Z - Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

Delete the whole directory if you don't want the blog features. As simple as that!

]]>
+ Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

+

Delete the whole directory if you don't want the blog features. As simple as that!

]]>
Yangshun Tay https://github.com/yangshun @@ -28,7 +29,9 @@ 2019-05-29T00:00:00.000Z - Welcome to this blog. This blog is created with Docusaurus 2 alpha.

This is a test post.

A whole bunch of other information.

]]>
+ Welcome to this blog. This blog is created with Docusaurus 2 alpha.

+

This is a test post.

+

A whole bunch of other information.

]]>
Endilie Yacop Sucipto https://github.com/endiliey diff --git a/blog/hello-world/index.html b/blog/hello-world/index.html index dacc10d88..3ff287a9a 100755 --- a/blog/hello-world/index.html +++ b/blog/hello-world/index.html @@ -2,16 +2,15 @@ - -Hello | Franzininho - - - + +Hello | Franzininho + + + -
-
- - +
\ No newline at end of file diff --git a/blog/hola/index.html b/blog/hola/index.html index ff9e10fbe..ff65a20b7 100755 --- a/blog/hola/index.html +++ b/blog/hola/index.html @@ -2,16 +2,13 @@ - -Hola | Franzininho - - - + +Hola | Franzininho + + + -
-

Hola

· Um minuto lido
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - +

Hola

· Um minuto lido
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

\ No newline at end of file diff --git a/blog/index.html b/blog/index.html index e5ee76f10..50207873e 100755 --- a/blog/index.html +++ b/blog/index.html @@ -2,16 +2,14 @@ - -Blog | Franzininho - - - + +Blog | Franzininho + + + -
-

· Um minuto lido
Yangshun Tay

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

Delete the whole directory if you don't want the blog features. As simple as that!

· Um minuto lido
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - +

Welcome

· Um minuto lido
Yangshun Tay
Front End Engineer @ Facebook

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

+

Delete the whole directory if you don't want the blog features. As simple as that!

Hola

· Um minuto lido
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

\ No newline at end of file diff --git a/blog/rss.xml b/blog/rss.xml index a6e611f0e..095da4241 100755 --- a/blog/rss.xml +++ b/blog/rss.xml @@ -14,7 +14,8 @@ https://franzininho.github.io/blog/welcome Thu, 30 May 2019 00:00:00 GMT - Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

Delete the whole directory if you don't want the blog features. As simple as that!

]]>
+ Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

+

Delete the whole directory if you don't want the blog features. As simple as that!

]]>
facebook hello docusaurus @@ -25,7 +26,9 @@ https://franzininho.github.io/blog/hello-world Wed, 29 May 2019 00:00:00 GMT - Welcome to this blog. This blog is created with Docusaurus 2 alpha.

This is a test post.

A whole bunch of other information.

]]>
+ Welcome to this blog. This blog is created with Docusaurus 2 alpha.

+

This is a test post.

+

A whole bunch of other information.

]]>
hello docusaurus diff --git a/blog/tags/docusaurus/index.html b/blog/tags/docusaurus/index.html index d1bb47812..f5541ea5f 100755 --- a/blog/tags/docusaurus/index.html +++ b/blog/tags/docusaurus/index.html @@ -2,16 +2,14 @@ - -3 postagens tagged with "docusaurus" | Franzininho - - - + +3 postagens tagged with "docusaurus" | Franzininho + + + -
-

3 postagens tagged with "docusaurus"

Exibir todas as tags

· Um minuto lido
Yangshun Tay

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

Delete the whole directory if you don't want the blog features. As simple as that!

· Um minuto lido
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - +

3 postagens tagged with "docusaurus"

Exibir todas as tags

Welcome

· Um minuto lido
Yangshun Tay
Front End Engineer @ Facebook

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

+

Delete the whole directory if you don't want the blog features. As simple as that!

Hola

· Um minuto lido
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

\ No newline at end of file diff --git a/blog/tags/facebook/index.html b/blog/tags/facebook/index.html index 47c01c08f..2a55542c2 100755 --- a/blog/tags/facebook/index.html +++ b/blog/tags/facebook/index.html @@ -2,16 +2,14 @@ - -Uma postagem tagged with "facebook" | Franzininho - - - + +Uma postagem tagged with "facebook" | Franzininho + + + -
-

Uma postagem tagged with "facebook"

Exibir todas as tags

· Um minuto lido
Yangshun Tay

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

Delete the whole directory if you don't want the blog features. As simple as that!

- - +

Uma postagem tagged with "facebook"

Exibir todas as tags

Welcome

· Um minuto lido
Yangshun Tay
Front End Engineer @ Facebook

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

+

Delete the whole directory if you don't want the blog features. As simple as that!

\ No newline at end of file diff --git a/blog/tags/hello/index.html b/blog/tags/hello/index.html index f6452a99a..82ec5e11c 100755 --- a/blog/tags/hello/index.html +++ b/blog/tags/hello/index.html @@ -2,16 +2,14 @@ - -2 postagens tagged with "hello" | Franzininho - - - + +2 postagens tagged with "hello" | Franzininho + + + -
-

2 postagens tagged with "hello"

Exibir todas as tags

· Um minuto lido
Yangshun Tay

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

Delete the whole directory if you don't want the blog features. As simple as that!

- - +

2 postagens tagged with "hello"

Exibir todas as tags

Welcome

· Um minuto lido
Yangshun Tay
Front End Engineer @ Facebook

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

+

Delete the whole directory if you don't want the blog features. As simple as that!

\ No newline at end of file diff --git a/blog/tags/hola/index.html b/blog/tags/hola/index.html index 794e26f3e..fb25fec79 100755 --- a/blog/tags/hola/index.html +++ b/blog/tags/hola/index.html @@ -2,16 +2,13 @@ - -Uma postagem tagged with "hola" | Franzininho - - - + +Uma postagem tagged with "hola" | Franzininho + + + -
-

Uma postagem tagged with "hola"

Exibir todas as tags

· Um minuto lido
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - +

Uma postagem tagged with "hola"

Exibir todas as tags

Hola

· Um minuto lido
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

\ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html index b79632b9e..4337b075f 100755 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -2,16 +2,13 @@ - -Tags | Franzininho - - - + +Tags | Franzininho + + + - - - + \ No newline at end of file diff --git a/blog/welcome/index.html b/blog/welcome/index.html index aaffbfbc3..1fe29966b 100755 --- a/blog/welcome/index.html +++ b/blog/welcome/index.html @@ -2,16 +2,14 @@ - -Welcome | Franzininho - - - + +Welcome | Franzininho + + + -
-

Welcome

· Um minuto lido
Yangshun Tay

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

Delete the whole directory if you don't want the blog features. As simple as that!

- - +

Welcome

· Um minuto lido
Yangshun Tay
Front End Engineer @ Facebook

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

+

Delete the whole directory if you don't want the blog features. As simple as that!

\ No newline at end of file diff --git a/docs/FranzBoy/franzboy/index.html b/docs/FranzBoy/franzboy/index.html index 4343b172d..fb117d4ef 100755 --- a/docs/FranzBoy/franzboy/index.html +++ b/docs/FranzBoy/franzboy/index.html @@ -1,17 +1,29 @@ - + - -Placa FranzBoy | Franzininho - - - + +Placa FranzBoy | Franzininho + + + -
-

Placa FranzBoy

A placa FranzBoy veio para integrar a família de placas Franzininho em uma nova abordagem. Com o formato de game retro, procura incentivar o desenvolvimento de jogos, e hacks diversos. Você pode se divertir e aprender muito com eletrônica e programação.

Placa FranzBoy

Possui um hardware enxuto onde é explorado (escovando bits) os recursos do Atmega328, em conjunto com Display OLED e teclas, em um formato de badge para você usar nos eventos.

Licença

Assim como as placas Franzininho DIY e Franzininho Tiny, a placa FranzBoy também foi publicada como projeto de hardware aberto. Ela foi publicada sob a licença CERN Open Hardware Licence.

Conforme definido no “how to” da licença, no repositório do projeto estão incluídos os seguintes arquivos:

  • LICENSE.TXT
  • cern_ohl_v_1_2_howto.pdf
  • CHANGES.TXT
  • COPYRIGHT.TXT
  • PRODUCT.TXT

O projeto está disponível em: https://github.com/Franzininho/FranzBoy

Confira o video de apresentação da placa

- - +

Placa FranzBoy

A placa FranzBoy veio para integrar a família de placas Franzininho em uma nova abordagem. Com o formato de game retro, procura incentivar o desenvolvimento de jogos, e hacks diversos. Você pode se divertir e aprender muito com eletrônica e programação.

+

Placa FranzBoy

+

Possui um hardware enxuto onde é explorado (escovando bits) os recursos do Atmega328, em conjunto com Display OLED e teclas, em um formato de badge para você usar nos eventos.

+

Licença

+

Assim como as placas Franzininho DIY e Franzininho Tiny, a placa FranzBoy também foi publicada como projeto de hardware aberto. Ela foi publicada sob a licença CERN Open Hardware Licence.

+

Conforme definido no “how to” da licença, no repositório do projeto estão incluídos os seguintes arquivos:

+
    +
  • LICENSE.TXT
  • +
  • cern_ohl_v_1_2_howto.pdf
  • +
  • CHANGES.TXT
  • +
  • COPYRIGHT.TXT
  • +
  • PRODUCT.TXT
  • +
+

O projeto está disponível em: https://github.com/Franzininho/FranzBoy

+

Confira o video de apresentação da placa

+
\ No newline at end of file diff --git a/docs/FranzMakey/franzmakey/index.html b/docs/FranzMakey/franzmakey/index.html index 11f0c8c46..55df23d56 100755 --- a/docs/FranzMakey/franzmakey/index.html +++ b/docs/FranzMakey/franzmakey/index.html @@ -1,17 +1,33 @@ - + - -Placa FranzMakey | Franzininho - - - + +Placa FranzMakey | Franzininho + + + -
-

Placa FranzMakey

FRANZmakey é um kit com funcionamento similar ao Makey Makey, porém com um custo bem mais acessível e é feito no Brasil. O objetivo dessa placa é possibilitar a interação com o computador através de objetos inusitados, como: frutas, legumes, etc, e assim estimular a criatividade com muita mão na massa e o pensamento computacional através da programação no Scratch.

Placa FranzMakey

O que eu posso fazer com o FRANZmakey?

Com esse kit você pode colocar a criatividade e mão na massa para funcionar, você pode criar um controle para controlar os controlar jogos no Scartch, animar personagens no Scratch tocando em frutas, criar narrativas, fazer músicas tocando em frutas e etc.

O que posso aprender com o FRANZmakey?

Pensamento computacional, criatividade, programação em blocos no caso o Scratch, aplicações para interface com computador, etc.

Placa FranzMakey

O que vem no Kit:

  • 1 Placa FRANZmakey
  • 1 Cabo USB 2 metros
  • 5 Garras de jacaré
  • Manual de instruções
  • Exemplos de projetos

Veja o funcionamento:

Onde comprar?

Esse kit é feito sob encomenda. Para adquiri-lo, entre em contato conosco: contato@franzininho.com.br

- - +

Placa FranzMakey

FRANZmakey é um kit com funcionamento similar ao Makey Makey, porém com um custo bem mais acessível e é feito no Brasil. O objetivo dessa placa é possibilitar a interação com o computador através de objetos inusitados, como: frutas, legumes, etc, e assim estimular a criatividade com muita mão na massa e o pensamento computacional através da programação no Scratch.

+

Placa FranzMakey

+

O que eu posso fazer com o FRANZmakey?

+

Com esse kit você pode colocar a criatividade e mão na massa para funcionar, você pode criar um controle para controlar os controlar jogos no Scartch, animar personagens no Scratch tocando em frutas, criar narrativas, fazer músicas tocando em frutas e etc.

+

O que posso aprender com o FRANZmakey?

+

Pensamento computacional, criatividade, programação em blocos no caso o Scratch, aplicações para interface com computador, etc.

+

Placa FranzMakey

+

O que vem no Kit:

+
    +
  • 1 Placa FRANZmakey
  • +
  • 1 Cabo USB 2 metros
  • +
  • 5 Garras de jacaré
  • +
  • Manual de instruções
  • +
  • Exemplos de projetos
  • +
+

Veja o funcionamento:

+ + +

Onde comprar?

+

Esse kit é feito sob encomenda. Para adquiri-lo, entre em contato conosco: contato@franzininho.com.br

\ No newline at end of file diff --git a/docs/FranzMakey/primeiros-passos/index.html b/docs/FranzMakey/primeiros-passos/index.html index 4983678a9..e5cc20efe 100755 --- a/docs/FranzMakey/primeiros-passos/index.html +++ b/docs/FranzMakey/primeiros-passos/index.html @@ -1,17 +1,30 @@ - + - -Primeiros Passos | Franzininho - - - + +Primeiros Passos | Franzininho + + + -
-

Primeiros Passos

Plaquinha em mão, agora chegou a hora de conhecê-la!

Os pinos do FRANZmakey equivalem as setas do nosso computador, confira na imagem:

Franzmakey Pinos

Teste de funcionamento da placa

Pegue duas garrinhas de jacaré e faça as seguintes ligações:

  • GND = Terra
  • Pino 0 = Tecla espaço

Franzmakey Pinos

Agora ligue o cabo USB A/B no FranzMakey e a outro conector no USB do computador.

Franzmakey Pinos

*por opção você pode inserir frutas nas pontas das garrinhas para o teste.

Agora abra seu navegador e deixe o cursos piscando, conforme a imagem abaixo:

Franzmakey Pinos

Faça o teste: Segure as duas garrinhas de jacaré, mantenha seu dedo enconstado na parte metálica da garrinha no GND segurando sempre e a outra garrinha você deve tocar e tirar, como se você estivesse dando input do teclado.

Se o cursor começou a andar na barra do seu navegador, sua placa FranzMakey está prontinho!

- - +

Primeiros Passos

Plaquinha em mão, agora chegou a hora de conhecê-la!

+

Os pinos do FRANZmakey equivalem as setas do nosso computador, confira na imagem:

+

Franzmakey Pinos

+

Teste de funcionamento da placa

+

Pegue duas garrinhas de jacaré e faça as seguintes ligações:

+
    +
  • GND = Terra
  • +
  • Pino 0 = Tecla espaço
  • +
+

Franzmakey Pinos

+

Agora ligue o cabo USB A/B no FranzMakey e a outro conector no USB do computador.

+

Franzmakey Pinos

+

*por opção você pode inserir frutas nas pontas das garrinhas para o teste.

+

Agora abra seu navegador e deixe o cursos piscando, conforme a imagem abaixo:

+

Franzmakey Pinos

+

Faça o teste: Segure as duas garrinhas de jacaré, mantenha seu dedo enconstado na parte metálica da garrinha no GND segurando sempre e a outra garrinha você deve tocar e tirar, como se você estivesse dando input do teclado.

+

Se o cursor começou a andar na barra do seu navegador, sua placa FranzMakey está prontinho!

\ No newline at end of file diff --git a/docs/Franzino/franzino/index.html b/docs/Franzino/franzino/index.html index 79ed6d163..ae2504814 100755 --- a/docs/Franzino/franzino/index.html +++ b/docs/Franzino/franzino/index.html @@ -1,18 +1,69 @@ - + - -Placa Franzino | Franzininho - - - + +Placa Franzino | Franzininho + + + -
-

Placa Franzino

Placa Franzino

A placa Franzino é um Arduino standalone de baixo custo. Como seu próprio nome sugere, é uma placa enxuta que possui os componentes básicos para que você possa usar o microcontrolador ATmega328, tanto para estudo quanto para a aplicações em projetos.

Diferente dos standalones disponíveis no mercado, a placa Franzino possui pinagem Arduino UNO Rev 3 e conector para fácil ligação da interface serial. A facilidade de acesso aos pinos da interface serial, possibilita que você ligue módulos de comunicação conforme a necessidade do projeto. Você conseguirá facilmente ligar conversores de níveis seriais como: USB, RS232, RS485 e até mesmo um módulo Bluetooth, sem a necessidade do uso de shields.

A Franzino vem com o bootloader do Arduino UNO facilitando o processo de upload do seu scketch. Você poderá facilmente fazer o upload do seu sketch para placa usando um conversor USB/Serial, seguindo os mesmos passos que já está acostumado a fazer com a placa Arduino UNO.

Características

  • Pinagem Padrão UNO R3;
  • Microcontrolador ATmega328 pu ATmega328P;
  • Alimentação: 7,5 V à 20 V DC;
  • Proteção contra inversão de polaridade da fonte;
  • Conector para ligação de interface serial;
  • LED para indicação de alimentação;
  • LED conectado ao pino 13 para uso geral

A seguir é apresentada a pinagem para interface serial:

pinagem

Os pino D2 e D4 podem ser utilizados para uma comunicação soft serial, como pino de controle da comunicação RS485 ou outras aplicações de entrada ou saída.

Outra vantagem interessante é que as linhas de alimentação(VCC e GND) também estão disponíveis nesse conector.

Assim, com esse conector você pode facilmente ligar um conversor USB/Serial para comunicação com um computador, seja para upload dos sketchs quanto para troca de informações.

ligacao_conversor USB Serial

Se o seu projeto não necessitar da comunicação USB/Serial durante o seu funcionamento, você poderá usar o mesmo conversor para fazer upload em outra Franzinos.

Algumas aplicações necessitam de comunicação serial no padrão RS232. Dessa forma você pode ligar facilmente um conversor TTL/RS232.

conversor_ttl_rs232.png

Também é comum aplicações que necessitem da comunicação RS485. Para isso você pode facilmente ligar um módulo conversor TTL/RS485:

HC-05

Outra aplicação interessante para comunicação e o uso de módulos Bluetooth. Esse tipo de módulo pode ser facilmente ligado a Franzino tanto para uso dos pinos padrões de comunicação TX e RX quanto para comunicação soft serial:

Conversor RS485

Como observado acima, há muitas possibilidades de comunicações e você pode facilmente ligar outros módulos para diversas aplicações conforme sua necessidade.

Limitações da Franzino

A Franzino é uma placa standalone que possui diversas vantagens. Porém como foi desenvolvida em face simples e com o mínimo de componente necessários para o uso do microcontrolador, possui algumas limitações em relação ao Arduino UNO, que são:

  • Não há regulador 3,3 V, dessa forma o pino 3.3V não está conectado;
  • O pino Vin não está conectado a alimentação;
  • Os pinos SCL e SDA não estão conectados as pinos A4 e A5;
  • Não possui conversor USB/Serial
  • Precisa de um conversor USB/Serial para upload dos sketchs

Alimentação

A Franzino pode ser alimentada das seguintes formas:

  • Conector P4 com tensão de 7,5 V a 20 V como positivo no centro;
  • Pino 5V e GND - tensão de alimentação fixa em 5 VDC
  • Através nos pinos VCC e GND disponíveis conector de expansão serial;

Atenção

Não LIGAR o VCC do conversor USB/SERIAL a placa se a fonte externa estiver ligada. Nesse caso ligar apenas os pinos DTR, RXI, TXO e GND.

Esquemático

Esquemático

Layout

Layout

Licença

CC SA 4.0 -Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Todos os arquivos de projeto estão disponíveis no Github: https://github.com/Franzininho/Franzino

Referências

Artigo no Embarcados: https://www.embarcados.com.br/franzino-open-hardware-de-baixo-custo/

- - +

Placa Franzino

Placa Franzino

+

A placa Franzino é um Arduino standalone de baixo custo. Como seu próprio nome sugere, é uma placa enxuta que possui os componentes básicos para que você possa usar o microcontrolador ATmega328, tanto para estudo quanto para a aplicações em projetos.

+

Diferente dos standalones disponíveis no mercado, a placa Franzino possui pinagem Arduino UNO Rev 3 e conector para fácil ligação da interface serial. A facilidade de acesso aos pinos da interface serial, possibilita que você ligue módulos de comunicação conforme a necessidade do projeto. Você conseguirá facilmente ligar conversores de níveis seriais como: USB, RS232, RS485 e até mesmo um módulo Bluetooth, sem a necessidade do uso de shields.

+

A Franzino vem com o bootloader do Arduino UNO facilitando o processo de upload do seu scketch. Você poderá facilmente fazer o upload do seu sketch para placa usando um conversor USB/Serial, seguindo os mesmos passos que já está acostumado a fazer com a placa Arduino UNO.

+

Características

+
    +
  • Pinagem Padrão UNO R3;
  • +
  • Microcontrolador ATmega328 pu ATmega328P;
  • +
  • Alimentação: 7,5 V à 20 V DC;
  • +
  • Proteção contra inversão de polaridade da fonte;
  • +
  • Conector para ligação de interface serial;
  • +
  • LED para indicação de alimentação;
  • +
  • LED conectado ao pino 13 para uso geral
  • +
+

A seguir é apresentada a pinagem para interface serial:

+

pinagem

+

Os pino D2 e D4 podem ser utilizados para uma comunicação soft serial, como pino de controle da comunicação RS485 ou outras aplicações de entrada ou saída.

+

Outra vantagem interessante é que as linhas de alimentação(VCC e GND) também estão disponíveis nesse conector.

+

Assim, com esse conector você pode facilmente ligar um conversor USB/Serial para comunicação com um computador, seja para upload dos sketchs quanto para troca de informações.

+

ligacao_conversor USB Serial

+

Se o seu projeto não necessitar da comunicação USB/Serial durante o seu funcionamento, você poderá usar o mesmo conversor para fazer upload em outra Franzinos.

+

Algumas aplicações necessitam de comunicação serial no padrão RS232. Dessa forma você pode ligar facilmente um conversor TTL/RS232.

+

conversor_ttl_rs232.png

+

Também é comum aplicações que necessitem da comunicação RS485. Para isso você pode facilmente ligar um módulo conversor TTL/RS485:

+

HC-05

+

Outra aplicação interessante para comunicação e o uso de módulos Bluetooth. Esse tipo de módulo pode ser facilmente ligado a Franzino tanto para uso dos pinos padrões de comunicação TX e RX quanto para comunicação soft serial:

+

Conversor RS485

+

Como observado acima, há muitas possibilidades de comunicações e você pode facilmente ligar outros módulos para diversas aplicações conforme sua necessidade.

+

Limitações da Franzino

+

A Franzino é uma placa standalone que possui diversas vantagens. Porém como foi desenvolvida em face simples e com o mínimo de componente necessários para o uso do microcontrolador, possui algumas limitações em relação ao Arduino UNO, que são:

+
    +
  • Não há regulador 3,3 V, dessa forma o pino 3.3V não está conectado;
  • +
  • O pino Vin não está conectado a alimentação;
  • +
  • Os pinos SCL e SDA não estão conectados as pinos A4 e A5;
  • +
  • Não possui conversor USB/Serial
  • +
  • Precisa de um conversor USB/Serial para upload dos sketchs
  • +
+

Alimentação

+

A Franzino pode ser alimentada das seguintes formas:

+
    +
  • Conector P4 com tensão de 7,5 V a 20 V como positivo no centro;
  • +
  • Pino 5V e GND - tensão de alimentação fixa em 5 VDC
  • +
  • Através nos pinos VCC e GND disponíveis conector de expansão serial;
  • +
+

Atenção

+

Não LIGAR o VCC do conversor USB/SERIAL a placa se a fonte externa estiver ligada. Nesse caso ligar apenas os pinos DTR, RXI, TXO e GND.

+

Esquemático

+

Esquemático

+

Layout

+

Layout

+

Licença

+

CC SA 4.0 +Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

+

Todos os arquivos de projeto estão disponíveis no Github: https://github.com/Franzininho/Franzino

+

Referências

+

Artigo no Embarcados: https://www.embarcados.com.br/franzino-open-hardware-de-baixo-custo

\ No newline at end of file diff --git a/docs/Franzino/upload-com-arduino-uno/index.html b/docs/Franzino/upload-com-arduino-uno/index.html index 654cda75b..0a5942c8e 100755 --- a/docs/Franzino/upload-com-arduino-uno/index.html +++ b/docs/Franzino/upload-com-arduino-uno/index.html @@ -1,17 +1,43 @@ - + - -Gravando a Franzino com um placa Arduino UNO | Franzininho - - - + +Gravando a Franzino com um placa Arduino UNO | Franzininho + + + -
-

Gravando a Franzino com um placa Arduino UNO

Se você não possui um conversor USB/Serial você pode gravar a Franzino através de um Arduino. Para isso vamos configurar a placa Arduino UNO com programador.

Primeiro, escolha o exemplo ArduinoISP, conforme figura abaixo:

Faça o upload para a placa Arduino UNO que será usada como programador.

Feito o UPLOAD, agora vamos as conexões do Arduino UNO na Franzino:

  • Ligue o pino RESET da FRANZINO ao pino 10 do Arduino
  • Ligue o pino 11 da FRANZINO ao pino 11 do Arduino
  • Ligue o pino 12 da FRANZINO ao pino 12 do Arduino
  • Ligue o pino 13 da FRANZINO ao pino 13 do Arduino
  • Ligue o pino 5V da FRANZINO no pino 5V do Arduino
  • Ligue o pino GND da FRANZINO ao GND do Arduino

Ligação_arduino_franzino.png

Configurando o avrdude ( se estiver usando o ATmega328 e não o ATmega328P)

A versão 0 da Franzino vem com o ATmega328-PU, dessa forma precisamos configurar o avrdude para gravar esse microcontrolador. Na pasta do arduino acesse:

C:\arduino-1.6.8\hardware\tools\avr\etc, abra o arquivo avrdude.conf

Procure a assinatura do ATMEGA328P:

Troque a assinatura por:

Salve o arquivo.

tip

Após a gravação, volte a assinatura para o valor original: signature= 0x1e 0x95 0x0F;

Upload de Sketchs usando a Arduino UNO

Pronto, agora abra o programa que será gravado na Franzino. Para esse exemplo vamos usar o exemplo Blink, mas você poderá fazer esse procedimento para gravar suas aplicações;

Agora vamos preparar para gravação. Configure o Programador como ArduinoISP:

Pronto, agora é só fazer o UPLOAD para a Franzino:

- - +

Gravando a Franzino com um placa Arduino UNO

Se você não possui um conversor USB/Serial você pode gravar a Franzino através de um Arduino. Para isso vamos configurar a placa Arduino UNO com programador.

+

Primeiro, escolha o exemplo ArduinoISP, conforme figura abaixo:

+

+

Faça o upload para a placa Arduino UNO que será usada como programador.

+

Feito o UPLOAD, agora vamos as conexões do Arduino UNO na Franzino:

+
    +
  • Ligue o pino RESET da FRANZINO ao pino 10 do Arduino
  • +
  • Ligue o pino 11 da FRANZINO ao pino 11 do Arduino
  • +
  • Ligue o pino 12 da FRANZINO ao pino 12 do Arduino
  • +
  • Ligue o pino 13 da FRANZINO ao pino 13 do Arduino
  • +
  • Ligue o pino 5V da FRANZINO no pino 5V do Arduino
  • +
  • Ligue o pino GND da FRANZINO ao GND do Arduino
  • +
+

Ligação_arduino_franzino.png

+

Configurando o avrdude ( se estiver usando o ATmega328 e não o ATmega328P)

+

A versão 0 da Franzino vem com o ATmega328-PU, dessa forma precisamos configurar o avrdude para gravar esse microcontrolador. Na pasta do arduino acesse:

+

C:\arduino-1.6.8\hardware\tools\avr\etc, abra o arquivo avrdude.conf

+

Procure a assinatura do ATMEGA328P:

+

+

Troque a assinatura por:

+

+

Salve o arquivo.

+

Após a gravação, volte a assinatura para o valor original: signature= 0x1e 0x95 0x0F;

+

Upload de Sketchs usando a Arduino UNO

+

Pronto, agora abra o programa que será gravado na Franzino. Para esse exemplo vamos usar o exemplo Blink, mas você poderá fazer esse procedimento para gravar suas aplicações;

+

+

Agora vamos preparar para gravação. Configure o Programador como ArduinoISP:

+

+

Pronto, agora é só fazer o UPLOAD para a Franzino:

+

\ No newline at end of file diff --git a/docs/Franzino/upload-conversor-serial/index.html b/docs/Franzino/upload-conversor-serial/index.html index de0ddac44..7bc47fae5 100755 --- a/docs/Franzino/upload-conversor-serial/index.html +++ b/docs/Franzino/upload-conversor-serial/index.html @@ -1,17 +1,18 @@ - + - -Upload via conversor USB/SERIAL | Franzininho - - - + +Upload via conversor USB/SERIAL | Franzininho + + + -
-

Upload via conversor USB/SERIAL

Para fazer upload de códigos para a Franzino, primeiro é necessário ligar o conversor USB/Serial a placa, como exibido na figura abaixo:

ligação Conversor USB/Seril

Selecione na IDE do Arduino a Placa Arduino UNO. Também selecione a porta seria que foi criada ao ser inserido o conversor USB/SERIAL no computador:

configuração da IDE Arduino

Pronto, agora é só fazer o upload dos seus códigos para a placa Franzino

- - +

Upload via conversor USB/SERIAL

Para fazer upload de códigos para a Franzino, primeiro é necessário ligar o conversor USB/Serial a placa, como exibido na figura abaixo:

+

ligação Conversor USB/Seril

+

Selecione na IDE do Arduino a Placa Arduino UNO. Também selecione a porta seria que foi criada ao ser inserido o conversor USB/SERIAL no computador:

+

configuração da IDE Arduino

+

Pronto, agora é só fazer o upload dos seus códigos para a placa Franzino

\ No newline at end of file diff --git a/docs/LaboratorioSistemasIot/LaboratorioSistemasIot/index.html b/docs/LaboratorioSistemasIot/LaboratorioSistemasIot/index.html index ba866d5f4..97820b721 100755 --- a/docs/LaboratorioSistemasIot/LaboratorioSistemasIot/index.html +++ b/docs/LaboratorioSistemasIot/LaboratorioSistemasIot/index.html @@ -1,17 +1,46 @@ - + - -Placa Laboratório de Sistemas Embarcados e IoT | Franzininho - - - + +Placa Laboratório de Sistemas Embarcados e IoT | Franzininho + + + -
-

Placa Laboratório de Sistemas Embarcados e IoT

placa Laboratório de Sistemas Embarcados e IoT

A placa Laboratório de Sistemas Embarcados e IoT é uma placa de circuito impresso para o ensino de programação em placas microcontroladas. Esta placa contém uma série de periféricos que permitem a exploração de conceitos relacionados ao uso de placas microcontroladas. A conexão desses periféricos já está de certa forma "embutida" na placa sendo necessária apenas a ativação dos componentes através da conexão de pinos de ativação associados ao periférico.

Esta placa foi desevolvida para ser usada em conjunto com a placa Franzininho Wifi. Sendo assim, foram adicionadas na placa barras de pinos que permitam a conexão desta placa com facilidade. No entanto, é possível também utilizar a placa com outras placas microcontroladas, como a placa Arduino Uno através de um adaptador.

Além dos periféricos padrão, também estão disponíveis na placa conectores extra que permitem a utilização das portas da Franzininho Wifi para fazer conexões externas caso os periféricos da placa não sejam satisfatórios.

Clique aqui para acessar o projeto da placa de circuito impresso no Github.

Periféricos disponíveis na placa

  • 4 LEDs coloridos difusos
  • 4 chaves táteis 6X6mm
  • 1 Teclado Matricial 4X4 (composto de chaves táteis 6X6mm)
  • 1 LED RGB Endereçável 5050
  • 1 Sensor DHT11
  • 1 Display de 7 segmentos cátodo comum
  • 1 Sensor LDR de 5mm
  • 1 Joystick (também conhecido como Thumb Joystick)
  • 1 LED RGB cátodo comum
  • 1 Potenciômetro
  • 1 Piezo Buzzer
  • 1 Display OLED 128X64 Pixels
  • 2 Conectores fêmea de 4 pinos para conexão de sensores externos
  • 2 Conectores Grove para conexão de sensores externos
  • 1 Transistor NPN

Ativação dos periféricos

Os pinos de ativação disponíveis na placa são dois pinos macho localizados nas trilhas entre um pino de um componente e o pino onde este componente se conecta no socket da placa microcontrolada. Para ativar um pino de ativação, basta fazer a ligação dos dois pinos macho através de um conector, o que permite que as conexões corretas sejam realizadas rapidamente.

Estes pinos possuem uma codificação baseada no sistema hexadecimal que se encontra do lado do pino de ativação onde o primeiro algorismo indica a função do pino, e o segundo indica a numeração dele. A lista de pinos e funções pode ser vista na tabela abaixo:

LetraSignificado
0GND
3Alimentação de 3.3V
5Alimentação de 5V
APinos ligados em portas Analógicas
BPinos ligados nas mesmas portas que A
CEspeciais
DPinos ligados em portas Digitais
EPinos ligados nas mesmas portas que D

Devido à essa codificação, os pinos de ativação acabaram com numerações que não possuem relação com os pinos da Franzininho Wifi. Visando sanar eventuais problemas ligados a essa relação, a correpondência entre os pinos de ativação e os pinos da Franzininho Wifi se encontra impressa na PCB.

Além disso, também é possível usar a biblioteca laboratorioFW, que faz o mapeamento dos pinos da placa Franzininho Wifi para os códigos dos pinos de ativação, facilitando assim ainda mais o uso desta ferramenta.

Periféricos e pinos de ativação

lab-numerado

PerifericoPinos de AtivaçãoCódigo na imagem
LEDs difusosA0, A1, A2, A3 (dependendo do LED escolhido)1
BotõesA4 e 31, A5 e 32, A6 e 33, A7 e 34 (dependendo do botão escolhido)7
BuzzerE26
LED RGBAC, AB, AA, 0012
PotenciômetroB8, 355
Sensor de luminosidadeA8, 3610
Sensor de umidade e temperatura DTH11A9, 5114
Display de 7 segmentosD0, D1, D2, D3, D4, D5, D6, D7, 018
Transistor NPNE99
Display OLEDC0, C1, 302
Teclado MatricialDA, DB, DC, DD, E6, E4, E33
Conexão para Servo MotorB5, 54, 0211
LED RGB endereçávelD9, 3713
Módulo JoystickD8, B1, B0, 384
Conectores fêmea de 4 pinos(BA, BB, 3A) ou (B3, B2, 54) dependendo do conector escolhido17 e 15
Conectores Grove(B7, 39) ou (52, B6) dependendo do conector escolhido16 e 18
Obs.

A placa Laboratório de Sistemas Embarcados e IoT foi desenvolvida como o Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

- - +

Placa Laboratório de Sistemas Embarcados e IoT

placa Laboratório de Sistemas Embarcados e IoT

+

A placa Laboratório de Sistemas Embarcados e IoT é uma placa de circuito impresso para o ensino de programação em placas microcontroladas. Esta placa contém uma série de periféricos que permitem a exploração de conceitos relacionados ao uso de placas microcontroladas. A conexão desses periféricos já está de certa forma "embutida" na placa sendo necessária apenas a ativação dos componentes através da conexão de pinos de ativação associados ao periférico.

+

Esta placa foi desevolvida para ser usada em conjunto com a placa Franzininho Wifi. Sendo assim, foram adicionadas na placa barras de pinos que permitam a conexão desta placa com facilidade. No entanto, é possível também utilizar a placa com outras placas microcontroladas, como a placa Arduino Uno através de um adaptador.

+

Além dos periféricos padrão, também estão disponíveis na placa conectores extra que permitem a utilização das portas da Franzininho Wifi para fazer conexões externas caso os periféricos da placa não sejam satisfatórios.

+

Clique aqui para acessar o projeto da placa de circuito impresso no Github.

+

Periféricos disponíveis na placa

+
    +
  • 4 LEDs coloridos difusos
  • +
  • 4 chaves táteis 6X6mm
  • +
  • 1 Teclado Matricial 4X4 (composto de chaves táteis 6X6mm)
  • +
  • 1 LED RGB Endereçável 5050
  • +
  • 1 Sensor DHT11
  • +
  • 1 Display de 7 segmentos cátodo comum
  • +
  • 1 Sensor LDR de 5mm
  • +
  • 1 Joystick (também conhecido como Thumb Joystick)
  • +
  • 1 LED RGB cátodo comum
  • +
  • 1 Potenciômetro
  • +
  • 1 Piezo Buzzer
  • +
  • 1 Display OLED 128X64 Pixels
  • +
  • 2 Conectores fêmea de 4 pinos para conexão de sensores externos
  • +
  • 2 Conectores Grove para conexão de sensores externos
  • +
  • 1 Transistor NPN
  • +
+

Ativação dos periféricos

+

Os pinos de ativação disponíveis na placa são dois pinos macho localizados nas trilhas entre um pino de um componente e o pino onde este componente se conecta no socket da placa microcontrolada. Para ativar um pino de ativação, basta fazer a ligação dos dois pinos macho através de um conector, o que permite que as conexões corretas sejam realizadas rapidamente.

+

Estes pinos possuem uma codificação baseada no sistema hexadecimal que se encontra do lado do pino de ativação onde o primeiro algorismo indica a função do pino, e o segundo indica a numeração dele. A lista de pinos e funções pode ser vista na tabela abaixo:

+
LetraSignificado
0GND
3Alimentação de 3.3V
5Alimentação de 5V
APinos ligados em portas Analógicas
BPinos ligados nas mesmas portas que A
CEspeciais
DPinos ligados em portas Digitais
EPinos ligados nas mesmas portas que D
+

Devido à essa codificação, os pinos de ativação acabaram com numerações que não possuem relação com os pinos da Franzininho Wifi. Visando sanar eventuais problemas ligados a essa relação, a correpondência entre os pinos de ativação e os pinos da Franzininho Wifi se encontra impressa na PCB.

+

Além disso, também é possível usar a biblioteca laboratorioFW, que faz o mapeamento dos pinos da placa Franzininho Wifi para os códigos dos pinos de ativação, facilitando assim ainda mais o uso desta ferramenta.

+

Periféricos e pinos de ativação

+

lab-numerado

+
PerifericoPinos de AtivaçãoCódigo na imagem
LEDs difusosA0, A1, A2, A3 (dependendo do LED escolhido)1
BotõesA4 e 31, A5 e 32, A6 e 33, A7 e 34 (dependendo do botão escolhido)7
BuzzerE26
LED RGBAC, AB, AA, 0012
PotenciômetroB8, 355
Sensor de luminosidadeA8, 3610
Sensor de umidade e temperatura DTH11A9, 5114
Display de 7 segmentosD0, D1, D2, D3, D4, D5, D6, D7, 018
Transistor NPNE99
Display OLEDC0, C1, 302
Teclado MatricialDA, DB, DC, DD, E6, E4, E33
Conexão para Servo MotorB5, 54, 0211
LED RGB endereçávelD9, 3713
Módulo JoystickD8, B1, B0, 384
Conectores fêmea de 4 pinos(BA, BB, 3A) ou (B3, B2, 54) dependendo do conector escolhido17 e 15
Conectores Grove(B7, 39) ou (52, B6) dependendo do conector escolhido16 e 18
+

A placa Laboratório de Sistemas Embarcados e IoT foi desenvolvida como o Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

\ No newline at end of file diff --git a/docs/LaboratorioSistemasIot/adaptadores/arduino-uno/index.html b/docs/LaboratorioSistemasIot/adaptadores/arduino-uno/index.html index 29ea21f0e..16ea591c0 100755 --- a/docs/LaboratorioSistemasIot/adaptadores/arduino-uno/index.html +++ b/docs/LaboratorioSistemasIot/adaptadores/arduino-uno/index.html @@ -1,17 +1,20 @@ - + - -Adaptador Arduino Uno | Franzininho - - - + +Adaptador Arduino Uno | Franzininho + + + -
-

Adaptador Arduino Uno

Este adaptador permite a utilização da placa Arduino Uno em conjunto com a placa Laboratório de Sistemas Embarcados e IoT através de um remapeamento da pinagem do Arduino Uno e para a pinagem da Franzininho Wifi (utilizada no projeto da placa de laboratório). Para utilizar o adaptador basta conectá-lo ao Arduino como um shield e então conectar o adaptador na placa.

Clique aqui para acessar o projeto da placa de circuito impresso no Github.

Pinos de ativação

Este adaptador utiliza o mesmo sistema de codificação de pinos de ativação definido para a placa Laboratório de Sistemas Embarcados e IoT sendo que a correspondência entre o pino do Arduino e o pino de ativação na placa laboratório foi impresso no adaptdor e também pode ser verificada no repositório do projeto no Github.

Para facilitar o uso deste adaptador foi desenvolvida a biblioteca laboratorioFW_ARDUNO para uso em conjunto com o placa que permite o uso dos códigos dos pinos de ativação dentro da programação.

Obs.

Este projeto foi desenvolvido como parte do Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

- - +

Adaptador Arduino Uno

+

Este adaptador permite a utilização da placa Arduino Uno em conjunto com a placa Laboratório de Sistemas Embarcados e IoT através de um remapeamento da pinagem do Arduino Uno e para a pinagem da Franzininho Wifi (utilizada no projeto da placa de laboratório). Para utilizar o adaptador basta conectá-lo ao Arduino como um shield e então conectar o adaptador na placa.

+

Clique aqui para acessar o projeto da placa de circuito impresso no Github.

+

Pinos de ativação

+

Este adaptador utiliza o mesmo sistema de codificação de pinos de ativação definido para a placa Laboratório de Sistemas Embarcados e IoT sendo que a correspondência entre o pino do Arduino e o pino de ativação na placa laboratório foi impresso no adaptdor e também pode ser verificada no repositório do projeto no Github.

+

Para facilitar o uso deste adaptador foi desenvolvida a biblioteca laboratorioFW_ARDUNO para uso em conjunto com o placa que permite o uso dos códigos dos pinos de ativação dentro da programação.

+

Este projeto foi desenvolvido como parte do Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

\ No newline at end of file diff --git a/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW/index.html b/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW/index.html index 383a1e03a..8a66201ac 100755 --- a/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW/index.html +++ b/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW/index.html @@ -1,21 +1,80 @@ - + - -laboratorioFW | Franzininho - - - + +laboratorioFW | Franzininho + + + -
-

laboratorioFW

Nesta biblioteca é possível encontrar o mapeamento entre a pinagem da placa Franzininho Wifi e a codificação dos pinos de ativação da placa Laboratório de sistemas embarcados e IoT e exemplos de utilização dos periféricos disponíveis na placa.

Clique aqui para acessar o repositório da biblioteca no Github.

Como instalar a biblioteca

  1. Faça o donwload da biblioteca em formato zip clicando em Code e depois em Download ZIP

  1. Abra a IDE do Arduino
  2. Vá em Sketch > Include Library > Add .ZIP Library

  1. Selecione o arquivo zip baixado e clique em ok
  2. Opcional: Procure pelos exemplos da biblioteca em File > Examples

Como usar a biblioteca

Para utilizar a biblioteca basta incluí-la no seu arquivo de código com a linha #include<laboratorioFW.h>. Depois disso, você pode utilizar os códigos dos pinos de ativação na placa dentro do seu código.

Importante : Os algorismos do código do pino de ativação são separados por um caractere de _, ou seja o pino de ativação C0 pode ser acessado no código através do código C_0 e assim por diante.

Exemplo de utilização:

#include <laborarotioFW.h>

#define led A_1

void setup(){
pinMode(led,OUTPUT);
}

void loop{
digitalWrite(led,HIGH);
delay(1000);
digitalWrite(led,LOW);
delay(1000);
}

Exemplos implementados:

testes_completos.ino

Neste exemplo temos todos os códigos necessários para os testes de todos os periféricos disponíveis na placa. Este código é um código para a validação da placa e não para ser utilizado no cotidiano.

adivinhe_a_senha.ino

Neste exemplo implementamos um sistema de verificação de senha utilizando o teclado matricial e a biblioteca Keypad para fazer o mapeamento -do teclado. Neste sistema, o usuário deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usuário indica que terminou de digitar a senha apertando um o botão correspondente ao caractere * ou #, essa sequência é comparada com uma senha previamente definida no código. Um led é aceso para indicar se a senha está correta ou não e uma mensagem com essa informação é impresso no monitor serial.

ativar_led_RGB_com_potenciometro_e_botoes.ino

Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenciômetro e três botões. Os três botões são utilizados para selecionar qual cor do LED RGB será controlada (vermelho, verde e azul) e a leitura analógica do potenciômetro é usada para dosar a intensidade da cor do terminal.

ativar_servo_motor_com_botoes.ino

Neste exemplo, utilizamos dois botões para controlar a posição de um servo motor. Os botões são associados no código às direções esquerda e direita e alteram o ângulo do servo fazendo com que seja possível movimentá-lo nas duas direções. Foi usada a biblioteca ESP32_S2_ISR_Servo.

contagem_display_7seg.ino

Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos.

controle_led_com_ldr.ino

Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura é mapeada e o valor resultante é usado para acender um LED. O exemplo também conta com um botão que controla um estado interno do programa e seleciona se a leitura será impressa como é lida ou com lógica complementar.

do_re_mi_fa.ino

Neste exemplo uma música é tocada pelo buzzer em conjunto com a ativação -do LED RGB endereçável. O programa utiliza a biblioteca Adafruit_NeoPixel para controlar o LED.

genio.ino

Neste exemplo, implementamos o jogo Simon, também conhecido como gênio. Neste jogo, quatro LEDs são ativados em uma sequência gerada aleatóriamente e essa sequência é apresentada para o jogador, que deve repetir a sequência na ordem correta pressionando os botões correspondentes. Quando os LEDs acendem, um som correspondente é tocado no buzzer.

leitura_do_teclado.ino

Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e -a imprimimos essa tecla no no monitor serial. A biblioteca Keypad é utilizada para fazer o mapeamento do teclado.

leitura_sensores_externos.ino

Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets -para conectores externos da placa e imprimimos os valores lidos no monitor serial.

leitura_sensores_grove.ino

Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial.

leitura_umidade_temperatura_oled.ino

Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, são utilizadas as bibliotecas DTH e SSD1306Wire.

movimentar_elemento_oled_joystick.ino

Neste exemplo utilizamos o display OLED para mostrar um asterisco que pode ser controlado pelo módulo de joystick se movendo no display. Foi utilizada a biblioteca SSD1306Wire.

Obs.

Este projeto foi desenvolvido como parte do Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

- - +

laboratorioFW

Nesta biblioteca é possível encontrar o mapeamento entre a pinagem da placa Franzininho Wifi e a codificação dos pinos de ativação da placa Laboratório de sistemas embarcados e IoT e exemplos de utilização dos periféricos disponíveis na placa.

+

Clique aqui para acessar o repositório da biblioteca no Github.

+

Como instalar a biblioteca

+
    +
  1. Faça o donwload da biblioteca em formato zip clicando em Code e depois em Download ZIP
  2. +
+

+
    +
  1. Abra a IDE do Arduino
  2. +
  3. Vá em Sketch > Include Library > Add .ZIP Library
  4. +
+

+
    +
  1. Selecione o arquivo zip baixado e clique em ok
  2. +
  3. Opcional: Procure pelos exemplos da biblioteca em File > Examples
  4. +
+

Como usar a biblioteca

+

Para utilizar a biblioteca basta incluí-la no seu arquivo de código com a linha #include<laboratorioFW.h>. Depois disso, você pode utilizar os códigos dos pinos de ativação na placa dentro do seu código.

+

Importante : Os algorismos do código do pino de ativação são separados por um caractere de _, ou seja o pino de ativação C0 pode ser acessado no código através do código C_0 e assim por diante.

+

Exemplo de utilização:

+
#include <laborarotioFW.h>
+
+#define led A_1
+
+void setup(){
+    pinMode(led,OUTPUT);
+}
+
+void loop{
+    digitalWrite(led,HIGH);
+    delay(1000);
+    digitalWrite(led,LOW);
+    delay(1000);
+}
+
+

Exemplos implementados:

+

testes_completos.ino

+

Neste exemplo temos todos os códigos necessários para os testes de todos os periféricos disponíveis na placa. Este código é um código para a validação da placa e não para ser utilizado no cotidiano.

+

adivinhe_a_senha.ino

+

Neste exemplo implementamos um sistema de verificação de senha utilizando o teclado matricial e a biblioteca Keypad para fazer o mapeamento +do teclado. Neste sistema, o usuário deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usuário indica que terminou de digitar a senha apertando um o botão correspondente ao caractere * ou #, essa sequência é comparada com uma senha previamente definida no código. Um led é aceso para indicar se a senha está correta ou não e uma mensagem com essa informação é impresso no monitor serial.

+

ativar_led_RGB_com_potenciometro_e_botoes.ino

+

Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenciômetro e três botões. Os três botões são utilizados para selecionar qual cor do LED RGB será controlada (vermelho, verde e azul) e a leitura analógica do potenciômetro é usada para dosar a intensidade da cor do terminal.

+

ativar_servo_motor_com_botoes.ino

+

Neste exemplo, utilizamos dois botões para controlar a posição de um servo motor. Os botões são associados no código às direções esquerda e direita e alteram o ângulo do servo fazendo com que seja possível movimentá-lo nas duas direções. Foi usada a biblioteca ESP32_S2_ISR_Servo.

+

contagem_display_7seg.ino

+

Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos.

+

controle_led_com_ldr.ino

+

Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura é mapeada e o valor resultante é usado para acender um LED. O exemplo também conta com um botão que controla um estado interno do programa e seleciona se a leitura será impressa como é lida ou com lógica complementar.

+

do_re_mi_fa.ino

+

Neste exemplo uma música é tocada pelo buzzer em conjunto com a ativação +do LED RGB endereçável. O programa utiliza a biblioteca Adafruit_NeoPixel para controlar o LED.

+

genio.ino

+

Neste exemplo, implementamos o jogo Simon, também conhecido como gênio. Neste jogo, quatro LEDs são ativados em uma sequência gerada aleatóriamente e essa sequência é apresentada para o jogador, que deve repetir a sequência na ordem correta pressionando os botões correspondentes. Quando os LEDs acendem, um som correspondente é tocado no buzzer.

+

leitura_do_teclado.ino

+

Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e +a imprimimos essa tecla no no monitor serial. A biblioteca Keypad é utilizada para fazer o mapeamento do teclado.

+

leitura_sensores_externos.ino

+

Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets +para conectores externos da placa e imprimimos os valores lidos no monitor serial.

+

leitura_sensores_grove.ino

+

Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial.

+

leitura_umidade_temperatura_oled.ino

+

Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, são utilizadas as bibliotecas DTH e SSD1306Wire.

+

movimentar_elemento_oled_joystick.ino

+

Neste exemplo utilizamos o display OLED para mostrar um asterisco que pode ser controlado pelo módulo de joystick se movendo no display. Foi utilizada a biblioteca SSD1306Wire.

+

Este projeto foi desenvolvido como parte do Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

\ No newline at end of file diff --git a/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO/index.html b/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO/index.html index 24497ffb7..b34554e86 100755 --- a/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO/index.html +++ b/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO/index.html @@ -1,21 +1,78 @@ - + - -laboratorioFW_ARDUNO | Franzininho - - - + +laboratorioFW_ARDUNO | Franzininho + + + -
-

laboratorioFW_ARDUNO

Nesta biblioteca é possível encontrar o mapeamento entre a pinagem da placa Arduino Uno e a codificação dos pinos de ativação da placa Laboratório de Sistemas Embarcados e IoT segundo o projeto do adaptador para Arduino projeto para a placa. A biblioteca também é possível encontrar exemplos de utilização dos periféricos disponíveis na placa.

Clique aqui para acessar o repositório da biblioteca no Github.

Como instalar a biblioteca

  1. Faça o donwload da biblioteca em formato zip clicando em Code e depois em Download ZIP

  1. Abra a IDE do Arduino
  2. Vá em Sketch > Include Library > Add .ZIP Library

  1. Selecione o arquivo zip baixado e clique em ok
  2. Opcional: Procure pelos exemplos da biblioteca em File > Examples

Como usar a biblioteca

Para utilizar a biblioteca basta incluí-la no seu arquivo de código com a linha #include<laboratorioFW_ARDUNO.h>. Depois disso, você pode utilizar os códigos dos pinos de ativação na placa dentro do seu código.

Importante : Os algorismos do código do pino de ativação são separados por um caractere de _, ou seja o pino de ativação C0 pode ser acessado no código através do código C_0 e assim por diante.

Exemplo de utilização:

#include <laborarotioFW_ARDUNO.h>

#define led A_1

void setup(){
pinMode(led,OUTPUT);
}

void loop{
digitalWrite(led,HIGH);
delay(1000);
digitalWrite(led,LOW);
delay(1000);
}

Exemplos implementados:

testes_completos.ino

Neste exemplo temos todos os códigos necessários para os testes de todos os periféricos disponíveis na placa. Este código é um código para a validação da placa e não para ser utilizado no cotidiano.

adivinhe_a_senha.ino

Neste exemplo implementamos um sistema de verificação de senha utilizando o teclado matricial e a biblioteca Keypad para fazer o mapeamento -do teclado. Neste sistema, o usuário deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usuário indica que terminou de digitar a senha apertando um o botão correspondente ao caractere * ou #, essa sequência é comparada com uma senha previamente definida no código. Um led é aceso para indicar se a senha está correta ou não e uma mensagem com essa informação é impresso no monitor serial.

ativar_led_RGB_com_potenciometro_e_botoes.ino

Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenciômetro e três botões. Os três botões são utilizados para selecionar qual cor do LED RGB será controlada (vermelho, verde e azul) e a leitura analógica do potenciômetro é usada para dosar a intensidade da cor do terminal.

ativar_servo_motor_com_botoes.ino

Neste exemplo, utilizamos dois botões para controlar a posição de um servo motor. Os botões são associados no código às direções esquerda e direita e alteram o ângulo do servo fazendo com que seja possível movimentá-lo nas duas direções. Foi usada a biblioteca Servo.

contagem_display_7seg.ino

Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos.

controle_led_com_ldr.ino

Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura é mapeada e o valor resultante é usado para acender um LED. O exemplo também conta com um botão que controla um estado interno do programa e seleciona se a leitura será impressa como é lida ou com lógica complementar.

do_re_mi_fa.ino

Neste exemplo uma música é tocada pelo buzzer em conjunto com a ativação -do LED RGB endereçável. O programa utiliza a biblioteca Adafruit_NeoPixel para controlar o LED.

genio.ino

Neste exemplo, implementamos o jogo Simon, também conhecido como gênio. Neste jogo, quatro LEDs são ativados em uma sequência gerada aleatóriamente e essa sequência é apresentada para o jogador, que deve repetir a sequência na ordem correta pressionando os botões correspondentes. Quando os LEDs acendem, um som correspondente é tocado no buzzer.

leitura_do_teclado.ino

Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e -a imprimimos essa tecla no no monitor serial. A biblioteca Keypad é utilizada para fazer o mapeamento do teclado.

leitura_sensores_externos.ino

Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets -para conectores externos da placa e imprimimos os valores lidos no monitor serial.

leitura_sensores_grove.ino

Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial.

leitura_umidade_temperatura_oled.ino

Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, são utilizadas as bibliotecas DTH e U8glib.

Obs.

Este projeto foi desenvolvido como parte do Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

- - +

laboratorioFW_ARDUNO

Nesta biblioteca é possível encontrar o mapeamento entre a pinagem da placa Arduino Uno e a codificação dos pinos de ativação da placa Laboratório de Sistemas Embarcados e IoT segundo o projeto do adaptador para Arduino projeto para a placa. A biblioteca também é possível encontrar exemplos de utilização dos periféricos disponíveis na placa.

+

Clique aqui para acessar o repositório da biblioteca no Github.

+

Como instalar a biblioteca

+
    +
  1. Faça o donwload da biblioteca em formato zip clicando em Code e depois em Download ZIP
  2. +
+

+
    +
  1. Abra a IDE do Arduino
  2. +
  3. Vá em Sketch > Include Library > Add .ZIP Library
  4. +
+

+
    +
  1. Selecione o arquivo zip baixado e clique em ok
  2. +
  3. Opcional: Procure pelos exemplos da biblioteca em File > Examples
  4. +
+

Como usar a biblioteca

+

Para utilizar a biblioteca basta incluí-la no seu arquivo de código com a linha #include<laboratorioFW_ARDUNO.h>. Depois disso, você pode utilizar os códigos dos pinos de ativação na placa dentro do seu código.

+

Importante : Os algorismos do código do pino de ativação são separados por um caractere de _, ou seja o pino de ativação C0 pode ser acessado no código através do código C_0 e assim por diante.

+

Exemplo de utilização:

+
#include <laborarotioFW_ARDUNO.h>
+
+#define led A_1
+
+void setup(){
+    pinMode(led,OUTPUT);
+}
+
+void loop{
+    digitalWrite(led,HIGH);
+    delay(1000);
+    digitalWrite(led,LOW);
+    delay(1000);
+}
+
+

Exemplos implementados:

+

testes_completos.ino

+

Neste exemplo temos todos os códigos necessários para os testes de todos os periféricos disponíveis na placa. Este código é um código para a validação da placa e não para ser utilizado no cotidiano.

+

adivinhe_a_senha.ino

+

Neste exemplo implementamos um sistema de verificação de senha utilizando o teclado matricial e a biblioteca Keypad para fazer o mapeamento +do teclado. Neste sistema, o usuário deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usuário indica que terminou de digitar a senha apertando um o botão correspondente ao caractere * ou #, essa sequência é comparada com uma senha previamente definida no código. Um led é aceso para indicar se a senha está correta ou não e uma mensagem com essa informação é impresso no monitor serial.

+

ativar_led_RGB_com_potenciometro_e_botoes.ino

+

Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenciômetro e três botões. Os três botões são utilizados para selecionar qual cor do LED RGB será controlada (vermelho, verde e azul) e a leitura analógica do potenciômetro é usada para dosar a intensidade da cor do terminal.

+

ativar_servo_motor_com_botoes.ino

+

Neste exemplo, utilizamos dois botões para controlar a posição de um servo motor. Os botões são associados no código às direções esquerda e direita e alteram o ângulo do servo fazendo com que seja possível movimentá-lo nas duas direções. Foi usada a biblioteca Servo.

+

contagem_display_7seg.ino

+

Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos.

+

controle_led_com_ldr.ino

+

Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura é mapeada e o valor resultante é usado para acender um LED. O exemplo também conta com um botão que controla um estado interno do programa e seleciona se a leitura será impressa como é lida ou com lógica complementar.

+

do_re_mi_fa.ino

+

Neste exemplo uma música é tocada pelo buzzer em conjunto com a ativação +do LED RGB endereçável. O programa utiliza a biblioteca Adafruit_NeoPixel para controlar o LED.

+

genio.ino

+

Neste exemplo, implementamos o jogo Simon, também conhecido como gênio. Neste jogo, quatro LEDs são ativados em uma sequência gerada aleatóriamente e essa sequência é apresentada para o jogador, que deve repetir a sequência na ordem correta pressionando os botões correspondentes. Quando os LEDs acendem, um som correspondente é tocado no buzzer.

+

leitura_do_teclado.ino

+

Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e +a imprimimos essa tecla no no monitor serial. A biblioteca Keypad é utilizada para fazer o mapeamento do teclado.

+

leitura_sensores_externos.ino

+

Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets +para conectores externos da placa e imprimimos os valores lidos no monitor serial.

+

leitura_sensores_grove.ino

+

Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial.

+

leitura_umidade_temperatura_oled.ino

+

Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, são utilizadas as bibliotecas DTH e U8glib.

+

Este projeto foi desenvolvido como parte do Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

\ No newline at end of file diff --git a/docs/badge/badge/index.html b/docs/badge/badge/index.html index 5ad47d5ed..a31fc4f7a 100755 --- a/docs/badge/badge/index.html +++ b/docs/badge/badge/index.html @@ -1,17 +1,26 @@ - + - -Badge - Aprenda a soldar | Franzininho - - - + +Badge - Aprenda a soldar | Franzininho + + + -
-

Badge - Aprenda a soldar

O que é Badge?

O badge Aprenda Soldar foi desenvolvido para oficinas de solda onde os participantes dão os primeiros passos com o uso de ferramentas de soldagem e adquirem conhecimento dos componentes eletrônicos e circuito da placa.

Com poucos componentes, esse badge permite que qualquer pessoa aprenda a soldar e se divertir.

montagem Badge

O circuito escolhido para esse badge, foi o clássico multivibrador astável com transistores. Ao final da soldagem os olhos do robô piscam, e placa está pronta para usar como colar ou chaveiro.

Durante a oficina os participantes conseguem aprender a usar o ferro de solda e como é o processo de soldagem de componentes PTH em uma placa.

As oficinas com o Badge Aprenda Soldar são direcionadas para adultos e adolescentes com interesse em aprender sobre soldagem eletrônica. A oficina dura em média 1 h, dependendo da quantidade de pessoas no grupo.

Premiação: Contest badge Love na categoria "The Badge of Hope"

Esse projeto foi um dos vencedores do Contest badge Love na categoria The Badge of Hope, promovido pelo Hackster  O projeto é open hardware e foi publicado sob a licença Creative Commons Attribution Share Alike 4.0 International

Contrate uma oficina ou adquira kit do Badge Aprenda Soldar

Para adquirir placas e kits do Badge Aprenda Soldar ou oficinas, entre em contato conosco: contato@franzininho.com.br

Fotos de oficinas com Badge Aprenda Soldar

montagem Badge

- - +

Badge - Aprenda a soldar

O que é Badge?

+

O badge Aprenda Soldar foi desenvolvido para oficinas de solda onde os participantes dão os primeiros passos com o uso de ferramentas de soldagem e adquirem conhecimento dos componentes eletrônicos e circuito da placa.

+

Com poucos componentes, esse badge permite que qualquer pessoa aprenda a soldar e se divertir.

+

montagem Badge

+

O circuito escolhido para esse badge, foi o clássico multivibrador astável com transistores. Ao final da soldagem os olhos do robô piscam, e placa está pronta para usar como colar ou chaveiro.

+

Durante a oficina os participantes conseguem aprender a usar o ferro de solda e como é o processo de soldagem de componentes PTH em uma placa.

+

As oficinas com o Badge Aprenda Soldar são direcionadas para adultos e adolescentes com interesse em aprender sobre soldagem eletrônica. A oficina dura em média 1 h, dependendo da quantidade de pessoas no grupo.

+ +

Esse projeto foi um dos vencedores do Contest badge Love na categoria The Badge of Hope, promovido pelo Hackster  O projeto é open hardware e foi publicado sob a licença Creative Commons Attribution Share Alike 4.0 International

+

Contrate uma oficina ou adquira kit do Badge Aprenda Soldar

+

Para adquirir placas e kits do Badge Aprenda Soldar ou oficinas, entre em contato conosco: contato@franzininho.com.br

+

Fotos de oficinas com Badge Aprenda Soldar

+

montagem Badge

\ No newline at end of file diff --git a/docs/franzininho-c0/arduino-identificacao-pinos/index.html b/docs/franzininho-c0/arduino-identificacao-pinos/index.html index 5add15138..9fa831ca3 100755 --- a/docs/franzininho-c0/arduino-identificacao-pinos/index.html +++ b/docs/franzininho-c0/arduino-identificacao-pinos/index.html @@ -1,17 +1,56 @@ - + - -Identificação dos Pinos no Ambiente Arduino | Franzininho - - - + +Identificação dos Pinos no Ambiente Arduino | Franzininho + + + -
-

Identificação dos Pinos no Ambiente Arduino

Na documentação da ST, os pinos dos microcontroladores STM32 são identificados por nomes como PA1, PA2 e PB6 (como pode ser visto no esquema da Franzininho C0). Descrevemos aqui as identificações usadas no Ambiente Arduino.

Estas informações se referem à opção de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma opção de placa específica para a Franzininho C0, usando opções default mais adequadas para os pinos.

A figura abaixo resume as identificações:

Identificação dos Pinos no Ambiente Arduino

O pacote STM32duino aceita as identificações do tipo PA1 como "nomes" dos pinos, porém esta não é a identificação usual do ambiente Arduino.

Entrada e Saída Digital

Para entrada e saída digital, o ambiente Arduino utiliza números para identificar os pinos. A figura no início da página mostra os números correspondentes aos pinos da Franzininho.

As funções digitais aceitam também os nomes usados para entrada analógica (ver o próximo item).

Entrada Analógica (ADC)

Para entrada analógica, o ambiente Arduino utiliza nomes do tipo An. A figura no início da página mostra os nomes correspondentes aos pinos da Franzininho.

Interface Serial Assíncrona (UART)

O microcontrolador na Franzininho C0 possui duas interfaces seriais assíncronas (uart1 e uart2). Ele possui uma certa flexibilidade na conexão destas interfaces aos pinos.

No ambiente Arduino, as interfaces seriais assíncronas são acessadas através de objetos com nomes como Serial, Serial1 e Serial2.

Na Franzininho C0, os pinos PA9 e PA10 estão conectados ao conversor serial USB CH340, para fornecer comunicação serial com um micro através de um cabo USB.

A opção "Generic STM32C0" define um objeto Serial associado à interface uart1, usando os pinos PA0 e PA1 (como indicado na figura no alto da página). Para usar o objeto Serial para comunicar via USB é preciso reconfigurar os pinos através dos métodos setRx e setTx antes de chamar o método begin (veja também o exemplo "Hello World"):

  Serial.setRx(PA_10_R);
Serial.setTx(PA_9_R);
Serial.begin(115200);

Obs.: Os nomes especiais para os pinos PA9 e PA10 se devem ao fato destes pinos compartilharem os mesmos pinos físicos que PA11 e PA12.

Para usar a uart2 é preciso declarar um objeto Serial2 e especificar os pinos que serão usados:

HardwareSerial Serial2(uart2);

Serial2.setRx(PA3);
Serial2.setTx(PA2);
Serial2.begin(115200);

SPI

A figura no alto da página indica os pinos utilizados por padrão para a interface spi, acessada através do objeto SPI que é parte da bioblioteca padrão SPI.

Veja detalhes no exemplo SPI.

I^2^C

No ambiente Arduino, a interface i^2^c é acessada através do objeto Wire, que é parte da bioblioteca padrão SPI.

A opção "Generic STM32C0" usa como padrão os pinos PA9 e PA10 para a interface i2c. Como estes pinos estão ligados na Franzininho C0 aos conversor serial USB, é preciso reconfigurar os pinos através dos métodos setSCL e setSDA antes de chamar o método begin (veja o exemplo "I2C").

Opções Válidas para os Pinos

UART1

SinalOpções
TXPA0, PA9, PB6, PC14
RXPA1, PA8, PA10, PB7

UART2

SinalOpções
TXPA2, PA4, PA8, PA14
RXPA3, PA5, PA13, PA14

SPI

SinalOpções
MISOPA6, PA1, PB6
MOSIPA2, PA7, PA12, PB6
SCKPA1, PA5, PB6
SSPA4, PA8, PA14

I2C

SinalOpções
SCLPA9, PB6, PB7
SDAPC14, PA10, PB7
AutorDaniel Quadros
Data:19/10/2023
- - +

Identificação dos Pinos no Ambiente Arduino

Na documentação da ST, os pinos dos microcontroladores STM32 são identificados por nomes como PA1, PA2 e PB6 (como pode ser visto no esquema da Franzininho C0). Descrevemos aqui as identificações usadas no Ambiente Arduino.

+

Estas informações se referem à opção de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma opção de placa específica para a Franzininho C0, usando opções default mais adequadas para os pinos.

+

A figura abaixo resume as identificações:

+

Identificação dos Pinos no Ambiente Arduino

+

O pacote STM32duino aceita as identificações do tipo PA1 como "nomes" dos pinos, porém esta não é a identificação usual do ambiente Arduino.

+

Entrada e Saída Digital

+

Para entrada e saída digital, o ambiente Arduino utiliza números para identificar os pinos. A figura no início da página mostra os números correspondentes aos pinos da Franzininho.

+

As funções digitais aceitam também os nomes usados para entrada analógica (ver o próximo item).

+

Entrada Analógica (ADC)

+

Para entrada analógica, o ambiente Arduino utiliza nomes do tipo An. A figura no início da página mostra os nomes correspondentes aos pinos da Franzininho.

+

Interface Serial Assíncrona (UART)

+

O microcontrolador na Franzininho C0 possui duas interfaces seriais assíncronas (uart1 e uart2). Ele possui uma certa flexibilidade na conexão destas interfaces aos pinos.

+

No ambiente Arduino, as interfaces seriais assíncronas são acessadas através de objetos com nomes como Serial, Serial1 e Serial2.

+

Na Franzininho C0, os pinos PA9 e PA10 estão conectados ao conversor serial USB CH340, para fornecer comunicação serial com um micro através de um cabo USB.

+

A opção "Generic STM32C0" define um objeto Serial associado à interface uart1, usando os pinos PA0 e PA1 (como indicado na figura no alto da página). Para usar o objeto Serial para comunicar via USB é preciso reconfigurar os pinos através dos métodos setRx e setTx antes de chamar o método begin (veja também o exemplo "Hello World"):

+
  Serial.setRx(PA_10_R);
+  Serial.setTx(PA_9_R);
+  Serial.begin(115200);
+
+

Obs.: Os nomes especiais para os pinos PA9 e PA10 se devem ao fato destes pinos compartilharem os mesmos pinos físicos que PA11 e PA12.

+

Para usar a uart2 é preciso declarar um objeto Serial2 e especificar os pinos que serão usados:

+
HardwareSerial Serial2(uart2);
+
+  Serial2.setRx(PA3);
+  Serial2.setTx(PA2);
+  Serial2.begin(115200);
+
+

SPI

+

A figura no alto da página indica os pinos utilizados por padrão para a interface spi, acessada através do objeto SPI que é parte da bioblioteca padrão SPI.

+

Veja detalhes no exemplo SPI.

+

I^2^C

+

No ambiente Arduino, a interface i^2^c é acessada através do objeto Wire, que é parte da bioblioteca padrão SPI.

+

A opção "Generic STM32C0" usa como padrão os pinos PA9 e PA10 para a interface i2c. Como estes pinos estão ligados na Franzininho C0 aos conversor serial USB, é preciso reconfigurar os pinos através dos métodos setSCL e setSDA antes de chamar o método begin (veja o exemplo "I2C").

+

Opções Válidas para os Pinos

+

UART1

+
SinalOpções
TXPA0, PA9, PB6, PC14
RXPA1, PA8, PA10, PB7
+

UART2

+
SinalOpções
TXPA2, PA4, PA8, PA14
RXPA3, PA5, PA13, PA14
+

SPI

+
SinalOpções
MISOPA6, PA1, PB6
MOSIPA2, PA7, PA12, PB6
SCKPA1, PA5, PB6
SSPA4, PA8, PA14
+

I2C

+
SinalOpções
SCLPA9, PB6, PB7
SDAPC14, PA10, PB7
+
AutorDaniel Quadros
Data:19/10/2023
\ No newline at end of file diff --git a/docs/franzininho-c0/arduino-primeiros-passos/index.html b/docs/franzininho-c0/arduino-primeiros-passos/index.html index 349bae814..b64c5c626 100755 --- a/docs/franzininho-c0/arduino-primeiros-passos/index.html +++ b/docs/franzininho-c0/arduino-primeiros-passos/index.html @@ -1,17 +1,67 @@ - + - -Primeiros passos com Arduino | Franzininho - - - + +Primeiros passos com Arduino | Franzininho + + + -
-

Primeiros passos com Arduino

Os passos a seguir mostram a instalação e configuração da IDE Arduino para usar a opção de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma opção de placa específica para a Franzininho C0, eliminando a necessidade de algumas configurações e usando opções default mais adequadas para os pinos.

  1. Instale a IDE do Arduino (se você não tiver instalada) de https://www.arduino.cc/en/software. As telas apresentadas foram capturadas com a versão 2.2.1 para Windows.

  2. Instale o STM32CubeProgrammer de https://www.st.com/en/development-tools/stm32cubeprog.html. Pode ser necessáro fazer um pequeno cadastro para baixar o instalador.

  3. Execute a IDE do Arduino. Entre em File, Preferences, Additional Boards Manager URLs e acrescente https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json:

Aditional Boards Manager URLs

  1. Conecte a Franzininho C0 ao micro através de um cabo USB. A placa será reconhecida como uma serial pelo sistema operacional.

  2. Selecione "Select other board and port..." no dropbox na tarja superior da IDE.

Seleção da placa, parte 1

  1. Selecione a placa "Generic STM32C0 series" e a porta correspondente à placa (se tiver dúvida, veja adiante como identificar a serial).

Seleção da placa, parte 2

  1. Use o menu Tools para acertar a configuração da placa:
    • Board part number: "Generic C011F6Px"
    • Upload method: "STM32CubeProgrammer (Serial)"
    • U(S)ART support: "Enabled (generic 'Serial')"

Configuração da placa

Gravação de Programas pela USB

A configuração acima fará a carga de programas através da USB. Para isto a placa precisa estar com o bootloader em execução, o que é feito através destes passos:

  1. Aperte o botão BOOT e o mantenha apertado
  2. Aperte e solte o botão RST
  3. Solte o botão BOOT

A placa precisa estar executando o bootloader antes da IDE tentar carregar o programa, caso contrário será apresentado um erro. O ideal é fazer o procedimento acima antes de apertar o botão da IDE para compilar e carregar o programa.

Identificação da Porta Serial

A Franzininho C0 utiliza um integrado CH340E para emular uma porta serial através de uma conexão USB. As versões mais recentes de Windows e Linux reconhecem esta serial sem a necessidade de instalação de um driver específico.

Windows

O Windows associa um nome do tipo COMnn para os dispositivos seriais. De um modo geral, o Windows tenta usar sempre o mesmo nome para cada dispositivo (identificando o dispositivo pelo VendorID, ProductID e Serial Number informados pela USB).

O Gerenciador de Dispositivos mostra os dispositivos seriais embaixo de "Portas (COM e LPT)"

Portas Seriais no Windows

A Franzininho C0 se apresenta como "USB-SERIAL CH340". Na dúvida, desconecte a placa e verifique quem sai da lista. Na figura acima, a Franzininho C0 está em COM24.

Linux

TBD

AutorDaniel Quadros
Data:15/10/2023
- - +

Primeiros passos com Arduino

Os passos a seguir mostram a instalação e configuração da IDE Arduino para usar a opção de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma opção de placa específica para a Franzininho C0, eliminando a necessidade de algumas configurações e usando opções default mais adequadas para os pinos.

+
    +
  1. +

    Instale a IDE do Arduino (se você não tiver instalada) de https://www.arduino.cc/en/software. As telas apresentadas foram capturadas com a versão 2.2.1 para Windows.

    +
  2. +
  3. +

    Instale o STM32CubeProgrammer de https://www.st.com/en/development-tools/stm32cubeprog.html. Pode ser necessáro fazer um pequeno cadastro para baixar o instalador.

    +
  4. +
  5. +

    Execute a IDE do Arduino. Entre em File, Preferences, Additional Boards Manager URLs e acrescente https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json:

    +
  6. +
+

Aditional Boards Manager URLs

+
    +
  1. +

    Conecte a Franzininho C0 ao micro através de um cabo USB. A placa será reconhecida como uma serial pelo sistema operacional.

    +
  2. +
  3. +

    Selecione "Select other board and port..." no dropbox na tarja superior da IDE.

    +
  4. +
+

Seleção da placa, parte 1

+
    +
  1. Selecione a placa "Generic STM32C0 series" e a porta correspondente à placa (se tiver dúvida, veja adiante como identificar a serial).
  2. +
+

Seleção da placa, parte 2

+
    +
  1. Use o menu Tools para acertar a configuração da placa: +
      +
    • Board part number: "Generic C011F6Px"
    • +
    • Upload method: "STM32CubeProgrammer (Serial)"
    • +
    • U(S)ART support: "Enabled (generic 'Serial')"
    • +
    +
  2. +
+

Configuração da placa

+

Gravação de Programas pela USB

+

A configuração acima fará a carga de programas através da USB. Para isto a placa precisa estar com o bootloader em execução, o que é feito através destes passos:

+
    +
  1. Aperte o botão BOOT e o mantenha apertado
  2. +
  3. Aperte e solte o botão RST
  4. +
  5. Solte o botão BOOT
  6. +
+

A placa precisa estar executando o bootloader antes da IDE tentar carregar o programa, caso contrário será apresentado um erro. O ideal é fazer o procedimento acima antes de apertar o botão da IDE para compilar e carregar o programa.

+

Identificação da Porta Serial

+

A Franzininho C0 utiliza um integrado CH340E para emular uma porta serial através de uma conexão USB. As versões mais recentes de Windows e Linux reconhecem esta serial sem a necessidade de instalação de um driver específico.

+

Windows

+

O Windows associa um nome do tipo COMnn para os dispositivos seriais. De um modo geral, o Windows tenta usar sempre o mesmo nome para cada dispositivo (identificando o dispositivo pelo VendorID, ProductID e Serial Number informados pela USB).

+

O Gerenciador de Dispositivos mostra os dispositivos seriais embaixo de "Portas (COM e LPT)"

+

Portas Seriais no Windows

+

A Franzininho C0 se apresenta como "USB-SERIAL CH340". Na dúvida, desconecte a placa e verifique quem sai da lista. Na figura acima, a Franzininho C0 está em COM24.

+

Linux

+

TBD

+
AutorDaniel Quadros
Data:15/10/2023
\ No newline at end of file diff --git a/docs/franzininho-c0/arduino-todolist/index.html b/docs/franzininho-c0/arduino-todolist/index.html index 61fc45a97..3a4a933a6 100755 --- a/docs/franzininho-c0/arduino-todolist/index.html +++ b/docs/franzininho-c0/arduino-todolist/index.html @@ -1,17 +1,25 @@ - + - -Arduino IDE TODO List | Franzininho - - - + +Arduino IDE TODO List | Franzininho + + + -
-

Arduino IDE TODO List

A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programação da placa Franzininho C0 na Arduino IDE usando o pacote STM32duino.

Fique a vontade para colaborar na construção dos materiais e códigos. Outros exemplos podem ser adicionados. Converse na comunidade.

ExemplosStatusNota
Primeiros passos🔵Ferramentas necessárias, Métodos de gravação, Repositório com os exemplos
01 - Blinky🔵Piscando o LED usando delay
02 - Blinky Int🔵Piscando o LED usando interrupção de timer
03 - Hello World🔵Enviando mensagem pela serial (UART)
04 - E/S Digital🔵Leitura de um botão e acionamento de um LED
05 - Debounce🔵Leitura de um botão com realização de debounce
06 - ADC🔵Leitura da posição de um potenciômetro
07 - PWM🔴
08 - Dimmer🔵Controlando o brilho do LED por um potenciômetro (ADC e PWM)
09 - Servo🔵Controlando a posição de um servo motor por um potenciômetro (ADC e PWM)
10 - I2C (LCD)🔵Conexão de display LCD alfanumérico via I2C
11 - I2C (OLED)🔵Conexão de display OLED via I2C
12 - SPI (OLED)🔵Conexão de display OLED via SPI
Interrupção externa🔴
Timers - PWM🔴
Timers - Temporizador🔴
DMA🔴
🔴

Legenda:

  • 🟢 Feito
  • 🔵 Para revisar
  • 🟡 Em progresso
  • 🔴 Ainda não implementado

Repositório de Exemplos

GitHub - Franzininho/franzininho-c0-exemplos-arduino: Exemplos de código para Franzininho C0 na Arduino IDE

- - +

Arduino IDE TODO List

A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programação da placa Franzininho C0 na Arduino IDE usando o pacote STM32duino.

+

Fique a vontade para colaborar na construção dos materiais e códigos. Outros exemplos podem ser adicionados. Converse na comunidade.

+
ExemplosStatusNota
Primeiros passos🔵Ferramentas necessárias, Métodos de gravação, Repositório com os exemplos
01 - Blinky🔵Piscando o LED usando delay
02 - Blinky Int🔵Piscando o LED usando interrupção de timer
03 - Hello World🔵Enviando mensagem pela serial (UART)
04 - E/S Digital🔵Leitura de um botão e acionamento de um LED
05 - Debounce🔵Leitura de um botão com realização de debounce
06 - ADC🔵Leitura da posição de um potenciômetro
07 - PWM🔴
08 - Dimmer🔵Controlando o brilho do LED por um potenciômetro (ADC e PWM)
09 - Servo🔵Controlando a posição de um servo motor por um potenciômetro (ADC e PWM)
10 - I2C (LCD)🔵Conexão de display LCD alfanumérico via I2C
11 - I2C (OLED)🔵Conexão de display OLED via I2C
12 - SPI (OLED)🔵Conexão de display OLED via SPI
Interrupção externa🔴
Timers - PWM🔴
Timers - Temporizador🔴
DMA🔴
🔴
+

Legenda:

+
    +
  • 🟢 Feito
  • +
  • 🔵 Para revisar
  • +
  • 🟡 Em progresso
  • +
  • 🔴 Ainda não implementado
  • +
+

Repositório de Exemplos

+

GitHub - Franzininho/franzininho-c0-exemplos-arduino: Exemplos de código para Franzininho C0 na Arduino IDE

\ No newline at end of file diff --git a/docs/franzininho-c0/config-franzininho-c0-stm32cubeide/index.html b/docs/franzininho-c0/config-franzininho-c0-stm32cubeide/index.html index 299f56a19..9e4888b5d 100755 --- a/docs/franzininho-c0/config-franzininho-c0-stm32cubeide/index.html +++ b/docs/franzininho-c0/config-franzininho-c0-stm32cubeide/index.html @@ -1,17 +1,43 @@ - + - -Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos | Franzininho - - - + +Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos | Franzininho + + + -
-

Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos

Confira abaixo os passos para você configurar um novo projeto para a Franzininho C0 para o STM32CubeIDE:

  1. Clonar o repositório (https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide.git) em uma pasta local e chegar até o caminho que contém os exemplos:

  1. Iniciar o STM32CubeIDE e selecionar a pasta do passo 1. como local do workspace, então selecionar "Launch":

  1. Note que será criada a pasta "/.metadata/" no local, que contém as configurações do workspace:

  1. Após inicialização do CubeIDE, selecionar "Import project":

  1. Selecionar o mesmo caminho do passo 1.:

  1. Note que os exemplos serão listados e pode-se selecionar quais serão importados. Para avançar, selecionar "Finish"

  1. Finalmente, todos os exemplos estão carregados na IDE e prontos para compilação/execução:

AutorAndré Araújo
Data:17/07/2023
- - +

Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos

Confira abaixo os passos para você configurar um novo projeto para a Franzininho C0 para o STM32CubeIDE:

+
    +
  1. Clonar o repositório (https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide.git) em uma pasta local e chegar até o caminho que contém os exemplos:
  2. +
+

+
    +
  1. Iniciar o STM32CubeIDE e selecionar a pasta do passo 1. como local do workspace, então selecionar "Launch":
  2. +
+

+
    +
  1. Note que será criada a pasta "/.metadata/" no local, que contém as configurações do workspace:
  2. +
+

+
    +
  1. Após inicialização do CubeIDE, selecionar "Import project":
  2. +
+

+
    +
  1. Selecionar o mesmo caminho do passo 1.:
  2. +
+

+
    +
  1. Note que os exemplos serão listados e pode-se selecionar quais serão importados. Para avançar, selecionar "Finish"
  2. +
+

+
    +
  1. Finalmente, todos os exemplos estão carregados na IDE e prontos para compilação/execução:
  2. +
+

+
AutorAndré Araújo
Data:17/07/2023
\ No newline at end of file diff --git a/docs/franzininho-c0/franzininho-c0-board/index.html b/docs/franzininho-c0/franzininho-c0-board/index.html index 920166f49..d84a26313 100755 --- a/docs/franzininho-c0/franzininho-c0-board/index.html +++ b/docs/franzininho-c0/franzininho-c0-board/index.html @@ -1,17 +1,67 @@ - + - -Placa Franzininho C0 | Franzininho - - - + +Placa Franzininho C0 | Franzininho + + + -
-

Placa Franzininho C0

A Franzininho C0 é uma placa de desenvolvimento de hardware de código aberto, baseada no Microcontrolador STM32C0, um Arm Cortex M0+ da STMicroelectronics. Desenvolvida no Brasil, sua finalidade principal é servir como uma ferramenta de ensino/aprendizagem e prototipagem para estudantes, makers, entusiastas e desenvolvedores brasileiros.

Com um form factor pequeno e compatível com protoboard, ela pode ser programada através das ferramentas da ST e também da Arduino IDE.

Neste texto, apresentaremos todos os recursos disponíveis e detalhes do seu hardware.

Franzininho C0

Recursos de Hardware

  • Microcontrolador:
    • STM32C011F6P6 - ARM Cortex M0+ @48MHz
    • Memória Flash: 32 kB
    • Memória RAM: 6 kB
  • ADC: 12 bits (13 canais + 2 internos)
  • Comunicações: 1x I2C, 1 x SPI, 2x USART
  • RTC
  • Timer/Contador: 8
  • GPIO: 16 - Compatível com protoboard
  • Conversor USB/Serial
  • Conector Micro USB
  • Tensão de operação: 3,3V
  • Tensão de alimentação:
    • 5V via conector USB
    • 5V e GND via pinos
  • Botão de USO Geral: 1
  • LEDS de uso Geral: 2
  • Botões: 1xReset, 1 x Boot
  • Compatível com protoboard
  • Dimensão: 38,1 mm x 20.32 mm
  • Licença: CERN Open Hardware Licence version 2

Pinout

Franzininho C0 Pinout

Mapeamento de recursos na placa

  • Botão: PA8
  • LED1: PB6
  • LED2: PB7
  • RX_PA10
  • TX_PA11

Pinout do microcontrolador

Franzininho C0 Pinout stm32c11f6p6

Esquemático

Schematic_Franzininho C0_2023-07-26.png

Licença

A placa Franzininho C0 é um projeto de hardware de código aberto, licenciado sob a CERN Open Hardware Licence version 2. Essa licença é utilizada em projetos de hardware que são desenvolvidos e disponibilizados como código aberto, permitindo que outras pessoas possam reproduzir e criar derivações do projeto. Para garantir a conformidade com a licença, é importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar derivações do projeto. Dessa forma, podem garantir que estão seguindo as diretrizes corretas e respeitando a licença escolhida para o projeto.

Repositório: Franzininho C0 - EasyEDA open source hardware lab

Fotos

Franzininho C0 Frente e verso

Franzininho C0 Frente e verso

- - +

Placa Franzininho C0

A Franzininho C0 é uma placa de desenvolvimento de hardware de código aberto, baseada no Microcontrolador STM32C0, um Arm Cortex M0+ da STMicroelectronics. Desenvolvida no Brasil, sua finalidade principal é servir como uma ferramenta de ensino/aprendizagem e prototipagem para estudantes, makers, entusiastas e desenvolvedores brasileiros.

+

Com um form factor pequeno e compatível com protoboard, ela pode ser programada através das ferramentas da ST e também da Arduino IDE.

+

Neste texto, apresentaremos todos os recursos disponíveis e detalhes do seu hardware.

+

Franzininho C0

+

Recursos de Hardware

+
    +
  • Microcontrolador: +
      +
    • STM32C011F6P6 - ARM Cortex M0+ @48MHz
    • +
    • Memória Flash: 32 kB
    • +
    • Memória RAM: 6 kB
    • +
    +
  • +
  • ADC: 12 bits (13 canais + 2 internos)
  • +
  • Comunicações: 1x I2C, 1 x SPI, 2x USART
  • +
  • RTC
  • +
  • Timer/Contador: 8
  • +
  • GPIO: 16 - Compatível com protoboard
  • +
  • Conversor USB/Serial
  • +
  • Conector Micro USB
  • +
  • Tensão de operação: 3,3V
  • +
  • Tensão de alimentação: +
      +
    • 5V via conector USB
    • +
    • 5V e GND via pinos
    • +
    +
  • +
  • Botão de USO Geral: 1
  • +
  • LEDS de uso Geral: 2
  • +
  • Botões: 1xReset, 1 x Boot
  • +
  • Compatível com protoboard
  • +
  • Dimensão: 38,1 mm x 20.32 mm
  • +
  • Licença: CERN Open Hardware Licence version 2
  • +
+

Pinout

+

Franzininho C0 Pinout

+

Mapeamento de recursos na placa

+
    +
  • Botão: PA8
  • +
  • LED1: PB6
  • +
  • LED2: PB7
  • +
  • RX_PA10
  • +
  • TX_PA11
  • +
+

Pinout do microcontrolador

+

Franzininho C0 Pinout stm32c11f6p6

+

Esquemático

+

Schematic_Franzininho C0_2023-07-26.png

+

Licença

+

A placa Franzininho C0 é um projeto de hardware de código aberto, licenciado sob a CERN Open Hardware Licence version 2. Essa licença é utilizada em projetos de hardware que são desenvolvidos e disponibilizados como código aberto, permitindo que outras pessoas possam reproduzir e criar derivações do projeto. Para garantir a conformidade com a licença, é importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar derivações do projeto. Dessa forma, podem garantir que estão seguindo as diretrizes corretas e respeitando a licença escolhida para o projeto.

+

Repositório: Franzininho C0 - EasyEDA open source hardware lab

+

Fotos

+

Franzininho C0 Frente e verso

+

Franzininho C0 Frente e verso

\ No newline at end of file diff --git a/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist/index.html b/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist/index.html index da4b96153..e8d119301 100755 --- a/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist/index.html +++ b/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist/index.html @@ -1,17 +1,24 @@ - + - -STM32Cube IDE TODO List | Franzininho - - - + +STM32Cube IDE TODO List | Franzininho + + + -
-

STM32Cube IDE TODO List

A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programação da placa Franzininho C0 na STM32CubeIDE usando a HAL da ST.

Fique a vontade para colaborar na construção dos materiais e códigos. Outros exemplos podem ser adicionados. Converse na comunidade.

ExemplosStatusDescriçãoDocumentacao
00 - Exemplo Template🔴Projeto template com as
01 - Exemplo Blinky🔴Piscando o LED usando delay
02 - Exemplo Blinky Int🔴Piscando o LED usando interrupção de timer
03 - Exemplo Hello World🔴Transmitindo mensagem serial pela UART
04 - Exemplo input🔴Leitura de um botão e acionamento de um LED
05 - Exemplo debounce🔴Leitura de um botão com realização de debounce
06 - Exemplo ADC🔴Conversão A/D com DMA e base de tempo por timer
07 - Exemplo PWM🔴Geração de PWM
08 - Exemplo Dimmer🔴Controlando o brilho do LED por um potenciômetro (ADC e PWM)
09 - Exemplo Servo Motor🔴Controlando a posição de um servo motor por um potenciômetro (ADC e PWM)
10 - Exemplo I2C🔴Controlando algum periférico via I2C (por exemplo, memória externa, sensor de temperatura, RTC, display, ...)
11 - Exemplo SPI🔴Controlando aglum periférico via SPI (por exemplo: memória externa, cartão SD, display, ...)
12 - Exemplo ...🔴

Legenda:

  • 🟢 Feito
  • 🟡 Em progresso
  • 🔴 Ainda não implementado

Repositório de Exemplos

GitHub - Franzininho/franzininho-c0-exemplos-stm32cubeide: Exemplos de código para Franzininho C0 na STM32CubeIDE

- - +

STM32Cube IDE TODO List

A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programação da placa Franzininho C0 na STM32CubeIDE usando a HAL da ST.

+

Fique a vontade para colaborar na construção dos materiais e códigos. Outros exemplos podem ser adicionados. Converse na comunidade.

+
ExemplosStatusDescriçãoDocumentacao
00 - Exemplo Template🔴Projeto template com as
01 - Exemplo Blinky🔴Piscando o LED usando delay
02 - Exemplo Blinky Int🔴Piscando o LED usando interrupção de timer
03 - Exemplo Hello World🔴Transmitindo mensagem serial pela UART
04 - Exemplo input🔴Leitura de um botão e acionamento de um LED
05 - Exemplo debounce🔴Leitura de um botão com realização de debounce
06 - Exemplo ADC🔴Conversão A/D com DMA e base de tempo por timer
07 - Exemplo PWM🔴Geração de PWM
08 - Exemplo Dimmer🔴Controlando o brilho do LED por um potenciômetro (ADC e PWM)
09 - Exemplo Servo Motor🔴Controlando a posição de um servo motor por um potenciômetro (ADC e PWM)
10 - Exemplo I2C🔴Controlando algum periférico via I2C (por exemplo, memória externa, sensor de temperatura, RTC, display, ...)
11 - Exemplo SPI🔴Controlando aglum periférico via SPI (por exemplo: memória externa, cartão SD, display, ...)
12 - Exemplo ...🔴
+

Legenda:

+
    +
  • 🟢 Feito
  • +
  • 🟡 Em progresso
  • +
  • 🔴 Ainda não implementado
  • +
+

Repositório de Exemplos

+

GitHub - Franzininho/franzininho-c0-exemplos-stm32cubeide: Exemplos de código para Franzininho C0 na STM32CubeIDE

\ No newline at end of file diff --git a/docs/franzininho-diy/bootloader/index.html b/docs/franzininho-diy/bootloader/index.html index eb5c12750..1b3cab8d8 100755 --- a/docs/franzininho-diy/bootloader/index.html +++ b/docs/franzininho-diy/bootloader/index.html @@ -1,17 +1,50 @@ - + - -Bootloader | Franzininho - - - + +Bootloader | Franzininho + + + -
-

Bootloader

Para que a placa Franzininho possa ser gravada através da USB é necessário gravar o bootloader. O bootloader é um pequeno programa que roda toda vez que a placa é iniciada e verifica se tem um comando de atualização de firmware. Caso tenha esse comando, ele recebe o binário através da USB (no caso da Franzininho DIY) e grava na memória flash.

Na Franzininho DIY usamos o Micronucleus que é um bootloader pequeno e bem flexível desenvolvido para a família ATtiny usando o projeto VUSB como base.

A seguir vamos exibir como você pode gravar o ATtiny85 para usar o Micronucleus.

Materiais Necessários

  • Arduino UNO ou similar
  • Fios (Jumpers)
  • Protoboard

Circuito

Você precisará montar o seguinte circuito:

Circuito para Gravação

Faça uma dupla checagem antes de ligar o Arduino Uno no computador.

Com o circuito Montado, vamos para a gravação do bootloader.

Gravando o FranzBoot no Arduino UNO

Para facilitar a gravação do bootloader vamos usar o FranzBoot, um programa para gravação do bootloader micronucleus para Franzininho DIY usando Arduino UNO.

Baixe o projeto no seu computador: Download.

Descompacte a pasta e abra o arquivo FranzBoot.ino

Se ainda não tem a IDE Arduino no seu computador, baixe-a no site do Arduino

Será aberta a IDE do Arduino:

Circuito para Gravação

Antes de gravar na placa precisamos configurar a IDE para a placa Arduino UNO. Em Placa selecione Arduino UNO e em porta a porta Serial criada para o seu Arduino UNO:

Circuito para Gravação

Pronto, agora pressione Upload(Carregar) e aguarde a gravação no Arduino UNO:

Circuito para Gravação

Agora abra o terminal serial:

Circuito para Gravação

Verifique se a velocidade está configurada em 9600.

Agora digite G e pressione enviar. Após a gravação deve ser apresentada a seguinte mensagem no terminal:

Circuito para Gravação

ERRO

Se receber uma mensagem de erro, verifique as conexões elétricas e envie novamente o comando G.

Pronto, o ATtiny85 está pronto para ser encaixado na sua Franzininho DIY. Retire-o com cuidado da matriz de contatos e encaixe-o corretamente na Franzininho DIY, conforme imagem abaixo

Placa Franzininho DIY

Próximos passos

Agora que já tem a sua placa Franzininho DIY preparada você pode partir para a programação.

Gravar muitos chips

Caso você necessite gravar muitos chips você pode gravar sem usar o PC. Verifique a documentação do FranzBoot para mais detalhes.

- - +

Bootloader

Para que a placa Franzininho possa ser gravada através da USB é necessário gravar o bootloader. O bootloader é um pequeno programa que roda toda vez que a placa é iniciada e verifica se tem um comando de atualização de firmware. Caso tenha esse comando, ele recebe o binário através da USB (no caso da Franzininho DIY) e grava na memória flash.

+

Na Franzininho DIY usamos o Micronucleus que é um bootloader pequeno e bem flexível desenvolvido para a família ATtiny usando o projeto VUSB como base.

+

A seguir vamos exibir como você pode gravar o ATtiny85 para usar o Micronucleus.

+

Materiais Necessários

+
    +
  • Arduino UNO ou similar
  • +
  • Fios (Jumpers)
  • +
  • Protoboard
  • +
+

Circuito

+

Você precisará montar o seguinte circuito:

+

Circuito para Gravação

+ +

Com o circuito Montado, vamos para a gravação do bootloader.

+

Gravando o FranzBoot no Arduino UNO

+

Para facilitar a gravação do bootloader vamos usar o FranzBoot, um programa para gravação do bootloader micronucleus para Franzininho DIY usando Arduino UNO.

+

Baixe o projeto no seu computador: Download.

+

Descompacte a pasta e abra o arquivo FranzBoot.ino

+Se ainda não tem a IDE Arduino no seu computador, baixe-a no site do Arduino +

Será aberta a IDE do Arduino:

+

Circuito para Gravação

+

Antes de gravar na placa precisamos configurar a IDE para a placa Arduino UNO. Em Placa selecione Arduino UNO e em porta a porta Serial criada para o seu Arduino UNO:

+

Circuito para Gravação

+

Pronto, agora pressione Upload(Carregar) e aguarde a gravação no Arduino UNO:

+

Circuito para Gravação

+

Agora abra o terminal serial:

+

Circuito para Gravação

+ +

Agora digite G e pressione enviar. Após a gravação deve ser apresentada a seguinte mensagem no terminal:

+

Circuito para Gravação

+

Se receber uma mensagem de erro, verifique as conexões elétricas e envie novamente o comando G.

+

Pronto, o ATtiny85 está pronto para ser encaixado na sua Franzininho DIY. Retire-o com cuidado da matriz de contatos e encaixe-o corretamente na Franzininho DIY, conforme imagem abaixo

+

Placa Franzininho DIY

+

Próximos passos

+

Agora que já tem a sua placa Franzininho DIY preparada você pode partir para a programação.

+

Gravar muitos chips

+

Caso você necessite gravar muitos chips você pode gravar sem usar o PC. Verifique a documentação do FranzBoot para mais detalhes.

\ No newline at end of file diff --git a/docs/franzininho-diy/brilho-led/index.html b/docs/franzininho-diy/brilho-led/index.html index 75401dcc0..2ae5f4d9f 100755 --- a/docs/franzininho-diy/brilho-led/index.html +++ b/docs/franzininho-diy/brilho-led/index.html @@ -1,17 +1,62 @@ - + - -Controle brilho de LED | Franzininho - - - + +Controle brilho de LED | Franzininho + + + -
-

Controle brilho de LED

Esse exemplo exibe como controlar a intensidade de um LED usando a função analogWrite() na Franzininho DIY.

Materiais

  • Placa Franzininho;
  • Protoboard;
  • LED 3mm;
  • Resistor 330;
  • Jumpers macho/fêmea;

Circuito

Na protoboard você pode montar o circuito para acionamento do LED da seguinte forma:

Circuito

Sketch

/*
Franzininho
Exemplo: Controle Brilho de LED - PWM
Esse exemplo exibe como controlar a intensidade de brilho de um LED usando PWM
*/

const int LED = 1; //pino para o LED
int i = 0; //utilizaremos essa variável para contagem auxiliar

void setup() {
pinMode(LED,OUTPUT); //configura o pino do LED como uma saída
}

void loop() {
//faz um loop de 0 a 255 (acende gradualmente)
for (i = 0; i<255; i++) {
analogWrite (LED, i); // define o brilho do LED
delay (10); //espere 10ms, pois analogwrite é um instantâneo e não veríamos nenhuma alteração
}

delay(1000);

//faz um loop de 255 a 1 (apaga gradualmente)
for (i = 255; i > 0; i--) {
analogWrite(LED, i); //define o brilho do LED
delay(10); //aguarda 10ms
}

delay(1000);
}
Saidas PWM

Verifique no pinout da Franzininho DIY quais os pinos possuem função de saída PWM

Simulação

Video de Funcionamento

- - +

Esse exemplo exibe como controlar a intensidade de um LED usando a função analogWrite() na Franzininho DIY.

+

Materiais

+
    +
  • Placa Franzininho;
  • +
  • Protoboard;
  • +
  • LED 3mm;
  • +
  • Resistor 330;
  • +
  • Jumpers macho/fêmea;
  • +
+

Circuito

+

Na protoboard você pode montar o circuito para acionamento do LED da seguinte forma:

+

Circuito

+

Sketch

+
/*
+  Franzininho
+  Exemplo: Controle Brilho de LED - PWM
+  Esse exemplo exibe como controlar a intensidade de brilho de um LED usando PWM
+*/
+
+const int LED = 1; //pino para o LED
+int i = 0;        //utilizaremos essa variável para contagem auxiliar
+
+void setup() {
+ pinMode(LED,OUTPUT); //configura o pino do LED como uma saída
+}
+
+void loop() {
+  //faz um loop de 0 a 255 (acende gradualmente)
+  for (i = 0; i<255; i++) {
+    analogWrite (LED, i);  // define o brilho do LED
+    delay (10); //espere 10ms, pois analogwrite é um instantâneo e não veríamos nenhuma alteração
+  }
+
+  delay(1000);
+
+  //faz um loop de 255 a 1 (apaga gradualmente)
+  for (i = 255; i > 0; i--) {  
+   analogWrite(LED, i); //define o brilho do LED
+   delay(10);          //aguarda 10ms
+  }
+
+  delay(1000);
+}
+
+

Verifique no pinout da Franzininho DIY quais os pinos possuem função de saída PWM

+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/docs/franzininho-diy/drivers-micronucleus/index.html b/docs/franzininho-diy/drivers-micronucleus/index.html index aba2c4e2c..6e23c9b15 100755 --- a/docs/franzininho-diy/drivers-micronucleus/index.html +++ b/docs/franzininho-diy/drivers-micronucleus/index.html @@ -1,17 +1,37 @@ - + - -Instalação de drivers e configuração da USB | Franzininho - - - + +Instalação de drivers e configuração da USB | Franzininho + + + -
-

Instalação de drivers e configuração da USB

Até aqui você possui a placa pronta!

Agora precisamos instalar os drivers necessário para que a USB da Franzininho DIY possa receber os códigos através da Arduino IDE.

A seguir são apresentados os passos para correta configuração, conforme o sistema operacional usado.

Windows

Faça o download do driver no seguinte link: https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip

Descompacte.

instalando drive

Abra a pasta!

Dentro dela terá vários arquivos, vá até as opções abaixo:

Para Windows 32 bits execute o DPinst.exe e se tiver usando o Windows 64 bits execute o DPinst64.exe

instalando drive

Ao selecionar um deles dê dois cliques e irá aparecer uma janela, pressione sim, então aparecerá outra janela e clique em avançar.

instalando drive

Aguarde a instalação e clique em concluir!

Maravilha, agora veremos se realmente o driver foi instalado.

Plugue seu Franzininho na USB do seu computador e abra o gerenciador de dispositivo.

instalando drive

Se aparecer libusb ou digispark, maravilha foi instalado com sucesso!

Não esqueça de plugar a Franzininho em seu computador, pois se não. Não irá aparecer!

instalando drive

Fonte: http://digistump.com/wiki/digispark/tutorials/connecting

Linux

Faça o seguinte procedimento

Linux Troubleshooting: http://digistump.com/wiki/digispark/tutorials/linuxtroubleshooting

- - +

Instalação de drivers e configuração da USB

Até aqui você possui a placa pronta!

+

Agora precisamos instalar os drivers necessário para que a USB da Franzininho DIY possa receber os códigos através da Arduino IDE.

+

A seguir são apresentados os passos para correta configuração, conforme o sistema operacional usado.

+

Windows

+

Faça o download do driver no seguinte link: https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip

+

Descompacte.

+

instalando drive

+

Abra a pasta!

+

Dentro dela terá vários arquivos, vá até as opções abaixo:

+

Para Windows 32 bits execute o DPinst.exe e se tiver usando o Windows 64 bits execute o DPinst64.exe

+

instalando drive

+

Ao selecionar um deles dê dois cliques e irá aparecer uma janela, pressione sim, então aparecerá outra janela e clique em avançar.

+

instalando drive

+

Aguarde a instalação e clique em concluir!

+

Maravilha, agora veremos se realmente o driver foi instalado.

+

Plugue seu Franzininho na USB do seu computador e abra o gerenciador de dispositivo.

+

instalando drive

+

Se aparecer libusb ou digispark, maravilha foi instalado com sucesso!

+ +

instalando drive

+

Fonte: http://digistump.com/wiki/digispark/tutorials/connecting

+

Linux

+

Faça o seguinte procedimento

+

Linux Troubleshooting: http://digistump.com/wiki/digispark/tutorials/linuxtroubleshooting

\ No newline at end of file diff --git a/docs/franzininho-diy/elefante-colorido/index.html b/docs/franzininho-diy/elefante-colorido/index.html index 7d84ed6fd..068601f2d 100755 --- a/docs/franzininho-diy/elefante-colorido/index.html +++ b/docs/franzininho-diy/elefante-colorido/index.html @@ -1,17 +1,139 @@ - + - -Elefante Colorido! Que cor? | Franzininho - - - + +Elefante Colorido! Que cor? | Franzininho + + + -
-

Elefante Colorido! Que cor?

Esse exemplo exibe como usar o LED RGB para fazer uma aplicação didática. Podemos adaptar essa brincadeira com eletrônica, confira abaixo!

Elefante colorido! Que cor?

Montagem Elefante Colorido

“Elefante colorido”. É uma brincadeira característica da Região Sudeste, da cidade de São Paulo. As regras são as seguintes: uma criança é escolhida para comandar. Em roda, ela diz aos colegas: “Elefante colorido!” O grupo pergunta: “Que cor ele é?” O comandante escolhe uma cor e as crianças correm para tocar em algo que tenha a cor que o comandante escolheu.

Com essa brincadeira podemos trabalhar diversas habilidades, como o desenvolvimento da concentração, atenção, coordenação motora, reconhecimento das cores, discriminação visual e auditiva.

Podemos adaptar essa brincadeira com eletrônica?

Montagem Elefante Colorido

Sim e o mais bacana de tudo que ela está alinhada a BNCC.

Para Educação infantil trabalhamos com o campos de Experiência:

  • Traços, sons, cores e formas
  • Escuta, fala, pensamento e imaginação

Para o Fundamental 1 (1° ao 5 ano):

  • (EF15AR02) Explorar e reconhecer elementos constitutivos das artes visuais (ponto, linha, forma, cor, espaço, movimento etc.).
  • (EF15AR26) Explorar diferentes tecnologias e recursos digitais (multimeios, animações, jogos eletrônicos, gravações em áudio e vídeo, fotografia, softwares etc.) nos processos de criação artística.

Montagem Elefante Colorido

Materiais

  • 1 Placa Franzininho;
  • 1 Protoboard;
  • 1 LED RGB;
  • 3 Resistor 1k;
  • 3 Jumpers macho/fêmea

Circuito

Na protoboard você pode montar da seguinte forma:

tip

Você pode montar ele fora da protoboard depois!

Código

Modo simples: utilizando apenas 3 cores: vermelho, verde e azul.

//RGB com a Franzininho DIY

const int red = 0;
const int green = 1;
const int blue = 2;

void setup() {
// configura os pinos de cada cor como saída:
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
}

void loop() {
// aciona o LED na cor vermelha:
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
digitalWrite(blue, LOW);
delay(5000); // aguarda 5000ms

// aciona o LED na cor verde:
digitalWrite(red, LOW);
digitalWrite(green, HIGH);
digitalWrite(blue, LOW);
delay(5000); // aguarda 5000ms

// aciona o LED na cor azul:
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(blue, HIGH);
delay(5000); // aguarda 5000ms
}

Modo avançado: Variando as cores, confira!

const int red = 0; 
const int green = 1;
const int blue = 2;

// variáveis para salvar a intensidade de cada cor
int valor_r = 255; // vermelho (red)
int valor_g = 0; // verde (green)
int valor_b = 0; // blue (blue)

void setup() {
// configura os pinos de cada cor como saída:
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);

// inicializa LED em cor vemelha e de máxima intensidade
analogWrite(red, valor_r);
analogWrite(green, valor_g);
analogWrite(blue, valor_b);
}

void loop() {
// aumenta a intensidade do LED verde
for (valor_g = 0; valor_g < 255; valor_g=valor_g+5){
analogWrite(green, valor_g);
delay(50); // aguarda 50ms
}

// diminui a intensidade do LED vermelho
for (valor_r = 255; valor_r > 0; valor_r=valor_r-5){
analogWrite(red, valor_r);
delay(50); // aguarda 50ms
}

// aumenta a intensidade do LED azul
for (valor_b = 0; valor_b < 255; valor_b=valor_b+5){
analogWrite(blue, valor_b);
delay(50); // aguarda 50ms
}

// diminui a intensidade do LED verde
for (valor_g = 255; valor_g > 0; valor_g=valor_g-5){
analogWrite(green, valor_g);
delay(50);
}

// aumenta a intensidade do LED vermelho
for (valor_r = 0; valor_r < 255; valor_r=valor_r+5){
analogWrite(red, valor_r);
delay(50); // aguarda 50ms
}
}

Simulação (modo avançado)

Video de Funcionamento

- - +

Elefante Colorido! Que cor?

Esse exemplo exibe como usar o LED RGB para fazer uma aplicação didática. Podemos adaptar essa brincadeira com eletrônica, confira abaixo!

+

Elefante colorido! Que cor?

+

Montagem Elefante Colorido

+

“Elefante colorido”. É uma brincadeira característica da Região Sudeste, da cidade de São Paulo. As regras são as seguintes: uma criança é escolhida para comandar. Em roda, ela diz aos colegas: “Elefante colorido!” O grupo pergunta: “Que cor ele é?” O comandante escolhe uma cor e as crianças correm para tocar em algo que tenha a cor que o comandante escolheu.

+
+

Com essa brincadeira podemos trabalhar diversas habilidades, como o desenvolvimento da concentração, atenção, coordenação motora, reconhecimento das cores, discriminação visual e auditiva.

+
+

Podemos adaptar essa brincadeira com eletrônica?

+

Montagem Elefante Colorido

+

Sim e o mais bacana de tudo que ela está alinhada a BNCC.

+

Para Educação infantil trabalhamos com o campos de Experiência:

+
    +
  • Traços, sons, cores e formas
  • +
  • Escuta, fala, pensamento e imaginação
  • +
+

Para o Fundamental 1 (1° ao 5 ano):

+
    +
  • (EF15AR02) Explorar e reconhecer elementos constitutivos das artes visuais (ponto, linha, forma, cor, espaço, movimento etc.).
  • +
  • (EF15AR26) Explorar diferentes tecnologias e recursos digitais (multimeios, animações, jogos eletrônicos, gravações em áudio e vídeo, fotografia, softwares etc.) nos processos de criação artística.
  • +
+

Montagem Elefante Colorido

+

Materiais

+
    +
  • 1 Placa Franzininho;
  • +
  • 1 Protoboard;
  • +
  • 1 LED RGB;
  • +
  • 3 Resistor 1k;
  • +
  • 3 Jumpers macho/fêmea
  • +
+

Circuito

+

Na protoboard você pode montar da seguinte forma:

+

Você pode montar ele fora da protoboard depois!

+

Código

+

Modo simples: utilizando apenas 3 cores: vermelho, verde e azul.

+
//RGB com a Franzininho DIY
+
+const int red = 0; 
+const int green = 1; 
+const int blue = 2; 
+
+void setup() {
+  // configura os pinos de cada cor como saída:
+  pinMode(red, OUTPUT);
+  pinMode(green, OUTPUT);
+  pinMode(blue, OUTPUT);
+}
+
+void loop() {
+  // aciona o LED na cor vermelha:
+  digitalWrite(red, HIGH);
+  digitalWrite(green, LOW);
+  digitalWrite(blue, LOW);
+  delay(5000); // aguarda 5000ms 
+  
+  // aciona o LED na cor verde:
+  digitalWrite(red, LOW);
+  digitalWrite(green, HIGH);
+  digitalWrite(blue, LOW);
+  delay(5000); // aguarda 5000ms 
+
+  // aciona o LED na cor azul:
+  digitalWrite(red, LOW);
+  digitalWrite(green, LOW);
+  digitalWrite(blue, HIGH);
+  delay(5000); // aguarda 5000ms 
+}
+
+

Modo avançado: Variando as cores, confira!

+
const int red = 0; 
+const int green = 1; 
+const int blue = 2;
+
+// variáveis para salvar a intensidade de cada cor
+int valor_r = 255; // vermelho (red)
+int valor_g = 0; // verde (green)
+int valor_b = 0; // blue (blue)
+
+void setup() {
+  // configura os pinos de cada cor como saída:
+  pinMode(red, OUTPUT);
+  pinMode(green, OUTPUT);
+  pinMode(blue, OUTPUT);
+  
+  // inicializa LED em cor vemelha  e de máxima intensidade
+  analogWrite(red, valor_r);
+  analogWrite(green, valor_g);
+  analogWrite(blue, valor_b);
+}
+
+void loop() {
+  // aumenta a intensidade do LED verde
+  for (valor_g = 0; valor_g < 255; valor_g=valor_g+5){
+    analogWrite(green, valor_g);
+    delay(50); // aguarda 50ms 
+  }
+  
+  // diminui a intensidade do LED vermelho
+  for (valor_r = 255; valor_r > 0; valor_r=valor_r-5){
+    analogWrite(red, valor_r);
+    delay(50); // aguarda 50ms 
+  }
+  
+  // aumenta a intensidade do LED azul
+  for (valor_b = 0; valor_b < 255; valor_b=valor_b+5){
+    analogWrite(blue, valor_b);
+    delay(50); // aguarda 50ms 
+  }
+  
+  // diminui a intensidade do LED verde
+  for (valor_g = 255; valor_g > 0; valor_g=valor_g-5){
+    analogWrite(green, valor_g);
+    delay(50);
+  }
+  
+  // aumenta a intensidade do LED vermelho
+  for (valor_r = 0; valor_r < 255; valor_r=valor_r+5){
+    analogWrite(red, valor_r);
+    delay(50); // aguarda 50ms 
+  }
+}
+
+
+

Simulação (modo avançado)

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/docs/franzininho-diy/entradas-analogicas/index.html b/docs/franzininho-diy/entradas-analogicas/index.html index 74342da69..fff81dde7 100755 --- a/docs/franzininho-diy/entradas-analogicas/index.html +++ b/docs/franzininho-diy/entradas-analogicas/index.html @@ -1,18 +1,50 @@ - + - -Entradas Analógicas | Franzininho - - - + +Entradas Analógicas | Franzininho + + + -
-

Entradas Analógicas

Na Franzininho DIY alguns pinos que podem ser usados como entradas analógicas:

Pinagem Franzininho DIY

danger

Devido as limitações de hardware da Franzininho DIY recomendamos apenas o uso da Entrada A1 para sinais analógicos. -As demais entradas (A0,A2,A3) devem ser usadas com cautela e analisando o circuito para ver o circuito presente no pino não atrapalhará no sinal analógico.

Função

Para a leitura de um sinal analógico no pino que possui essa função, não é necessário configurar o pino como entrada analógica. Isso é feito na função de leitura:

int analogRead(pino)

Lê o valor presente em um pino configurado como entrada analógica. Internamente o Arduino possui um conversor A/D de 10 bits. Dessa forma o valor retornado por esta função estará na faixa de 0 a 1023 conforme o valor presente no pino.

Sintaxe

analogRead(pino);

Parâmetros

pino: número do pino configurado como entrada analógica (0,1,2,3 na Franzininho)

Retorno

int (0 a 1023)

Exemplo

Vamos ler o valor de um potenciômetro ligado ao pino P2(A1) e acionar o LED quando a leitura atingir um valor definido:

Circuito

const byte LED = 1; //pino do LED
const byte POT = A1; //pino do Potenciômetro

void setup() {
pinMode(LED,OUTPUT);
}

void loop() {

int valor = analogRead(POT); // lê o valor do potenciômetro

if(valor> 511){ //se valor maior que 511
digitalWrite(LED,HIGH); //liga LED
}else{ //se não
digitalWrite(LED,LOW); //apaga LED
}
}

Simulação

- - +

Entradas Analógicas

Na Franzininho DIY alguns pinos que podem ser usados como entradas analógicas:

+

Pinagem Franzininho DIY

+

Devido as limitações de hardware da Franzininho DIY recomendamos apenas o uso da Entrada A1 para sinais analógicos. +As demais entradas (A0,A2,A3) devem ser usadas com cautela e analisando o circuito para ver o circuito presente no pino não atrapalhará no sinal analógico.

+

Função

+

Para a leitura de um sinal analógico no pino que possui essa função, não é necessário configurar o pino como entrada analógica. Isso é feito na função de leitura:

+

int analogRead(pino)

+

Lê o valor presente em um pino configurado como entrada analógica. Internamente o Arduino possui um conversor A/D de 10 bits. Dessa forma o valor retornado por esta função estará na faixa de 0 a 1023 conforme o valor presente no pino.

+

Sintaxe

+

analogRead(pino);

+

Parâmetros

+

pino: número do pino configurado como entrada analógica (0,1,2,3 na Franzininho)

+

Retorno

+

int (0 a 1023)

+

Exemplo

+

Vamos ler o valor de um potenciômetro ligado ao pino P2(A1) e acionar o LED quando a leitura atingir um valor definido:

+

Circuito

+
const byte LED = 1; //pino do LED
+const byte POT = A1; //pino do Potenciômetro
+
+void setup() {
+  pinMode(LED,OUTPUT);
+}
+
+void loop() {
+
+  int valor = analogRead(POT); // lê o valor do potenciômetro
+
+  if(valor> 511){              //se valor maior que 511
+    digitalWrite(LED,HIGH);    //liga LED
+  }else{                       //se não
+    digitalWrite(LED,LOW);     //apaga LED
+  }
+}
+
+

Simulação

+
\ No newline at end of file diff --git a/docs/franzininho-diy/entradas-saidas-digitais/index.html b/docs/franzininho-diy/entradas-saidas-digitais/index.html index fe124d5fa..af04b4e35 100755 --- a/docs/franzininho-diy/entradas-saidas-digitais/index.html +++ b/docs/franzininho-diy/entradas-saidas-digitais/index.html @@ -1,17 +1,113 @@ - + - -Entradas e Saídas Digitais | Franzininho - - - + +Entradas e Saídas Digitais | Franzininho + + + -
-

Entradas e Saídas Digitais

Na Franzininho DIY temos 6 pinos que podem ser usados como entradas ou saídas digitais( P0 a P5), conforme pinout:

Pinagem Franzininho DIY

danger

Verificar limitações de uso dos pinos

Configuração do modo de funcionamento do pino

Os pinos do ATtiny85 podem ser configurados como entradas ou saídas, além de outras funções. Para configuração como entrada ou saída digital vamos usar a seguinte função:

pinMode()

Configura um pino específico para ser entrada ou saída digital.

Sintaxe:

pinMode(pino, modo);

Parâmetros:

  • pino: corresponde ao pino que você irá usar, no caso da Franzininho podemos usar pinos de 0 a 5.
  • modo: deve-se colocar o modo no qual se deseja configurar o pino:
    • INPUT = Entrada: Esse pino receberá sinais vindos de um circuito externo
    • OUTPUT = Saída: Esse pino enviará sinais para ativar um circuito externo
    • INPUT_PULLUP = Entrada digital com resistor de pull-up (ligado ao VCC) interno habilitado

Exemplo de uso

Vamos configurar o pino P0 para leitura de uma tecla, portanto será uma entrada digital. Também vamos configurar o pino P1 para acionamento do LED, ou seja, uma saída digital:

int tecla = 0;   //pino da tecla
int LED = 1; //pino do LED

void setup() {
pinMode(tecla, INPUT); //configura pino da tecla como entrada
pinMode(LED, OUTPUT); //configura pino do LED como saída
}

void loop() {


}

Geralmente as configurações são realizadas dentro da função setup(). Na função loop() são realizadas as tarefas durante o funcionamento da placa, como veremos mais à frente.

Escrita em um pino digital

Os pinos digitais configurados como saídas digitais podem assumir dois valores, conforme a escrita no código. Os valores podem ser HIGH ou LOW, que se traduzem em 5V ou 0V no pino da Franzininho. Para escrita digital vamos usar a seguinte função:

digitalWrite()

Coloca um nível lógico alto (HIGH, 5V) ou baixo (LOW, 0V) em um pino configurado como saída digital.

Sintaxe

digitalWrite(pino, valor)

Parâmetros

pino: Número correspondente ao pino.

valor: HIGH ou LOW.

Exemplo de uso

Inverte o estado do LED (P1) em intervalos de 1 segundo:

const int LED = 1; //pino digital conectado ao LED

void setup(){
pinMode(LED,OUTPUT); //pino digital de saída
}

void loop(){
digitalWrite(LED,HIGH); //acende o led da placa
delay(1000); //aguarda um segundo
digitalWrite(LED,LOW); //apaga o led da placa
delay(1000); //aguarda um segundo
}

Simulação

A função delay(ms) espera um tempo em milissegundos. No caso do exemplo acima, 1000 ms = 1 segundo;

Leitura de um pino digital

Um pino digital pode assumir dois valores, HIGH e LOW, conforme o nível de tensão presente no mesmo: 5V ou 0V. Podemos usar o pino configurado como entrada digital para ler estados de sensores, que por sua vez representam estados de situações, por exemplo:

  • botão solto ou pressionado;
  • porta aberta ou fechada
  • presença de objeto ou não presença de objeto

Para leitura de uma entrada digital usamos a seguinte função:

digitalRead()

Lê o valor presente em um pino digital. Este valor pode ser HIGH ou LOW.

Sintaxe

digitalRead(pino);

Parâmetros:

pino: número do pino que se deseja ler.

Retorno

HIGH ou LOW.

Exemplo de uso

Vamos ler o estado da tecla ligada ao pino P2 e acionar o LED ligado a pino P1 conforme o seu estado:

Circuito

Código

const int LED = 1; //pino para o LED
const int BOTAO = 2; //pino para o botão

int val = 0; // val será utilizado para armazenar o estado do pino

void setup(){
pinMode(LED,OUTPUT); //o LED é uma saída
pinMode(BOTAO,INPUT); //o BOTAO é uma entrada
}

void loop (){
val = digitalRead(BOTAO); // lê e armazena o valor de entrada
digitalWrite(LED, val); //aciona LED conforme valor lido do botão
}

Simulação

- - +

Entradas e Saídas Digitais

Na Franzininho DIY temos 6 pinos que podem ser usados como entradas ou saídas digitais( P0 a P5), conforme pinout:

+

Pinagem Franzininho DIY

+

Verificar limitações de uso dos pinos

+

Configuração do modo de funcionamento do pino

+

Os pinos do ATtiny85 podem ser configurados como entradas ou saídas, além de outras funções. Para configuração como entrada ou saída digital vamos usar a seguinte função:

+

pinMode()

+

Configura um pino específico para ser entrada ou saída digital.

+

Sintaxe:

+

pinMode(pino, modo);

+

Parâmetros:

+
    +
  • pino: corresponde ao pino que você irá usar, no caso da Franzininho podemos usar pinos de 0 a 5.
  • +
  • modo: deve-se colocar o modo no qual se deseja configurar o pino: +
      +
    • INPUT = Entrada: Esse pino receberá sinais vindos de um circuito externo
    • +
    • OUTPUT = Saída: Esse pino enviará sinais para ativar um circuito externo
    • +
    • INPUT_PULLUP = Entrada digital com resistor de pull-up (ligado ao VCC) interno habilitado
    • +
    +
  • +
+

Exemplo de uso

+

Vamos configurar o pino P0 para leitura de uma tecla, portanto será uma entrada digital. Também vamos configurar o pino P1 para acionamento do LED, ou seja, uma saída digital:

+
int tecla = 0;   //pino da tecla
+int LED = 1;     //pino do LED
+
+void setup() {
+  pinMode(tecla, INPUT); //configura pino da tecla como entrada
+  pinMode(LED, OUTPUT);  //configura pino do LED como saída
+}
+
+void loop() {
+
+
+}
+
+

Geralmente as configurações são realizadas dentro da função setup(). Na função loop() são realizadas as tarefas durante o funcionamento da placa, como veremos mais à frente.

+

Escrita em um pino digital

+

Os pinos digitais configurados como saídas digitais podem assumir dois valores, conforme a escrita no código. Os valores podem ser HIGH ou LOW, que se traduzem em 5V ou 0V no pino da Franzininho. Para escrita digital vamos usar a seguinte função:

+

digitalWrite()

+

Coloca um nível lógico alto (HIGH, 5V) ou baixo (LOW, 0V) em um pino configurado como saída digital.

+

Sintaxe

+

digitalWrite(pino, valor)

+

Parâmetros

+

pino: Número correspondente ao pino.

+

valor: HIGH ou LOW.

+

Exemplo de uso

+

Inverte o estado do LED (P1) em intervalos de 1 segundo:

+
const int LED = 1; //pino digital conectado ao LED
+
+void setup(){
+  pinMode(LED,OUTPUT); //pino digital de saída
+}
+
+void loop(){
+  digitalWrite(LED,HIGH);   //acende o led da placa
+  delay(1000);             //aguarda um segundo
+  digitalWrite(LED,LOW);  //apaga o led da placa
+  delay(1000);           //aguarda um segundo
+}
+
+

Simulação

+ +

A função delay(ms) espera um tempo em milissegundos. No caso do exemplo acima, 1000 ms = 1 segundo;

+

Leitura de um pino digital

+

Um pino digital pode assumir dois valores, HIGH e LOW, conforme o nível de tensão presente no mesmo: 5V ou 0V. Podemos usar o pino configurado como entrada digital para ler estados de sensores, que por sua vez representam estados de situações, por exemplo:

+
    +
  • botão solto ou pressionado;
  • +
  • porta aberta ou fechada
  • +
  • presença de objeto ou não presença de objeto
  • +
+

Para leitura de uma entrada digital usamos a seguinte função:

+

digitalRead()

+

Lê o valor presente em um pino digital. Este valor pode ser HIGH ou LOW.

+

Sintaxe

+

digitalRead(pino);

+

Parâmetros:

+

pino: número do pino que se deseja ler.

+

Retorno

+

HIGH ou LOW.

+

Exemplo de uso

+

Vamos ler o estado da tecla ligada ao pino P2 e acionar o LED ligado a pino P1 conforme o seu estado:

+

Circuito

+

Código

+
const int LED = 1; //pino para o LED
+const int BOTAO = 2; //pino para o botão
+
+int val = 0; // val será utilizado para armazenar o estado do pino
+
+void setup(){
+  pinMode(LED,OUTPUT); //o LED é uma saída
+  pinMode(BOTAO,INPUT); //o BOTAO é uma entrada
+}
+
+void loop (){
+  val = digitalRead(BOTAO); // lê e armazena o valor de entrada
+  digitalWrite(LED, val); //aciona LED conforme valor lido do botão
+}
+
+

Simulação

+
\ No newline at end of file diff --git a/docs/franzininho-diy/exemplos-avr-libc/buzzer/index.html b/docs/franzininho-diy/exemplos-avr-libc/buzzer/index.html index dd06c7f1c..bbc457337 100755 --- a/docs/franzininho-diy/exemplos-avr-libc/buzzer/index.html +++ b/docs/franzininho-diy/exemplos-avr-libc/buzzer/index.html @@ -1,17 +1,140 @@ - + - -Instrumento musical com Buzzer | Franzininho - - - + +Instrumento musical com Buzzer | Franzininho + + + -
-

Instrumento musical com Buzzer

Nesse exemplo vamos criar um programa que lê uma partitura e toca a música escrita através de um buzzer na Franzininho DIY. Vamos aprender como se usar um buzzer passivo para gerar cada nota musical com ajuda do timer0.

Boa prática!

Recursos necessários

  • Franzininho DIY (com Micronucleos)
  • 1 buzzer passivo 5v
  • 4 jumpers macho-fêmea
  • 1 jumper macho-macho

Fazendo música com o Buzzer

Nesse exemplo vamos através de uma lookup table vamos ensinar quais as frequências de cada nota, e com o uso do timer vamos variar a entrada no buzzer na frequência da nota que queremos. Com a ajuda de outra tabela, vamos dar para o Franzininho a sequência das notas que queremos que ele toque, podendo assim, tocar a música que quisermos.

O buzzer passivo funciona como um pequeno alto falante, enquanto tivermos a tensão nominal na entrada positiva e o terra na entrada negativa o imã dentro dele vai para frente. Por outro lado, quando tivermos terra em ambas ele volta para a posição inicial. Se variarmos entre esses dois estados na frequência de uma nota musical geraremos uma onda sonora com o tom dela.

As notas musicais ocidentais em uma escala maior são Do Do# Re Re# Mi Fa Fa# Sol Sol# Lá Lá# Si voltando para Do depois. Cada nota está a uma distância de meio tom da outra e a 6 tons de sua próxima oitava, que é a mesma nota porém mais fina.

Olhando pela frequência temos que partindo de da terceira oitava, 440Hz, cada uma oitava acima tem o dobro da frequência e cada oitava a baixo tem metade da frequência. Já para subir cada semitom, basta multiplicar por 2^(1/12), ou para x semitons, 2^(x/12).

Código

/***********************************************
* @file main.c
* @author Eduardo Dueñas / Daniel Quadros
* @brief Exemplo tocar musicas usando buzzer
* @version 1.0
* @date 21/04/2021
*
* última modificação: 15/05/2021
**********************************************/
#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 16500000L

#define setBit(valor,bit) (valor |= (1 << bit))
#define clearBit(valor,bit) (valor &= ~(1 << bit))
#define toogleBit(valor,bit) (valor ^= (1 << bit))
#define testBit(valor,bit) (valor & (1 << bit))


#define NumNotas 32
#define CONT(freq) ((F_CPU*10L)/(256L*freq))

enum notas {Pausa, Do, DoS, Re, ReS, Mi, Fa, FaS, Sol, SolS, La, LaS, Si, DoM, DoSM, ReM};
long f[16] = {
255L, (long)CONT(5232L), (long)CONT(5543L), (long)CONT(5873L), (long)CONT(6222L), (long)CONT(6592L), (long)CONT(6984L),
(long)CONT(7400L), (long)CONT(7840L), (long)CONT(8306L), (long)CONT(8800L), (long)CONT(9323L), (long)CONT(9877L),
(long)CONT(10465L), (long)CONT(11087L), (long)CONT(11746L)
};

// {0xFF,123, 116, 110, 104, 98, 92, 87, 82, 78, 73, 69, 65, 62, 58, 54}
// Lookup table com os valores de cada nota a ser colocado na flag do timer

char Partitura[NumNotas] = {
Re, Mi, Mi, Re, Sol, FaS, FaS, FaS, Re, Mi, Mi, Re, La, Sol, Sol, Sol,
Re, ReM, ReM, Si, Sol, FaS, FaS, Mi, DoM, Si, Si, Sol, La, Sol, Sol, Sol
}; // Partitura da música
volatile char cont = 0; // Local da partitura
volatile long aux = 0;

// Tratamento de interrupção
ISR (TIM0_COMPB_vect) { // Vetor de comparação B
if (aux <= 0xff) { // Se aux menor que 8bits
OCR0B = (TCNT0 + aux) & (0xff); // Mandar aux para o contador
aux = f[Partitura[cont]]; // Reinicia o aux
toogleBit(PORTB, PB1); // Inverter o buzzer
}
else { // Se não
OCR0B = TCNT0; // Mandar o tempoatual para o contador, o mesmo que esperar um overflow
aux -= 0xff; // Subitrair 8bits do aux
}
}

// Função main
int main() {
enum notas nota;
setBit(DDRB, PB1); // Configura o PortB1 como saída, pino do buzzer

// Configuração do timer
TCCR0A = 0x00; // Configura pino de compararação desconectado
TCCR0B = 0x04; // Configura o prescaler como 256
setBit(TIMSK, OCIE0B); // Habilita a interrupção por comparação de COMPB
sei(); // Habilita interrupções globais
aux = f[Partitura[cont]]; // Inicia o contador de COMPB

if (aux <= 0xff) {
OCR0B = (TCNT0 + aux) & (0xff);
aux = f[Partitura[cont]];
toogleBit(PORTB, PB1);
}
else {
OCR0B = TCNT0;
aux -= 0xff;
}

// Loop infinito
for (;;) {
long i;
for (i = 0; i < 1000000L; i++) {
asm ("nop");
cont++; // Avança na partitura
if (cont >= NumNotas)cont = 0; // Toca de novo
}
}

Montagem

circuito buzzer

Dependendo do buzzer é necessário conectar os jumpers diretamente nos pinos do buzzer ao invés de colocá-lo na protoboard.

Compilação e upload

Para compilar o programa, acesse a pasta do exemplo e dê o comando make:

exemplos-avr-libc/exemplos/buzzer$ make

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
> Please plug in the device (will time out in 60 seconds) ...

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

Resultado

O buzzer deve tocar Parabéns para você e deve continuar em loop até a placa ser desligada.

Simule esse exemplo no WokWi

Conclusão

O buzzer passivo é um componente muito versátil com o qual podemos, não só, tocar músicas como também gerar diversos tipos de efeitos sonoros, tudo que precisamos é entender como gerar o som que queremos. Além disso vimos como podemos usar interrupções de timer para funções que precisam de Real Time, ou seja, que precisam de precisão de tempo.

Glossário

  • Setar: colocar um novo valor em um registrador. Para um bit é convencionado setar, mudá-lo para valor 1, e clear (limpar), mudá-lo para valor 0
  • Resetar: reiniciar
  • Timer: circuito eletrônico dedicado a contagem de tempo
  • Lookup table: tabela de consulta, no contexto de programação é um vetor com informações necessárias para o programa.
AutorEduardo Dueñas
Data:05/06/2020
- - +

Instrumento musical com Buzzer

Nesse exemplo vamos criar um programa que lê uma partitura e toca a música escrita através de um buzzer na Franzininho DIY. Vamos aprender como se usar um buzzer passivo para gerar cada nota musical com ajuda do timer0.

+

Boa prática!

+

Recursos necessários

+
    +
  • Franzininho DIY (com Micronucleos)
  • +
  • 1 buzzer passivo 5v
  • +
  • 4 jumpers macho-fêmea
  • +
  • 1 jumper macho-macho
  • +
+

Fazendo música com o Buzzer

+

Nesse exemplo vamos através de uma lookup table vamos ensinar quais as frequências de cada nota, e com o uso do timer vamos variar a entrada no buzzer na frequência da nota que queremos. Com a ajuda de outra tabela, vamos dar para o Franzininho a sequência das notas que queremos que ele toque, podendo assim, tocar a música que quisermos.

+

O buzzer passivo funciona como um pequeno alto falante, enquanto tivermos a tensão nominal na entrada positiva e o terra na entrada negativa o imã dentro dele vai para frente. Por outro lado, quando tivermos terra em ambas ele volta para a posição inicial. Se variarmos entre esses dois estados na frequência de uma nota musical geraremos uma onda sonora com o tom dela.

+

As notas musicais ocidentais em uma escala maior são Do Do# Re Re# Mi Fa Fa# Sol Sol# Lá Lá# Si voltando para Do depois. Cada nota está a uma distância de meio tom da outra e a 6 tons de sua próxima oitava, que é a mesma nota porém mais fina.

+

Olhando pela frequência temos que partindo de da terceira oitava, 440Hz, cada uma oitava acima tem o dobro da frequência e cada oitava a baixo tem metade da frequência. Já para subir cada semitom, basta multiplicar por 2^(1/12), ou para x semitons, 2^(x/12).

+

Código

+
/***********************************************
+ * @file main.c
+ * @author Eduardo Dueñas / Daniel Quadros
+ * @brief Exemplo tocar musicas usando buzzer
+ * @version 1.0
+ * @date 21/04/2021
+ *
+ * última modificação: 15/05/2021
+ **********************************************/
+#include <avr/io.h>
+#include <avr/interrupt.h>
+
+#define F_CPU 16500000L
+
+#define setBit(valor,bit)      (valor |= (1 << bit))
+#define clearBit(valor,bit)    (valor &= ~(1 << bit))
+#define toogleBit(valor,bit)   (valor ^= (1 << bit))
+#define testBit(valor,bit)     (valor & (1 << bit))
+
+
+#define NumNotas 32
+#define CONT(freq) ((F_CPU*10L)/(256L*freq))
+
+enum notas {Pausa, Do, DoS, Re, ReS, Mi, Fa, FaS, Sol, SolS, La, LaS, Si, DoM, DoSM, ReM};
+long f[16] = {
+    255L, (long)CONT(5232L), (long)CONT(5543L), (long)CONT(5873L), (long)CONT(6222L), (long)CONT(6592L), (long)CONT(6984L),
+    (long)CONT(7400L), (long)CONT(7840L), (long)CONT(8306L), (long)CONT(8800L), (long)CONT(9323L), (long)CONT(9877L),
+    (long)CONT(10465L), (long)CONT(11087L), (long)CONT(11746L)
+};
+
+// {0xFF,123, 116, 110, 104, 98, 92, 87, 82, 78, 73, 69, 65, 62, 58, 54}
+// Lookup table com os valores de cada nota a ser colocado na flag do timer
+
+char Partitura[NumNotas] = {
+    Re, Mi, Mi, Re, Sol, FaS, FaS, FaS, Re, Mi, Mi, Re, La, Sol, Sol, Sol,
+    Re, ReM, ReM, Si, Sol, FaS, FaS, Mi, DoM, Si, Si, Sol, La, Sol, Sol, Sol
+};                                       // Partitura da música
+volatile char cont = 0;                  // Local da partitura
+volatile long aux = 0;
+
+// Tratamento de interrupção
+ISR (TIM0_COMPB_vect) {                  // Vetor de comparação B
+  if (aux <= 0xff) {                     // Se aux menor que 8bits
+    OCR0B = (TCNT0 + aux) & (0xff);      // Mandar aux para o contador
+    aux = f[Partitura[cont]];            // Reinicia o aux
+    toogleBit(PORTB, PB1);               // Inverter o buzzer
+  }
+  else {                                 // Se não
+    OCR0B = TCNT0;                       // Mandar o tempoatual para o contador, o mesmo que esperar um overflow
+    aux -= 0xff;                         // Subitrair 8bits do aux
+  }
+}
+
+// Função main
+int main() {
+  enum notas nota;
+  setBit(DDRB, PB1);                     // Configura o PortB1 como saída, pino do buzzer
+
+  // Configuração do timer
+  TCCR0A = 0x00;                         // Configura pino de compararação desconectado
+  TCCR0B = 0x04;                         // Configura o prescaler como 256
+  setBit(TIMSK, OCIE0B);                 // Habilita a interrupção por comparação de COMPB
+  sei();                                 // Habilita interrupções globais
+  aux = f[Partitura[cont]];              // Inicia o contador de COMPB
+
+  if (aux <= 0xff) {
+    OCR0B = (TCNT0 + aux) & (0xff);
+    aux = f[Partitura[cont]];
+    toogleBit(PORTB, PB1);
+  }
+  else {
+    OCR0B = TCNT0;
+    aux -= 0xff;
+  }
+
+  // Loop infinito
+  for (;;) {
+    long i;
+    for (i = 0; i < 1000000L; i++) {
+      asm ("nop");
+      cont++;                            // Avança na partitura
+      if (cont >= NumNotas)cont = 0;     // Toca de novo
+  }
+}
+
+

Montagem

+

circuito buzzer

+

Dependendo do buzzer é necessário conectar os jumpers diretamente nos pinos do buzzer ao invés de colocá-lo na protoboard.

+

Compilação e upload

+

Para compilar o programa, acesse a pasta do exemplo e dê o comando make:

+
exemplos-avr-libc/exemplos/buzzer$ make
+
+

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

+
../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
+Running Digispark Uploader...
+Plug in device now... (will timeout in 60 seconds)
+> Please plug in the device (will time out in 60 seconds) ...
+
+

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

+

Resultado

+

O buzzer deve tocar Parabéns para você e deve continuar em loop até a placa ser desligada.

+

Simule esse exemplo no WokWi

+

Conclusão

+

O buzzer passivo é um componente muito versátil com o qual podemos, não só, tocar músicas como também gerar diversos tipos de efeitos sonoros, tudo que precisamos é entender como gerar o som que queremos. Além disso vimos como podemos usar interrupções de timer para funções que precisam de Real Time, ou seja, que precisam de precisão de tempo.

+

Glossário

+
    +
  • Setar: colocar um novo valor em um registrador. Para um bit é convencionado setar, mudá-lo para valor 1, e clear (limpar), mudá-lo para valor 0
  • +
  • Resetar: reiniciar
  • +
  • Timer: circuito eletrônico dedicado a contagem de tempo
  • +
  • Lookup table: tabela de consulta, no contexto de programação é um vetor com informações necessárias para o programa.
  • +
+
AutorEduardo Dueñas
Data:05/06/2020
\ No newline at end of file diff --git a/docs/franzininho-diy/exemplos-avr-libc/contadores/index.html b/docs/franzininho-diy/exemplos-avr-libc/contadores/index.html index 21540560d..d2a50ae84 100755 --- a/docs/franzininho-diy/exemplos-avr-libc/contadores/index.html +++ b/docs/franzininho-diy/exemplos-avr-libc/contadores/index.html @@ -1,17 +1,329 @@ - + - -Contador de pulsos externos | Franzininho - - - + +Contador de pulsos externos | Franzininho + + + -
-

Contador de pulsos externos

Nesses três exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY. Vamos explorar as formas mais simples e as mais complexas de contar eventos e as vantagens de cada uma. Nesses exemplos vamos aprender a usar o timer e a fazer debounce, necessário para lermos apenas eventos válidos e não ler o mesmo evento mais de uma vez.

Boa prática!

Recursos necessários

  • Franzininho DIY (com Micronucleos)
  • 4 LEDs de 3mm
  • 4 resistores de 200Ω
  • 1 resistor de 10kΩ
  • 1 chave tactil
  • 7 jumpers macho-fêmea
  • 7 jumpers macho-macho

Contadores

Temos três exemplos de contadores da versão 1 a 3, e aumentando a complexidade do código e dos recursos utilizados.

Contador_v1

Nesse exemplo vamos utilizar loops para fazer a verificação de eventos. Essa forma de se fazer a contagem, apesar de ser mais simples de se entender e criar, é pouco eficiente, tanto a nível de processamento, quanto ao de energia.

O programa é um código em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca avr/io.h. Para melhor entendimento recomendo ler os comentários do código e o datasheet do ATtiny85.

Código

/**
* @file main.c
* @author Eduardo Dueñas
* @brief Exemplo de contador de eventos
* @version 1.0
* @date 06/04/2021
*
* última modificação: 05/05/2021
*/
#include <avr/io.h>

#define F_CPU 16500000L // Frequência de CLK

// Macros
#define setBit(valor,bit) (valor |= (1 << bit))
#define clearBit(valor,bit) (valor &= ~(1 << bit))
#define toogleBit(valor,bit) (valor ^= (1 << bit))
#define testBit(valor,bit) (valor & (1 << bit))

// Debounce da chave táctil para desconsiderarmos ruído e bouncing do botão
char debounce(int pino) {
unsigned int i;
for (i = 0; i < 20000; i++) { // Testa o pino várias vezes para evitar leituras erradas
if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1
return 0; // Se sim, retorna falso
}
}
return 1; // Retorna verdadeiro
}

int main(void) {
// Configuração de PORTB
clearBit(DDRB, PB0); // Configura PB0 como entrada
setBit(DDRB, PB1); // Configura PB1 como saida
setBit(DDRB, PB2); // Configura PB2 como saida
setBit(DDRB, PB3); // Configura PB3 como saida
setBit(DDRB, PB4); // Configura PB4 como saida

PORTB &= 0xE1; // Manda 0 para PB[4:1]

unsigned char count = 0;

for (;;) { // loop infinito
if (testBit(PINB, PB0)) { // Testa se PB0 é 1
if (debounce(PB0)) { // Verifica se realmente foi um aperto de botão
count++; // Se sim, incrementa o contador
while (testBit(PINB, PB0)) {} // Espera o botão parar de ser pressionado
}
}
count = count % 0x10; // Limpa o overflow do contador
PORTB = ((PORTB & 0xE1) | (count << 1)); // Manda o contador para PB[4:1]
}
}

Montagem

circuito contador

Como mostrado na imagem, os LEDs são ligados nas saídas PortB[4:1] e o botão no PortB[0].

Compilação e upload

Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando make:

exemplos-avr-libc/exemplos/contador$ make

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
> Please plug in the device (will time out in 60 seconds) ...

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

Resultado

Os LEDs devem mostrar a contagem de apertos do botão de forma binária resetando em 0x10 ou quando resetada a placa.

Análise

Esse código é de simples compreensão usando apenas um for para checar continuamente se o botão foi apertado, chamando uma função debounce caso a leitura seja 1, incrementando o contador se for confirmado que a leitura é válida, esperando o botão ser solto e mandando o valor para as saídas.

De forma geral esse código funciona, mas há muito desperdício de processamento, pois há muitos momentos que o processador não está fazendo nada, apenas esperando algo acontecer ou um certo tempo passar, nesse tempo ele poderia estar fazendo outra tarefas ou ficar em modo econômico de energia, que veremos nos próximos exemplos.

Contador_v2

Nesse exemplo vamos começar a usar interrupções para ler os pulsos. Vamos ver quais são as vantagens desse método e o que pode ser melhorado.

O programa é um código em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca avr/io.h e a biblioteca avr/interrupt.h. Para melhor entendimento recomendo ler os comentários do código e o datasheet do ATtiny85.

Código

/**
* @file main.c
* @author Eduardo Dueñas
* @brief Exemplo de contador de eventos com tratamento por interrupção
* @version 1.0
* @date 19/04/2021
*
* última modificação: 05/05/2021
*
* O programa é um desenvolvimento em cima do contador uma com alterações na leitura do pulso para leitura por interrupção,
* possibilitando o uso do microcontrolador para outras funções junto do contador
*/
#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 16500000L // Frequência de CLK

// Macros
#define setBit(valor,bit) (valor |= (1 << bit))
#define clearBit(valor,bit) (valor &= ~(1 << bit))
#define toogleBit(valor,bit) (valor ^= (1 << bit))
#define testBit(valor,bit) (valor & (1 << bit))

volatile unsigned char count = 0; // Contador

ISR(INT0_vect) {
cli(); // Desabilita interrupções globais durante o tratamento da interrupção
if (debounce(PB2)) { // Se o botão foi realmente apertado incrementa cont e manda para os LEDs
count++; // Incrementa o contador
count %= 0x10; // Limpa o excesso
PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]
PORTB = ((PORTB & 0xFC) | (count & 0x03)); // Manda os dois bits menos significativos de cont para PB[1:0]
}
sei(); // Reabilita interrupções globais
}

// Debounce da chave tactil para desconsiderarmos ruído e bouncing do botão
char debounce(int pino) {
unsigned int i;

for (i = 0; i < 20000; i++) { // Testa o pino várias vezes para evitar leituras erradas
if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1
return 0; // Se sim, retorna falso
}
}

return 1; // Retorna verdadeiro
}

int main(void) {
// Configuração de PORTB
clearBit(DDRB, PB2); // Configura PB2 como entrada
setBit(DDRB, PB0); // Configura PB0 como saída
setBit(DDRB, PB1); // Configura PB1 como saída
setBit(DDRB, PB3); // Configura PB3 como saída
setBit(DDRB, PB4); // Configura PB4 como saída

PORTB &= 0xE4; // Manda 0 para PB[4:3] e PB[1:0]

//Configuração de Interrupção externa
GIMSK |= (1 << INT0); // Habilita interrupções externas no INT0
MCUCR |= 0x03; // Seta interrupções para borda de subida
sei(); // Habilita interrupções globais


for (;;) { // Loop infinito
// Aqui você pode colocar outra aplicação para rodar simultaneamente ao contador
}
}

Montagem

Circuito contador V2

Como mostrado na imagem, os LEDs são ligados nas saídas PORTB[4:3] e [1:0] e o botão na entrada PORTB[2].

Compilação e upload

Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando make:

exemplos-avr-libc/exemplos/contador_v2$ make

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
> Please plug in the device (will time out in 60 seconds) ...

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

Resultado

Assim como no último exemplo, os LEDs devem mostrar a contagem de eventos, mostrando em binário até 15.

Análise

Esse exemplo tem um código um pouco mais complexo, podendo fazer diferentes tarefas ao mesmo tempo com o uso de interrupções.

Interrupções são, de forma simples, instruções de alta prioridade, que fazem o processador parar o que está fazendo, guardar o estado atual, executar as instruções da interrupção e voltar para o estado anterior, continuando normalmente com o programa. Elas são extremamente úteis para tarefas que precisam de uma precisão de tempo alta ou eventos assíncronos.

Porém, apesar do exemplo dois fazer uso de interrupções, ele passa muito tempo nela, o que atrasa o andamento de um possível outro programa que estaria rodando na main. Porém, grande parte do tempo que é gasto na interrupção está atrelado ao debounce, que consiste basicamente de checagens em certos períodos de tempo. Podemos então otimizar o uso do processador saindo da interrupção entre as checagens, uma vez que ele está apenas esperando para fazer o próximo teste. Veremos isso e o modo de economia de energia no contador_v3.

Contador_v3

Nesse exemplo vamos otimizar o processamento no código utilizando interrupções para as esperas do debounce, também veremos uma alternativa para diminuir o consumo de energia em momentos em que o processador está esperando algum evento, caso você não precise de outra rotina.

Esse programa é um código em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca avr/io.h e a biblioteca avr/interrupt.h. Para melhor entendimento recomendo ler os comentários do código e o datasheet do ATtiny85.

Código

/**
* @file main.c
* @author Eduardo Dueñas
* @brief Exemplo de contador de eventos com tratamento por interrupção
* @version 1.0
* @date 20/04/2021
*
* última modificação: 05/05/2021
*
* O programa é um desenvolvimento em cima do contador_v2 uma com alterações no loop infinito que
* havia ficado em aberto para outras aplicações para o modo sleep para diminuir o gasto de energia e
* alterar o debounce para interrupção, aumentando a eficiência do código. O código pode ser usado com
* outras aplicações no lugar do sleep.
*/

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>

#define F_CPU 16500000L // Frequência de CLK

#define setBit(valor,bit) (valor |= (1 << bit))
#define clearBit(valor,bit) (valor &= ~(1 << bit))
#define toogleBit(valor,bit) (valor ^= (1 << bit))
#define testBit(valor,bit) (valor & (1 << bit))

volatile unsigned char count = 0; // Contador
volatile unsigned char test = 0; // Quantidade de testes do debounce

unsigned int pin = 0; // Pino do debounce

// Debounce da chave tactil para desconsiderarmos ruido e bouncing do botão
char debounce(int pino) {
pin = pino;
// Coloca um timer para cada 1000 ciclos de clk para testar a chave tactil
TCNT0 = 131; // Overflow-(ciclos/Prescaler)=256-(1000/8)=131
setBit(TIMSK, TOIE0); // Habilita interrupções por timer overflow
test = 0; // Limpa test
}

ISR(INT0_vect) { // Tratamento de interrupções de pulso externo
clearBit(GIMSK, INT0); // Desabilita interrupções do INT0 durante o tratamento da interrupção
debounce(PB2);
}

ISR(TIMER0_OVF_vect) { // Tratamento de interrupções de timer overflow
TCNT0 = 131; // Seta denovo o timer para 131
if (testBit(PINB, pin)) { // Se o botão continua apertado
test++; // Incrementa test
if (test >= 20) { // Se testou o suficiente (no caso 20 vezes)
count++; // Incrementa o contador
count %= 0x10; // Limpa o excesso
PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]
PORTB = ((PORTB & 0xFC) | (count & 0x03)); // Manda os dois bits menos significativos de cont para PB[1:0]
clearBit(TIMSK, TOIE0); // Desabilita interrupções por timer overflow
setBit(GIMSK, INT0); // Reabilita interrupções externas no INT0
}
}
else {
clearBit(TIMSK, TOIE0); // Desabilita interrupções por timer overflow
setBit(GIMSK, INT0); // Reabilita interrupções externas no INT0
}
}

int main(void) {
// Configuração de PORTB
clearBit(DDRB, PB2); // Configura PB2 como entrada
setBit(DDRB, PB0); // Configura PB0 como saida
setBit(DDRB, PB1); // Configura PB1 como saida
setBit(DDRB, PB3); // Configura PB3 como saida
setBit(DDRB, PB4); // Configura PB4 como saida

PORTB &= 0xE4; // Manda 0 para PB[4:3] e PB[1:0]

// Configuração do timer
TCCR0A = 0x00; // Modo Normal
TCCR0B = 0x00;
TCCR0B |= 0x02; // Prescaler de 8


// Configuração do modo sleep
clearBit(MCUCR, SM0); // Configura sleep mode como idle
clearBit(MCUCR, SM1);

// Configuração de Interrupção externa
setBit(GIMSK, INT0); // Habilita interrupções externas no INT0
MCUCR |= 0x03; // Seta interrupções para borda de subida
sei(); // Habilita interrupções globais

for (;;) { // Loop infinito
// Aqui você pode colocar outra aplicação para rodar simultaneamente ao contador no lugar do sleep
sleep_mode(); // Entra no sleep mode
}
}

Montagem

Circuito contador V3

Como mostrado na imagem, os LEDs são ligados nas saídas PORTB[4:3] e [1:0] e o botão na entrada PORTB[2], assim como no exemplo dois.

Compilação e upload

Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando make:

exemplos-avr-libc/exemplos/contador_v3$ make

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
> Please plug in the device (will time out in 60 seconds) ...

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

Resultado

Assim como nos exemplos anteriores, os LEDs do circuito devem mostrar a contagem de pulsos até 15 em binário.

Análise

Neste código adicionamos um pouco mais de complexidade, aumentando o uso de interrupções, além do uso do timer e do modo Sleep.

O modo Sleep é um mode de operação no qual, de forma básica, se desliga alguns módulos do microcontrolador até que alguma interrupção ocorra, o que pode diminuir o consumo de energia de forma drástica. No caso do código do exemplo, utilizamos o modo Idle que no ATtiny85 desliga os CLKs da CPU e FLASH, podendo se desligar opcionalmente o CLK do ADC.

O timer nesse exemplo está configurado como em modo normal, com prescaler de 8, o que faz ele incrementar o timer uma vez a cada 8 ciclos de CLK. A forma adotada para a contagem do tempo foi a interrupção por timer overflow, ou seja, sempre que o valor máximo do timer for atingido ele gera uma interrupção. Para conseguirmos os 1000 ciclos que queremos calculamos overflow -(ciclos/Prescaler), que nos dá 256 -(1000/8) = 131, e setamos o valor do timer nesse valor para que falte o tempo que desejamos para a interrupção.

O uso de interrupções do timer para o debounce diminui consideravelmente o tempo que o processador consome em execução do tratamento do evento, o que melhora o processamento das rotinas paralelas, ou no caso, permite que o processador fique mais tempo no modo Sleep, diminuindo o consumo de energia ou em caso de alimentação por baterias, aumenta a vida útil da da fonte.

Conclusão

De forma geral, todas as três formas de se fazer o código funcionam, e ao servirem seu propósito não estão erradas. Porém, como programadores, principalmente de sistemas embarcados, é uma ótima prática conseguirmos fazer um código eficiente, de forma a não se tornar um empecilho no futuro, seja por usarmos muita memória ou deixarmos o processador muito lento e termos que refazer algo pronto do zero. Por isso é importante saber quais são as vantagens e desvantagens de cada método para podermos sempre utilizar o que melhor se adequa às nossas necessidades.

Glossário

  • Setar: colocar um novo valor em um registrador. Para um bit é convencionado setar, muda-lo para valor 1, e clear (limpar), muda-lo para valor 0
  • Chave tactil/Push button: botão
  • Debounce: correção do efeito de bouncing (efeito que ocorre em chaves que fazem rápidas conexões e desconexões antes de se estabilizar)
  • Resetar: reiniciar
  • Timer: circuito eletrônico dedicado a contagem de tempo
AutorEduardo Dueñas
Data:05/05/2020
- - +

Contador de pulsos externos

Nesses três exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY. Vamos explorar as formas mais simples e as mais complexas de contar eventos e as vantagens de cada uma. Nesses exemplos vamos aprender a usar o timer e a fazer debounce, necessário para lermos apenas eventos válidos e não ler o mesmo evento mais de uma vez.

+

Boa prática!

+

Recursos necessários

+
    +
  • Franzininho DIY (com Micronucleos)
  • +
  • 4 LEDs de 3mm
  • +
  • 4 resistores de 200Ω
  • +
  • 1 resistor de 10kΩ
  • +
  • 1 chave tactil
  • +
  • 7 jumpers macho-fêmea
  • +
  • 7 jumpers macho-macho
  • +
+

Contadores

+

Temos três exemplos de contadores da versão 1 a 3, e aumentando a complexidade do código e dos recursos utilizados.

+

Contador_v1

+

Nesse exemplo vamos utilizar loops para fazer a verificação de eventos. Essa forma de se fazer a contagem, apesar de ser mais simples de se entender e criar, é pouco eficiente, tanto a nível de processamento, quanto ao de energia.

+

O programa é um código em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca avr/io.h. Para melhor entendimento recomendo ler os comentários do código e o datasheet do ATtiny85.

+

Código

+
/**
+ * @file main.c
+ * @author Eduardo Dueñas
+ * @brief Exemplo de contador de eventos
+ * @version 1.0
+ * @date 06/04/2021
+ *
+ * última modificação: 05/05/2021
+ */
+#include <avr/io.h>
+
+#define F_CPU 16500000L        // Frequência de CLK
+
+// Macros
+#define setBit(valor,bit)      (valor |= (1 << bit))
+#define clearBit(valor,bit)    (valor &= ~(1 << bit))
+#define toogleBit(valor,bit)   (valor ^= (1 << bit))
+#define testBit(valor,bit)     (valor & (1 << bit))
+
+// Debounce da chave táctil para desconsiderarmos ruído e bouncing do botão
+char debounce(int pino) {
+    unsigned int i;
+    for (i = 0; i < 20000; i++) {   // Testa o pino várias vezes para evitar leituras erradas
+      if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1
+          return 0;            // Se sim, retorna falso
+      }
+    }
+    return 1;                  // Retorna verdadeiro
+}
+
+int main(void) {
+    // Configuração de PORTB
+    clearBit(DDRB, PB0);       // Configura PB0 como entrada
+    setBit(DDRB, PB1);         // Configura PB1 como saida
+    setBit(DDRB, PB2);         // Configura PB2 como saida
+    setBit(DDRB, PB3);         // Configura PB3 como saida
+    setBit(DDRB, PB4);         // Configura PB4 como saida
+
+    PORTB &= 0xE1;             // Manda 0 para PB[4:1]
+
+    unsigned char count = 0;
+
+    for (;;) {                    // loop infinito
+        if (testBit(PINB, PB0)) { // Testa se PB0 é 1
+            if (debounce(PB0)) {  // Verifica se realmente foi um aperto de botão
+              count++;            // Se sim, incrementa o contador
+              while (testBit(PINB, PB0)) {} // Espera o botão parar de ser pressionado
+            }
+        }
+        count = count % 0x10;     // Limpa o overflow do contador
+        PORTB = ((PORTB & 0xE1) | (count << 1)); // Manda o contador para PB[4:1]
+    }
+}
+
+

Montagem

+

circuito contador

+

Como mostrado na imagem, os LEDs são ligados nas saídas PortB[4:1] e o botão no PortB[0].

+

Compilação e upload

+

Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando make:

+
exemplos-avr-libc/exemplos/contador$ make
+
+

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

+
../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
+Running Digispark Uploader...
+Plug in device now... (will timeout in 60 seconds)
+> Please plug in the device (will time out in 60 seconds) ...
+
+

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

+

Resultado

+

Os LEDs devem mostrar a contagem de apertos do botão de forma binária resetando em 0x10 ou quando resetada a placa.

+

Análise

+

Esse código é de simples compreensão usando apenas um for para checar continuamente se o botão foi apertado, chamando uma função debounce caso a leitura seja 1, incrementando o contador se for confirmado que a leitura é válida, esperando o botão ser solto e mandando o valor para as saídas.

+

De forma geral esse código funciona, mas há muito desperdício de processamento, pois há muitos momentos que o processador não está fazendo nada, apenas esperando algo acontecer ou um certo tempo passar, nesse tempo ele poderia estar fazendo outra tarefas ou ficar em modo econômico de energia, que veremos nos próximos exemplos.

+

Contador_v2

+

Nesse exemplo vamos começar a usar interrupções para ler os pulsos. Vamos ver quais são as vantagens desse método e o que pode ser melhorado.

+

O programa é um código em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca avr/io.h e a biblioteca avr/interrupt.h. Para melhor entendimento recomendo ler os comentários do código e o datasheet do ATtiny85.

+

Código

+
/**
+ * @file main.c
+ * @author Eduardo Dueñas
+ * @brief Exemplo de contador de eventos com tratamento por interrupção
+ * @version 1.0
+ * @date 19/04/2021
+ *
+ * última modificação: 05/05/2021
+ *
+ * O programa é um desenvolvimento em cima do contador uma com alterações na leitura do pulso para leitura por interrupção,
+ * possibilitando o uso do microcontrolador para outras funções junto do contador
+ */
+#include <avr/io.h>
+#include <avr/interrupt.h>
+
+#define F_CPU 16500000L        // Frequência de CLK
+
+// Macros
+#define setBit(valor,bit)      (valor |= (1 << bit))
+#define clearBit(valor,bit)    (valor &= ~(1 << bit))
+#define toogleBit(valor,bit)   (valor ^= (1 << bit))
+#define testBit(valor,bit)     (valor & (1 << bit))
+
+volatile unsigned char count = 0;   // Contador
+
+ISR(INT0_vect) {
+  cli();                       // Desabilita interrupções globais durante o tratamento da interrupção
+  if (debounce(PB2)) {         // Se o botão foi realmente apertado incrementa cont e manda para os LEDs
+    count++;                   // Incrementa o contador
+    count %= 0x10;             // Limpa o excesso
+    PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]
+    PORTB = ((PORTB & 0xFC) | (count & 0x03));      // Manda os dois bits menos significativos de cont para PB[1:0]
+  }
+  sei();                       // Reabilita interrupções globais
+}
+
+// Debounce da chave tactil para desconsiderarmos ruído e bouncing do botão
+char debounce(int pino) {
+  unsigned int i;
+
+  for (i = 0; i < 20000; i++) {   // Testa o pino várias vezes para evitar leituras erradas
+    if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1
+      return 0;                   // Se sim, retorna falso
+    }
+  }
+
+  return 1;                       // Retorna verdadeiro
+}
+
+int main(void) {
+    // Configuração de PORTB
+    clearBit(DDRB, PB2);       // Configura PB2 como entrada
+    setBit(DDRB, PB0);         // Configura PB0 como saída
+    setBit(DDRB, PB1);         // Configura PB1 como saída
+    setBit(DDRB, PB3);         // Configura PB3 como saída
+    setBit(DDRB, PB4);         // Configura PB4 como saída
+
+    PORTB &= 0xE4;             // Manda 0 para PB[4:3] e PB[1:0]
+
+    //Configuração de Interrupção externa
+    GIMSK |= (1 << INT0);      // Habilita interrupções externas no INT0
+    MCUCR |= 0x03;             // Seta interrupções para borda de subida
+    sei();                     // Habilita interrupções globais
+
+
+    for (;;) {                 // Loop infinito
+        // Aqui você pode colocar outra aplicação para rodar simultaneamente ao contador
+    }
+}
+
+

Montagem

+

Circuito contador V2

+

Como mostrado na imagem, os LEDs são ligados nas saídas PORTB[4:3] e [1:0] e o botão na entrada PORTB[2].

+

Compilação e upload

+

Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando make:

+
exemplos-avr-libc/exemplos/contador_v2$ make
+
+

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

+
../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
+Running Digispark Uploader...
+Plug in device now... (will timeout in 60 seconds)
+> Please plug in the device (will time out in 60 seconds) ...
+
+

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

+

Resultado

+

Assim como no último exemplo, os LEDs devem mostrar a contagem de eventos, mostrando em binário até 15.

+

Análise

+

Esse exemplo tem um código um pouco mais complexo, podendo fazer diferentes tarefas ao mesmo tempo com o uso de interrupções.

+

Interrupções são, de forma simples, instruções de alta prioridade, que fazem o processador parar o que está fazendo, guardar o estado atual, executar as instruções da interrupção e voltar para o estado anterior, continuando normalmente com o programa. Elas são extremamente úteis para tarefas que precisam de uma precisão de tempo alta ou eventos assíncronos.

+

Porém, apesar do exemplo dois fazer uso de interrupções, ele passa muito tempo nela, o que atrasa o andamento de um possível outro programa que estaria rodando na main. Porém, grande parte do tempo que é gasto na interrupção está atrelado ao debounce, que consiste basicamente de checagens em certos períodos de tempo. Podemos então otimizar o uso do processador saindo da interrupção entre as checagens, uma vez que ele está apenas esperando para fazer o próximo teste. Veremos isso e o modo de economia de energia no contador_v3.

+

Contador_v3

+

Nesse exemplo vamos otimizar o processamento no código utilizando interrupções para as esperas do debounce, também veremos uma alternativa para diminuir o consumo de energia em momentos em que o processador está esperando algum evento, caso você não precise de outra rotina.

+

Esse programa é um código em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca avr/io.h e a biblioteca avr/interrupt.h. Para melhor entendimento recomendo ler os comentários do código e o datasheet do ATtiny85.

+

Código

+
/**
+ * @file main.c
+ * @author Eduardo Dueñas
+ * @brief Exemplo de contador de eventos com tratamento por interrupção
+ * @version 1.0
+ * @date 20/04/2021
+ *
+ * última modificação: 05/05/2021
+ *
+ * O programa é um desenvolvimento em cima do contador_v2 uma com alterações no loop infinito que
+ * havia ficado em aberto para outras aplicações para o modo sleep para diminuir o gasto de energia e
+ * alterar o debounce para interrupção, aumentando a eficiência do código. O código pode ser usado com
+ * outras aplicações no lugar do sleep.
+ */
+
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <avr/sleep.h>
+
+#define F_CPU 16500000L        // Frequência de CLK
+
+#define setBit(valor,bit)      (valor |= (1 << bit))
+#define clearBit(valor,bit)    (valor &= ~(1 << bit))
+#define toogleBit(valor,bit)   (valor ^= (1 << bit))
+#define testBit(valor,bit)     (valor & (1 << bit))
+
+volatile unsigned char count = 0; // Contador
+volatile unsigned char test = 0;  // Quantidade de testes do debounce
+
+unsigned int pin = 0;             // Pino do debounce
+
+// Debounce da chave tactil para desconsiderarmos ruido e bouncing do botão
+char debounce(int pino) {
+    pin = pino;
+    // Coloca um timer para cada 1000 ciclos de clk para testar a chave tactil
+    TCNT0 = 131;               // Overflow-(ciclos/Prescaler)=256-(1000/8)=131
+    setBit(TIMSK, TOIE0);      // Habilita interrupções por timer overflow
+    test = 0;                  // Limpa test
+}
+
+ISR(INT0_vect) {               // Tratamento de interrupções de pulso externo
+    clearBit(GIMSK, INT0);     // Desabilita interrupções do INT0 durante o tratamento da interrupção
+    debounce(PB2);
+}
+
+ISR(TIMER0_OVF_vect) {         // Tratamento de interrupções de timer overflow
+    TCNT0 = 131;               // Seta denovo o timer para 131
+    if (testBit(PINB, pin)) {  // Se o botão continua apertado
+        test++;                // Incrementa test
+        if (test >= 20) {      // Se testou o suficiente (no caso 20 vezes)
+            count++;           // Incrementa o contador
+            count %= 0x10;     // Limpa o excesso
+            PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]
+            PORTB = ((PORTB & 0xFC) | (count & 0x03));  // Manda os dois bits menos significativos de cont para PB[1:0]
+            clearBit(TIMSK, TOIE0); // Desabilita interrupções por timer overflow
+            setBit(GIMSK, INT0);    // Reabilita interrupções externas no INT0
+        }
+    }
+    else {
+      clearBit(TIMSK, TOIE0); // Desabilita interrupções por timer overflow
+      setBit(GIMSK, INT0);    // Reabilita interrupções externas no INT0
+    }
+}
+
+int main(void) {
+    // Configuração de PORTB
+    clearBit(DDRB, PB2);       // Configura PB2 como entrada
+    setBit(DDRB, PB0);         // Configura PB0 como saida
+    setBit(DDRB, PB1);         // Configura PB1 como saida
+    setBit(DDRB, PB3);         // Configura PB3 como saida
+    setBit(DDRB, PB4);         // Configura PB4 como saida
+
+    PORTB &= 0xE4;             // Manda 0 para PB[4:3] e PB[1:0]
+
+    // Configuração do timer
+    TCCR0A = 0x00;             // Modo Normal
+    TCCR0B = 0x00;
+    TCCR0B |= 0x02;            // Prescaler de 8
+
+
+    // Configuração do modo sleep
+    clearBit(MCUCR, SM0);      // Configura sleep mode como idle
+    clearBit(MCUCR, SM1);
+
+    // Configuração de Interrupção externa
+    setBit(GIMSK, INT0);       // Habilita interrupções externas no INT0
+    MCUCR |= 0x03;             // Seta interrupções para borda de subida
+    sei();                     // Habilita interrupções globais
+
+    for (;;) {                 // Loop infinito
+      // Aqui você pode colocar outra aplicação para rodar simultaneamente ao contador no lugar do sleep
+      sleep_mode();            // Entra no sleep mode
+    }
+}
+
+

Montagem

+

Circuito contador V3

+

Como mostrado na imagem, os LEDs são ligados nas saídas PORTB[4:3] e [1:0] e o botão na entrada PORTB[2], assim como no exemplo dois.

+

Compilação e upload

+

Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando make:

+
exemplos-avr-libc/exemplos/contador_v3$ make
+
+

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

+
../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
+Running Digispark Uploader...
+Plug in device now... (will timeout in 60 seconds)
+> Please plug in the device (will time out in 60 seconds) ...
+
+

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

+

Resultado

+

Assim como nos exemplos anteriores, os LEDs do circuito devem mostrar a contagem de pulsos até 15 em binário.

+

Análise

+

Neste código adicionamos um pouco mais de complexidade, aumentando o uso de interrupções, além do uso do timer e do modo Sleep.

+

O modo Sleep é um mode de operação no qual, de forma básica, se desliga alguns módulos do microcontrolador até que alguma interrupção ocorra, o que pode diminuir o consumo de energia de forma drástica. No caso do código do exemplo, utilizamos o modo Idle que no ATtiny85 desliga os CLKs da CPU e FLASH, podendo se desligar opcionalmente o CLK do ADC.

+

O timer nesse exemplo está configurado como em modo normal, com prescaler de 8, o que faz ele incrementar o timer uma vez a cada 8 ciclos de CLK. A forma adotada para a contagem do tempo foi a interrupção por timer overflow, ou seja, sempre que o valor máximo do timer for atingido ele gera uma interrupção. Para conseguirmos os 1000 ciclos que queremos calculamos overflow -(ciclos/Prescaler), que nos dá 256 -(1000/8) = 131, e setamos o valor do timer nesse valor para que falte o tempo que desejamos para a interrupção.

+

O uso de interrupções do timer para o debounce diminui consideravelmente o tempo que o processador consome em execução do tratamento do evento, o que melhora o processamento das rotinas paralelas, ou no caso, permite que o processador fique mais tempo no modo Sleep, diminuindo o consumo de energia ou em caso de alimentação por baterias, aumenta a vida útil da da fonte.

+

Conclusão

+

De forma geral, todas as três formas de se fazer o código funcionam, e ao servirem seu propósito não estão erradas. Porém, como programadores, principalmente de sistemas embarcados, é uma ótima prática conseguirmos fazer um código eficiente, de forma a não se tornar um empecilho no futuro, seja por usarmos muita memória ou deixarmos o processador muito lento e termos que refazer algo pronto do zero. Por isso é importante saber quais são as vantagens e desvantagens de cada método para podermos sempre utilizar o que melhor se adequa às nossas necessidades.

+

Glossário

+
    +
  • Setar: colocar um novo valor em um registrador. Para um bit é convencionado setar, muda-lo para valor 1, e clear (limpar), muda-lo para valor 0
  • +
  • Chave tactil/Push button: botão
  • +
  • Debounce: correção do efeito de bouncing (efeito que ocorre em chaves que fazem rápidas conexões e desconexões antes de se estabilizar)
  • +
  • Resetar: reiniciar
  • +
  • Timer: circuito eletrônico dedicado a contagem de tempo
  • +
+
AutorEduardo Dueñas
Data:05/05/2020
\ No newline at end of file diff --git a/docs/franzininho-diy/exemplos-avr-libc/entrada-digital/index.html b/docs/franzininho-diy/exemplos-avr-libc/entrada-digital/index.html index 9c4e17b7e..f764defd3 100755 --- a/docs/franzininho-diy/exemplos-avr-libc/entrada-digital/index.html +++ b/docs/franzininho-diy/exemplos-avr-libc/entrada-digital/index.html @@ -1,17 +1,97 @@ - + - -Entrada Digital | Franzininho - - - + +Entrada Digital | Franzininho + + + -
-

Entrada Digital

No exemplo anterior conhecemos os registradores responsáveis pela configuração e manipulação dos pinos de I/O. Nesse exemplo vamos concentrar no uso dos pinos como entradas digitais.

Ao final, você saberá como ler sinais digitais externos a Franzininho DIY.

Recursos Necessários

  • Placa Franzininho DIY(com Micronucleus)
  • Chave Tactil
  • Jumpers
  • Computador com as ferramentas de software instaladas

Entrada Digital

Uma entrada digital é capaz de ler nível alto (5V) e nível baixo(0V) em sua entrada. Essa funcionalidade é usada para ler estado de botões, sensores, e dispositivos que em suas saídas apresentam 2 estados.

Quando o pino é configurado como entrada digital ele é colocado em um estado de alta impedância, equivalente a um resistor de 100 MegaOhms em série com o circuito a ser monitorado. Dessa forma, o pino absorve uma corrente muito baixa do circuito que está monitorando. Devido a essa característica de alta impedância, quando um pino colocado como entrada digital ele fica flutuando (sem ligação definida), o nível de tensão presente nesse pino fica variando não podendo ser determinado um valor estável devido ao ruído elétrico e até mesmo capacitância de entrada do pino. Para resolver esse problema é necessário colocar um resistor de pull up (ligado a +5V) ou um resistor de pull down (ligado a GND) conforme a necessidade. Esses resistores garantem nível lógico estável quando, por exemplo uma tecla não está pressionada. Geralmente utiliza-se um resistor de 10K para esse propósito. A seguir é exibida a ligação desses resistores no circuito para leitura de tecla:

circuito

É possível habilitar o resistor de pull up interno, isso mesmo, o Attiny85 possui resistores de pull-up internos (20 Kilohms) que facilitam a ligação de teclas, sensores sem a necessidade de conectar externamente um resistor de pull-up. A habilitação desses resistores é feita de maneira simples via software. Vamos ver isso mais adiante.

Algumas Particularidades do circuito da Franzininho DIY

Os pinos de I/O são marcados em Amarelo no Pinout da Franzininho DIY

pinout Franzininho DIY

  • O pino PB5 é configurado como RESET na Franzininho DIY, sendo assim não poderemos usá-lo como I/O.
  • Os pinos PB3 e PB4 são usados para o circuito da USB, sendo assim temos que usá-los com cautela. Geralmente esses pinos são usados apenas como saídas digitais.
  • O LED amarelo da placa está ligado ao pino PB1.
  • Os pinos PB0 E PB2 não possuem circuito ligados a eles.

Registradores responsáveis pelos pinos de I/O

Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:

  • PORTB: Registrador de dados. Responsável pela escrita nos pinos;
  • DDRB: Registrador de direção do pino. Responsável pela configuração dos pinos para definir se será entrada ou saída;
  • PINB: Registrador de entrada da porta. Responsável pela leitura do estado do pino.

Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos teríamos os finais A, B,C, etc. Cada porta só possui no máximo 8 pinos.

Na seção 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configurações possíveis para os pinos:

configuração GPIO

A figura abaixo exibe os registradores responsáveis pelos pino de I/O do PORTB:

configuração GPIO

Conforme exibido acima, para configurar um pino como entrada digital deve-se configurar o bit DDRBx correspondente ao pino em 0. Se quiser habilitar o pull up para esse deve-se escrever 1 no bit PORTBx correspondente ao pino. A leitura do estado do pino é feita através do registrador PINBx.

Vamos verificar um exemplo para fazer a leitura de um botão externo e ligar o LED da Franzininho DIY.

Circuito

circuito

Código

#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 16500000L

// Macros
#define setBit(valor,bit) (valor |= (1 << bit))
#define clearBit(valor,bit) (valor &= ~(1 << bit))
#define toogleBit(valor,bit) (valor ^= (1 << bit))
#define testBit(valor,bit) (valor & (1 << bit))

int main(void)
{
setBit(DDRB, PB1); // Configura Pino PB1 como saída (Pino do LED)
clearBit(DDRB, PB0); // Configura pino PB0 como entrada (pino do Botão)
setBit(PORTB, PB0); // Habilita pull up para a entrada PB0
// Lógico 1 quando botão não estiver pressionado
while (1)
{
if (!testBit(PINB, PB0)) // Faz a leitura do botão - Se pressionado
{
setBit(PORTB, PB1); // Liga o LED 1
}
else
{
clearBit(PORTB, PB1); // Desliga o LED 1
}
}

return (0);
}

O exemplo exibiu como configurar os pinos, note que tivemos que configurar um pino como saída, para o LED e outro como entrada, para o botão. Note que foi usado o pull up interno.

O uso de macros facilitou a manipulação dos bits nos registradores. Recomendo que se você leia esse artigo para entender sobre as macros e as operações efetuadas: https://www.embarcados.com.br/bits-em-linguagem-c/

Para leitura do estado do pino, ou seja, se o botão está solto ou pressionado, fazemos um teste a cada iteração no loop infinto. Quando o botão é pressionado o nível logico no pino vai para 0 e quando solto permanece em 1. Conforme o teste 0 liga o LED e 1 apaga o LED.

Assim, o funcionamento será:

  • Botão Solto = LED apagado
  • Botão Pressionado = LED Aceso

Bacana, não?

Desafio

Faça com com que o LED mude estado e permaneça ao soltar o botão, funcionando como uma tecla liga/desliga.

AutorFábio Souza
Data:24/04/2021
- - +

Entrada Digital

No exemplo anterior conhecemos os registradores responsáveis pela configuração e manipulação dos pinos de I/O. Nesse exemplo vamos concentrar no uso dos pinos como entradas digitais.

+

Ao final, você saberá como ler sinais digitais externos a Franzininho DIY.

+

Recursos Necessários

+
    +
  • Placa Franzininho DIY(com Micronucleus)
  • +
  • Chave Tactil
  • +
  • Jumpers
  • +
  • Computador com as ferramentas de software instaladas
  • +
+

Entrada Digital

+

Uma entrada digital é capaz de ler nível alto (5V) e nível baixo(0V) em sua entrada. Essa funcionalidade é usada para ler estado de botões, sensores, e dispositivos que em suas saídas apresentam 2 estados.

+

Quando o pino é configurado como entrada digital ele é colocado em um estado de alta impedância, equivalente a um resistor de 100 MegaOhms em série com o circuito a ser monitorado. Dessa forma, o pino absorve uma corrente muito baixa do circuito que está monitorando. Devido a essa característica de alta impedância, quando um pino colocado como entrada digital ele fica flutuando (sem ligação definida), o nível de tensão presente nesse pino fica variando não podendo ser determinado um valor estável devido ao ruído elétrico e até mesmo capacitância de entrada do pino. Para resolver esse problema é necessário colocar um resistor de pull up (ligado a +5V) ou um resistor de pull down (ligado a GND) conforme a necessidade. Esses resistores garantem nível lógico estável quando, por exemplo uma tecla não está pressionada. Geralmente utiliza-se um resistor de 10K para esse propósito. A seguir é exibida a ligação desses resistores no circuito para leitura de tecla:

+

circuito

+

É possível habilitar o resistor de pull up interno, isso mesmo, o Attiny85 possui resistores de pull-up internos (20 Kilohms) que facilitam a ligação de teclas, sensores sem a necessidade de conectar externamente um resistor de pull-up. A habilitação desses resistores é feita de maneira simples via software. Vamos ver isso mais adiante.

+

Algumas Particularidades do circuito da Franzininho DIY

+

Os pinos de I/O são marcados em Amarelo no Pinout da Franzininho DIY

+

pinout Franzininho DIY

+
    +
  • O pino PB5 é configurado como RESET na Franzininho DIY, sendo assim não poderemos usá-lo como I/O.
  • +
  • Os pinos PB3 e PB4 são usados para o circuito da USB, sendo assim temos que usá-los com cautela. Geralmente esses pinos são usados apenas como saídas digitais.
  • +
  • O LED amarelo da placa está ligado ao pino PB1.
  • +
  • Os pinos PB0 E PB2 não possuem circuito ligados a eles.
  • +
+

Registradores responsáveis pelos pinos de I/O

+

Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:

+
    +
  • PORTB: Registrador de dados. Responsável pela escrita nos pinos;
  • +
  • DDRB: Registrador de direção do pino. Responsável pela configuração dos pinos para definir se será entrada ou saída;
  • +
  • PINB: Registrador de entrada da porta. Responsável pela leitura do estado do pino.
  • +
+

Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos teríamos os finais A, B,C, etc. Cada porta só possui no máximo 8 pinos.

+

Na seção 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configurações possíveis para os pinos:

+

configuração GPIO

+

A figura abaixo exibe os registradores responsáveis pelos pino de I/O do PORTB:

+

configuração GPIO

+

Conforme exibido acima, para configurar um pino como entrada digital deve-se configurar o bit DDRBx correspondente ao pino em 0. Se quiser habilitar o pull up para esse deve-se escrever 1 no bit PORTBx correspondente ao pino. A leitura do estado do pino é feita através do registrador PINBx.

+

Vamos verificar um exemplo para fazer a leitura de um botão externo e ligar o LED da Franzininho DIY.

+

Circuito

+

circuito

+

Código

+
#include <avr/io.h>
+#include <util/delay.h>
+
+#define F_CPU 16500000L
+
+// Macros
+#define setBit(valor,bit) (valor |= (1 << bit))
+#define clearBit(valor,bit) (valor &= ~(1 << bit))
+#define toogleBit(valor,bit) (valor ^= (1 << bit))
+#define testBit(valor,bit) (valor & (1 << bit))
+
+int main(void)
+{
+    setBit(DDRB, PB1);         // Configura Pino PB1 como saída (Pino do LED)
+    clearBit(DDRB, PB0);       // Configura pino PB0 como entrada (pino do Botão)
+    setBit(PORTB, PB0);        // Habilita pull up para a entrada PB0
+                               // Lógico 1 quando botão não estiver pressionado
+    while (1)
+    {
+        if (!testBit(PINB, PB0))  // Faz a leitura do botão - Se pressionado
+        {
+            setBit(PORTB, PB1);   // Liga o LED 1
+        }
+        else
+        {
+            clearBit(PORTB, PB1); // Desliga o LED 1
+        }
+    }
+
+    return (0);
+}
+
+

O exemplo exibiu como configurar os pinos, note que tivemos que configurar um pino como saída, para o LED e outro como entrada, para o botão. Note que foi usado o pull up interno.

+

O uso de macros facilitou a manipulação dos bits nos registradores. Recomendo que se você leia esse artigo para entender sobre as macros e as operações efetuadas: https://www.embarcados.com.br/bits-em-linguagem-c/

+

Para leitura do estado do pino, ou seja, se o botão está solto ou pressionado, fazemos um teste a cada iteração no loop infinto. Quando o botão é pressionado o nível logico no pino vai para 0 e quando solto permanece em 1. Conforme o teste 0 liga o LED e 1 apaga o LED.

+

Assim, o funcionamento será:

+
    +
  • Botão Solto = LED apagado
  • +
  • Botão Pressionado = LED Aceso
  • +
+

Bacana, não?

+

Desafio

+

Faça com com que o LED mude estado e permaneça ao soltar o botão, funcionando como uma tecla liga/desliga.

+
AutorFábio Souza
Data:24/04/2021
\ No newline at end of file diff --git a/docs/franzininho-diy/exemplos-avr-libc/hello-world/index.html b/docs/franzininho-diy/exemplos-avr-libc/hello-world/index.html index 0c13de1e1..ca26e606a 100755 --- a/docs/franzininho-diy/exemplos-avr-libc/hello-world/index.html +++ b/docs/franzininho-diy/exemplos-avr-libc/hello-world/index.html @@ -1,17 +1,76 @@ - + - -Hello, World! | Franzininho - - - + +Hello, World! | Franzininho + + + -
-

Hello, World!

Nesse exemplo vamos dar os nossos primeiros passos na programação da Franzininho DIY usando a AVR Libc.

Como de costume o nosso "Hello, World!" na eletrônica será um blink LED. Ao final desse experimento você terá uma estrutura mínima para desenvolver aplicações para o ATtiny85 em C.

Bora, colocar em prática!

Recursos Necessários

  • Placa Franzininho DIY(com Micronucleus)
  • Computador com as ferramentas de software instaladas(link)

Hello, World em linguagem C

Esse exemplo básico nos dará estrutura para todos nossos exemplos daqui pra frente. Como já mencionado, vamos usar a linguagem C em conjunto com a biblioteca AVR Libc. Para esse exemplo você só precisará da placa Franzininho DIY e as ferramentas de softwares.

O código exibe a estrutura mínima de um programa em linguagem C para microcontroladores. Se você tem dificuldades com a linguagem C, recomendo que confira os seguintes materiais:

Nesse momento é importante que você se atente a estrutura do código. Vamos usar alguns registradores para acionar o LED, mas não serão o foco da explicação. Confira os comentários no código a seguir:

Código

#include <avr/io.h>            // Biblioteca para acesso aos registradores do MCU
#include <util/delay.h> // Biblioteca para funções de delay

#define F_CPU 16500000L // Frequencia de clock que o mcu está trabalhando

/**
Essa é a função principal onde é iniciada aplicação
*/
int main(void)
{
DDRB |= (1 << PB1); // Configura Pino PB1 como saída (Pino do LED)

// O programar ficará nesse loop enquanto a placa estiver ligada
while (1)
{
PORTB |= (1 << PB1); // Liga LED
_delay_ms(500); // Aguarda 500 ms

PORTB &= ~(1 << PB1); // Desliga LED
_delay_ms(500); // Aguarda 500 ms
}

return (0); // Necessário um retorno (pois a função retorna int) mesmo que a função nunca retornará
}

Compilação e upload

para compilar o programa, acesse a pasta do exemplo e em seguida o comando make:

exemplos-avr-libc/exemplos/hello$ make

Já temos o makefile configurado na pasta, assim, será feita a compilação e em seguida aparecerá a mensagem para conectar a placa:

../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
> Please plug in the device (will time out in 60 seconds) ...

Conecte a placa no PC ou pressione o botão de RESET se ela já estiver conectada.

Será iniciado o upload.

Resultados

Nesse exemplo o LED irá piscar em intervalos de 500 ms (on) e 500 ms (off).

No próximo exemplo vamos detalhar sobre os registradores de IO. Nesse momento, além da estrutura inicial é importante que você entenda como usar a função _delay_ms().

Essa função espera o tempo passado em milissegundos.

Altere o código para que o led fique 100 ms(on) e 1000 ms (off), veja o efeito.

Conclusão

Nesse exemplo tivemos o primeiro contato com a programação em linguagem C para microcontroladores. Notamos que devemos incluir as bibliotecas externas através do #include e que o programa precisa necessariamente ter a função int main(void).

Dentro da função main temos um loop infinito onde os comandos se repetirão enquanto a placa estiver ligada.

AutorFábio Souza
Data:24/04/2021
- - +

Hello, World!

Nesse exemplo vamos dar os nossos primeiros passos na programação da Franzininho DIY usando a AVR Libc.

+

Como de costume o nosso "Hello, World!" na eletrônica será um blink LED. Ao final desse experimento você terá uma estrutura mínima para desenvolver aplicações para o ATtiny85 em C.

+

Bora, colocar em prática!

+

Recursos Necessários

+
    +
  • Placa Franzininho DIY(com Micronucleus)
  • +
  • Computador com as ferramentas de software instaladas(link)
  • +
+

Hello, World em linguagem C

+

Esse exemplo básico nos dará estrutura para todos nossos exemplos daqui pra frente. Como já mencionado, vamos usar a linguagem C em conjunto com a biblioteca AVR Libc. Para esse exemplo você só precisará da placa Franzininho DIY e as ferramentas de softwares.

+

O código exibe a estrutura mínima de um programa em linguagem C para microcontroladores. Se você tem dificuldades com a linguagem C, recomendo que confira os seguintes materiais:

+ +

Nesse momento é importante que você se atente a estrutura do código. Vamos usar alguns registradores para acionar o LED, mas não serão o foco da explicação. Confira os comentários no código a seguir:

+

Código

+
#include <avr/io.h>            // Biblioteca para acesso aos registradores do MCU
+#include <util/delay.h>        // Biblioteca para funções de delay
+
+#define F_CPU 16500000L        // Frequencia de clock que o mcu está trabalhando
+
+/**
+  Essa é a função principal onde é iniciada aplicação
+*/
+int main(void)
+{
+    DDRB |= (1 << PB1);        // Configura Pino PB1 como saída (Pino do LED)
+
+    // O programar ficará nesse loop enquanto a placa estiver ligada
+    while (1)
+    {
+        PORTB |= (1 << PB1);   // Liga LED
+        _delay_ms(500);        // Aguarda 500 ms
+
+        PORTB &= ~(1 << PB1);  // Desliga LED
+        _delay_ms(500);        // Aguarda 500 ms
+    }
+
+    return (0);                // Necessário um retorno (pois a função retorna int) mesmo que a função nunca retornará
+}
+
+

Compilação e upload

+

para compilar o programa, acesse a pasta do exemplo e em seguida o comando make:

+
exemplos-avr-libc/exemplos/hello$ make
+
+

Já temos o makefile configurado na pasta, assim, será feita a compilação e em seguida aparecerá a mensagem para conectar a placa:

+
../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
+Running Digispark Uploader...
+Plug in device now... (will timeout in 60 seconds)
+> Please plug in the device (will time out in 60 seconds) ...
+
+

Conecte a placa no PC ou pressione o botão de RESET se ela já estiver conectada.

+

Será iniciado o upload.

+

Resultados

+

Nesse exemplo o LED irá piscar em intervalos de 500 ms (on) e 500 ms (off).

+

No próximo exemplo vamos detalhar sobre os registradores de IO. Nesse momento, além da estrutura inicial é importante que você entenda como usar a função _delay_ms().

+

Essa função espera o tempo passado em milissegundos.

+

Altere o código para que o led fique 100 ms(on) e 1000 ms (off), veja o efeito.

+

Conclusão

+

Nesse exemplo tivemos o primeiro contato com a programação em linguagem C para microcontroladores. Notamos que devemos incluir as bibliotecas externas através do #include e que o programa precisa necessariamente ter a função int main(void).

+

Dentro da função main temos um loop infinito onde os comandos se repetirão enquanto a placa estiver ligada.

+
AutorFábio Souza
Data:24/04/2021
\ No newline at end of file diff --git a/docs/franzininho-diy/exemplos-avr-libc/int-ext/index.html b/docs/franzininho-diy/exemplos-avr-libc/int-ext/index.html index 9c3d5c99d..e73a109fe 100755 --- a/docs/franzininho-diy/exemplos-avr-libc/int-ext/index.html +++ b/docs/franzininho-diy/exemplos-avr-libc/int-ext/index.html @@ -1,17 +1,88 @@ - + - -Interrupção externa | Franzininho - - - + +Interrupção externa | Franzininho + + + -
-

Interrupção externa

As interrupções externas permitem que o microcontrolador interrompa sua execução de tarefas regulares para executar uma tarefa de prioridade mais alta quando ocorre um evento externo. Isso pode ser útil em aplicações que requerem resposta rápida a eventos externos, como pressionar um botão ou receber um sinal de outro dispositivo.

A configuração de uma interrupção externa no ATTINY85 envolve a definição do pino que será usado como fonte de interrupção, a configuração do nível lógico que causará a interrupção e a definição da rotina de interrupção que será executada quando a interrupção for acionada.

Ao programar a Franzininho DIY (ATTINY85) com a biblioteca avrlibc, você pode facilmente configurar interrupções externas usando funções da biblioteca como sei() e cli(). Além disso, a avrlibc oferece muitas outras bibliotecas úteis para o ATTINY85, tornando o processo de programação mais fácil e eficiente.

Recursos Necessários

  • Placa Franzininho DIY(com Micronucleus)
  • Chave Tactil
  • Jumpers
  • Computador com as ferramentas de software instaladas

Circuito

circuito

Código

/**
*
* @file main.c
* @author Fábio Souza
* @brief Exemplo para leitura de botão e acionamento de LED
* @version 0.1
* @date 2021-02-03
*
* @copyright Franzininho
* This example code is in the Public Domain (or CC0 licensed, at your option.)
* Unless required by applicable law or agreed to in writing, this
* software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied.
*
*/

#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 16500000L

//Macro auxiliares para manipulação de bits
#define setBit(valor,bit) (valor |= (1<<bit))
#define clearBit(valor,bit) (valor &= ~(1<<bit))
#define toogleBit(valor,bit) (valor ^= (1<<bit))
#define testBit(valor,bit) (valor & (1<<bit))

// define o pino que o botão está conectado
#define BUTTON_PIN PB2
// define o pino que o LED está conectado
#define LED_PIN PB1


ISR (INT0_vect) // Interrupt service routine
{
toogleBit(PORTB,LED_PIN);
}

int main()
{
setBit(DDRB,LED_PIN); // Configura Pino PB1 como saída (Pino do LED)
clearBit(DDRB,BUTTON_PIN); //configura pino PB0 como entrada (pino do Botão)
setBit(PORTB,BUTTON_PIN); //habilita pull up para a entrada PB0 - garante nivel
// lógico 1 quando botão não estiver pressionado

setBit(GIMSK,INT0); // Ativa a interrupção externa INT0
setBit(MCUCR,ISC01); //configura borda de descida
sei(); // Habilita as interrupções globais

while(1)
{

}

return 0;
}

Simulação

Desafio

Faça com com que o LED ligue ao pressionar o botao e desligue quando soltar. Para isso você preciará configurar a interrução na borda de subinda.

AutorFábio Souza
Data:05/02/2023
- - +

Interrupção externa

As interrupções externas permitem que o microcontrolador interrompa sua execução de tarefas regulares para executar uma tarefa de prioridade mais alta quando ocorre um evento externo. Isso pode ser útil em aplicações que requerem resposta rápida a eventos externos, como pressionar um botão ou receber um sinal de outro dispositivo.

+

A configuração de uma interrupção externa no ATTINY85 envolve a definição do pino que será usado como fonte de interrupção, a configuração do nível lógico que causará a interrupção e a definição da rotina de interrupção que será executada quando a interrupção for acionada.

+

Ao programar a Franzininho DIY (ATTINY85) com a biblioteca avrlibc, você pode facilmente configurar interrupções externas usando funções da biblioteca como sei() e cli(). Além disso, a avrlibc oferece muitas outras bibliotecas úteis para o ATTINY85, tornando o processo de programação mais fácil e eficiente.

+

Recursos Necessários

+
    +
  • Placa Franzininho DIY(com Micronucleus)
  • +
  • Chave Tactil
  • +
  • Jumpers
  • +
  • Computador com as ferramentas de software instaladas
  • +
+

Circuito

+

circuito

+

Código

+
/**
+ * 
+ * @file main.c
+ * @author Fábio Souza
+ * @brief Exemplo para leitura de botão e acionamento de LED
+ * @version 0.1
+ * @date 2021-02-03
+ * 
+ * @copyright Franzininho 
+ * This example code is in the Public Domain (or CC0 licensed, at your option.)
+ * Unless required by applicable law or agreed to in writing, this
+ * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied.
+ * 
+ */
+
+#include <avr/io.h>
+#include <avr/interrupt.h>
+
+#define F_CPU 16500000L
+ 	
+//Macro auxiliares para manipulação de bits   
+#define setBit(valor,bit) (valor |= (1<<bit))
+#define clearBit(valor,bit) (valor &= ~(1<<bit))
+#define toogleBit(valor,bit) (valor ^= (1<<bit))
+#define testBit(valor,bit)    (valor & (1<<bit))
+
+// define o pino que o botão está conectado
+#define BUTTON_PIN PB2
+// define o pino que o LED está conectado
+#define LED_PIN PB1
+
+
+ISR (INT0_vect)        // Interrupt service routine 
+{
+  toogleBit(PORTB,LED_PIN);
+}
+
+int main()
+{
+  setBit(DDRB,LED_PIN); 	    // Configura Pino PB1 como saída (Pino do LED)
+  clearBit(DDRB,BUTTON_PIN); //configura pino PB0 como entrada (pino do Botão)
+  setBit(PORTB,BUTTON_PIN);  //habilita pull up para a entrada PB0 - garante nivel 
+                             // lógico 1 quando botão não estiver pressionado
+  
+  setBit(GIMSK,INT0);        // Ativa a interrupção externa INT0
+  setBit(MCUCR,ISC01);       //configura borda de descida
+  sei();                     // Habilita as interrupções globais
+
+  while(1)
+  {
+
+  }
+   
+   return 0;
+}
+
+

Simulação

+ +

Desafio

+

Faça com com que o LED ligue ao pressionar o botao e desligue quando soltar. Para isso você preciará configurar a interrução na borda de subinda.

+
AutorFábio Souza
Data:05/02/2023
\ No newline at end of file diff --git a/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos/index.html b/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos/index.html index 264d2ab7e..434272234 100755 --- a/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos/index.html +++ b/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos/index.html @@ -1,17 +1,47 @@ - + - -Primeiros Passos | Franzininho - - - + +Primeiros Passos | Franzininho + + + -
-

Primeiros Passos

Esse material tem o objetivo de mostrar os primeiros passos para programação de microcontroladores usando linguagem C e com abordagem mais próxima ao hardware. Serão apresentados uma série de exemplos (com explicação detalhadas sobre a Arquitetura do ATtiny85) para programação da Franzininho DIY usando a AVR Libc.

É importante que você tenha o pinout da Franzininho DIY para fazer as ligações conforme orientações nos exemplos.

pinout Franzininho DIY

Ferramentas necessárias

Você não precisará de um compilador específico ou IDE para compilar os exemplos apresentados. Porém é importante que tenha as seguintes ferramentas instaladas na sua máquina:

  • GCC AVR
  • avr libc
  • binutils-avr
  • make

Instalação das ferramentas necessárias (Linux):

sudo apt install gcc-avr
sudo apt install avr-libc
sudo apt install binutils-avr
sudo apt install make

A placa Franzininho deve estar com o bootloader Micronucleus( bootloader oficial para a Franzininho DIY).

Compilação no Linux

cd ../exemplos-avr-libc/exemplos/01-hello
make all

Arduino IDE

Você também poderá reproduzir todos os exemplos apresentados diretamente na IDE Arduino (sem usar o framework Arduino). Isso facilitará no processo de instalação e configuração das ferramentas e também no upload.

wokwi_logo Wokwi

Você também pode usar o Simulador Online do Wokwi para reproduzir os projetos apresentados nessa série.

PICSimLab

Caso não tenha acesso a Internet ou uma boa conexão, uma outra opção disponível para reproduzir os exemplos na sua máquina é o simulador PICSimLab que possuí suporte ao Franzininho DIY.

Repositórios e materiais de apoio

Todos os exemplos serão hospedados no github do projeto Franzininho. É importante que você use o datasheet do Attiny85 como material de apoio, assim como a documentação da AVR Libc

Aproveite essa jornada.

Saiba mais

Franzininho – Um Arduino para todos

AutorFábio Souza
Data:24/04/2021
- - +

Primeiros Passos

Esse material tem o objetivo de mostrar os primeiros passos para programação de microcontroladores usando linguagem C e com abordagem mais próxima ao hardware. Serão apresentados uma série de exemplos (com explicação detalhadas sobre a Arquitetura do ATtiny85) para programação da Franzininho DIY usando a AVR Libc.

+

É importante que você tenha o pinout da Franzininho DIY para fazer as ligações conforme orientações nos exemplos.

+

pinout Franzininho DIY

+

Ferramentas necessárias

+

Você não precisará de um compilador específico ou IDE para compilar os exemplos apresentados. Porém é importante que tenha as seguintes ferramentas instaladas na sua máquina:

+
    +
  • GCC AVR
  • +
  • avr libc
  • +
  • binutils-avr
  • +
  • make
  • +
+

Instalação das ferramentas necessárias (Linux):

+
sudo apt install gcc-avr
+sudo apt install avr-libc
+sudo apt install binutils-avr
+sudo apt install make
+
+

A placa Franzininho deve estar com o bootloader Micronucleus( bootloader oficial para a Franzininho DIY).

+

Compilação no Linux

+
cd ../exemplos-avr-libc/exemplos/01-hello
+make all
+
+

Arduino IDE

+

Você também poderá reproduzir todos os exemplos apresentados diretamente na IDE Arduino (sem usar o framework Arduino). Isso facilitará no processo de instalação e configuração das ferramentas e também no upload.

+

wokwi_logo Wokwi

+

Você também pode usar o Simulador Online do Wokwi para reproduzir os projetos apresentados nessa série.

+

PICSimLab

+

Caso não tenha acesso a Internet ou uma boa conexão, uma outra opção disponível para reproduzir os exemplos na sua máquina é o simulador PICSimLab que possuí suporte ao Franzininho DIY.

+

Repositórios e materiais de apoio

+

Todos os exemplos serão hospedados no github do projeto Franzininho. É importante que você use o datasheet do Attiny85 como material de apoio, assim como a documentação da AVR Libc

+

Aproveite essa jornada.

+

Saiba mais

+

Franzininho – Um Arduino para todos

+
AutorFábio Souza
Data:24/04/2021
\ No newline at end of file diff --git a/docs/franzininho-diy/exemplos-avr-libc/saida-digital/index.html b/docs/franzininho-diy/exemplos-avr-libc/saida-digital/index.html index 9eb690ed3..29949c89f 100755 --- a/docs/franzininho-diy/exemplos-avr-libc/saida-digital/index.html +++ b/docs/franzininho-diy/exemplos-avr-libc/saida-digital/index.html @@ -1,17 +1,106 @@ - + - -Saída Digital | Franzininho - - - + +Saída Digital | Franzininho + + + -
-

Saída Digital

Agora que já estamos com as ferramentas instaladas e a placa Franzininho DIY em mãos, vamos dar início aos estudos dos periféricos internos do ATtiny85.

Nesse artigo vamos explorar os pinos de I/O como saída digital. Ao final, você saberá como acionar dispositivos externos a Franzininho DIY.

Recursos Necessários

  • Placa Franzininho DIY(com Micronucleus)
  • Computador com as ferramentas de software instaladas

Pinos do ATtiny85

O ATtiny85 possui 8 pinos, sendo que 6 deles podemos usar como I/O (entradas ou saídas) digitais. Os pinos de I/O são nomeados conforme a porta que eles pertencem. Na figura a seguir vemos que os pinos do ATtiny85 são nomeados de PBx, onde x é o número correspondente ao pino no registrador (não se preocupe, vamos ver mais detalhes a seguir):

Pinagem do ATtiny85

Cada pino de I/O pode ser usado como entrada ou saída e também como outras funções nesse momento só vamos trabalhar com os pinos funcionando como GPIO (General Porpouse Input/Output).

Conforme exibido na imagem acima, temos os seguintes pinos disponíveis no ATtiny85:

PB0, PB1, PB2, PB3, PB4, PB5.

Algumas Particularidades do circuito da Franzininho DIY

Os pinos de I/O são marcados em Amarelo no Pinout da Franzininho DIY

pinout Franzininho DIY

  • O pino PB5 é configurado como RESET na Franzininho DIY, sendo assim não poderemos usá-lo como I/O.
  • Os pinos PB3 e PB4 são usados para o circuito da USB, sendo assim temos que usá-los com cautela. Geralmente esses pinos são usados apenas como saídas digitais.
  • O LED amarelo da placa está ligado ao pino PB1.
  • Os pinos PB0 E PB2 não possuem circuito ligados a eles.

Registradores responsáveis pelos pinos de I/O

Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:

  • PORTB: Registrador de dados. Responsável pela escrita nos pinos;
  • DDRB: Registrador de direção do pino. Responsável pela configuração dos pinos para definir se será entrada ou saída;
  • PINB: Registrador de entrada da porta. Responsável pela leitura do estado do pino.

Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos teríamos os finais A, B,C, etc. Cada porta só possui no máximo 8 pinos.

Na seção 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configurações possíveis para os pinos:

configuração GPIO

A figura abaixo exibe os registradores responsáveis pelos pino de I/O do PORTB:

configuração GPIO

Note que cada bit dos registradores é responsável por pino sendo indexado pelo número correspondente ao bit. Dessa forma, se quisermos usar o pino PB1 para acionar o LED, devemos configurar o registrador DDRB da seguinte forma:

76543210
--000010

E para acionar ligar/deligar o LED devemos colocar 1 ou no bit correspondente no PORTB.

Vamos a um exemplo para ficar mais claro.

Códigos

#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 16500000L // Frequência do oscilador. usado para a função de delay

int main(void)
{
DDRB = 0b00000010; // Configura Pino PB1 como saída (Pino do LED)

while (1)
{
PORTB = 0b00000010; // Liga o LED 1
_delay_ms(250); // Aguarda 250 ms
PORTB = 0b00000000; // Desliga o LED 1
_delay_ms(250); // Aguarda 250 ms
}

return (0);
}

O exemplo acima pisca o LED em intervalos de 250 ms. A configuração do pino PB1 como saída foi feito colocando o bit1 de DDRB em 1. Já para ligar e desligar o LED foi manipulado o bit 1 de PORTB, hora em 1 hora em 0.

Bacana, não?

podemos melhorar a manipulação dos bits dos registradores usando macros. As macros são rotinas que facilitam nossas vidas. Recomendo que se você leia esse artigo para entender sobre as macros e as operações efetuadas: https://www.embarcados.com.br/bits-em-linguagem-c/

Vamos usar as seguintes macros:

#define setBit(valor,bit) (valor |= (1<<bit))
#define toogleBit(valor,bit) (valor ^= (1<<bit))

Os nomes já são auto-explicativos mas vamos verificar como usá-las no programa em C:

#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 16500000L

// Macros
#define setBit(valor,bit) (valor |= (1 << bit))
#define toogleBit(valor,bit) (valor ^= (1 << bit))

int main(void)
{
setBit(DDRB,PB1); // Configura Pino PB1 como saída (Pino do LED)

while (1)
{
toogleBit(PORTB, PB1); // Inverte o estado do pino
_delay_ms(250); // Aguarda 250 ms
}

return (0);
}

Dessa forma manipulamos somente os bits desejados, não alterando os valores dos outros que poderão ser usados para outras aplicações.

Desafio

Coloque outro LED no pino PB0 e o acione alternadamente ao pino PB1, ou seja, quando LED no PB0 estiver ligado o LED em PB1 deve apagar e vice-versa.

AutorFábio Souza
Data:24/04/2021
- - +

Saída Digital

Agora que já estamos com as ferramentas instaladas e a placa Franzininho DIY em mãos, vamos dar início aos estudos dos periféricos internos do ATtiny85.

+

Nesse artigo vamos explorar os pinos de I/O como saída digital. Ao final, você saberá como acionar dispositivos externos a Franzininho DIY.

+

Recursos Necessários

+
    +
  • Placa Franzininho DIY(com Micronucleus)
  • +
  • Computador com as ferramentas de software instaladas
  • +
+

Pinos do ATtiny85

+

O ATtiny85 possui 8 pinos, sendo que 6 deles podemos usar como I/O (entradas ou saídas) digitais. Os pinos de I/O são nomeados conforme a porta que eles pertencem. Na figura a seguir vemos que os pinos do ATtiny85 são nomeados de PBx, onde x é o número correspondente ao pino no registrador (não se preocupe, vamos ver mais detalhes a seguir):

+

Pinagem do ATtiny85

+

Cada pino de I/O pode ser usado como entrada ou saída e também como outras funções nesse momento só vamos trabalhar com os pinos funcionando como GPIO (General Porpouse Input/Output).

+

Conforme exibido na imagem acima, temos os seguintes pinos disponíveis no ATtiny85:

+

PB0, PB1, PB2, PB3, PB4, PB5.

+

Algumas Particularidades do circuito da Franzininho DIY

+

Os pinos de I/O são marcados em Amarelo no Pinout da Franzininho DIY

+

pinout Franzininho DIY

+
    +
  • O pino PB5 é configurado como RESET na Franzininho DIY, sendo assim não poderemos usá-lo como I/O.
  • +
  • Os pinos PB3 e PB4 são usados para o circuito da USB, sendo assim temos que usá-los com cautela. Geralmente esses pinos são usados apenas como saídas digitais.
  • +
  • O LED amarelo da placa está ligado ao pino PB1.
  • +
  • Os pinos PB0 E PB2 não possuem circuito ligados a eles.
  • +
+

Registradores responsáveis pelos pinos de I/O

+

Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:

+
    +
  • PORTB: Registrador de dados. Responsável pela escrita nos pinos;
  • +
  • DDRB: Registrador de direção do pino. Responsável pela configuração dos pinos para definir se será entrada ou saída;
  • +
  • PINB: Registrador de entrada da porta. Responsável pela leitura do estado do pino.
  • +
+

Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos teríamos os finais A, B,C, etc. Cada porta só possui no máximo 8 pinos.

+

Na seção 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configurações possíveis para os pinos:

+

configuração GPIO

+

A figura abaixo exibe os registradores responsáveis pelos pino de I/O do PORTB:

+

configuração GPIO

+

Note que cada bit dos registradores é responsável por pino sendo indexado pelo número correspondente ao bit. Dessa forma, se quisermos usar o pino PB1 para acionar o LED, devemos configurar o registrador DDRB da seguinte forma:

+
76543210
--000010
+

E para acionar ligar/deligar o LED devemos colocar 1 ou no bit correspondente no PORTB.

+

Vamos a um exemplo para ficar mais claro.

+

Códigos

+
#include <avr/io.h>
+#include <util/delay.h>
+
+#define F_CPU 16500000L        // Frequência do oscilador. usado para a função de delay
+
+int main(void)
+{
+  DDRB = 0b00000010;           // Configura Pino PB1 como saída (Pino do LED)
+
+  while (1)
+  {
+      PORTB = 0b00000010;      // Liga o LED 1
+      _delay_ms(250);          // Aguarda 250 ms
+      PORTB = 0b00000000;      // Desliga o LED 1
+      _delay_ms(250);          // Aguarda 250 ms
+  }
+
+  return (0);
+}
+
+

O exemplo acima pisca o LED em intervalos de 250 ms. A configuração do pino PB1 como saída foi feito colocando o bit1 de DDRB em 1. Já para ligar e desligar o LED foi manipulado o bit 1 de PORTB, hora em 1 hora em 0.

+

Bacana, não?

+

podemos melhorar a manipulação dos bits dos registradores usando macros. As macros são rotinas que facilitam nossas vidas. Recomendo que se você leia esse artigo para entender sobre as macros e as operações efetuadas: https://www.embarcados.com.br/bits-em-linguagem-c/

+

Vamos usar as seguintes macros:

+
#define setBit(valor,bit) (valor |= (1<<bit))
+#define toogleBit(valor,bit) (valor ^= (1<<bit))
+
+

Os nomes já são auto-explicativos mas vamos verificar como usá-las no programa em C:

+
#include <avr/io.h>
+#include <util/delay.h>
+
+#define F_CPU 16500000L
+
+// Macros
+#define setBit(valor,bit) (valor |= (1 << bit))
+#define toogleBit(valor,bit) (valor ^= (1 << bit))
+
+int main(void)
+{
+    setBit(DDRB,PB1);          // Configura Pino PB1 como saída (Pino do LED)
+
+    while (1)
+    {
+        toogleBit(PORTB, PB1); // Inverte o estado do pino
+        _delay_ms(250);        // Aguarda 250 ms
+    }
+
+    return (0);
+}
+
+

Dessa forma manipulamos somente os bits desejados, não alterando os valores dos outros que poderão ser usados para outras aplicações.

+

Desafio

+

Coloque outro LED no pino PB0 e o acione alternadamente ao pino PB1, ou seja, quando LED no PB0 estiver ligado o LED em PB1 deve apagar e vice-versa.

+
AutorFábio Souza
Data:24/04/2021
\ No newline at end of file diff --git a/docs/franzininho-diy/exemplos-avr-libc/timer0-int/index.html b/docs/franzininho-diy/exemplos-avr-libc/timer0-int/index.html index 520ebec23..b7d1a78f5 100755 --- a/docs/franzininho-diy/exemplos-avr-libc/timer0-int/index.html +++ b/docs/franzininho-diy/exemplos-avr-libc/timer0-int/index.html @@ -1,17 +1,109 @@ - + - -Timer 0 - Interrupção | Franzininho - - - + +Timer 0 - Interrupção | Franzininho + + + -
-

Timer 0 - Interrupção

Nesse exemplo vamos entender como usar a interrupção do Timer0 para verificar o seu overflow. Dessa forma não precisaremos ficar monitorando o flag de overflow no loop principal da aplicação.

Interrupção do Timer0

No exemplo anterior configuramos o Timer0 para operar no modo normal. Para monitora a sua contagem monitoramos o flag TOV0 dentro do loop. Como o Timer é um periférico que funciona independente da CPU podemos habilitar a sua contagem e verificar o overflow através da sua interrupção.

Para habilitar a interrupção do Timer0 devermos colocar 1 no bit TOIE0 no registrador TIMSK:

TIMSK

Após isso, para que a interrupção realmente ocorra, devemos habilitar a chave global de interrupção através da função sei();

Usando o Timer0 como temporizador com sua interrupção

Vamos fazer a mesma aplicação do exemplo anterior, que é inverter o estado lo LED em intervalos de 1 s. A diferença aqui é que vamos monitorar os overflows do timer através da rotina de interrupção.

A configuração do timer segue a mesma, já que queremos gerar um delay de 1 segundo.

Assim, precisaremos contar a quantidade de interrupções e quando atingir 63, inverteremos o estado do LED.

Recursos necessários

  • Placa Franzininho DIY(com Micronucleus);
  • LED;
  • Resistor de 470 Ohm;
  • Jumpers;
  • Computador com as ferramentas de software instaladas.

Código exemplo

/**
*
* @file main.c
* @author Fábio Souza
* @brief Exibe como usar a interrupção do timer 0 para temporização
* @version 0.1
* @date 2021-02-13
*
* @copyright Franzininho
* This example code is in the Public Domain (or CC0 licensed, at your option.)
* Unless required by applicable law or agreed to in writing, this
* software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied.
*
*/

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#define F_CPU 16500000L


#define setBit(valor,bit) (valor |= (1<<bit))
#define clearBit(valor,bit) (valor &= ~(1<<bit))
#define toogleBit(valor,bit) (valor ^= (1<<bit))
#define testBit(valor,bit) (valor & (1<<bit))

unsigned char tempo = 0; //contador auxiliar


ISR (TIMER0_OVF_vect) //vetor de interrupção para o timer 0
{
tempo++; //incrementa contador auxiliar
if(tempo >=63) //se passaram-se 63 x 15,89 ms = 1 s
{
toogleBit(PORTB,PB1); //inverte LED
tempo = 0; //reinicia contador
}
}

/**
* @brief Função main
*
* @return int
*/
int main(void)
{

setBit(DDRB,PB1); // Configura Pino PB1 como saída (Pino do LED)

//configuração do timer0 para overflow a aproximadamente 15,89 ms
//t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms
TCCR0A=0x00; //Modo Normal
TCCR0B=0x00;
TCCR0B |= (1<<CS00)|(1<<CS02); //prescaler de 1024
TCNT0=0; //inicia timer com 0
setBit(TIMSK,TOIE0); //habilita interrupção do timer0
sei(); //habilita interrupção global

/**
* @brief loop infinito
*
*/
while (1)
{
//não faz nada no loop
}
return (0);
}
Informação

Note que no loop principal não fizemos nada. Todo o tratamento ficou na interrupção do Timer0.

Simulação do exemplo

  • Wokwi:
- - +

Timer 0 - Interrupção

Nesse exemplo vamos entender como usar a interrupção do Timer0 para verificar o seu overflow. Dessa forma não precisaremos ficar monitorando o flag de overflow no loop principal da aplicação.

+

Interrupção do Timer0

+

No exemplo anterior configuramos o Timer0 para operar no modo normal. Para monitora a sua contagem monitoramos o flag TOV0 dentro do loop. Como o Timer é um periférico que funciona independente da CPU podemos habilitar a sua contagem e verificar o overflow através da sua interrupção.

+

Para habilitar a interrupção do Timer0 devermos colocar 1 no bit TOIE0 no registrador TIMSK:

+

TIMSK

+

Após isso, para que a interrupção realmente ocorra, devemos habilitar a chave global de interrupção através da função sei();

+

Usando o Timer0 como temporizador com sua interrupção

+

Vamos fazer a mesma aplicação do exemplo anterior, que é inverter o estado lo LED em intervalos de 1 s. A diferença aqui é que vamos monitorar os overflows do timer através da rotina de interrupção.

+

A configuração do timer segue a mesma, já que queremos gerar um delay de 1 segundo.

+

Assim, precisaremos contar a quantidade de interrupções e quando atingir 63, inverteremos o estado do LED.

+

Recursos necessários

+
    +
  • Placa Franzininho DIY(com Micronucleus);
  • +
  • LED;
  • +
  • Resistor de 470 Ohm;
  • +
  • Jumpers;
  • +
  • Computador com as ferramentas de software instaladas.
  • +
+

Código exemplo

+
/**
+ * 
+ * @file main.c
+ * @author Fábio Souza
+ * @brief Exibe como usar a interrupção do timer 0 para temporização
+ * @version 0.1
+ * @date 2021-02-13
+ * 
+ * @copyright Franzininho 
+ * This example code is in the Public Domain (or CC0 licensed, at your option.)
+ * Unless required by applicable law or agreed to in writing, this
+ * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied.
+ * 
+ */
+
+#include <avr/io.h>
+#include <util/delay.h> 
+#include <avr/interrupt.h>
+
+#define F_CPU 16500000L
+
+ 	
+#define setBit(valor,bit) (valor |= (1<<bit))
+#define clearBit(valor,bit) (valor &= ~(1<<bit))
+#define toogleBit(valor,bit) (valor ^= (1<<bit))
+#define testBit(valor,bit)    (valor & (1<<bit))
+
+unsigned char tempo = 0;  //contador auxiliar
+
+
+ISR (TIMER0_OVF_vect) //vetor de interrupção para o timer 0
+{
+  tempo++;                     //incrementa contador auxiliar
+  if(tempo >=63)               //se passaram-se 63 x 15,89 ms = 1 s
+  {
+    toogleBit(PORTB,PB1);      //inverte LED
+    tempo = 0;                 //reinicia contador
+  }
+}
+
+/**
+ * @brief Função main
+ * 
+ * @return int 
+ */
+int main(void) 
+{
+  
+  setBit(DDRB,PB1); 	// Configura Pino PB1 como saída (Pino do LED)
+
+  //configuração do timer0 para overflow a aproximadamente 15,89 ms
+  //t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms
+  TCCR0A=0x00;                      //Modo Normal
+  TCCR0B=0x00;
+  TCCR0B |= (1<<CS00)|(1<<CS02);   //prescaler de 1024
+  TCNT0=0;                         //inicia timer com 0
+  setBit(TIMSK,TOIE0);             //habilita interrupção do timer0 
+  sei();                           //habilita interrupção global
+  
+  /**
+   * @brief loop infinito
+   * 
+   */
+  while (1)
+  {
+      //não faz nada no loop 
+  }                                                
+  return (0);                           
+}
+
+

Note que no loop principal não fizemos nada. Todo o tratamento ficou na interrupção do Timer0.

+

Simulação do exemplo

+
    +
  • **Wokwi: **
  • +
+
\ No newline at end of file diff --git a/docs/franzininho-diy/exemplos-avr-libc/timer0/index.html b/docs/franzininho-diy/exemplos-avr-libc/timer0/index.html index 892fad10e..1a15eb84b 100755 --- a/docs/franzininho-diy/exemplos-avr-libc/timer0/index.html +++ b/docs/franzininho-diy/exemplos-avr-libc/timer0/index.html @@ -1,17 +1,155 @@ - + - -Timer 0 | Franzininho - - - + +Timer 0 | Franzininho + + + -
-

Timer 0

Os timers são periféricos muito importantes nos microcontroladores. Podemos usá-los para temporização, contagem de eventos, PWM, medir pulsos externos, etc. O ATtiny85 possui 2 timers, chamados de Timer0 e Timer1. Nesse exemplos vamos focar no uso do Timer0 como temporizador.

Características do Timer0

O Timer0 é um módulo temporizador/contador de 8 bits de uso geral. Isso significa que ele pode contar de 0 a 255. A funcionalidade de temporização pode ser estendida ainda mais usando os periféricos de comparação, que permitem que o temporizador conte eventos, gere sinais PWM e assim por diante. Assim é possível gerar temporizações precisas, ondas e sinais PWM independentes da CPU.

A figura a seguir exibe o diagrama de blocos simplificado do Timer0:

Diagrama de blocos do Timer0

Resumo de recursos do Timer0

  • Duas unidades de comparação de saída independentes;
  • Registradores de comparação de saída com buffer duplo;
  • Limpa cronômetro na comparação de correspondência (recarregamento automático);
  • Modulador de largura de pulso com correção de fase (PWM) livre de glitch;
  • Período PWM variável;
  • Gerador de frequência;
  • Três fontes de interrupção independentes (TOV0, OCF0A e OCF0B);

Usando o Timer0 como temporizador

Nesse exemplos vamos usar o Timer0 para gerar delay de 1s para piscar um LED.

Passo para configurar o Timer0 como temporizador

Passo 1: Configurar o Timer0 para trabalhar no modo normal. Nesse modo o timer iniciará a contagem em 0 e irá até máximo de 255. Quando atingido o máximo é gerado um flag de sinalização de overflow e o timer volta a contar a partir do zero.

Para configurar o modo de operação normal, devemos configurar o registrador TCCR0A – Timer/Counter Control Register A da seguinte forma:

  • COM0A[1:0] e COM0B[1:0] = 0

  • WGM0[1:0] = 0 e TCCR0B – WGM02 = 0

Deve-se escrever os seguintes valores em TCCR0A – Timer/Counter Control Register A:

TCCR0A = 0b00000000;

Passo 2: Ajustar o prescaler do clock interno para 1024

Para ajustar o prescale precisamos configurar os bits CS02,CS01 e CS00 do TCCR0B:

  • TCCR0B – CS0[2:0]

Deve-se escrever os seguintes valores em TCCR0B – Timer/Counter Control Register B:

TCCR0B = 0b00000101;

Calculo do Delay

Estamos trabalhando com o clock interno do ATtiny85 em 16.5Mhz. Essa é a fonte de clock para o timer0 em modo de operação normal. Como selecionamos o prescaler para dividir o clock por 1024, temos o incremento do timer0 em:

  • tempo por incremento do timer0 = 1/(16.5M/1024) = 62 us

Assim, o tempo para o timer0 estourar(overflow) é:

  • tempo para o timer0 estourar = 62us x 256 = 15,89ms

Portanto, para ter um delay de 1 segundo precisamos ter:

  • quantidade de overflows do timer0 = 1/15,89ms ≃ 63 vezes

Passos para monitorar o overflow do timer e gerar o delay de 1s

  • Passo 0: Colocar TCNT0 em zero
  • Passo 1: Aguardar a contagem do timer verificando quando TOV0 vai para 1
  • Passo 2: Limpar a flag TOV0 escrevendo 1 nela(Isso mesmo escrevendo 1)
  • Passo 3: Repetir passos 1 e 2 63 vezes para atingir 1 segundo
  • Passo 4: Passou um segundo – Inverter LED

Recursos necessários

  • Placa Franzininho DIY(com Micronucleus)
  • LED
  • Resistor de 470 Ohm
  • Jumpers
  • Computador com as ferramentas de software instaladas

Código exemplo

/**
*
* @file main.c
* @author Fábio Souza
* @brief Exibe como usar o timer zero para temporização
* @version 0.1
* @date 2021-02-13
*
* @copyright Franzininho
* This example code is in the Public Domain (or CC0 licensed, at your option.)
* Unless required by applicable law or agreed to in writing, this
* software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied.
*
*/

#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 16500000L


#define setBit(valor,bit) (valor |= (1<<bit))
#define clearBit(valor,bit) (valor &= ~(1<<bit))
#define toogleBit(valor,bit) (valor ^= (1<<bit))
#define testBit(valor,bit) (valor & (1<<bit))

/**
* @brief Função main
*
* @return int
*/
int main(void)
{

unsigned char tempo = 0; //contador auxiliar

setBit(DDRB,PB1); // Configura Pino PB1 como saída (Pino do LED)

//configuração do timer0 para overflow a aproximadamente 15,89 ms
//t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms
TCCR0A=0x00; //Modo Normal
TCCR0B=0x00;
TCCR0B |= (1<<CS00)|(1<<CS02); //prescaler de 1024
TCNT0=0; //inicia timer com 0

/**
* @brief loop infinito
*
*/
while (1)
{
if(testBit(TIFR,TOV0)) //se timer estourou
{
setBit(TIFR,TOV0); //limpa flag
tempo++; //incrementa contador auxiliar
if(tempo >=63) //se passaram-se 63 x 15,89 ms = 1 s
{
toogleBit(PORTB,PB1); //inverte LED
tempo = 0; //reinicia contador
}
}
}
return (0);
}

Simulação do exemplo

  • Wokwi:
- - +

Timer 0

Os timers são periféricos muito importantes nos microcontroladores. Podemos usá-los para temporização, contagem de eventos, PWM, medir pulsos externos, etc. O ATtiny85 possui 2 timers, chamados de Timer0 e Timer1. Nesse exemplos vamos focar no uso do Timer0 como temporizador.

+

Características do Timer0

+

O Timer0 é um módulo temporizador/contador de 8 bits de uso geral. Isso significa que ele pode contar de 0 a 255. A funcionalidade de temporização pode ser estendida ainda mais usando os periféricos de comparação, que permitem que o temporizador conte eventos, gere sinais PWM e assim por diante. Assim é possível gerar temporizações precisas, ondas e sinais PWM independentes da CPU.

+

A figura a seguir exibe o diagrama de blocos simplificado do Timer0:

+

Diagrama de blocos do Timer0

+

Resumo de recursos do Timer0

+
    +
  • Duas unidades de comparação de saída independentes;
  • +
  • Registradores de comparação de saída com buffer duplo;
  • +
  • Limpa cronômetro na comparação de correspondência (recarregamento automático);
  • +
  • Modulador de largura de pulso com correção de fase (PWM) livre de glitch;
  • +
  • Período PWM variável;
  • +
  • Gerador de frequência;
  • +
  • Três fontes de interrupção independentes (TOV0, OCF0A e OCF0B);
  • +
+

Usando o Timer0 como temporizador

+

Nesse exemplos vamos usar o Timer0 para gerar delay de 1s para piscar um LED.

+

Passo para configurar o Timer0 como temporizador

+

Passo 1: Configurar o Timer0 para trabalhar no modo normal. Nesse modo o timer iniciará a contagem em 0 e irá até máximo de 255. Quando atingido o máximo é gerado um flag de sinalização de overflow e o timer volta a contar a partir do zero.

+

Para configurar o modo de operação normal, devemos configurar o registrador TCCR0A – Timer/Counter Control Register A da seguinte forma:

+
    +
  • COM0A[1:0] e COM0B[1:0] = 0
  • +
+

+
    +
  • WGM0[1:0] = 0 e TCCR0B – WGM02 = 0
  • +
+

+

Deve-se escrever os seguintes valores em TCCR0A – Timer/Counter Control Register A:

+

TCCR0A = 0b00000000;

+

Passo 2: Ajustar o prescaler do clock interno para 1024

+

Para ajustar o prescale precisamos configurar os bits CS02,CS01 e CS00 do TCCR0B:

+
    +
  • TCCR0B – CS0[2:0]
  • +
+

+

Deve-se escrever os seguintes valores em TCCR0B – Timer/Counter Control Register B:

+

TCCR0B = 0b00000101;

+

Calculo do Delay

+

Estamos trabalhando com o clock interno do ATtiny85 em 16.5Mhz. Essa é a fonte de clock para o timer0 em modo de operação normal. Como selecionamos o prescaler para dividir o clock por 1024, temos o incremento do timer0 em:

+
    +
  • tempo por incremento do timer0 = 1/(16.5M/1024) = 62 us
  • +
+

Assim, o tempo para o timer0 estourar(overflow) é:

+
    +
  • tempo para o timer0 estourar = 62us x 256 = 15,89ms
  • +
+

Portanto, para ter um delay de 1 segundo precisamos ter:

+
    +
  • quantidade de overflows do timer0 = 1/15,89ms ≃ 63 vezes
  • +
+

Passos para monitorar o overflow do timer e gerar o delay de 1s

+
    +
  • Passo 0: Colocar TCNT0 em zero
  • +
  • Passo 1: Aguardar a contagem do timer verificando quando TOV0 vai para 1
  • +
  • Passo 2: Limpar a flag TOV0 escrevendo 1 nela(Isso mesmo escrevendo 1)
  • +
  • Passo 3: Repetir passos 1 e 2 63 vezes para atingir 1 segundo
  • +
  • Passo 4: Passou um segundo – Inverter LED
  • +
+

Recursos necessários

+
    +
  • Placa Franzininho DIY(com Micronucleus)
  • +
  • LED
  • +
  • Resistor de 470 Ohm
  • +
  • Jumpers
  • +
  • Computador com as ferramentas de software instaladas
  • +
+

Código exemplo

+
/**
+ * 
+ * @file main.c
+ * @author Fábio Souza
+ * @brief Exibe como usar o timer zero para temporização
+ * @version 0.1
+ * @date 2021-02-13
+ * 
+ * @copyright Franzininho 
+ * This example code is in the Public Domain (or CC0 licensed, at your option.)
+ * Unless required by applicable law or agreed to in writing, this
+ * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied.
+ * 
+ */
+
+#include <avr/io.h>
+#include <util/delay.h> 
+
+#define F_CPU 16500000L
+
+ 	
+#define setBit(valor,bit) (valor |= (1<<bit))
+#define clearBit(valor,bit) (valor &= ~(1<<bit))
+#define toogleBit(valor,bit) (valor ^= (1<<bit))
+#define testBit(valor,bit)    (valor & (1<<bit))
+
+/**
+ * @brief Função main
+ * 
+ * @return int 
+ */
+int main(void) 
+{
+  
+  unsigned char tempo = 0;  //contador auxiliar
+
+  setBit(DDRB,PB1); 	// Configura Pino PB1 como saída (Pino do LED)
+
+  //configuração do timer0 para overflow a aproximadamente 15,89 ms
+  //t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms
+  TCCR0A=0x00;                      //Modo Normal
+  TCCR0B=0x00;
+  TCCR0B |= (1<<CS00)|(1<<CS02);   //prescaler de 1024
+  TCNT0=0;                         //inicia timer com 0
+  
+  /**
+   * @brief loop infinito
+   * 
+   */
+  while (1)
+  {
+    if(testBit(TIFR,TOV0))         //se timer estourou
+    {
+      setBit(TIFR,TOV0);           //limpa flag
+      tempo++;                     //incrementa contador auxiliar
+      if(tempo >=63)               //se passaram-se 63 x 15,89 ms = 1 s
+      {
+        toogleBit(PORTB,PB1);      //inverte LED
+        tempo = 0;                 //reinicia contador
+      }
+    }
+  }                                                
+  return (0);                           
+}
+
+

Simulação do exemplo

+
    +
  • **Wokwi: **
  • +
+ +
\ No newline at end of file diff --git a/docs/franzininho-diy/exemplos-avr-libc/todo/index.html b/docs/franzininho-diy/exemplos-avr-libc/todo/index.html index bc839ef7d..d1139c5ad 100755 --- a/docs/franzininho-diy/exemplos-avr-libc/todo/index.html +++ b/docs/franzininho-diy/exemplos-avr-libc/todo/index.html @@ -1,17 +1,26 @@ - + - -TODO | Franzininho - - - + +TODO | Franzininho + + + -
-

TODO

A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a AVR LibC com a Franzininho DIY.

Fique a vontade para colaborar na construção dos materiais e códigos.

ExemplosStatusNota
Primeiros Passos🟢
Hello, World!🟢
Saída Digital🟢
Entrada Digital🟢
Timer 0🟢
Timer 0 - Interrupção🟢
Contador de pulsos externos🟢
Instrumento musical com Buzzer🟢
Interrupção externa🟢
Timer0 CTC🔴
Timer0 PWM🔴
Timer 1🔴
Timer 2 Interrupção🔴
Timer 1 PWM🔴
Conversor AD🔴
I2C🔴
SPI🔴
EEPROM🔴
Configuração de Clock🔴
Sleep🔴
Fuse bits🔴

Legenda:

  • 🟢 Feito
  • 🟡 Em progresso
  • 🔴 Ainda não implementado

Repositório de Exemplos

- - +

TODO

A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a AVR LibC com a Franzininho DIY.

+

Fique a vontade para colaborar na construção dos materiais e códigos.

+
ExemplosStatusNota
Primeiros Passos🟢
Hello, World!🟢
Saída Digital🟢
Entrada Digital🟢
Timer 0🟢
Timer 0 - Interrupção🟢
Contador de pulsos externos🟢
Instrumento musical com Buzzer🟢
Interrupção externa🟢
Timer0 CTC🔴
Timer0 PWM🔴
Timer 1🔴
Timer 2 Interrupção🔴
Timer 1 PWM🔴
Conversor AD🔴
I2C🔴
SPI🔴
EEPROM🔴
Configuração de Clock🔴
Sleep🔴
Fuse bits🔴
+

Legenda:

+
    +
  • 🟢 Feito
  • +
  • 🟡 Em progresso
  • +
  • 🔴 Ainda não implementado
  • +
+

Repositório de Exemplos

+
\ No newline at end of file diff --git a/docs/franzininho-diy/girassol-automatizado/index.html b/docs/franzininho-diy/girassol-automatizado/index.html index 5f48ea6b8..6634a0f82 100755 --- a/docs/franzininho-diy/girassol-automatizado/index.html +++ b/docs/franzininho-diy/girassol-automatizado/index.html @@ -1,17 +1,75 @@ - + - -Girassol Automatizado | Franzininho - - - + +Girassol Automatizado | Franzininho + + + -
-

Girassol Automatizado

Nesse exemplo vamos fazer um girassol automatizado que se movimenta conforme a posição da luz.

Materiais:

  • Placa Franzininho DIY;
  • Protoboard;
  • LED 3mm;
  • 1 Resistor LDR (foto resistores 10 k)
  • 1 Servo motor
  • Jumpers macho/fêmea

Circuito

No protoboard você deve inserir o foto resistores e o servo motoro, conforme a imagem abaixo:

Circuito

Código


/*
Franzininho
Exemplo: Girassol Automatizado
Nesse exemplo é de um girassol automatizado com dois fotos resistores, um servo motor, entre outros materiais, confira.
*/
//

#include <Servo.h>

int sensor = A;
int servoMotor = 1;

int valorSensor =0;
int analogServo = 90;

Servo servo;

void setup() {
servo.attach(servoMotor);
servo.write(anguloServo);
}

void loop() {
valorSensor = analogRead(sensor);
if(valorSensor <512)
{
if(anguloServo < 170)anguloServo++;
}
if(valorSensor = >512)
{
if(anguloServo > 10)anguloServo--;
}

servo.write(anguloServo);
delay(50);
}

Video explicativo

Este projeto foi feiro para colaborar no projeto Co.Lab da Red Hat, confira esse e outros na plataforma:https://www.redhat.com/pt-br/colab-repo

Co.Lab | Workshop: Robótica Educacional - Aprenda sobre Ciência da Natureza e Eletrônica (Parte 1)

Co.Lab | Workshop: Robótica Educacional - Aprenda sobre Ciência da Natureza e Eletrônica (Parte 2)

Referência

Arduino Sunflower

AutorDiana Santos
Data:22/01/2022
- - +

Girassol Automatizado

Nesse exemplo vamos fazer um girassol automatizado que se movimenta conforme a posição da luz.

+

Materiais:

+
    +
  • Placa Franzininho DIY;
  • +
  • Protoboard;
  • +
  • LED 3mm;
  • +
  • 1 Resistor LDR (foto resistores 10 k)
  • +
  • 1 Servo motor
  • +
  • Jumpers macho/fêmea
  • +
+

Circuito

+

No protoboard você deve inserir o foto resistores e o servo motoro, conforme a imagem abaixo:

+

Circuito

+

Código

+

+/*
+Franzininho
+Exemplo:  Girassol Automatizado
+Nesse exemplo é de um girassol automatizado com dois fotos resistores,  um servo motor, entre outros materiais, confira.
+*/
+//
+
+#include <Servo.h>
+
+int sensor = A;
+int servoMotor = 1;
+
+int valorSensor =0;
+int analogServo = 90;
+
+Servo servo;
+
+void setup() {
+ servo.attach(servoMotor);
+ servo.write(anguloServo);
+}
+
+void loop() {
+ valorSensor = analogRead(sensor);
+ if(valorSensor <512)
+ {
+   if(anguloServo < 170)anguloServo++;
+ }
+ if(valorSensor = >512)
+ {
+   if(anguloServo > 10)anguloServo--;
+ }
+
+servo.write(anguloServo);
+delay(50);
+}
+
+
+

Video explicativo

+

Este projeto foi feiro para colaborar no projeto Co.Lab da Red Hat, confira esse e outros na plataforma:https://www.redhat.com/pt-br/colab-repo

+

Co.Lab | Workshop: Robótica Educacional - Aprenda sobre Ciência da Natureza e Eletrônica (Parte 1)

+ +

Co.Lab | Workshop: Robótica Educacional - Aprenda sobre Ciência da Natureza e Eletrônica (Parte 2)

+ +

Referência

+

Arduino Sunflower

+
AutorDiana Santos
Data:22/01/2022
\ No newline at end of file diff --git a/docs/franzininho-diy/identificando-componentes/index.html b/docs/franzininho-diy/identificando-componentes/index.html index ca87a5c97..dcabbc20a 100755 --- a/docs/franzininho-diy/identificando-componentes/index.html +++ b/docs/franzininho-diy/identificando-componentes/index.html @@ -1,17 +1,70 @@ - + - -Identificando os componentes | Franzininho - - - + +Identificando os componentes | Franzininho + + + -
-

Identificando os componentes

Placa de Circuito impresso

A placa de circuito impresso é responsável por receber todos os componentes. Ela pode ser feita de fibra de vidro ou fenolite. Para a Franzininho DIY foi desenvolvido um projeto em face simples, o que permite a fabricação caseira.

PCB

Na parte superior da placa (TOP) há os desenhos dos componentes, indicando a posição de cada um. Os componentes são encaixados em seus respectivos locais e depois são soldados através da parte inferior (Bottom).

TOP e Bottom da placa Franzininho DIY V2

Resistores

Os resistores são componentes passivos que se opõem à passagem de corrente elétrica no circuito. Existem diversos tipos de resistores disponíveis. Na Franzininho DIY usamos resistores de carbono de 1/4 W. Os anéis coloridos indicam o valor e tolerância do resistor.

Tabela Código de cores para resistores de 4 faixas

Fonte: http://blog.render.com.br/eletronica/como-calcular-o-valor-de-um-resistor/

Na Franzininho DIY usamos 5 resistores, com as seguintes referências e valores:

  • R1 e R2 - 68 R (Azul, Cinza, Preto, Dourado)

Resistores de 68 Ohm

  • R3 - 1K5 (Marrom, Verde, Vermelho, Dourado)

Resistor de 1500 Ohm

R4 e R5 - 1K (Marrom, Preto, Vermelho, Dourado)

Resistor de 1k Ohm

Capacitores

Capacitores são dispositivos elétricos capazes de armazenar carga elétrica em um campo elétrico. Na Franzininho DIY temos 2 tipos de capacitores:

C1 - Capacitor Cerâmico 100 nF x 50 V

Capacitor Cerâmico 100 nF

C2 - Capacitor eletrolítico 10uF x 35V

Capacitor eletrolítico 10uF x 35V

LEDs

O LED (Light Emitting Diode) é usado para a emissão de luz em locais e instrumentos onde se torna mais conveniente a sua utilização no lugar de uma lâmpada.

Na Franzininho DIY são usados dois leds difusos de 3 mm

ON - LED Verde, LED - LED Amarelo

LEDs 3mm

Chave táctil

É um botão de contato momentâneo. Na Franzininho DIY usamos uma chave táctil NA (normalmente aberta) de 4,3 x 6 x 6 mm que tem a função de botão de Reset.

Chave - RESET

Chave táctil

Soquete

O soquete é usado para o encaixe de circuitos integrados, facilitando a sua troca na placa.

Na Franzininho DIY usamos um soquete de 8 pinos para acomodar o Microcontrolador ATtiny85

IC1 - Soquete

Soquete torneado 8 pinos

Barra de pinos

São usadas para expansão de pinos e entrada de alimentação na placa. Na Franzininho DIY usamos 3 vias para o conector de alimentação e 8 vias para o conector de expansão da placa

  • J1 - Barra de 3 pinos
  • P0, P1...GND - Barra de 8 pinos

Barra de pinos

Regulador de Tensão

Usado para abaixar a tensão de entrada para um nível em que o circuito possa trabalhar. Na Franzininho DIY usamos um regulador de tensão de 5V, o 78L05

IC2 - 78L05 - Regulador de tensão 5V

Regulador de tensão 78L05

Conector USB

Usado para conectar a placa ao computador ou a um circuito de alimentação com conector USB. Na Franzininho DIY usamos um Conector USB Macho 90º com trava

Conector USB Macho 90º com trava

ATtiny85

É o cérebro da Franzininho DIY e o componente mais caro. Tenha cuidado na hora de encaixar no soquete. Siga as orientações de montagem.

ATtiny85

- - +

Identificando os componentes

Placa de Circuito impresso

+

A placa de circuito impresso é responsável por receber todos os componentes. Ela pode ser feita de fibra de vidro ou fenolite. Para a Franzininho DIY foi desenvolvido um projeto em face simples, o que permite a fabricação caseira.

+

PCB

+

Na parte superior da placa (TOP) há os desenhos dos componentes, indicando a posição de cada um. Os componentes são encaixados em seus respectivos locais e depois são soldados através da parte inferior (Bottom).

+

TOP e Bottom da placa Franzininho DIY V2

+

Resistores

+

Os resistores são componentes passivos que se opõem à passagem de corrente elétrica no circuito. Existem diversos tipos de resistores disponíveis. Na Franzininho DIY usamos resistores de carbono de 1/4 W. Os anéis coloridos indicam o valor e tolerância do resistor.

+

Tabela Código de cores para resistores de 4 faixas

+

Fonte: http://blog.render.com.br/eletronica/como-calcular-o-valor-de-um-resistor/

+

Na Franzininho DIY usamos 5 resistores, com as seguintes referências e valores:

+
    +
  • R1 e R2 - 68 R (Azul, Cinza, Preto, Dourado)
  • +
+

Resistores de 68 Ohm

+
    +
  • R3 - 1K5 (Marrom, Verde, Vermelho, Dourado)
  • +
+

Resistor de 1500 Ohm

+

R4 e R5 - 1K (Marrom, Preto, Vermelho, Dourado)

+

Resistor de 1k Ohm

+

Capacitores

+

Capacitores são dispositivos elétricos capazes de armazenar carga elétrica em um campo elétrico. Na Franzininho DIY temos 2 tipos de capacitores:

+

C1 - Capacitor Cerâmico 100 nF x 50 V

+

Capacitor Cerâmico 100 nF

+

C2 - Capacitor eletrolítico 10uF x 35V

+

Capacitor eletrolítico 10uF x 35V

+

LEDs

+

O LED (Light Emitting Diode) é usado para a emissão de luz em locais e instrumentos onde se torna mais conveniente a sua utilização no lugar de uma lâmpada.

+

Na Franzininho DIY são usados dois leds difusos de 3 mm

+

ON - LED Verde, LED - LED Amarelo

+

LEDs 3mm

+

Chave táctil

+

É um botão de contato momentâneo. Na Franzininho DIY usamos uma chave táctil NA (normalmente aberta) de 4,3 x 6 x 6 mm que tem a função de botão de Reset.

+

Chave - RESET

+

Chave táctil

+

Soquete

+

O soquete é usado para o encaixe de circuitos integrados, facilitando a sua troca na placa.

+

Na Franzininho DIY usamos um soquete de 8 pinos para acomodar o Microcontrolador ATtiny85

+

IC1 - Soquete

+

Soquete torneado 8 pinos

+

Barra de pinos

+

São usadas para expansão de pinos e entrada de alimentação na placa. Na Franzininho DIY usamos 3 vias para o conector de alimentação e 8 vias para o conector de expansão da placa

+
    +
  • J1 - Barra de 3 pinos
  • +
  • P0, P1...GND - Barra de 8 pinos
  • +
+

Barra de pinos

+

Regulador de Tensão

+

Usado para abaixar a tensão de entrada para um nível em que o circuito possa trabalhar. Na Franzininho DIY usamos um regulador de tensão de 5V, o 78L05

+

IC2 - 78L05 - Regulador de tensão 5V

+

Regulador de tensão 78L05

+

Conector USB

+

Usado para conectar a placa ao computador ou a um circuito de alimentação com conector USB. Na Franzininho DIY usamos um Conector USB Macho 90º com trava

+

Conector USB Macho 90º com trava

+

ATtiny85

+

É o cérebro da Franzininho DIY e o componente mais caro. Tenha cuidado na hora de encaixar no soquete. Siga as orientações de montagem.

+

ATtiny85

\ No newline at end of file diff --git a/docs/franzininho-diy/led-rgb/index.html b/docs/franzininho-diy/led-rgb/index.html index fec432bae..eb937b72d 100755 --- a/docs/franzininho-diy/led-rgb/index.html +++ b/docs/franzininho-diy/led-rgb/index.html @@ -1,17 +1,65 @@ - + - -LED RGB | Franzininho - - - + +LED RGB | Franzininho + + + -
-

LED RGB

Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas três cores.

Você pode controlar da forma que você quiser, confira o código simples que está na documentação.

Modifique, crie e compartilhe!

Materiais

  • 1 Placa Franzininho DIY;
  • 1 Protoboard;
  • 1 LED RGB catodo comum;
  • 3 Resistor 1k
  • 3 Jumpers macho/fêmea;

Circuito

Na protoboard você pode montar da seguinte forma:

Circuito

Sketch

//RGB com a Franzininho DIY

const int red = 0;
const int green = 1;
const int blue = 2;

void setup() {
// configura os pinos de cada cor como saída:
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
}

void loop() {
// aciona o LED na cor vermelha:
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
digitalWrite(blue, LOW);
delay(5000); // aguarda 5000ms

// aciona o LED na cor verde:
digitalWrite(red, LOW);
digitalWrite(green, HIGH);
digitalWrite(blue, LOW);
delay(5000); // aguarda 5000ms

// aciona o LED na cor azul:
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(blue, HIGH);
delay(5000); // aguarda 5000ms
}

Simulação

Video de Funcionamento

- - +

LED RGB

Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas três cores.

+

Você pode controlar da forma que você quiser, confira o código simples que está na documentação.

+

Modifique, crie e compartilhe!

+

Materiais

+
    +
  • 1 Placa Franzininho DIY;
  • +
  • 1 Protoboard;
  • +
  • 1 LED RGB catodo comum;
  • +
  • 3 Resistor 1k
  • +
  • 3 Jumpers macho/fêmea;
  • +
+

Circuito

+

Na protoboard você pode montar da seguinte forma:

+

Circuito

+

Sketch

+
//RGB com a Franzininho DIY
+
+const int red = 0; 
+const int green = 1; 
+const int blue = 2; 
+
+void setup() {
+  // configura os pinos de cada cor como saída:
+  pinMode(red, OUTPUT);
+  pinMode(green, OUTPUT);
+  pinMode(blue, OUTPUT);
+}
+
+void loop() {
+  // aciona o LED na cor vermelha:
+  digitalWrite(red, HIGH);
+  digitalWrite(green, LOW);
+  digitalWrite(blue, LOW);
+  delay(5000); // aguarda 5000ms 
+  
+  // aciona o LED na cor verde:
+  digitalWrite(red, LOW);
+  digitalWrite(green, HIGH);
+  digitalWrite(blue, LOW);
+  delay(5000); // aguarda 5000ms 
+
+  // aciona o LED na cor azul:
+  digitalWrite(red, LOW);
+  digitalWrite(green, LOW);
+  digitalWrite(blue, HIGH);
+  delay(5000); // aguarda 5000ms 
+}
+
+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/docs/franzininho-diy/leitura-tecla/index.html b/docs/franzininho-diy/leitura-tecla/index.html index d1aea8d34..1354965f5 100755 --- a/docs/franzininho-diy/leitura-tecla/index.html +++ b/docs/franzininho-diy/leitura-tecla/index.html @@ -1,17 +1,49 @@ - + - -Leitura de Tecla | Franzininho - - - + +Leitura de Tecla | Franzininho + + + -
-

Leitura de Tecla

Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada.

Materiais

  • Placa Franzininho;
  • Protoboard;
  • LED 3mm;
  • 1 Resistor 330;
  • 1 Resistor de 1k;
  • 1 Botão;
  • Jumpers macho/fêmea

Circuito

No protoboard você deve inserir o LED, resistores e o botão, conforme a imagem abaixo:

Circuito leitura tecla

Sketch

/*
Franzininho
Exemplo: Leitura de Tecla - Pull Down
Esse exemplo exibe como ler uma tecla com resistor de pull down e acionar um led quando ela for pressionada
*/
const int LED = 1; //pino para o LED
const int BOTAO = 2; //pino para o botão
int val = 0; // val será utilizado para armazenar o estado do pino
void setup(){
pinMode(LED,OUTPUT); //o LED é uma saída
pinMode(BOTAO,INPUT); //o BOTAO é uma entrada
}
void loop (){
val = digitalRead(BOTAO); // lê e armazena o valor de entrada
digitalWrite(LED, val); //aciona LED conforme valor lido do botão
}

Simulação

Video de Funcionamento

- - +

Leitura de Tecla

Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada.

+

Materiais

+
    +
  • Placa Franzininho;
  • +
  • Protoboard;
  • +
  • LED 3mm;
  • +
  • 1 Resistor 330;
  • +
  • 1 Resistor de 1k;
  • +
  • 1 Botão;
  • +
  • Jumpers macho/fêmea
  • +
+

Circuito

+

No protoboard você deve inserir o LED, resistores e o botão, conforme a imagem abaixo:

+

Circuito leitura tecla

+

Sketch

+
/*
+  Franzininho
+  Exemplo: Leitura de Tecla - Pull Down
+  Esse exemplo exibe como ler uma tecla com resistor de pull down e acionar um led quando ela for pressionada
+*/
+const int LED = 1; //pino para o LED
+const int BOTAO = 2; //pino para o botão
+int val = 0; // val será utilizado para armazenar o estado do pino
+void setup(){
+  pinMode(LED,OUTPUT); //o LED é uma saída
+  pinMode(BOTAO,INPUT); //o BOTAO é uma entrada
+}
+void loop (){
+val = digitalRead(BOTAO); // lê e armazena o valor de entrada
+digitalWrite(LED, val); //aciona LED conforme valor lido do botão
+}
+
+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/docs/franzininho-diy/lista-de-materiais/index.html b/docs/franzininho-diy/lista-de-materiais/index.html index 0dbee2e07..eb9bb110b 100755 --- a/docs/franzininho-diy/lista-de-materiais/index.html +++ b/docs/franzininho-diy/lista-de-materiais/index.html @@ -1,17 +1,18 @@ - + - -Lista de Materiais | Franzininho - - - + +Lista de Materiais | Franzininho + + + -
-

Lista de Materiais

Aqui você encontra a lista de materiais para montagem da Franzininho DIY.

Confira a referência e descrição de cada componente.

Lista de materiais (BOM)

ReferênciaDescrição
C1Capacitor Cerâmico 100 nF x 50 V
C2Capacitor eletrolítico 10 uF x 35 V
D1Diodo Zener 3,6 V 0,5W
D2Diodo Zener 3,6 V 0,5W
D3Diodo 1N4148
IC1Microcontrolador ATTINY85 - 20PU
IC278L05 - Regulador de tensão
SQ1Soquete Para CI - 8 pinos
JP3Barra de pinos estampada 15 mm 180° - 8 vias
J1Barra de pinos estampada 15 mm 180° - 3 vias
LEDLed 3mm Amarelo Difuso
ONLed 3mm Verde Difuso
R1Resistor 68 R - 5% 1/4 W
R2Resistor 68 R - 5% 1/4 W
R3Resistor 1K5 - 5% 1/4 W
R4Resistor 1K - 5% 1/4 W
R5Resistor 1K - 5% 1/4 W
RESETChave Táctil 6x6x5 mm
USBConector USB Macho 90º com trava
PCBPlaca de circuito impresso Franzininho V2
Ajuda

Se tiver alguma dúvida sobre os componentes, consulte a comunidade Franzininho no Discord

- - +

Lista de Materiais

Aqui você encontra a lista de materiais para montagem da Franzininho DIY.

+

Confira a referência e descrição de cada componente.

+

Lista de materiais (BOM)

+
ReferênciaDescrição
C1Capacitor Cerâmico 100 nF x 50 V
C2Capacitor eletrolítico 10 uF x 35 V
D1Diodo Zener 3,6 V 0,5W
D2Diodo Zener 3,6 V 0,5W
D3Diodo 1N4148
IC1Microcontrolador ATTINY85 - 20PU
IC278L05 - Regulador de tensão
SQ1Soquete Para CI - 8 pinos
JP3Barra de pinos estampada 15 mm 180° - 8 vias
J1Barra de pinos estampada 15 mm 180° - 3 vias
LEDLed 3mm Amarelo Difuso
ONLed 3mm Verde Difuso
R1Resistor 68 R - 5% 1/4 W
R2Resistor 68 R - 5% 1/4 W
R3Resistor 1K5 - 5% 1/4 W
R4Resistor 1K - 5% 1/4 W
R5Resistor 1K - 5% 1/4 W
RESETChave Táctil 6x6x5 mm
USBConector USB Macho 90º com trava
PCBPlaca de circuito impresso Franzininho V2
+

Se tiver alguma dúvida sobre os componentes, consulte a comunidade Franzininho no Discord

\ No newline at end of file diff --git a/docs/franzininho-diy/montagem/index.html b/docs/franzininho-diy/montagem/index.html index 1e565e71c..363b8a551 100755 --- a/docs/franzininho-diy/montagem/index.html +++ b/docs/franzininho-diy/montagem/index.html @@ -1,17 +1,86 @@ - + - -Montagem da Franzininho DIY | Franzininho - - - + +Montagem da Franzininho DIY | Franzininho + + + -
-

Montagem da Franzininho DIY

Passo a passo da montagem da Franzininho DIY V2RV2

Antes de colocar a mão na massa

montagem Franzininho DIY

Antes de tudo você deve preparar o ambiente, separando as ferramentas necessárias para a soldagem. Vamos precisar de:

  • Ferro de solda;
  • Estanho;
  • Alicate de corte diagonal para eletrônica;
  • Óculos de proteção;

Você também deve separar os componentes para facilitar na hora de soldar. Você encontra os componentes na lista de materiais. Tudo organizado? Então vamos lá?!

Montando a sua Franzininho DIY

De início você terá uma placa sem componentes, conforme a imagem abaixo:

montagem Franzininho DIY

Sequência de montagem

Você deve sempre começar pelos componentes baixos. Siga a sequência recomendada abaixo.

Diodo 1N1448

O primeiro componente a ser colocado é o diodo 1N4148 no D3.

Atenção

Cuidando com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa.

montagem Franzininho DIY

Diodos Zener (3V6)

Temos dois diodos zeners que deverão ser colocados nas referências D1 e D2.

Atenção

Cuidado com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa.

montagem Franzininho DIY

Resistores de 68R

Nas referências R1 e R2 você irá colocar os resistores de 68R que são representado pelas cores (azul, cinza, preto e dourado).

montagem Franzininho DIY

Resistor 1k5

Em R3 deve-se colocar o resistor de 1k5 que é representado nas cores (marrom, verde, vermelho e dourado).

montagem Franzininho DIY

Resistores 1k

Resistores de 1k que são representados nas cores (marrom, preto, vermelho e dourado) devem ser colocados em R4 e R5.

montagem Franzininho DIY

Soquete 8 pinos

O soquete deve ser colocado no IC1 que traz a facilidade do encaixe do ATtiny85.

Atenção

Verifique a posição do soquete a meia lua deve ficar virada para o lado do barramento de pinos da placa.

montagem Franzininho DIY

Chave táctil

A chave você consegue colocar apenas em uma posição, então é só encaixá-la onde está localizada como RESET.

montagem Franzininho DIY

Capacitor Cerâmico

No C1 você irá colocar o capacitor cerâmico.

montagem Franzininho DIY

LED Verde

O LED verde deve ser colocado no ON.

Cuidado com polaridade dos terminais dos LED.

Terminal maior (positivo) - Terminal menor (negativo)

montagem Franzininho DIY

LED Amarelo

O LED amarelo deve ser colocado no LED.

Cuidado com polaridade dos terminais dos LED.

Terminal maior (positivo) - Terminal menor (negativo)

montagem Franzininho DIY

Regulador de tensão

No IC2 você deve colocar o regulador. Ele tem 3 terminais e deve ser colocado conforme o desenho na placa.

Siga o desenho do componente na placa para se orientar no encaixe.

montagem Franzininho DIY

Barra de 3 pinos

Em J1, onde está indicado com VIN, GND, VCC, você irá colocar a barra com três pinos.

montagem Franzininho DIY

Barra de 8 pinos

Deverá ser colocada onde estão indicados (GND, VCC, P6, ..., P1,P0)

Apoie bem a barra. Solde apenas um terminal e verifique se ela ficou alinhada.

montagem Franzininho DIY

Capacitor eletrolítico

Agora vamos colocar o capacitor eletrolítico em C2.

montagem Franzininho DIY

Conector USB

Quase lá! Iremos agora colocar o conector USB, conforme o encaixe dele.

montagem Franzininho DIY

ATtiny85

Por último iremos colocar o microcontrolador ATtiny85 no soquete de 8 pinos.

Tome cuidado com a posição de encaixe do microcontrolador. Se oriente pelo desenho do soquete e faça uma dupla checagem antes de ligar a placa.

montagem Franzininho DIY

Pronto!

Sua Franzininho versão V2RV2 está montada, agora é só programar e criar vários projetos.

- - +

Montagem da Franzininho DIY

Passo a passo da montagem da Franzininho DIY V2RV2

+

Antes de colocar a mão na massa

+

montagem Franzininho DIY

+

Antes de tudo você deve preparar o ambiente, separando as ferramentas necessárias para a soldagem. Vamos precisar de:

+
    +
  • Ferro de solda;
  • +
  • Estanho;
  • +
  • Alicate de corte diagonal para eletrônica;
  • +
  • Óculos de proteção;
  • +
+

Você também deve separar os componentes para facilitar na hora de soldar. Você encontra os componentes na lista de materiais. Tudo organizado? Então vamos lá?!

+

Montando a sua Franzininho DIY

+

De início você terá uma placa sem componentes, conforme a imagem abaixo:

+

montagem Franzininho DIY

+

Você deve sempre começar pelos componentes baixos. Siga a sequência recomendada abaixo.

+

Diodo 1N1448

+

O primeiro componente a ser colocado é o diodo 1N4148 no D3.

+

Cuidando com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa.

+

montagem Franzininho DIY

+

Diodos Zener (3V6)

+

Temos dois diodos zeners que deverão ser colocados nas referências D1 e D2.

+

Cuidado com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa.

+

montagem Franzininho DIY

+

Resistores de 68R

+

Nas referências R1 e R2 você irá colocar os resistores de 68R que são representado pelas cores (azul, cinza, preto e dourado).

+

montagem Franzininho DIY

+

Resistor 1k5

+

Em R3 deve-se colocar o resistor de 1k5 que é representado nas cores (marrom, verde, vermelho e dourado).

+

montagem Franzininho DIY

+

Resistores 1k

+

Resistores de 1k que são representados nas cores (marrom, preto, vermelho e dourado) devem ser colocados em R4 e R5.

+

montagem Franzininho DIY

+

Soquete 8 pinos

+

O soquete deve ser colocado no IC1 que traz a facilidade do encaixe do ATtiny85.

+

Verifique a posição do soquete a meia lua deve ficar virada para o lado do barramento de pinos da placa.

+

montagem Franzininho DIY

+

Chave táctil

+

A chave você consegue colocar apenas em uma posição, então é só encaixá-la onde está localizada como RESET.

+

montagem Franzininho DIY

+

Capacitor Cerâmico

+

No C1 você irá colocar o capacitor cerâmico.

+

montagem Franzininho DIY

+

LED Verde

+

O LED verde deve ser colocado no ON.

+

Terminal maior (positivo) - Terminal menor (negativo)

+

montagem Franzininho DIY

+

LED Amarelo

+

O LED amarelo deve ser colocado no LED.

+

Terminal maior (positivo) - Terminal menor (negativo)

+

montagem Franzininho DIY

+

Regulador de tensão

+

No IC2 você deve colocar o regulador. Ele tem 3 terminais e deve ser colocado conforme o desenho na placa.

+ +

montagem Franzininho DIY

+

Barra de 3 pinos

+

Em J1, onde está indicado com VIN, GND, VCC, você irá colocar a barra com três pinos.

+

montagem Franzininho DIY

+

Barra de 8 pinos

+

Deverá ser colocada onde estão indicados (GND, VCC, P6, ..., P1,P0)

+ +

montagem Franzininho DIY

+

Capacitor eletrolítico

+

Agora vamos colocar o capacitor eletrolítico em C2.

+

montagem Franzininho DIY

+

Conector USB

+

Quase lá! Iremos agora colocar o conector USB, conforme o encaixe dele.

+

montagem Franzininho DIY

+

ATtiny85

+

Por último iremos colocar o microcontrolador ATtiny85 no soquete de 8 pinos.

+ +

montagem Franzininho DIY

+

Pronto!

+

Sua Franzininho versão V2RV2 está montada, agora é só programar e criar vários projetos.

\ No newline at end of file diff --git a/docs/franzininho-diy/pacote/index.html b/docs/franzininho-diy/pacote/index.html index 1daac5731..0bf5ef062 100755 --- a/docs/franzininho-diy/pacote/index.html +++ b/docs/franzininho-diy/pacote/index.html @@ -1,17 +1,40 @@ - + - -Configuração da Arduino IDE | Franzininho - - - + +Configuração da Arduino IDE | Franzininho + + + -
-

Configuração da Arduino IDE

Para programação da Franzininho DIY recomendamos o uso do pacote ATtinyCore, mantido pelo Spence Konde, aqui.

tip

Em breve teremos um pacote Franzininho que facilitará o processo de configuração da IDE. Fique ligado(a) nas atualizações.

Configuração da Arduino IDE

Após instalar a Arduino IDE(baixe aqui), acesse Arquivo -> Preferências e cole a URL a seguir em URL Adicionais Para Gerenciadores de Placas:

http://drazzy.com/package_drazzy.com_index.json

URL ATTINY CORE

Agora, abra o Gerenciador de placas, acesse: Ferramentas -> Placa -> Gerenciador de placas e procure por ATTinyCore. Após encontrar o pacote clique em instalar e aguarde a instalação:

Instalação do Pacote

Pronto. agora vamos configurar a placa. Selecione a placa ATTiny85 (Micronucleus/Digispark):

Selecionando a Placa

As demais configurações devem ficar da seguinte forma:

Configurações

Agora vamos carregar um Sketch para verificarmos se está tudo certo e entendermos o processo Upload para a placa.

Upload de código

Abra o exemplo Blink. Acesse Arquivo -> Exemplos -> 01.Basics -> Blink:

Blink

Agora vamos carregar o Sketch para a placa. Clique no botão Carregar:

Botão upload

Após a compilação será exibida a seguinte mensagem:

MEnsagem

Conecte a placa na porta USB. Caso a placa ja esteja conectada pressione o botão de reset ao ver essa mensagem. O código será carregado para a placa:

Carregando o código

Após o upload o LED amarelo da placa passará a piscar.

Se você chegou até aqui e não teve nenhum problema, parabéns! Você já pode testar os exemplos aqui na documentação ou fazer os seus próprios projetos.

Caso tenha algum problema verifique se consegue resolver com as soluções a seguir.

Resolvendo problemas de configuração e upload

danger

Em breve

- - +

Configuração da Arduino IDE

Para programação da Franzininho DIY recomendamos o uso do pacote ATtinyCore, mantido pelo Spence Konde, aqui.

+

Em breve teremos um pacote Franzininho que facilitará o processo de configuração da IDE. Fique ligado(a) nas atualizações.

+

Configuração da Arduino IDE

+

Após instalar a Arduino IDE(baixe aqui), acesse **Arquivo -> Preferências ** e cole a URL a seguir em URL Adicionais Para Gerenciadores de Placas:

+

http://drazzy.com/package_drazzy.com_index.json

+

URL ATTINY CORE

+

Agora, abra o Gerenciador de placas, acesse: Ferramentas -> Placa -> Gerenciador de placas e procure por ATTinyCore. Após encontrar o pacote clique em instalar e aguarde a instalação:

+

Instalação do Pacote

+

Pronto. agora vamos configurar a placa. Selecione a placa ATTiny85 (Micronucleus/Digispark):

+

Selecionando a Placa

+

As demais configurações devem ficar da seguinte forma:

+

Configurações

+

Agora vamos carregar um Sketch para verificarmos se está tudo certo e entendermos o processo Upload para a placa.

+

Upload de código

+

Abra o exemplo Blink. Acesse Arquivo -> Exemplos -> 01.Basics -> Blink:

+

Blink

+

Agora vamos carregar o Sketch para a placa. Clique no botão Carregar:

+

Botão upload

+

Após a compilação será exibida a seguinte mensagem:

+

MEnsagem

+

Conecte a placa na porta USB. Caso a placa ja esteja conectada pressione o botão de reset ao ver essa mensagem. O código será carregado para a placa:

+

Carregando o código

+

Após o upload o LED amarelo da placa passará a piscar.

+

Se você chegou até aqui e não teve nenhum problema, parabéns! Você já pode testar os exemplos aqui na documentação ou fazer os seus próprios projetos.

+

Caso tenha algum problema verifique se consegue resolver com as soluções a seguir.

+

Resolvendo problemas de configuração e upload

+

Em breve

\ No newline at end of file diff --git a/docs/franzininho-diy/picsimlab/primeiros-passos/index.html b/docs/franzininho-diy/picsimlab/primeiros-passos/index.html index c6ebec971..1376660bb 100755 --- a/docs/franzininho-diy/picsimlab/primeiros-passos/index.html +++ b/docs/franzininho-diy/picsimlab/primeiros-passos/index.html @@ -1,19 +1,42 @@ - + - -Franzininho DIY no PICSimLab | Franzininho - - - + +Franzininho DIY no PICSimLab | Franzininho + + + -
-

Franzininho DIY no PICSimLab

PICSimLab é um emulador em tempo real de placas de desenvolvimento com depurador MPLABX/avr-gdb integrado. O PICSimLab suporta alguns microcontroladores PIC e AVR (outros em breve).

tip

Faça o Download do PICSimLab: https://github.com/lcgamboa/picsimlab/releases

A placa Franzininho DIY está disponível para simulação no PICSimLab,

Veja no video abaixo os passos para gravação e depuração da Franzininho DIY no PICSimLab:

Timeline do video

  • 00:00 Introdução
  • 02:23 Arduino IDE (gravação)
  • 05:45 Arduino IDE tinyDebug (mensagens pela serial virtual)
  • 11:20 Sloeber IDE (eclipse) (gravação/depuração)
  • 27:55 avr gcc e gdb no terminal (gravação/depuração)
  • 37:52 MPLABX IDE (gravação/depuração)

Observação

  • Para instalar o suporte ao GDB instalar o suporte ao "arduino megaAVR boards" no Sloeber (passo que deu errado no vídeo)
  • O caminho do GDB dentro da pasta do Sloeber: Sloeber/arduinoPlugin/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-gdb

Downloads

Download do PICSimLab: https://github.com/lcgamboa/picsimlab/releases -Download do MPLABX: https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide -Download do XC8:https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers

- - +

Franzininho DIY no PICSimLab

PICSimLab é um emulador em tempo real de placas de desenvolvimento com depurador MPLABX/avr-gdb integrado. O PICSimLab suporta alguns microcontroladores PIC e AVR (outros em breve).

+

Faça o Download do PICSimLab: https://github.com/lcgamboa/picsimlab/releases

+

A placa Franzininho DIY está disponível para simulação no PICSimLab,

+

Veja no video abaixo os passos para gravação e depuração da Franzininho DIY no PICSimLab:

+ +

Timeline do video

+
    +
  • 00:00 Introdução
  • +
  • 02:23 Arduino IDE (gravação)
  • +
  • 05:45 Arduino IDE tinyDebug (mensagens pela serial virtual)
  • +
  • 11:20 Sloeber IDE (eclipse) (gravação/depuração)
  • +
  • 27:55 avr gcc e gdb no terminal (gravação/depuração)
  • +
  • 37:52 MPLABX IDE (gravação/depuração)
  • +
+ + +

Observação

+
    +
  • Para instalar o suporte ao GDB instalar o suporte ao "arduino megaAVR boards" no Sloeber (passo que deu errado no vídeo)
  • +
  • O caminho do GDB dentro da pasta do Sloeber: Sloeber/arduinoPlugin/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-gdb
  • +
+

Downloads

+

Download do PICSimLab: https://github.com/lcgamboa/picsimlab/releases +Download do MPLABX: https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide +Download do XC8:https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers

\ No newline at end of file diff --git a/docs/franzininho-diy/pisca-led/index.html b/docs/franzininho-diy/pisca-led/index.html index 9af9be71c..50d84b6c7 100755 --- a/docs/franzininho-diy/pisca-led/index.html +++ b/docs/franzininho-diy/pisca-led/index.html @@ -1,17 +1,51 @@ - + - -Pisca LED | Franzininho - - - + +Pisca LED | Franzininho + + + -
-

Pisca LED

O primeiro contato com a programação com o Arduino, você faz o blink (que faz com que o led pisque em intervalos de tempo). Com a Franzininho não é diferente, você pode testar com o próprio LED que ela tem ou caso você queira, pode ligar um LED em uma protoboard. A seguir vamos explicar como fazer um blink com a Franzininho.

resultado Pisca LED

Materiais:

  • Placa Franzininho;
  • Protoboard;
  • LED 3mm;
  • Resistor 330;
  • Jumpers

Circuito

Na protoboard você pode montar o circuito para acionamento do LED da seguinte forma:

Circuito Pisca LED

Sketch

/*
Pisca LED - Blink

Esse exemplo exibe como piscar o LED presente na placa ou um LED externo ligado ao pino 1 da Franzininho em intervalos de 1 segundo.

*/

const int LED = 1; //pino digital conectado ao LED

void setup(){
pinMode(LED,OUTPUT); //pino digital de saída
}

void loop(){
digitalWrite(LED,HIGH); //acende o led da placa
delay(1000); //aguarda um segundo
digitalWrite(LED,LOW); //apaga o led da placa
delay(1000); //aguarda um segundo
}

Simulação

Video de Funcionamento

- - +

Pisca LED

O primeiro contato com a programação com o Arduino, você faz o blink (que faz com que o led pisque em intervalos de tempo). Com a Franzininho não é diferente, você pode testar com o próprio LED que ela tem ou caso você queira, pode ligar um LED em uma protoboard. A seguir vamos explicar como fazer um blink com a Franzininho.

+

resultado Pisca LED

+

Materiais:

+
    +
  • Placa Franzininho;
  • +
  • Protoboard;
  • +
  • LED 3mm;
  • +
  • Resistor 330;
  • +
  • Jumpers
  • +
+

Circuito

+

Na protoboard você pode montar o circuito para acionamento do LED da seguinte forma:

+

Circuito Pisca LED

+

Sketch

+
/*
+  Pisca LED - Blink
+
+  Esse exemplo exibe como piscar o LED presente na placa ou um LED externo ligado ao pino 1 da Franzininho em intervalos de 1 segundo.
+
+*/
+
+const int LED = 1; //pino digital conectado ao LED
+
+void setup(){
+  pinMode(LED,OUTPUT); //pino digital de saída
+}
+
+void loop(){
+  digitalWrite(LED,HIGH);   //acende o led da placa
+  delay(1000);             //aguarda um segundo
+  digitalWrite(LED,LOW);  //apaga o led da placa
+  delay(1000);           //aguarda um segundo
+}
+
+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/docs/franzininho-diy/saidas-pwm/index.html b/docs/franzininho-diy/saidas-pwm/index.html index 16b6e03aa..985f0cb71 100755 --- a/docs/franzininho-diy/saidas-pwm/index.html +++ b/docs/franzininho-diy/saidas-pwm/index.html @@ -1,17 +1,65 @@ - + - -Saídas PWM | Franzininho - - - + +Saídas PWM | Franzininho + + + -
-

Saídas PWM

O que é PWM?

PWM, do inglês Pulse Width Modulation, é uma técnica utilizada por sistemas digitais para variação do valor médio de uma forma de onda periódica. A técnica consiste em manter a frequência de uma onda quadrada fixa e variar o tempo que o sinal fica em nível lógico alto. Esse tempo é chamado de duty cycle, ou seja, o ciclo ativo da forma de onda. No gráfico abaixo são exibidas algumas modulações PWM:

Sinal PWM

Analisando as formas de onda nota-se que a frequência da forma de onda tem o mesmo valor e varia-se o duty cycle da forma de onda. Quando o duty cicle está em 0% o valor médio da saída encontra-se em 0 V e consequentemente para um duty cycle de 100% a saída assume seu valor máximo, que no caso é 5V. Para um duty cycle de 50% a saída assumirá 50% do valor da tensão, 2,5 V, e assim sucessivamente para cada variação no duty cycle. Portanto, para calcular o valor médio da tensão de saída de um sinal PWM pode-se utilizar a seguinte equação:

Vout = (duty cycle/100)* Vcc

Onde:

  • Vout - tensão de saída em V;
  • duty cycle - valor do ciclo ativo do PWM em %;
  • Vcc - tensão de alimentação em V.

PWM pode ser usada para diversas aplicações, como por exemplo:

  • controle de velocidade de motores;
  • variação da luminosidade de leds;
  • geração de sinais analógicos;
  • geração de sinais de áudio.

Fonte: Usando as saídas PWM do Arduino

Na Franzininho temos 3 pinos que pode ser usado como saidas PWM(PWM0,PWM1 e PWM4) conforme pinout:

Pinagem Franzininho DIY

Verificar limitações de uso dos pinos

Função

A função analogWrite() escreve um valor de PWM em um pino digital que possui a função PWM. Para usar o pino como saída PWM é necessário configurá-lo como saída digital.

Sintaxe:

analogWrite(pino, valor);

Parâmetros:

  • pino: número do pino onde será gerado o sinal PWM (0,1,4 na Franzininho);
  • valor: valor médio da tensão de saída que será gerado por PWM, entre 0 e 255, onde 0 representa 0V e 255, 5V.

Exemplo

Vamos controlar o brilho do LED conforme o valor lido no potenciômetro:

Circuito

const byte LED = 1; //pino do LED
const byte POT = A1; //pino do Potenciômetro

void setup() {
pinMode(LED,OUTPUT);
}

void loop() {

int valor = analogRead(POT); // lê o valor do potenciômetro
analogWrite(LED,valor/4); //escreve no LED valor entre 0 e 255

}

Simulação

- - +

Saídas PWM

O que é PWM?

+

PWM, do inglês Pulse Width Modulation, é uma técnica utilizada por sistemas digitais para variação do valor médio de uma forma de onda periódica. A técnica consiste em manter a frequência de uma onda quadrada fixa e variar o tempo que o sinal fica em nível lógico alto. Esse tempo é chamado de duty cycle, ou seja, o ciclo ativo da forma de onda. No gráfico abaixo são exibidas algumas modulações PWM:

+

Sinal PWM

+

Analisando as formas de onda nota-se que a frequência da forma de onda tem o mesmo valor e varia-se o duty cycle da forma de onda. Quando o duty cicle está em 0% o valor médio da saída encontra-se em 0 V e consequentemente para um duty cycle de 100% a saída assume seu valor máximo, que no caso é 5V. Para um duty cycle de 50% a saída assumirá 50% do valor da tensão, 2,5 V, e assim sucessivamente para cada variação no duty cycle. Portanto, para calcular o valor médio da tensão de saída de um sinal PWM pode-se utilizar a seguinte equação:

+

Vout = (duty cycle/100)* Vcc

+

Onde:

+
    +
  • Vout - tensão de saída em V;
  • +
  • duty cycle - valor do ciclo ativo do PWM em %;
  • +
  • Vcc - tensão de alimentação em V.
  • +
+

PWM pode ser usada para diversas aplicações, como por exemplo:

+
    +
  • controle de velocidade de motores;
  • +
  • variação da luminosidade de leds;
  • +
  • geração de sinais analógicos;
  • +
  • geração de sinais de áudio.
  • +
+

Fonte: Usando as saídas PWM do Arduino

+

Na Franzininho temos 3 pinos que pode ser usado como saidas PWM(PWM0,PWM1 e PWM4) conforme pinout:

+

Pinagem Franzininho DIY

+
+

Verificar limitações de uso dos pinos

+
+

Função

+

A função analogWrite() escreve um valor de PWM em um pino digital que possui a função PWM. Para usar o pino como saída PWM é necessário configurá-lo como saída digital.

+

Sintaxe:

+

analogWrite(pino, valor);

+

Parâmetros:

+
    +
  • pino: número do pino onde será gerado o sinal PWM (0,1,4 na Franzininho);
  • +
  • valor: valor médio da tensão de saída que será gerado por PWM, entre 0 e 255, onde 0 representa 0V e 255, 5V.
  • +
+

Exemplo

+

Vamos controlar o brilho do LED conforme o valor lido no potenciômetro:

+

Circuito

+
const byte LED = 1; //pino do LED
+const byte POT = A1; //pino do Potenciômetro
+
+void setup() {
+  pinMode(LED,OUTPUT);
+}
+
+void loop() {
+
+  int valor = analogRead(POT); // lê o valor do potenciômetro
+  analogWrite(LED,valor/4);    //escreve no LED valor entre 0 e 255
+
+}
+
+

Simulação

+
\ No newline at end of file diff --git a/docs/franzininho-diy/semaforo/index.html b/docs/franzininho-diy/semaforo/index.html index 07391a82e..28789ed94 100755 --- a/docs/franzininho-diy/semaforo/index.html +++ b/docs/franzininho-diy/semaforo/index.html @@ -1,17 +1,65 @@ - + - -Semáforo | Franzininho - - - + +Semáforo | Franzininho + + + -
-

Semáforo

Nesse exemplo vamos fazer um semáforo de uma via com Franzininho DIY.

Materiais

  • Placa Franzininho;
  • Protoboard;
  • LED vermelho
  • LED amarelo
  • LED verde
  • 3 Resistores 330 R
  • Jumpers

Circuito

Faça a seguinte ligação no protoboard:

circuito semaforo

Sketch

/*
Franzininho
Exemplo: Semáforo
Nesse exemplo vamos fazer um semáforo de uma via.
*/
int vermelho = 2; //LED Vermelho
int amarelo = 1; //LED Amarelo
int verde = 0; //LED Verde

void setup() {
pinMode(vermelho,OUTPUT); //define LED vermelho como Saída
pinMode(verde,OUTPUT); //define LED verde como Saída
pinMode(amarelo,OUTPUT); //define LED Amarelo como Saída
}

void loop() {
//fase 1
digitalWrite(vermelho,HIGH);
digitalWrite(amarelo,LOW);
digitalWrite(verde,LOW);
delay(5000);
//fase 2
digitalWrite(vermelho,LOW);
digitalWrite(amarelo,HIGH);
digitalWrite(verde,LOW);
delay(1000);
//fase 3
digitalWrite(vermelho,LOW);
digitalWrite(amarelo,LOW);
digitalWrite(verde,HIGH);
delay(5000);
}

Simulação

Video de Funcionamento

- - +

Semáforo

Nesse exemplo vamos fazer um semáforo de uma via com Franzininho DIY.

+

Materiais

+
    +
  • Placa Franzininho;
  • +
  • Protoboard;
  • +
  • LED vermelho
  • +
  • LED amarelo
  • +
  • LED verde
  • +
  • 3 Resistores 330 R
  • +
  • Jumpers
  • +
+

Circuito

+

Faça a seguinte ligação no protoboard:

+

circuito semaforo

+

Sketch

+
/*
+  Franzininho
+  Exemplo: Semáforo
+Nesse exemplo vamos fazer um semáforo de uma via.
+*/
+int vermelho = 2; //LED Vermelho
+int amarelo = 1; //LED Amarelo
+int verde = 0; //LED Verde
+
+void setup() {
+ pinMode(vermelho,OUTPUT); //define LED vermelho como Saída
+ pinMode(verde,OUTPUT);   //define LED verde como Saída
+ pinMode(amarelo,OUTPUT); //define LED Amarelo como Saída
+}
+
+void loop() {
+  //fase 1
+  digitalWrite(vermelho,HIGH);
+  digitalWrite(amarelo,LOW);
+  digitalWrite(verde,LOW);
+  delay(5000);
+  //fase 2
+  digitalWrite(vermelho,LOW);
+  digitalWrite(amarelo,HIGH);
+  digitalWrite(verde,LOW);
+ delay(1000);
+ //fase 3
+  digitalWrite(vermelho,LOW);
+  digitalWrite(amarelo,LOW);
+  digitalWrite(verde,HIGH);
+  delay(5000);
+}
+
+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/docs/franzininho-diy/sensor-luz-ldr/index.html b/docs/franzininho-diy/sensor-luz-ldr/index.html index a8a7e5606..289c329ec 100755 --- a/docs/franzininho-diy/sensor-luz-ldr/index.html +++ b/docs/franzininho-diy/sensor-luz-ldr/index.html @@ -1,17 +1,57 @@ - + - -Sensor de luz com LDR | Franzininho - - - + +Sensor de luz com LDR | Franzininho + + + -
-

Sensor de luz com LDR

Nesse exemplo vamos ler um sensor LDR usando a entrada analógica.

Será exibido um exemplo de funcionamento de uma fotocélula, onde ao escurecer será aceso o LED, como acontece com a luz da rua.

Materiais

  • Placa Franzininho;
  • Protoboard;
  • 1 Resistor 10K;
  • 1 LDR(10K)
  • Jumpers

Circuito

Faça a seguinte ligação no protoboard:

Sketch

/*
Franzininho
Exemplo: Sensor de Luz - LDR
Nesse exemplo vamos ler um sensor LDR usando a entrada analógica. Será exibido um exemplo de funcionamento de uma fotocélula, onde ao escurecer será aceso o LED, como acontece na luz da rua. ;)
*/
//Sensor de luz com LDR
int ledPin = 1; //Led no pino 1 - LED da placa
int ldrPin = A1; //LDR no pino analógico A1
int ldrValor = 0; //Valor lido do LDR

void setup() {
pinMode(ledPin,OUTPUT); //define LED como Saída
}

void loop() {
//ler o valor do LDR
ldrValor = analogRead(ldrPin); //O valor lido será entre 0 e 1023
//se o valor lido for maior que 800, liga o led
if (ldrValor>= 800){
digitalWrite(ledPin, HIGH); //aciona saída
} else { // senão, apaga o led
digitalWrite(ledPin,LOW); //desliga saída
}
delay(100);
}

Simulação

Video de Funcionamento

- - +

Sensor de luz com LDR

Nesse exemplo vamos ler um sensor LDR usando a entrada analógica.

+

Será exibido um exemplo de funcionamento de uma fotocélula, onde ao escurecer será aceso o LED, como acontece com a luz da rua.

+

Materiais

+
    +
  • Placa Franzininho;
  • +
  • Protoboard;
  • +
  • 1 Resistor 10K;
  • +
  • 1 LDR(10K)
  • +
  • Jumpers
  • +
+

Circuito

+

Faça a seguinte ligação no protoboard:

+

+

Sketch

+
/*
+  Franzininho
+  Exemplo: Sensor de Luz - LDR
+ Nesse exemplo vamos ler um sensor LDR usando a entrada analógica. Será exibido um exemplo de funcionamento de uma fotocélula, onde ao escurecer será aceso o LED, como acontece na luz da rua. ;)
+*/
+//Sensor de luz com LDR
+int ledPin = 1; //Led no pino 1 - LED da placa
+int ldrPin = A1; //LDR no pino analógico A1
+int ldrValor = 0; //Valor lido do LDR
+
+void setup() {
+ pinMode(ledPin,OUTPUT); //define LED como Saída
+}
+
+void loop() {
+ //ler o valor do LDR
+ ldrValor = analogRead(ldrPin); //O valor lido será entre 0 e 1023
+ //se o valor lido for maior que 800, liga o led
+ if (ldrValor>= 800){
+   digitalWrite(ledPin, HIGH);      //aciona saída
+ } else {  // senão, apaga o led            
+   digitalWrite(ledPin,LOW);        //desliga saída
+ }
+ delay(100);
+}
+
+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/docs/franzininho-diy/sobre/index.html b/docs/franzininho-diy/sobre/index.html index 520bb300c..dd63e6d14 100755 --- a/docs/franzininho-diy/sobre/index.html +++ b/docs/franzininho-diy/sobre/index.html @@ -1,18 +1,59 @@ - + - -Placa Franzininho DIY | Franzininho - - - + +Placa Franzininho DIY | Franzininho + + + -
-

Placa Franzininho DIY

A Franzininho DIY foi desenvolvida com a proposta de “Faça você mesmo” e com base na plataforma Arduino. O objetivo é que as pessoas que a adquirem, trilhem a jornada do Maker de eletrônica, montando e programando a sua própria placa compatível com Arduino.

Placa Franzininho DIY

Ela é fornecida em formato de Kit para soldar, não recomendamos que você adquira a Franzininho DIY já soldada, pois o objetivo pedagógico compreende a jornada de montagem.

Kit Franzininho DIY

É uma excelente opção para oficinas de Soldagem eletrônica e primeiros passos com a programação Arduino. Com componentes fáceis de identificar e também de soldar, permite que qualquer pessoa com pouco ou nenhum conhecimento em soldagem consiga montar a sua placa tranquilamente e criar em pouco tempo projetos como, automação, robôs, jogos entre outros(Veja os exemplos em nossa documentação).

Oficina Franzininho DIY

A placa é baseada no microcontrolador ATtiny85 e foi criada para fins educacionais, é voltada para estudantes de curso técnico e engenharia, makers e hobbistas que desejam aprender sobre prototipagem, soldagem, eletrônica e programação em uma verdadeira experiência DIY.

A placa possui 5 pinos de I/O, LED indicador de Alimentação, LED de uso geral, conector USB para alimentação e gravação, conector para alimentação externa e botão de Reset.

Pinout

pinagem Franzininho DIY

Versões de placas

Houve uma alteração da numeração dos pinos 4 e 5 no silk a partir da V2RV2. -Ainda é necessário ajustar no software

Resumo de recursos

  • Microcontrolador: ATtiny85
  • Pinos de I/O: até 6
  • Entradas Analógicas: até 4
  • PWM: 3
  • I2C: 1
  • SPI: 1
  • Tensão de funcionamento: 5V
  • Alimentação: USB(5V) ou externa (de 7,5V à 9V)

Documentação

Ela pode ser programada diretamente na IDE do Arduino inclusive com Ardublock. também pode ser programada em linguagem C usando IDE mais avançadas.

Projeto Open Hardware

O projeto é open hardware e foi publicado em CC-BY-SA-4.0

A Franzininho DIY está certificada na OSHWA com UID BR000003

BR000003

Importante

Para reprodução do projeto ou derivações, é importante verificar os requisitos da licença , copyright e boas práticas.

Onde comprar

Varejo

Atacado

Entrar em contato: contato@franzininho.com.br

- - +

Placa Franzininho DIY

A Franzininho DIY foi desenvolvida com a proposta de “Faça você mesmo” e com base na plataforma Arduino. O objetivo é que as pessoas que a adquirem, trilhem a jornada do Maker de eletrônica, montando e programando a sua própria placa compatível com Arduino.

+

Placa Franzininho DIY

+

Ela é fornecida em formato de Kit para soldar, não recomendamos que você adquira a Franzininho DIY já soldada, pois o objetivo pedagógico compreende a jornada de montagem.

+

Kit Franzininho DIY

+

É uma excelente opção para oficinas de Soldagem eletrônica e primeiros passos com a programação Arduino. Com componentes fáceis de identificar e também de soldar, permite que qualquer pessoa com pouco ou nenhum conhecimento em soldagem consiga montar a sua placa tranquilamente e criar em pouco tempo projetos como, automação, robôs, jogos entre outros(Veja os exemplos em nossa documentação).

+

Oficina Franzininho DIY

+

A placa é baseada no microcontrolador ATtiny85 e foi criada para fins educacionais, é voltada para estudantes de curso técnico e engenharia, makers e hobbistas que desejam aprender sobre prototipagem, soldagem, eletrônica e programação em uma verdadeira experiência DIY.

+

A placa possui 5 pinos de I/O, LED indicador de Alimentação, LED de uso geral, conector USB para alimentação e gravação, conector para alimentação externa e botão de Reset.

+

Pinout

+

pinagem Franzininho DIY

+

Houve uma alteração da numeração dos pinos 4 e 5 no silk a partir da V2RV2. +Ainda é necessário ajustar no software

+

Resumo de recursos

+
    +
  • Microcontrolador: ATtiny85
  • +
  • Pinos de I/O: até 6
  • +
  • Entradas Analógicas: até 4
  • +
  • PWM: 3
  • +
  • I2C: 1
  • +
  • SPI: 1
  • +
  • Tensão de funcionamento: 5V
  • +
  • Alimentação: USB(5V) ou externa (de 7,5V à 9V)
  • +
+

Documentação

+

Ela pode ser programada diretamente na IDE do Arduino inclusive com Ardublock. também pode ser programada em linguagem C usando IDE mais avançadas.

+ +

Projeto Open Hardware

+

O projeto é open hardware e foi publicado em CC-BY-SA-4.0

+

A Franzininho DIY está certificada na OSHWA com UID BR000003

+

BR000003

+

Para reprodução do projeto ou derivações, é importante verificar os requisitos da licença , copyright e boas práticas.

+

Onde comprar

+

Varejo

+ +

Atacado

+

Entrar em contato: contato@franzininho.com.br

\ No newline at end of file diff --git a/docs/franzininho-diy/tecla-liga-desliga/index.html b/docs/franzininho-diy/tecla-liga-desliga/index.html index 41fd08674..35c3d29ab 100755 --- a/docs/franzininho-diy/tecla-liga-desliga/index.html +++ b/docs/franzininho-diy/tecla-liga-desliga/index.html @@ -1,17 +1,56 @@ - + - -Tecla Liga/Desliga | Franzininho - - - + +Tecla Liga/Desliga | Franzininho + + + -
-

Tecla Liga/Desliga

Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos.

Materiais

  • Placa Franzininho;
  • Protoboard;
  • LED 3mm;
  • 1 Resistor 3300;
  • 1 Resistor de 1K;
  • 1 Botão;
  • Jumpers;

Circuito

No protoboard você deve inserir o LED, resistores e o botão, conforme a imagem abaixo:

Circuito

Sketch

/*
Franzininho
Exemplo: Tecla liga/desliga
Esse exemplo exibe como fazer ligar e desligar uma saída através de uma tecla
*/
const int LED = 1; //pino para o LED
const int BOTAO = 2; //pino para o botão
int estadoAnteriorBotao = 0; // armazena o estado anterior do botão

void setup(){
pinMode(LED,OUTPUT); //o LED é uma saída
pinMode(BOTAO,INPUT); //o BOTAO é uma entrada
}

void loop (){
int estadoAtualBT= digitalRead(BOTAO); // Lê estado do botão
delay(10);

if ((estadoAtualBT != estadoAnteriorBotao)&& (estadoAtualBT == LOW)){ //Se o botão foi pressionado e o seu estado mudou
digitalWrite(LED,!digitalRead(LED)); //inverte estado do LED
}
estadoAnteriorBotao = estadoAtualBT; //salva o estado do botão para comparar na próxima leitura
}

Simulação

Video de Funcionamento

- - +

Tecla Liga/Desliga

Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos.

+

Materiais

+
    +
  • Placa Franzininho;
  • +
  • Protoboard;
  • +
  • LED 3mm;
  • +
  • 1 Resistor 3300;
  • +
  • 1 Resistor de 1K;
  • +
  • 1 Botão;
  • +
  • Jumpers;
  • +
+

Circuito

+

No protoboard você deve inserir o LED, resistores e o botão, conforme a imagem abaixo:

+

Circuito

+

Sketch

+
/*
+  Franzininho
+  Exemplo: Tecla liga/desliga
+  Esse exemplo exibe como fazer ligar e desligar uma saída através de uma tecla
+*/
+const int LED = 1; //pino para o LED
+const int BOTAO = 2; //pino para o botão
+int estadoAnteriorBotao = 0;   // armazena o estado anterior do botão
+
+void setup(){
+  pinMode(LED,OUTPUT); //o LED é uma saída
+  pinMode(BOTAO,INPUT); //o BOTAO é uma entrada
+}
+
+void loop (){
+ int estadoAtualBT= digitalRead(BOTAO);      // Lê estado do botão
+ delay(10);
+
+if ((estadoAtualBT != estadoAnteriorBotao)&& (estadoAtualBT == LOW)){       //Se o botão foi pressionado e o seu estado mudou
+  digitalWrite(LED,!digitalRead(LED)); //inverte estado do LED
+}
+  estadoAnteriorBotao = estadoAtualBT;  //salva o estado do botão para comparar na próxima leitura
+}
+
+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/docs/franzininho-diy/theremim/index.html b/docs/franzininho-diy/theremim/index.html index e985c4b19..67690e8f9 100755 --- a/docs/franzininho-diy/theremim/index.html +++ b/docs/franzininho-diy/theremim/index.html @@ -1,17 +1,53 @@ - + - -Theremim | Franzininho - - - + +Theremim | Franzininho + + + -
-

Theremim

O Theremim é um instrumento musical eletrônico controlado sem contato físico. O nome vem do seu inventor, Léon Theremin, que patenteou o dispositivo em 1928.

Nesse tutorial você fará uma versão simplificada do Theremim usando a Franzininho DIY.

Materiais necessários

  • Franzininho DIY
  • 2 LDR 10K
  • BC548
  • Resistor 330 R
  • Alto falante 8 ohm

Circuito

Circuito Theremim

Código

O código a seguir ler o valor da entrada analógica e atua na saída do speaker:

/*
* Theremim Franzininho
* Autor: Fábio Souza
* Data: 10/09/2018
*/
int speaker = 0; // pino de saída do falante
int sensor = 1;

void setup()
{
pinMode(speaker, OUTPUT);
}

// Theremin
void loop()
{
digitalWrite(speaker, HIGH);
delayMicroseconds(analogRead(sensor)<<2);
digitalWrite(speaker, LOW);
delayMicroseconds(analogRead(sensor)<<2);
}

Simulação

Video de Funcionamento

- - +

Theremim

O Theremim é um instrumento musical eletrônico controlado sem contato físico. O nome vem do seu inventor, Léon Theremin, que patenteou o dispositivo em 1928.

+

Nesse tutorial você fará uma versão simplificada do Theremim usando a Franzininho DIY.

+

Materiais necessários

+
    +
  • Franzininho DIY
  • +
  • 2 LDR 10K
  • +
  • BC548
  • +
  • Resistor 330 R
  • +
  • Alto falante 8 ohm
  • +
+

Circuito

+

Circuito Theremim

+

Código

+

O código a seguir ler o valor da entrada analógica e atua na saída do speaker:

+
/*
+ * Theremim Franzininho
+ * Autor: Fábio Souza
+ * Data: 10/09/2018
+ */
+int speaker = 0; // pino de saída do falante
+int sensor = 1;
+
+void setup()
+{
+ pinMode(speaker, OUTPUT);
+}
+
+// Theremin
+void loop()
+{
+ digitalWrite(speaker, HIGH);
+ delayMicroseconds(analogRead(sensor)<<2);
+ digitalWrite(speaker, LOW);
+ delayMicroseconds(analogRead(sensor)<<2);
+}
+
+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/docs/franzininho-diy/tutoriais-i2c/index.html b/docs/franzininho-diy/tutoriais-i2c/index.html index 20bf25b21..b270b379f 100755 --- a/docs/franzininho-diy/tutoriais-i2c/index.html +++ b/docs/franzininho-diy/tutoriais-i2c/index.html @@ -1,17 +1,14 @@ - + - -I2C | Franzininho - - - + +I2C | Franzininho + + + - - - + \ No newline at end of file diff --git a/docs/franzininho-diy/wokwi/primeiros-passos/index.html b/docs/franzininho-diy/wokwi/primeiros-passos/index.html index 1c7de73c4..ddbf3fbbc 100755 --- a/docs/franzininho-diy/wokwi/primeiros-passos/index.html +++ b/docs/franzininho-diy/wokwi/primeiros-passos/index.html @@ -1,20 +1,127 @@ - + - -Como simular a Franzininho DIY no Wokwi | Franzininho - - - + +Como simular a Franzininho DIY no Wokwi | Franzininho + + + -
-

Como simular a Franzininho DIY no Wokwi

Wokwi é um simulador online para Arduino e Eletrônica. Foi desenvolvido para makers, por makers.

Você pode usar o Wokwi para aprender a programar o Franzininho DIY, criar protótipos de suas idéias, e compartilhar seus projetos com outros makers.

Wokwi Franzininho DIY

Dica

Use o Template do Franzininho DIY clicando na imagem acima para começar um novo projeto no Wokwi.

Primeiros passos

Vamos começar o nosso programa acendendo o LED1 do Franzinino DIY no simulador, para isso copie ou digite o código abaixo no editor do Wokwi conforme imagem abaixo.

Wokwi Code Editor

Código do exemplo 1

const byte LED1 = 1;

void setup() {
pinMode(LED1, OUTPUT); // Configura como pino de saída digital
}

void loop() {
digitalWrite(LED1, HIGH); // Acende o LED interno
delay(1000); // Aguarda um segundo
digitalWrite(LED1, LOW); // Apaga o LED interno
delay(1000); // Aguarda um segundo
}

Em seguida, vamos executar o nosso programa clicando no botão verde conforme a imagem abaixo.

Wokwi Simulation

Peças

Vamos chamar os novos módulos ou componentes de peças, que seriam como por exemplo, as peças de um jogo de montagem, onde vamos adicionando cada uma para depois fazermos as ligações entre elas.

Cada projeto de simulação contém um arquivo diagram.json localizado no editor de código. Este arquivo define as peças -que serão usadas para a simulação, suas propriedades e as conexões entre os componentes.

O editor de diagramas fornece uma maneira interativa de editar seu diagrama: adicionando peças à simulação e definindo as conexões entre elas.

Adicionando uma nova peça

Para adicionar uma nova peça, clique no botão roxo "+" na parte superior do editor de diagramas.

Você verá um menu com uma lista de peças que você pode adicionar. Escolha uma peça para adicioná-la. A peça será adicionada na posição (0, 0), e então você pode arrastá-la para a posição desejada, conforme imagem abaixo.

Wokwi Add part

Rotacionando uma peça

Gire uma peça clicando nela (para selecioná-la) e pressionando "R". A peça girará 90 graus no sentido horário. Se você precisar girar uma peça -com um valor diferente (por exemplo, 45 graus), você pode conseguir isso editando o arquivo diagram.json no editor de código.

Removendo uma peça

Exclua uma peça clicando nela (para selecioná-la) e em seguida pressionando a tecla Delete.

Ligações

Criação de uma ligação entre as duas peças

Para criar um novo fio entre duas peças, clique em um dos pinos que deseja conectar. Em seguida, clique no segundo pino (alvo). Isso criará o fio.

Wokwi Add part

Se quiser que o fio vá de uma maneira específica, você pode guiá-lo clicando para onde deseja que ele vá após selecionar o primeiro pino.

Para cancelar um novo fio (exclua-o sem selecionar um pino de destino), clique com o botão direito do mouse ou pressione Escape.

Para excluir uma ligação apenas clique com o botão esquerdo do mouse no fio que ele será removido.

Wokwi Add part

Ligação entre os fios

Para fazer mais de uma ligação na mesma peça, apenas arraste o fio até o pino da peça, conforme a imagem abaixo.

Wokwi Add part

Atenção

Cuidado para não clicar em cima de um fio existente ao arrastar o segundo fio e removê-lo sem querer. Procure sempre clicar em cima do pino da peça.

Código do exemplo 2

const byte BUTTON = 0;
const byte LED1 = 1;

int buttonState = 0;

void setup() {
pinMode(LED1, OUTPUT); // Configura como pino de saída digital
pinMode(BUTTON, INPUT); // Configura como pino de entrada
}

void loop() {
// Lê o estado do botão
buttonState = digitalRead(BUTTON);

// Verifica se está pressionado
if (buttonState == LOW) {
digitalWrite(LED1, HIGH); // Acende o LED interno
} else {
digitalWrite(LED1, LOW); // Apaga o LED interno
}
}

Mudando a cor de um fio

A cor dos novos fios é determinada automaticamente pela função do pino: os fios que começam nos pinos de aterramento são pretos e os outros fios são verdes.

O editor interativo não oferece suporte para definir a cor dos fios. Você pode, no entanto, alterar a cor de qualquer fio editando o diagram.json, saiba mais.

Atalhos do teclado

A tabela a seguir resume os atalhos do teclado:

TeclaFunção
-Reduz o zoom
+Aumenta o zoom
RGira a peça selecionada
DeleteRemove a peça selecionada
?Abre a documentação da peça selecionada
EscapeCancela o fio (no modo de fiação)

Usuários do Firefox: se os atalhos do teclado não funcionarem, certifique-se de que a configuração "Pesquisar texto ao começar a digitar" esteja desabilitada.

Desfazer / Refazer

Qualquer mudança que você fizer no editor interativo também se refletirá em diagram.json.

O editor interativo não tem o recurso de desfazer no momento (há uma solicitação aberta para isso).

Você ainda pode obter o histórico completo de Desfazer se selecionar a guia "diagram.json" no editor de código. Quaisquer alterações feitas no editor de diagramas interativo -refletirá imediatamente no editor de código e você poderá desfazê-los clicando no editor de código e pressionando Ctrl+Z.

Observe que isso só funciona se a guia "diagram.json" estiver ativa enquanto você faz alterações. Esta é uma solução temporária até implementarmos o Desfazer no editor de diagramas interativo.

Saiba mais

Caso queira saber mais sobre outras funcionalidades do simulador, dê uma olhada na lista abaixo. Você pode também consultar as peças na lista de Referência do Diagrama, disponível na documentação do Wokwi.

Exemplos no Simulador

- - +

Como simular a Franzininho DIY no Wokwi

Wokwi é um simulador online para Arduino e Eletrônica. Foi desenvolvido para makers, por makers.

+

Você pode usar o Wokwi para aprender a programar o Franzininho DIY, criar protótipos de suas idéias, e compartilhar seus projetos com outros makers.

+

Wokwi Franzininho DIY

+

Use o Template do Franzininho DIY clicando na imagem acima para começar um novo projeto no Wokwi.

+

Primeiros passos

+

Vamos começar o nosso programa acendendo o LED1 do Franzinino DIY no simulador, para isso copie ou digite o código abaixo no editor do Wokwi conforme imagem abaixo.

+

Wokwi Code Editor

+

Código do exemplo 1

+
const byte LED1 = 1;
+
+void setup() {
+  pinMode(LED1, OUTPUT);     // Configura como pino de saída digital
+}
+
+void loop() {
+  digitalWrite(LED1, HIGH);  // Acende o LED interno
+  delay(1000);               // Aguarda um segundo
+  digitalWrite(LED1, LOW);   // Apaga o LED interno
+  delay(1000);               // Aguarda um segundo
+}
+
+

Em seguida, vamos executar o nosso programa clicando no botão verde conforme a imagem abaixo.

+

Wokwi Simulation

+

Peças

+

Vamos chamar os novos módulos ou componentes de peças, que seriam como por exemplo, as peças de um jogo de montagem, onde vamos adicionando cada uma para depois fazermos as ligações entre elas.

+

Cada projeto de simulação contém um arquivo diagram.json localizado no editor de código. Este arquivo define as peças +que serão usadas para a simulação, suas propriedades e as conexões entre os componentes.

+

O editor de diagramas fornece uma maneira interativa de editar seu diagrama: adicionando peças à simulação e definindo as conexões entre elas.

+

Adicionando uma nova peça

+

Para adicionar uma nova peça, clique no botão roxo "+" na parte superior do editor de diagramas.

+

Você verá um menu com uma lista de peças que você pode adicionar. Escolha uma peça para adicioná-la. A peça será adicionada na posição (0, 0), e então você pode arrastá-la para a posição desejada, conforme imagem abaixo.

+

Wokwi Add part

+

Rotacionando uma peça

+

Gire uma peça clicando nela (para selecioná-la) e pressionando "R". A peça girará 90 graus no sentido horário. Se você precisar girar uma peça +com um valor diferente (por exemplo, 45 graus), você pode conseguir isso editando o arquivo diagram.json no editor de código.

+

Removendo uma peça

+

Exclua uma peça clicando nela (para selecioná-la) e em seguida pressionando a tecla Delete.

+

Ligações

+

Criação de uma ligação entre as duas peças

+

Para criar um novo fio entre duas peças, clique em um dos pinos que deseja conectar. Em seguida, clique no segundo pino (alvo). Isso criará o fio.

+

Wokwi Add part

+

Se quiser que o fio vá de uma maneira específica, você pode guiá-lo clicando para onde deseja que ele vá após selecionar o primeiro pino.

+

Para cancelar um novo fio (exclua-o sem selecionar um pino de destino), clique com o botão direito do mouse ou pressione Escape.

+

Para excluir uma ligação apenas clique com o botão esquerdo do mouse no fio que ele será removido.

+

Wokwi Add part

+

Ligação entre os fios

+

Para fazer mais de uma ligação na mesma peça, apenas arraste o fio até o pino da peça, conforme a imagem abaixo.

+

Wokwi Add part

+

Cuidado para não clicar em cima de um fio existente ao arrastar o segundo fio e removê-lo sem querer. Procure sempre clicar em cima do pino da peça.

+

Código do exemplo 2

+
const byte BUTTON = 0;
+const byte LED1 = 1;
+
+int buttonState = 0;
+
+void setup() {
+  pinMode(LED1, OUTPUT);      // Configura como pino de saída digital
+  pinMode(BUTTON, INPUT);     // Configura como pino de entrada
+}
+
+void loop() {
+  // Lê o estado do botão
+  buttonState = digitalRead(BUTTON);
+
+  // Verifica se está pressionado
+  if (buttonState == LOW) {
+    digitalWrite(LED1, HIGH); // Acende o LED interno
+  } else {
+    digitalWrite(LED1, LOW);  // Apaga o LED interno
+  }
+}
+
+

Mudando a cor de um fio

+

A cor dos novos fios é determinada automaticamente pela função do pino: os fios que começam nos pinos de aterramento são pretos e os outros fios são verdes.

+

O editor interativo não oferece suporte para definir a cor dos fios. Você pode, no entanto, alterar a cor de qualquer fio editando o diagram.json, saiba mais.

+

Atalhos do teclado

+

A tabela a seguir resume os atalhos do teclado:

+
TeclaFunção
-Reduz o zoom
+Aumenta o zoom
RGira a peça selecionada
DeleteRemove a peça selecionada
?Abre a documentação da peça selecionada
EscapeCancela o fio (no modo de fiação)
+

Usuários do Firefox: se os atalhos do teclado não funcionarem, certifique-se de que a configuração "Pesquisar texto ao começar a digitar" esteja desabilitada.

+

Desfazer / Refazer

+

Qualquer mudança que você fizer no editor interativo também se refletirá em diagram.json.

+

O editor interativo não tem o recurso de desfazer no momento (há uma solicitação aberta para isso).

+

Você ainda pode obter o histórico completo de Desfazer se selecionar a guia "diagram.json" no editor de código. Quaisquer alterações feitas no editor de diagramas interativo +refletirá imediatamente no editor de código e você poderá desfazê-los clicando no editor de código e pressionando Ctrl+Z.

+

Observe que isso só funciona se a guia "diagram.json" estiver ativa enquanto você faz alterações. Esta é uma solução temporária até implementarmos o Desfazer no editor de diagramas interativo.

+

Saiba mais

+

Caso queira saber mais sobre outras funcionalidades do simulador, dê uma olhada na lista abaixo. Você pode também consultar as peças na lista de Referência do Diagrama, disponível na documentação do Wokwi.

+ +

Exemplos no Simulador

+
\ No newline at end of file diff --git a/docs/franzininho-tiny/franzininho-tiny/index.html b/docs/franzininho-tiny/franzininho-tiny/index.html index dbd77ae9e..93fcd5027 100755 --- a/docs/franzininho-tiny/franzininho-tiny/index.html +++ b/docs/franzininho-tiny/franzininho-tiny/index.html @@ -1,17 +1,46 @@ - + - -Placa Franzininho Tiny | Franzininho - - - + +Placa Franzininho Tiny | Franzininho + + + -
-

Placa Franzininho Tiny

A Franzininho Tiny veio para dar squencia ao excelente trabalho feito pela Franzininho DIY. Em muitas aplicações a soldagem não é viável, assim, muitas vezes foram solicitadas placas Franzininho DIY soldadas, o que não era a proposta da placa no formato DIY.

Para facilitar, escolhemos um microcontrolador que mantenha a compatibilidade com a Franzininho DIY, porém com mais opções de pinos e no formato SMD.

A Franzininho Tiny tem um form factor compatível com protoboard e já vem montada e pronta para programar:

Franzininho Tiny

Resumo de recursos

  • Microcontrolador: ATtiny841
  • Pinos de I/O: até 11 (alguns estão ligados a USB)
  • Entradas Analógicas: até 9
  • PWM: 4
  • I2C: 1
  • SPI: 1
  • UART: 1
  • Tensão de funcionamento: 5V
  • Alimentação: USB(5V) ou externa (de 7,5V à 9V)

Documentação

Projeto Open Hardware

Assim como a Franzininho DIY, a placa Franzininho tiny também foi publicada como projeto de hardware aberto. Para essa placa foi escolhida a CERN Open Hardware Licence, uma licenças mais adequada para projetos de hardware.

Conforme definido no “how to” da licença, no repositório do projeto estão incluídos os seguintes arquivos:

  • LICENSE.TXT
  • cern_ohl_v_1_2_howto.pdf
  • CHANGES.TXT
  • COPYRIGHT.TXT
  • PRODUCT.TXT
Importante

Para reprodução do projeto ou derivações, é importante verificar os requisitos da licença , copyright e boas práticas.

Onde comprar

Entrar em contato: contato@franzininho.com.br

- - +

Placa Franzininho Tiny

A Franzininho Tiny veio para dar squencia ao excelente trabalho feito pela Franzininho DIY. Em muitas aplicações a soldagem não é viável, assim, muitas vezes foram solicitadas placas Franzininho DIY soldadas, o que não era a proposta da placa no formato DIY.

+

Para facilitar, escolhemos um microcontrolador que mantenha a compatibilidade com a Franzininho DIY, porém com mais opções de pinos e no formato SMD.

+

A Franzininho Tiny tem um form factor compatível com protoboard e já vem montada e pronta para programar:

+

Franzininho Tiny

+

Resumo de recursos

+
    +
  • Microcontrolador: ATtiny841
  • +
  • Pinos de I/O: até 11 (alguns estão ligados a USB)
  • +
  • Entradas Analógicas: até 9
  • +
  • PWM: 4
  • +
  • I2C: 1
  • +
  • SPI: 1
  • +
  • UART: 1
  • +
  • Tensão de funcionamento: 5V
  • +
  • Alimentação: USB(5V) ou externa (de 7,5V à 9V)
  • +
+

Documentação

+ +

Projeto Open Hardware

+

Assim como a Franzininho DIY, a placa Franzininho tiny também foi publicada como projeto de hardware aberto. Para essa placa foi escolhida a CERN Open Hardware Licence, uma licenças mais adequada para projetos de hardware.

+

Conforme definido no “how to” da licença, no repositório do projeto estão incluídos os seguintes arquivos:

+
    +
  • LICENSE.TXT
  • +
  • cern_ohl_v_1_2_howto.pdf
  • +
  • CHANGES.TXT
  • +
  • COPYRIGHT.TXT
  • +
  • PRODUCT.TXT
  • +
+

Para reprodução do projeto ou derivações, é importante verificar os requisitos da licença , copyright e boas práticas.

+

Onde comprar

+

Entrar em contato: contato@franzininho.com.br

\ No newline at end of file diff --git a/docs/franzininho-wifi-lab01/index.html b/docs/franzininho-wifi-lab01/index.html index ed3fc825f..794a36158 100755 --- a/docs/franzininho-wifi-lab01/index.html +++ b/docs/franzininho-wifi-lab01/index.html @@ -1,17 +1,76 @@ - + - -Franzininho WiFi LAB01 | Franzininho - - - + +Franzininho WiFi LAB01 | Franzininho + + + -
-

Franzininho WiFi LAB01

A Franzininho WiFi LAB01 é uma placa de expansão para a placa Franzininho WiFi, com a proposta de ser um laboratório para auxiliar no ensino e aprendizagem do ESP32, com base na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experiencias.

Franzininho WiFi LAB01

Nesse material você encontra os detalhes do hardware da Franzininho WiFi LAB01.

Saiba mais sobre a Franzininho WiFi: Placa Franzininho WiFi

Franzininho WiFi LAB01

A placa Franzininho WiFi LAB01 foi desenvolvida para facilitar o ensino e aprendizagem em diversos níveis e abordagens com a Franzininho WiFi.

Essa placa é o laboratório base para os exemplos apresentados com a Franzininho WiFi sendo usada em oficinas, workshops e formações em diversos níveis de abordagem, desde iniciantes até desenvolvedores experientes.

Recursos da Franzininho WiFi LAB01

  • Conector para placa Franzininho WiFi
  • 6 chaves tácteis
  • Conector para display IPS 240×240 ST7789
  • Conector para display OLED 0.96 SSD1306
  • DHT11
  • LDR
  • LED RGB
  • BUZZER
  • Expansões:
    • 5 x I2C
    • 2 UARTs
    • Alimentação (5V, GND)
    • 6x Conector para garras jacarés (TOUCH, entrada DIGITAL)
    • Todos os I/Os da Franzininho WiFi
  • JTAG
  • Possibilidade de desabilitar/habilitar recursos para uso dos I/Os por outro recurso

Resumo dos recursos da placa

Recursos da Franzininho WiFi LAB01

Esquemático

Franzininho-wifi-lab01-esquematico.png

Licença

A Franzininho WiFi LAB01 é um projeto open source e está disponível sob a licença CERN Open Hardware License.

O projeto, criado em fevereiro de 2022 no EasyEDA, está disponível em: https://oshwlab.com/fabiosouza/shield-franzininho-wifi.

Usando os pinos de expansão da placa

A placa Franzininho WiFi LAB01 foi pensanda para o uso dos recursos existentes na placa e também dando a possibilidade para adicionar recursos externos. Por exemplo, se voce precisar adicionar um rele para acionamento de potência, ou outro sensor, você pode usar os pinos de expansão da placa.

Franzininho-wifi-lab01-expansoes.png

Caso o pino da Franzininho WiFi que voce queira usar esteja sendo usado por um dos recursos onboard da placa, voce pode desabilitar através dos jumper correspondente:

Franzininho-wifi-lab01-jumpers.png

Além disso, ela possui alguns barramentos de comunicações que facilitam a conexão de módulos externos. É posivel ligar 5 módulos I2C e 2 UARTs#

Mapa de pinos Franzininho vs Recurso onboard

PinoRecurso
I01LDR
I02BT6
IO3BT5
IO4BT4
IO5BT3
IO6BT2
IO7BT1
IO8OLED_SDA
IO9OLED_SCL
IO10TFT_DC
IO11TFT_RES
IO12LED AZUL
IO13LED VERDE
IO14LED VERMELHO
IO15DHT11
IO17BUZZER
IO35TFT_SDA
IO36TFT_scl

JTAG

A Franzininho WiFI LAB01 possui conector para JTAG compatível com o ESP-PROG

Franzininho-wifi-lab01-jtag.png

Como Programar?

Conforme apresentado no artigo “Como programar a Franzininho WiFi? Descubra agora mesmo!“, a Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns são:

  • ESP-IDF, Arduino, CircuitPython e MicroPython

Exemplos de código:

Onde adquirir a placa?

Adquira sua placa em: https://cursos.embarcados.com.br/cursos/franzininho-wifi-lab01/

Se você quiser equipar o laboratório da sua instituição com essa placa, entre em contato conosco para reservar com antecedência antes da produção.

Contato: contato@embarcados.com.br

- - +

Franzininho WiFi LAB01

A Franzininho WiFi LAB01 é uma placa de expansão para a placa Franzininho WiFi, com a proposta de ser um laboratório para auxiliar no ensino e aprendizagem do ESP32, com base na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experiencias.

+

Franzininho WiFi LAB01

+

Nesse material você encontra os detalhes do hardware da Franzininho WiFi LAB01.

+

Saiba mais sobre a Franzininho WiFi: Placa Franzininho WiFi

+

Franzininho WiFi LAB01

+

A placa Franzininho WiFi LAB01 foi desenvolvida para facilitar o ensino e aprendizagem em diversos níveis e abordagens com a Franzininho WiFi.

+

Essa placa é o laboratório base para os exemplos apresentados com a Franzininho WiFi sendo usada em oficinas, workshops e formações em diversos níveis de abordagem, desde iniciantes até desenvolvedores experientes.

+

Recursos da Franzininho WiFi LAB01

+
    +
  • Conector para placa Franzininho WiFi
  • +
  • 6 chaves tácteis
  • +
  • Conector para display IPS 240×240 ST7789
  • +
  • Conector para display OLED 0.96 SSD1306
  • +
  • DHT11
  • +
  • LDR
  • +
  • LED RGB
  • +
  • BUZZER
  • +
  • Expansões: +
      +
    • 5 x I2C
    • +
    • 2 UARTs
    • +
    • Alimentação (5V, GND)
    • +
    • 6x Conector para garras jacarés (TOUCH, entrada DIGITAL)
    • +
    • Todos os I/Os da Franzininho WiFi
    • +
    +
  • +
  • JTAG
  • +
  • Possibilidade de desabilitar/habilitar recursos para uso dos I/Os por outro recurso
  • +
+

Resumo dos recursos da placa

+

Recursos da Franzininho WiFi LAB01

+

Esquemático

+

Franzininho-wifi-lab01-esquematico.png

+

Licença

+

A Franzininho WiFi LAB01 é um projeto open source e está disponível sob a licença CERN Open Hardware License.

+

O projeto, criado em fevereiro de 2022 no EasyEDA, está disponível em: https://oshwlab.com/fabiosouza/shield-franzininho-wifi.

+

Usando os pinos de expansão da placa

+

A placa Franzininho WiFi LAB01 foi pensanda para o uso dos recursos existentes na placa e também dando a possibilidade para adicionar recursos externos. Por exemplo, se voce precisar adicionar um rele para acionamento de potência, ou outro sensor, você pode usar os pinos de expansão da placa.

+

Franzininho-wifi-lab01-expansoes.png

+

Caso o pino da Franzininho WiFi que voce queira usar esteja sendo usado por um dos recursos onboard da placa, voce pode desabilitar através dos jumper correspondente:

+

Franzininho-wifi-lab01-jumpers.png

+

Além disso, ela possui alguns barramentos de comunicações que facilitam a conexão de módulos externos. É posivel ligar 5 módulos I2C e 2 UARTs#

+

Mapa de pinos Franzininho vs Recurso onboard

+
PinoRecurso
I01LDR
I02BT6
IO3BT5
IO4BT4
IO5BT3
IO6BT2
IO7BT1
IO8OLED_SDA
IO9OLED_SCL
IO10TFT_DC
IO11TFT_RES
IO12LED AZUL
IO13LED VERDE
IO14LED VERMELHO
IO15DHT11
IO17BUZZER
IO35TFT_SDA
IO36TFT_scl
+

JTAG

+

A Franzininho WiFI LAB01 possui conector para JTAG compatível com o ESP-PROG

+

Franzininho-wifi-lab01-jtag.png

+

Como Programar?

+

Conforme apresentado no artigo “Como programar a Franzininho WiFi? Descubra agora mesmo!“, a Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns são:

+
    +
  • ESP-IDF, Arduino, CircuitPython e MicroPython
  • +
+

Exemplos de código:

+ +

Onde adquirir a placa?

+

Adquira sua placa em: https://cursos.embarcados.com.br/cursos/franzininho-wifi-lab01/

+

Se você quiser equipar o laboratório da sua instituição com essa placa, entre em contato conosco para reservar com antecedência antes da produção.

+

Contato: contato@embarcados.com.br

\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-arduino/blink/index.html b/docs/franzininho-wifi/exemplos-arduino/blink/index.html index c299a1cc3..586b74201 100755 --- a/docs/franzininho-wifi/exemplos-arduino/blink/index.html +++ b/docs/franzininho-wifi/exemplos-arduino/blink/index.html @@ -1,17 +1,14 @@ - + - -Blink | Franzininho - - - + +Blink | Franzininho + + + - - - + \ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-arduino/dht11/index.html b/docs/franzininho-wifi/exemplos-arduino/dht11/index.html index 1a92ab328..5aced98da 100755 --- a/docs/franzininho-wifi/exemplos-arduino/dht11/index.html +++ b/docs/franzininho-wifi/exemplos-arduino/dht11/index.html @@ -1,17 +1,138 @@ - + - -Leitura DHT11 | Franzininho - - - + +Leitura DHT11 | Franzininho + + + -
-

Leitura DHT11

Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores no terminal serial.

Materiais necessários

Identifique os seguintes materiais necessários para este projeto:

  • 1 Franzininho WiFi.
  • 1 Sensor DHT11
  • 1 Resistor de 10k
  • 1 Protoboard.
  • Cabos de ligação.

Circuito

Realize a montagem do circuito da maneira indicada pela figura a seguir:

Circuito DHT11

Código

Para usar o sensor DHT com a Franzininho WiFi no Arduino, precisamos instalar uma bibloteca. Vamos usar a biblioteca mantida pela Adafruit.

Vamos instalar a biblioteca usando o gerenciador de biblitecas do Arduino. Acesso Ferramentas -> Gerenciar Bibliotecas. Procure por DHT e instale a bibloteca DHT sensor library da Adafruit:

Instalação da Biblioteca

Agora vamos fazer a leitura do sensor e imprimir os valores de temperatura e umidade no terminal serial.

/*************************************************************************************
* Exemplo para leitura de sensor DHT11
*
*
* Bibliotecas necessarias
* DHT da Adafruit - Instalar pelo gerenciador de bibliotecas
*
* por: Fábio Souza
*************************************************************************************/

#include "DHT.h"

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);


/*********************************************************************************
* Função Setup
* Configurações iniciais da aplicação
*********************************************************************************/
void setup()
{
Serial.begin(19200);
Serial.println("Teste de leitura do sensor DHT11");
dht.begin();
}

/*********************************************************************************
* Função loop
*********************************************************************************/
void loop()
{

float umidade = dht.readHumidity();
float temperatura = dht.readTemperature();

delay(500);


// Se as variáveis temperatura e umidade não forem valores válidos, acusará falha de leitura.
if (isnan(temperatura) || isnan(umidade))
{
Serial.println("Falha na leitura do dht11...");
}
else //se não, exibirá os valores lidos
{
//Imprime os dados no monitor serial
Serial.print("Umidade: ");
Serial.print(umidade);
Serial.print(" %\t"); //tab
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(" °C");
}
}

Análise do código

Na primeira parte do código adicionamo as bibliotecas a serem usadas na aplicação e a instancia do DHT11:

#define DHTPIN 2 
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

Na função setup() fizemos a inicialização do DHT11 e da comunicação Serial:

void setup() 
{
Serial.begin(19200);
Serial.println("Teste de leitura do sensor DHT11");
dht.begin();
}

No loop() infinito fazemos a leitura da temperatura e umidade a cada 500 ms e imprimimos na serial. Caso ocorra falha na leitura do DHT11 é exibido uma mensagem de erro:

void loop() 
{

float umidade = dht.readHumidity();
float temperatura = dht.readTemperature();

delay(500);


// Se as variáveis temperatura e umidade não forem valores válidos, acusará falha de leitura.
if (isnan(temperatura) || isnan(umidade))
{
Serial.println("Falha na leitura do dht11...");
}
else //se não, exibirá os valores lidos
{
//Imprime os dados no monitor serial
Serial.print("Umidade: ");
Serial.print(umidade);
Serial.print(" %\t"); //tab
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(" °C");
}
}

Resultado

A figura a seguir exibe os valores lidos no monitor serial:

Terminal Serial

Conclusão

O sensor DHT11( e similares) possibilita que façamos leitura de temperatura e umidade de uma forma simples e eficiente. Através de 1 fio de comunicação conseguimos fazer a leitura das duas grandezas. Como a comunicação é um pouco complexa, o uso de uma biblioteca facilita a comunicação com o dispositivo. A biblioteca mantida pela Adafruit é muito eficiente e estável.

info

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

AutorFábio Souza
Data:23/10/2021
- - +

Leitura DHT11

Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores no terminal serial.

+

Materiais necessários

+

Identifique os seguintes materiais necessários para este projeto:

+
    +
  • 1 Franzininho WiFi.
  • +
  • 1 Sensor DHT11
  • +
  • 1 Resistor de 10k
  • +
  • 1 Protoboard.
  • +
  • Cabos de ligação.
  • +
+

Circuito

+

Realize a montagem do circuito da maneira indicada pela figura a seguir:

+

Circuito DHT11

+

Código

+

Para usar o sensor DHT com a Franzininho WiFi no Arduino, precisamos instalar uma bibloteca. Vamos usar a biblioteca mantida pela Adafruit.

+

Vamos instalar a biblioteca usando o gerenciador de biblitecas do Arduino. Acesso Ferramentas -> Gerenciar Bibliotecas. Procure por DHT e instale a bibloteca DHT sensor library da Adafruit:

+

Instalação da Biblioteca

+

Agora vamos fazer a leitura do sensor e imprimir os valores de temperatura e umidade no terminal serial.

+
/*************************************************************************************
+ * Exemplo para leitura de sensor DHT11
+ * 
+ * 
+ * Bibliotecas necessarias
+ * DHT da Adafruit - Instalar pelo gerenciador de bibliotecas
+ *  
+ *  por: Fábio Souza
+ *************************************************************************************/
+
+#include "DHT.h"
+ 
+#define DHTPIN 2 
+#define DHTTYPE DHT11
+ 
+DHT dht(DHTPIN, DHTTYPE);
+
+
+/*********************************************************************************
+ *  Função Setup
+ *  Configurações iniciais da aplicação
+ *********************************************************************************/
+void setup() 
+{
+Serial.begin(19200);
+Serial.println("Teste de leitura do sensor DHT11");
+dht.begin();
+}
+
+/*********************************************************************************
+ *  Função loop
+ *********************************************************************************/
+void loop() 
+{
+
+  float umidade = dht.readHumidity();
+  float temperatura = dht.readTemperature();
+
+  delay(500);
+  
+
+  // Se as variáveis temperatura e umidade não forem valores válidos, acusará falha de leitura.
+  if (isnan(temperatura) || isnan(umidade)) 
+  {
+  Serial.println("Falha na leitura do dht11...");
+  } 
+  else //se não, exibirá os valores lidos 
+  {
+    //Imprime os dados no monitor serial
+    Serial.print("Umidade: ");
+    Serial.print(umidade);
+    Serial.print(" %\t"); //tab
+    Serial.print("Temperatura: ");
+    Serial.print(temperatura);
+    Serial.println(" °C");
+  }
+}
+
+

Análise do código

+

Na primeira parte do código adicionamo as bibliotecas a serem usadas na aplicação e a instancia do DHT11:

+
#define DHTPIN 2 
+#define DHTTYPE DHT11
+ 
+DHT dht(DHTPIN, DHTTYPE);
+
+

Na função setup() fizemos a inicialização do DHT11 e da comunicação Serial:

+
void setup() 
+{
+Serial.begin(19200);
+Serial.println("Teste de leitura do sensor DHT11");
+dht.begin();
+}
+
+

No loop() infinito fazemos a leitura da temperatura e umidade a cada 500 ms e imprimimos na serial. Caso ocorra falha na leitura do DHT11 é exibido uma mensagem de erro:

+
void loop() 
+{
+
+  float umidade = dht.readHumidity();
+  float temperatura = dht.readTemperature();
+
+  delay(500);
+  
+
+  // Se as variáveis temperatura e umidade não forem valores válidos, acusará falha de leitura.
+  if (isnan(temperatura) || isnan(umidade)) 
+  {
+  Serial.println("Falha na leitura do dht11...");
+  } 
+  else //se não, exibirá os valores lidos 
+  {
+    //Imprime os dados no monitor serial
+    Serial.print("Umidade: ");
+    Serial.print(umidade);
+    Serial.print(" %\t"); //tab
+    Serial.print("Temperatura: ");
+    Serial.print(temperatura);
+    Serial.println(" °C");
+  }
+}
+
+

Resultado

+

A figura a seguir exibe os valores lidos no monitor serial:

+

Terminal Serial

+

Conclusão

+

O sensor DHT11( e similares) possibilita que façamos leitura de temperatura e umidade de uma forma simples e eficiente. Através de 1 fio de comunicação conseguimos fazer a leitura das duas grandezas. Como a comunicação é um pouco complexa, o uso de uma biblioteca facilita a comunicação com o dispositivo. A biblioteca mantida pela Adafruit é muito eficiente e estável.

+

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

+
AutorFábio Souza
Data:23/10/2021
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard/index.html b/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard/index.html index de7f7a599..1b0eabcc8 100755 --- a/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard/index.html +++ b/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard/index.html @@ -1,17 +1,67 @@ - + - -Neopixel RGB LED Onboard | Franzininho - - - + +Neopixel RGB LED Onboard | Franzininho + + + -
-

Neopixel RGB LED Onboard

Nesse exemplo vamos aprender usar o LED RGB Neopixel onboard na Franzininho WiFi.

Instalação da biblioteca

Na IDE Arduino, clique em Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas

Neopixel

Selecione: "Adafruit NeoPixel by Adafruit Versão X.X.X" e clique em Instalar

Neopixel

Após selecionar a placa Franzininho conforme os outros tutoriais, poderá ser usado o código de exemplo abaixo:

Código de Exemplo

// inclui biblioteca NeoPixel
#include <Adafruit_NeoPixel.h>

// O Led RGB está conectado ao pino 18 do Franzininho
#define PIN 18
// Há apenas um LED
#define NUMPIXELS 1

// quantidade de cores que serão mostradas
#define MAXCOLORS 4

// Instância do objeto "Adafruit_NeoPixel"
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

//cores
#define RED pixels.Color(255, 0, 0) // vermelho
#define GREEN pixels.Color(0, 255, 0) // verde
#define BLUE pixels.Color(0, 0, 255) // azul
#define WHITE pixels.Color(255, 255, 255) // branco

// array com todas as cores para uso em laço for
// uint32_t é o tipo retornado pela função Color
uint32_t cores[MAXCOLORS] = {RED, GREEN, BLUE, WHITE};

void setup() {

// Inicializa o NeoPixel
pixels.begin();
}

void loop() {

// "apaga" o LED RGB
pixels.clear();

// exibe as cores em sequência definida no array cores
for(int i = 0; i<MAXCOLORS;i++){
pixels.setPixelColor(0,cores[i]);
pixels.show(); // envia o pixel atualizado para o hardware
delay(300); // tempo para exibição da cor
}
}

Tente exibir outras cores e animações. Compartilhe seus resultados com a comunidade.

info

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

AutorHenrique Vilela
Data:07/10/2021
- - +

Neopixel RGB LED Onboard

Nesse exemplo vamos aprender usar o LED RGB Neopixel onboard na Franzininho WiFi.

+

Instalação da biblioteca

+

Na IDE Arduino, clique em Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas

+

Neopixel

+

Selecione: "Adafruit NeoPixel by Adafruit Versão X.X.X" e clique em Instalar

+

Neopixel

+

Após selecionar a placa Franzininho conforme os outros tutoriais, poderá ser usado o código de exemplo abaixo:

+

Código de Exemplo

+
// inclui biblioteca NeoPixel
+#include <Adafruit_NeoPixel.h>
+
+// O Led RGB está conectado ao pino 18 do Franzininho
+#define PIN         18
+// Há apenas um LED
+#define NUMPIXELS   1
+
+// quantidade de cores que serão mostradas
+#define MAXCOLORS 4
+
+// Instância do objeto "Adafruit_NeoPixel"
+Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
+
+//cores
+#define RED    pixels.Color(255, 0, 0)     // vermelho
+#define GREEN  pixels.Color(0, 255, 0)     // verde
+#define BLUE   pixels.Color(0, 0, 255)     // azul
+#define WHITE  pixels.Color(255, 255, 255) // branco
+
+// array com todas as cores para uso em laço for
+// uint32_t é o tipo retornado pela função Color
+uint32_t   cores[MAXCOLORS] = {RED, GREEN, BLUE, WHITE};
+
+void setup() {
+  
+  // Inicializa o NeoPixel
+  pixels.begin();
+}
+
+void loop() {
+  
+  // "apaga" o LED RGB
+  pixels.clear();
+
+  // exibe as cores em sequência definida no array cores
+  for(int i = 0; i<MAXCOLORS;i++){
+    pixels.setPixelColor(0,cores[i]);
+    pixels.show();  // envia o pixel atualizado para o hardware
+    delay(300);  // tempo para exibição da cor
+  }
+}
+
+

Tente exibir outras cores e animações. Compartilhe seus resultados com a comunidade.

+

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

+
AutorHenrique Vilela
Data:07/10/2021
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-arduino/primeiros-passos/index.html b/docs/franzininho-wifi/exemplos-arduino/primeiros-passos/index.html index 359d27039..b027d8841 100755 --- a/docs/franzininho-wifi/exemplos-arduino/primeiros-passos/index.html +++ b/docs/franzininho-wifi/exemplos-arduino/primeiros-passos/index.html @@ -1,18 +1,67 @@ - + - -Primeiros Passos | Franzininho - - - + +Primeiros Passos | Franzininho + + + -
-

Primeiros Passos

A Franzininho WiFi foi adicionada recentemente a plataforma Arduino através do pacote para ESP32 da Espressif. Essa foi uma contribuição do Pedro Minatel para o projeto Franzininho. Pedro enviou um PR com a adição da Franzininho WiFi no modo CDC e também como MSC.

Nesse tutorial aprenderemos configurar a Arduino IDE e fazer o upload de código para a placa Franzininho WiFi.

Usamos como base para esse tutorial a documentação da Espressif para Arduino: https://docs.espressif.com/projects/arduino-esp32/en/latest/

Video com a configuração

Arduino IDE

Arduino é uma plataforma de prototipação de projetos eletrônicos composta por placas e uma interface de programação chamada Arduino.

Antes de começarmos as configurações é importante que você instale a Arduino IDE em seu sistema operacional. Acesse: https://www.arduino.cc/en/software e baixe a versão adequada para o seu sistema operacional.

Estamos usando para esse tutorial a Arduino IDE 1.8.15, recomendamos essa versão ou superior.

Download IDE

Instalação do pacote ESP32 para Arduino

Para instalação do pacote ESP32 para Arduino usaremos a ferramenta Gerenciador de placas na própria IDE.

Siga os seguintes passos:

  1. Abra a Arduino IDe e acesse Arquivos -> Preferências;
  2. Cole em “URLs adicionais para Gerenciadores de Placas” a seguinte URL: -https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  3. Clique em OK;
  4. Vá em Ferramentas > Placa > Gerenciador de Placas;
  5. Ao abrir, procure por ESP32-S2, e clique em instalar;

Veja como o passo a passo na imagem abaixo:

pacote passo a passo

Pronto, agora é só ir em placa e procurar pela Franzininho WiFi:

Selecionando a placa

Faça a seguinte configuração:

Configuração

Agora faremos um exemplo para verificar o processo de upload.

Abra o exemplo GetChipID:

Exemplo

Agora faremos o upload para a placa. Se for a primeira vez que você usará a Arduino IDE para programar a Franzininho WiFi você deverá colocar a placa em modo DFU para carregar o código. Após isso não precisará mais fazer esse procedimento.

Dica

Isso deverá sempre ser feito se você programar a placa com outras plataformas como ESP-IDF, CircuitPython, etc. Apos esse procedimento é só programar a placa pressionando upload, como estamos acostumado a fazer com outras placas.

Colocando a placa em modo DFU

  1. Plugue a placa na USB;

  2. Pressione o botão Boot e segure;

  3. Pressione o botão Reset e solte em seguida;

  4. Solte o botão Boot.

Para fazer carregar o código na placa clique em Upload:

Uoload

Abra o monitor serial e configure a velocidade para 115200 bps:

Monitor Serial

Será exibido o modelo e chip ID.

Agora você pode carregar qualquer código para a placa sem precisar colocá-la em modo DFU.

tip

A Franzininho WiFi MSC funciona da mesma forma para upload via Arduino IDE. A diferença é que nesse modo podemos carregar binários sem uso da IDE, apenas carregando o binário para o dispositivo de armazenamento criado no computador.

- - +

Primeiros Passos

A Franzininho WiFi foi adicionada recentemente a plataforma Arduino através do pacote para ESP32 da Espressif. Essa foi uma contribuição do Pedro Minatel para o projeto Franzininho. Pedro enviou um PR com a adição da Franzininho WiFi no modo CDC e também como MSC.

+

Nesse tutorial aprenderemos configurar a Arduino IDE e fazer o upload de código para a placa Franzininho WiFi.

+

Usamos como base para esse tutorial a documentação da Espressif para Arduino: https://docs.espressif.com/projects/arduino-esp32/en/latest/

+

Video com a configuração

+ +

Arduino IDE

+

Arduino é uma plataforma de prototipação de projetos eletrônicos composta por placas e uma interface de programação chamada Arduino.

+

Antes de começarmos as configurações é importante que você instale a Arduino IDE em seu sistema operacional. Acesse: https://www.arduino.cc/en/software e baixe a versão adequada para o seu sistema operacional.

+

Estamos usando para esse tutorial a Arduino IDE 1.8.15, recomendamos essa versão ou superior.

+

Download IDE

+

Instalação do pacote ESP32 para Arduino

+

Para instalação do pacote ESP32 para Arduino usaremos a ferramenta Gerenciador de placas na própria IDE.

+

Siga os seguintes passos:

+
    +
  1. Abra a Arduino IDe e acesse Arquivos -> Preferências;
  2. +
  3. Cole em “URLs adicionais para Gerenciadores de Placas” a seguinte URL: +https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  4. +
  5. Clique em OK;
  6. +
  7. Vá em Ferramentas > Placa > Gerenciador de Placas;
  8. +
  9. Ao abrir, procure por ESP32-S2, e clique em instalar;
  10. +
+

Veja como o passo a passo na imagem abaixo:

+

pacote passo a passo

+

Pronto, agora é só ir em placa e procurar pela Franzininho WiFi:

+

Selecionando a placa

+

Faça a seguinte configuração:

+

Configuração

+

Agora faremos um exemplo para verificar o processo de upload.

+

Abra o exemplo GetChipID:

+

Exemplo

+

Agora faremos o upload para a placa. Se for a primeira vez que você usará a Arduino IDE para programar a Franzininho WiFi você deverá colocar a placa em modo DFU para carregar o código. Após isso não precisará mais fazer esse procedimento.

+

Isso deverá sempre ser feito se você programar a placa com outras plataformas como ESP-IDF, CircuitPython, etc. Apos esse procedimento é só programar a placa pressionando upload, como estamos acostumado a fazer com outras placas.

+

Colocando a placa em modo DFU

+
    +
  1. +

    Plugue a placa na USB;

    +
  2. +
  3. +

    Pressione o botão Boot e segure;

    +
  4. +
  5. +

    Pressione o botão Reset e solte em seguida;

    +
  6. +
  7. +

    Solte o botão Boot.

    +
  8. +
+

Para fazer carregar o código na placa clique em Upload:

+

Uoload

+

Abra o monitor serial e configure a velocidade para 115200 bps:

+

Monitor Serial

+

Será exibido o modelo e chip ID.

+

Agora você pode carregar qualquer código para a placa sem precisar colocá-la em modo DFU.

+

A Franzininho WiFi MSC funciona da mesma forma para upload via Arduino IDE. A diferença é que nesse modo podemos carregar binários sem uso da IDE, apenas carregando o binário para o dispositivo de armazenamento criado no computador.

\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-circuitpython/dht11/index.html b/docs/franzininho-wifi/exemplos-circuitpython/dht11/index.html index e0adeab01..af833f667 100755 --- a/docs/franzininho-wifi/exemplos-circuitpython/dht11/index.html +++ b/docs/franzininho-wifi/exemplos-circuitpython/dht11/index.html @@ -1,17 +1,84 @@ - + - -Sensor de temperatura e umidade DHT11 | Franzininho - - - + +Sensor de temperatura e umidade DHT11 | Franzininho + + + -
-

Sensor de temperatura e umidade DHT11

Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11.

Materiais necessários

Identifique os seguintes materiais necessários para este projeto:

  • 1 Franzininho WiFi.
  • 1 Sensor DHT11
  • 1 Resistor de 10k
  • 1 Protoboard.
  • Cabos de ligação.

Circuito

Realize a montagem do circuito da maneira indicada pela figura a seguir:

Circuito DHT11

Código

Para usar o sensor DHT com a Franzininho WiFi, precisamos instalar o módulo adafruit_dht na placa antes de criarmos nosso código.

As bibliotecas para o CircuitPython podem ser obtidas através do endereço https://circuitpython.org/libraries. Escolha e baixe o arquivo de acordo com a versão do CircuitPyhthon que você tem instalado na Franzininho WiFi.

Em seguida, copie o seguinte arquivo diretamente para a pasta lib do sistema de arquivos da Franzininho WiFi:

  • adafruit_dht.mpy

Instalação da Biblioteca

Para demonstrar o uso do módulo do sensor DHT, digite o código abaixo e conecte ao terminal serial (REPL) da placa para verificar os valores de temperatura e umidade lidos.

""" Leitura de temperatura e umidade com DHT11 """

import board
import time
import adafruit_dht

dht = adafruit_dht.DHT11(board.IO2)

while True:
try:
temperatura = dht.temperature
umidade = dht.humidity
# Imprime valores lidos na serial
print("Temperatura: {:.1f} °C \t Umidade: {}%".format(temperatura, umidade))
except RuntimeError as e:
# A leitura do DHT11 pode falhar
print("Falha na leitura do DHT11: ", e.args)

time.sleep(1)

Análise do código

Na primeira parte do código temos a importação das bibliotecas a serem usadas na aplicação. Note que importamos o módulo adafruit_dht que instalamos na pasta lib da placa:

import board
import time
import adafruit_dht

Em seguida criamos uma instância e escolhemos o modo DHT11, ja que é possível trabalhar com outros modelos com essa biblioteca. É necessario passar como parâmetro o pino que está conectado a linha de comunicação do sensor. Em nosso caso passamos o pino 2:

dht = adafruit_dht.DHT11(board.IO2)

No loop infinito fazemos a leitura dos valores de temperatura e umidade a cada 1 segundo através dos metodos dht.temperature e dht.humidity, e imprimimos os valores lidos no terminal serial.

while True:
try:
temperatura = dht.temperature
umidade = dht.humidity
# Imprime valores lidos na serial
print("Temperatura: {:.1f} °C \t Umidade: {}%".format(temperatura, umidade))
except RuntimeError as e:
# A leitura do DHT11 pode falhar
print("Falha na leitura do DHT11: ", e.args)

time.sleep(1)

Resultado

A figura a seguir exibe os valores lidos no terminal serial(REPL):

Terminal Serial

Conclusão

O sensor DHT11( e similares) possibilita que façamos leitura de temperatura e umidade de uma forma simples e eficiente. Através de 1 fio de comunicação conseguimos fazer a leitura das duas grandezas. Como a comunicação é um pouco complexa, o uso de uma biblioteca facilita a comunicação com o dispositivo.

info

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

AutorFábio Souza
Data:10/10/2021
- - +

Sensor de temperatura e umidade DHT11

Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11.

+

Materiais necessários

+

Identifique os seguintes materiais necessários para este projeto:

+
    +
  • 1 Franzininho WiFi.
  • +
  • 1 Sensor DHT11
  • +
  • 1 Resistor de 10k
  • +
  • 1 Protoboard.
  • +
  • Cabos de ligação.
  • +
+

Circuito

+

Realize a montagem do circuito da maneira indicada pela figura a seguir:

+

Circuito DHT11

+

Código

+

Para usar o sensor DHT com a Franzininho WiFi, precisamos instalar o módulo adafruit_dht na placa antes de criarmos nosso código.

+

As bibliotecas para o CircuitPython podem ser obtidas através do endereço https://circuitpython.org/libraries. Escolha e baixe o arquivo de acordo com a versão do CircuitPyhthon que você tem instalado na Franzininho WiFi.

+

Em seguida, copie o seguinte arquivo diretamente para a pasta lib do sistema de arquivos da Franzininho WiFi:

+
    +
  • adafruit_dht.mpy
  • +
+

Instalação da Biblioteca

+

Para demonstrar o uso do módulo do sensor DHT, digite o código abaixo e conecte ao terminal serial (REPL) da placa para verificar os valores de temperatura e umidade lidos.

+
""" Leitura de temperatura e umidade com DHT11 """
+
+import board
+import time
+import adafruit_dht
+
+dht = adafruit_dht.DHT11(board.IO2)
+
+while True:
+    try:
+        temperatura = dht.temperature
+        umidade = dht.humidity
+        # Imprime valores lidos na serial
+        print("Temperatura: {:.1f} °C \t Umidade: {}%".format(temperatura, umidade))
+    except RuntimeError as e:
+        # A leitura do DHT11 pode falhar
+        print("Falha na leitura do DHT11: ", e.args)
+
+    time.sleep(1)
+
+

Análise do código

+

Na primeira parte do código temos a importação das bibliotecas a serem usadas na aplicação. Note que importamos o módulo adafruit_dht que instalamos na pasta lib da placa:

+
import board
+import time
+import adafruit_dht
+
+

Em seguida criamos uma instância e escolhemos o modo DHT11, ja que é possível trabalhar com outros modelos com essa biblioteca. É necessario passar como parâmetro o pino que está conectado a linha de comunicação do sensor. Em nosso caso passamos o pino 2:

+
dht = adafruit_dht.DHT11(board.IO2)
+
+

No loop infinito fazemos a leitura dos valores de temperatura e umidade a cada 1 segundo através dos metodos dht.temperature e dht.humidity, e imprimimos os valores lidos no terminal serial.

+
while True:
+    try:
+        temperatura = dht.temperature
+        umidade = dht.humidity
+        # Imprime valores lidos na serial
+        print("Temperatura: {:.1f} °C \t Umidade: {}%".format(temperatura, umidade))
+    except RuntimeError as e:
+        # A leitura do DHT11 pode falhar
+        print("Falha na leitura do DHT11: ", e.args)
+
+    time.sleep(1)
+
+

Resultado

+

A figura a seguir exibe os valores lidos no terminal serial(REPL):

+

Terminal Serial

+

Conclusão

+

O sensor DHT11( e similares) possibilita que façamos leitura de temperatura e umidade de uma forma simples e eficiente. Através de 1 fio de comunicação conseguimos fazer a leitura das duas grandezas. Como a comunicação é um pouco complexa, o uso de uma biblioteca facilita a comunicação com o dispositivo.

+

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

+
AutorFábio Souza
Data:10/10/2021
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c/index.html b/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c/index.html index 163d16045..fc89f353b 100755 --- a/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c/index.html +++ b/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c/index.html @@ -1,17 +1,94 @@ - + - -Display OLED I2C | Franzininho - - - + +Display OLED I2C | Franzininho + + + -
-

Display OLED I2C

Nesse exemplo aprenderemos usar o display OLED com comunicação I2C explorando as funcionalidades básicas usando o CircuitPython.

Materiais necessários

Identifique os seguintes materiais necessários para este projeto:

  • 1 Franzininho WiFi.
  • 1 Display OLED 128x64 I2C.
  • 1 Protoboard.
  • Cabos de ligação.

Circuito

A próxima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:

Circuito Display OLED I2C

Resumindo o que é mostrado nas Figuras 4.2 até 4.5, a conexão dos terminais do OLED aos terminais das respectivas placas de desenvolvimento deve ser realizada conforme a tabela a seguir.

OLED I2CFranzininho WiFi
SDA (DATA)GPIO8
SCK (CLK)GPIO9
VDD3V3
GNDGND

Código

Como o display OLED é um componente com funcionamento bastante complexo, vamos fazer uso de uma biblioteca que implementa todas as funcionalidades, permitindo que nossos programas possam ser implementados de maneira bastante simples e produtiva.

As bibliotecas para o CircuitPython podem ser obtidas através do endereço https://circuitpython.org/libraries. Escolha e baixe o arquivo de acordo com a versão do CircuitPyhthon que você tem instalado na Franzininho WiFi.

Bibliotecas

Em seguida, copie os seguintes arquivos diretamente para a posta lib do sistema de arquivos da Franzininho WiFi:

  • adafruit_ssd1306.mpy
  • adafruit_framebuf.mpy

Copie também o arquivo font5x8.bin, mas neste caso, para a pasta raiz da Franzininho WiFi. Por fim, implemente o programa abaixo no arquivo code.py que está localizado na pasta raiz da Franzininho WiFi.

import board
import busio
import adafruit_ssd1306
import time

i2c = busio.I2C(scl=board.IO9, sda=board.IO8)
oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)

try:
inverter = False
while True:
oled.invert(inverter)
oled.fill(0)
oled.rect(0, 0, 128, 64, 1)
oled.rect(2, 2, 124, 60, 1)
oled.text('Franzininho', 4, 4, 1)
oled.text('WiFi', 4, 14, 1)
oled.show()
inverter = not inverter
time.sleep(2)
finally:
oled.invert(False)
oled.fill(0)
oled.show()

Análise do código

Devemos importar as bibliotecas busio e adafruit_ssd1306, que serão responsáveis pelas classes que irão possibilitar a comunicação I2C e o uso do display OLED, respectivamente.

import busio
import adafruit_ssd1306

A comunicação I2C será realizada através do terminais IO9 e IO8 da Franzininho WiFi, conforme podemos observar na pinagem, disponível em https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi

i2c = busio.I2C(scl=board.IO9, sda=board.IO8)

A configuração do display OLED deve levar em conta as suas dimensões e o seu endereço no barramento I2C.

oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)

Neste programa o objetivo e realizar a inversão da exibição do conteúdo no display a cada 2 segundos. Desta forma, será usado o método invert que receberá uma variável booleana como parâmetro, sendo seu valor alternado entre True e False.

oled.invert(inverter)

O método fill é usado para preencher toda área do display e atuará em conjunto com o método invert. Como se trata de um display monocromático temos duas cores disponíveis, 0 (zero) que representa o preto (pixel desligado) e 1 (um) para especificar o branco (pixel ligado), caso o método invert tenha recebido como parâmetro o valor False. Por outro lado, caso invert receber True como parâmetro, 1 (um) vai representar o preto (pixel desligado) e 0 (zero) vai especificar o branco (pixel ligado).

oled.invert(inverter)
oled.fill(0)

Na sequência foi usado o método rect para desenhar um retângulo começando nas coordenadas x = 0 e y = 0 e com 128 pixels de largura e 64 pixels de altura e, logo em seguida, um outro retângulo levemente inferior. O último parâmetro do método rect consiste na cor que, neste exemplo, será branco. Desta forma, acabamos desenhando uma borda dupla que envolve toda a área do display.

oled.rect(0, 0, 128, 64, 1)
oled.rect(2, 2, 124, 60, 1)

O método text possibilita exibir um texto nas coordenadas e na cor especificadas.

oled.text('Franzininho', 4, 4, 1)
oled.text('WiFi', 4, 14, 1)

O método show, irá executar os métodos usados anteriormente, ou seja, fill, rect e text no display. Ou seja, qualquer conteúdo só é exibido no display quando o método show é executado.

oled.show()

Tente exibir outros textos e imagens. Compartilhe seus resultados com a comunidade.

info

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

AutorCláudio Luís Vieira Oliveira
Data:07/10/2021
- - +

Display OLED I2C

Nesse exemplo aprenderemos usar o display OLED com comunicação I2C explorando as funcionalidades básicas usando o CircuitPython.

+

Materiais necessários

+

Identifique os seguintes materiais necessários para este projeto:

+
    +
  • 1 Franzininho WiFi.
  • +
  • 1 Display OLED 128x64 I2C.
  • +
  • 1 Protoboard.
  • +
  • Cabos de ligação.
  • +
+

Circuito

+

A próxima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:

+

Circuito Display OLED I2C

+

Resumindo o que é mostrado nas Figuras 4.2 até 4.5, a conexão dos terminais do OLED aos terminais das respectivas placas de desenvolvimento deve ser realizada conforme a tabela a seguir.

+
OLED I2CFranzininho WiFi
SDA (DATA)GPIO8
SCK (CLK)GPIO9
VDD3V3
GNDGND
+

Código

+

Como o display OLED é um componente com funcionamento bastante complexo, vamos fazer uso de uma biblioteca que implementa todas as funcionalidades, permitindo que nossos programas possam ser implementados de maneira bastante simples e produtiva.

+

As bibliotecas para o CircuitPython podem ser obtidas através do endereço https://circuitpython.org/libraries. Escolha e baixe o arquivo de acordo com a versão do CircuitPyhthon que você tem instalado na Franzininho WiFi.

+

Bibliotecas

+

Em seguida, copie os seguintes arquivos diretamente para a posta lib do sistema de arquivos da Franzininho WiFi:

+
    +
  • adafruit_ssd1306.mpy
  • +
  • adafruit_framebuf.mpy
  • +
+

Copie também o arquivo font5x8.bin, mas neste caso, para a pasta raiz da Franzininho WiFi. Por fim, implemente o programa abaixo no arquivo code.py que está localizado na pasta raiz da Franzininho WiFi.

+
import board
+import busio
+import adafruit_ssd1306
+import time
+
+i2c = busio.I2C(scl=board.IO9, sda=board.IO8)
+oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)
+
+try:
+  inverter = False
+  while True:
+    oled.invert(inverter)
+    oled.fill(0)
+    oled.rect(0, 0, 128, 64, 1)
+    oled.rect(2, 2, 124, 60, 1)
+    oled.text('Franzininho', 4, 4, 1)
+    oled.text('WiFi', 4, 14, 1)
+    oled.show()
+    inverter = not inverter
+    time.sleep(2)
+finally:
+  oled.invert(False)
+  oled.fill(0)
+  oled.show()
+
+

Análise do código

+

Devemos importar as bibliotecas busio e adafruit_ssd1306, que serão responsáveis pelas classes que irão possibilitar a comunicação I2C e o uso do display OLED, respectivamente.

+
import busio
+import adafruit_ssd1306
+
+

A comunicação I2C será realizada através do terminais IO9 e IO8 da Franzininho WiFi, conforme podemos observar na pinagem, disponível em https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi

+
i2c = busio.I2C(scl=board.IO9, sda=board.IO8)
+
+

A configuração do display OLED deve levar em conta as suas dimensões e o seu endereço no barramento I2C.

+
oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)
+
+

Neste programa o objetivo e realizar a inversão da exibição do conteúdo no display a cada 2 segundos. Desta forma, será usado o método invert que receberá uma variável booleana como parâmetro, sendo seu valor alternado entre True e False.

+
oled.invert(inverter)
+
+

O método fill é usado para preencher toda área do display e atuará em conjunto com o método invert. Como se trata de um display monocromático temos duas cores disponíveis, 0 (zero) que representa o preto (pixel desligado) e 1 (um) para especificar o branco (pixel ligado), caso o método invert tenha recebido como parâmetro o valor False. Por outro lado, caso invert receber True como parâmetro, 1 (um) vai representar o preto (pixel desligado) e 0 (zero) vai especificar o branco (pixel ligado).

+
oled.invert(inverter)
+oled.fill(0)
+
+

Na sequência foi usado o método rect para desenhar um retângulo começando nas coordenadas x = 0 e y = 0 e com 128 pixels de largura e 64 pixels de altura e, logo em seguida, um outro retângulo levemente inferior. O último parâmetro do método rect consiste na cor que, neste exemplo, será branco. Desta forma, acabamos desenhando uma borda dupla que envolve toda a área do display.

+
oled.rect(0, 0, 128, 64, 1)
+oled.rect(2, 2, 124, 60, 1)
+
+

O método text possibilita exibir um texto nas coordenadas e na cor especificadas.

+
oled.text('Franzininho', 4, 4, 1)
+oled.text('WiFi', 4, 14, 1)
+
+

O método show, irá executar os métodos usados anteriormente, ou seja, fill, rect e text no display. Ou seja, qualquer conteúdo só é exibido no display quando o método show é executado.

+
oled.show()
+
+

Tente exibir outros textos e imagens. Compartilhe seus resultados com a comunidade.

+

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

+
AutorCláudio Luís Vieira Oliveira
Data:07/10/2021
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas/index.html b/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas/index.html index b6a9d359a..083d1f81e 100755 --- a/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas/index.html +++ b/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas/index.html @@ -1,17 +1,134 @@ - + - -Entrada Analógica | Franzininho - - - + +Entrada Analógica | Franzininho + + + -
-

Entrada Analógica

Neste exemplo aprenderemos como usar as entradas analógicas. Veremos qual módulo precisamos usar e como fazer a leitura do valor analógico usando um potenciômetro. Ao final faremos um exemplo para ligar e desligar um LED a partir do valor lido na entrada analógica. Assim, ao final dessa etapa você estará apto para ler sensores analógicos.

Materiais necessários

  • 1 Placa Franzininho WiFi com CircuitPython;
  • 1 Protoboard;
  • 1 potenciômetro de 10K;
  • 1 LED vermelho de 3 mm;
  • 1 Resistor 330 Ω;
  • Jumpers.

Circuito

Para os primeiros exemplos, faça a seguinte montagem:

Circuito

Código

Digite o código abaixo no arquivo code.py que está no diretório CIRCUITPY:

#Leitura de Entrada analógica -  Exemplo 2
import time #importa módulo de temporização
import board #importa módulo da placa
from analogio import AnalogIn #immport módulo de entrada analógica

analog_in = AnalogIn(board.IO1) #mapeia pino analógico

while True: #loop infinito
print((analog_in.value,)) #imprime o valor da leitura analógica
time.sleep(0.2) #aguarda 200 ms

Salve o arquivo e teste o funcionamento girando o potenciômetro e no Mu Editor visualize os dados no terminal serial e no gráfico:

Teste 1

Note que os valores de conversão AD são exibidos no terminal e no gráfico.

Agora faremos um exemplo para converter esses valores em tensão.

Digite o seguinte código:

#Leitura de Entrada analógica - Exemplo 2
import time #importa módulo de temporização
import board #importa módulo da placa
from analogio import AnalogIn #import módulo de entrada analógica

analog_in = AnalogIn(board.IO1) #mapeia pino analógico

def ler_tensao(pin):
return (pin.value * 3.3) / 65536

while True: #loop infinito
print((ler_tensao(analog_in),)) #imprime o valor da leitura analógica
time.sleep(0.2) #aguarda 200 ms

Salve o arquivo e teste o funcionamento girando o potenciômetro e no Mu Editor visualize os dados no terminal serial e no gráfico:

Teste 2

Note que exibimos agora o valor de tensão.

Análise do código (Exemplos 1 e 2)

Para acessar os pinos da placa precisamos importar o módulo board:

import board

Como precisaremos de intervalos de temporização importamos o módulo time:

import time

Trabalharemos como entradas analógicas nesse exemplo, assim, precisamos importar o seguinte módulo em analogio:

from analogio import AnalogIn #import módulo de entrada analógica

A Franzininho Wifi possui diversas entradas analógicas. Para esse exemplo usamos a entrada analógica no pino IO1

analog_in = AnalogIn(board.IO1) #mapeia pino analógico

No loop infinito fazemos a leitura da conversão AD lendo o valor presente no pino em intervalos de 200 ms. No primeiro exemplos fizemos apenas a impressão do valor convertido:

while  True: #loop infinito  
print((analog_in.value,)) #imprime o valor da leitura analógica
time.sleep(0.2) #aguarda 200 ms

Já no segundo exemplo fizemos uma função que converte o valor lido no pino em tensão:

def  ler_tensao(pin):  
return (pin.value * 3.3) / 65536

while True: #loop infinito
print((ler_tensao(analog_in),)) #imprime o valor da leitura analógica
time.sleep(0.2) #aguarda 200 ms

Agora faremos uma aplicação para ligar e desligar um LED dependo do valor lido no potenciômetro.

Digite o seguinte código:

#Leitura de Entrada analógica - Exemplo 3
import time #importa módulo de temporização
import board #importa módulo da placa
from analogio import AnalogIn #immport módulo de entrada analógica
from digitalio import DigitalInOut, Direction

analog_in = AnalogIn(board.IO1) #mapeia pino analógico

led = DigitalInOut(board.IO4)
led.direction = Direction.OUTPUT

def ler_tensao(pin):
return (pin.value * 3.3) / 65536

while True: #loop infinito
print((ler_tensao(analog_in),)) #imprime o valor da leitura analógica

if(ler_tensao(analog_in)>2.5): #se valor lido for maior que 2.5V
led.value = 1 #liga LED
else: #se não
led.value =0 #desliga o LED

time.sleep(0.2) #aguarda 200 ms

Salve o arquivo e teste o funcionamento girando o potenciômetro. Verifique se o LED acenderá quando ultrapassar o valor de 2,5V (exibido no terminal). Quando abaixo de 2,5V o LED deve apagar.

Teste 3

Análise do código (Exemplo 3)

Nesse exemplo adicionamos uma saída digital para controlar um LED.

Dica

Se você ainda não sabe trabalhar com entradas analógicas. Consulte o exemplo Entradas e Saídas Digitais.

No loop principal fizemos um teste para verificar o valor de tensão da entrada analógico, caso acima de 2,5V liga o LED e abaixo de 2,5 V desliga o LED.

while  True: #loop infinito  
print((ler_tensao(analog_in),)) #imprime o valor da leitura analógica

if(ler_tensao(analog_in)>2.5): #se valor lido for maior que 2.5V
led.value = 1 #liga LED
else: #se não
led.value =0 #desliga o LED

time.sleep(0.2) #aguarda 200 ms

Conclusão

Neste exemplo, aprendemos como fazer a leitura de uma entrada analógica. Para você ler outras entradas pode seguir o mesmo padrão. Porém, é importante verificar se o pino possui essa funcionalidade.

Com esse recurso poderemos ler diversos sensores analógicos como de temperatura, acelerômetro, som, etc.

Desafio

Faça a leitura de outro potenciômetro usando outra entrada analógica. Exiba no gráfico o valor dos 2 potenciômetros em simultâneo.

AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
- - +

Entrada Analógica

Neste exemplo aprenderemos como usar as entradas analógicas. Veremos qual módulo precisamos usar e como fazer a leitura do valor analógico usando um potenciômetro. Ao final faremos um exemplo para ligar e desligar um LED a partir do valor lido na entrada analógica. Assim, ao final dessa etapa você estará apto para ler sensores analógicos.

+

Materiais necessários

+
    +
  • 1 Placa Franzininho WiFi com CircuitPython;
  • +
  • 1 Protoboard;
  • +
  • 1 potenciômetro de 10K;
  • +
  • 1 LED vermelho de 3 mm;
  • +
  • 1 Resistor 330 Ω;
  • +
  • Jumpers.
  • +
+

Circuito

+

Para os primeiros exemplos, faça a seguinte montagem:

+

Circuito

+

Código

+

Digite o código abaixo no arquivo code.py que está no diretório CIRCUITPY:

+
#Leitura de Entrada analógica -  Exemplo 2
+import time            #importa módulo de temporização
+import board            #importa módulo da placa
+from analogio import AnalogIn    #immport módulo de entrada analógica
+
+analog_in = AnalogIn(board.IO1) #mapeia pino analógico
+
+while True:             #loop infinito
+    print((analog_in.value,))    #imprime o valor da leitura analógica
+    time.sleep(0.2)         #aguarda 200 ms
+
+

Salve o arquivo e teste o funcionamento girando o potenciômetro e no Mu Editor visualize os dados no terminal serial e no gráfico:

+

Teste 1

+

Note que os valores de conversão AD são exibidos no terminal e no gráfico.

+

Agora faremos um exemplo para converter esses valores em tensão.

+

Digite o seguinte código:

+
#Leitura de Entrada analógica - Exemplo 2
+import time            #importa módulo de temporização
+import board            #importa módulo da placa
+from analogio import AnalogIn    #import módulo de entrada analógica
+
+analog_in = AnalogIn(board.IO1) #mapeia pino analógico
+
+def ler_tensao(pin):
+    return (pin.value * 3.3) / 65536
+
+while True:             #loop infinito
+    print((ler_tensao(analog_in),))    #imprime o valor da leitura analógica
+    time.sleep(0.2)         #aguarda 200 ms
+
+

Salve o arquivo e teste o funcionamento girando o potenciômetro e no Mu Editor visualize os dados no terminal serial e no gráfico:

+

Teste 2

+

Note que exibimos agora o valor de tensão.

+

Análise do código (Exemplos 1 e 2)

+

Para acessar os pinos da placa precisamos importar o módulo board:

+
import board
+
+

Como precisaremos de intervalos de temporização importamos o módulo time:

+
import time
+
+

Trabalharemos como entradas analógicas nesse exemplo, assim, precisamos importar o seguinte módulo em analogio:

+
from analogio import AnalogIn #import módulo de entrada analógica
+
+

A Franzininho Wifi possui diversas entradas analógicas. Para esse exemplo usamos a entrada analógica no pino IO1

+
analog_in = AnalogIn(board.IO1) #mapeia pino analógico
+
+

No loop infinito fazemos a leitura da conversão AD lendo o valor presente no pino em intervalos de 200 ms. No primeiro exemplos fizemos apenas a impressão do valor convertido:

+
while  True: #loop infinito  
+    print((analog_in.value,))  #imprime o valor da leitura analógica  
+    time.sleep(0.2) #aguarda 200 ms
+
+

Já no segundo exemplo fizemos uma função que converte o valor lido no pino em tensão:

+
def  ler_tensao(pin):  
+    return (pin.value * 3.3) / 65536  
+  
+while  True: #loop infinito  
+    print((ler_tensao(analog_in),))  #imprime o valor da leitura analógica  
+    time.sleep(0.2) #aguarda 200 ms
+
+

Agora faremos uma aplicação para ligar e desligar um LED dependo do valor lido no potenciômetro.

+

Digite o seguinte código:

+
#Leitura de Entrada analógica - Exemplo 3
+import time            #importa módulo de temporização
+import board            #importa módulo da placa
+from analogio import AnalogIn    #immport módulo de entrada analógica
+from digitalio import DigitalInOut, Direction
+
+analog_in = AnalogIn(board.IO1) #mapeia pino analógico
+
+led = DigitalInOut(board.IO4)
+led.direction = Direction.OUTPUT
+
+def ler_tensao(pin):
+    return (pin.value * 3.3) / 65536
+
+while True:             #loop infinito
+    print((ler_tensao(analog_in),))    #imprime o valor da leitura analógica
+    
+    if(ler_tensao(analog_in)>2.5):      #se valor lido for maior que 2.5V
+        led.value = 1               #liga LED
+    else:                   #se não
+        led.value =0               #desliga o LED
+    
+    time.sleep(0.2)         #aguarda 200 ms
+
+

Salve o arquivo e teste o funcionamento girando o potenciômetro. Verifique se o LED acenderá quando ultrapassar o valor de 2,5V (exibido no terminal). Quando abaixo de 2,5V o LED deve apagar.

+

Teste 3

+

Análise do código (Exemplo 3)

+

Nesse exemplo adicionamos uma saída digital para controlar um LED.

+

Se você ainda não sabe trabalhar com entradas analógicas. Consulte o exemplo Entradas e Saídas Digitais.

+

No loop principal fizemos um teste para verificar o valor de tensão da entrada analógico, caso acima de 2,5V liga o LED e abaixo de 2,5 V desliga o LED.

+
while  True: #loop infinito  
+    print((ler_tensao(analog_in),))  #imprime o valor da leitura analógica  
+  
+    if(ler_tensao(analog_in)>2.5): #se valor lido for maior que 2.5V  
+        led.value = 1  #liga LED  
+    else:  #se não  
+        led.value =0  #desliga o LED  
+    
+    time.sleep(0.2) #aguarda 200 ms
+
+

Conclusão

+

Neste exemplo, aprendemos como fazer a leitura de uma entrada analógica. Para você ler outras entradas pode seguir o mesmo padrão. Porém, é importante verificar se o pino possui essa funcionalidade.

+

Com esse recurso poderemos ler diversos sensores analógicos como de temperatura, acelerômetro, som, etc.

+

Faça a leitura de outro potenciômetro usando outra entrada analógica. Exiba no gráfico o valor dos 2 potenciômetros em simultâneo.

+
AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais/index.html b/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais/index.html index 967da4ee3..7b4c67d59 100755 --- a/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais/index.html +++ b/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais/index.html @@ -1,18 +1,84 @@ - + - -Entradas e Saídas Digitais | Franzininho - - - + +Entradas e Saídas Digitais | Franzininho + + + -
-

Entradas e Saídas Digitais

Agora que já entendemos a estrutura básica de um programa no CircuitoPython, exploraremos os pinos de I/O como entrada e saída digital. Este exemplo exibe como ler um botão (entrada digital) e acionar um LED (saída digital). Quando o botão for pressionado o estado do LED deverá ser invertido. Assim, ao final teremos um botão Liga/Desliga para controlar o LED.

Materiais necessários

  • 1 Placa Franzininho WiFi com CircuitPython;
  • 1 Protoboard;
  • 1 LED vermelho de 3 mm;
  • 1 Resistor 330 Ω;
  • 1 Botão;
  • Jumpers.

Circuito

Faça a seguinte montagem:

Circuito Entrada e Saida digital

Código

Digite o código abaixo no arquivo code.py que está dentro do diretório CIRCUITPY e salve o arquivo:

# Entradas e Saídas digitais - Botão Liga/Desliga
import time
import board
from digitalio import DigitalInOut, Direction, Pull

# Configura o pino do botão
btn = DigitalInOut(board.IO5) # mapea para pino 5
btn.direction = Direction.INPUT # configura como entrada
btn.pull = Pull.UP # habilita pull-up interno


# Configura o pino do led
led = DigitalInOut(board.IO4) # mapea para pino 4
led.direction = Direction.OUTPUT # configura como saída

# loop infinito
while True:
if btn.value ==0: # Se botão pressionado
led.value=not led.value # inverte estado do LED
while btn.value==0: # Aguarda botão ser solto
time.sleep(0.01) # delay de 10 ms

Análise do código

Para acessar os pinos da placa precisamos importar o módulo board:

import board

Como precisaremos de intervalos de temporização importamos o módulo time:

import time

Trabalharemos como entradas e saídas digitais nesse exemplo. Para isso, precisamos importar os seguintes módulos em digitalio:

from digitalio import DigitalInOut, Direction

O botão deve ser configurado como uma entrada digital no pino 5. Além disso, como não usamos resistor de pull-up externo devemos configurar o pull-up interno:

# Configura o pino do botão
btn = DigitalInOut(board.IO5) # mapea para pino 5
btn.direction = Direction.INPUT # configura como entrada
btn.pull = Pull.UP # habilita pull-up interno

O LED foi configurado como uma saída digital no pino 4, da mesma forma que fizemos no exemplo anterior:

# Configura o pino do led
led = DigitalInOut(board.IO4) # mapea para pino 4
led.direction = Direction.OUTPUT # configura como saída

No loop infinito testamos o valor do pio do botão, caso esteja em nível 0 significa que o usuário apertou. Assim toda vez que o botão é pressionado o valor do LED é invertido. Para evitar que o sejam realizadas diversas operações é aguardado que o usuário solte o botão antes de ler o botão novamente. Essa espera é feita com um loop -while:

# loop infinito
while True:
if btn.value ==0: # Se botão pressionado
led.value=not led.value # inverte estado do LED
while btn.value==0: # Aguarda botão ser solto
time.sleep(0.01) # delay de 10 ms

Conclusão

Neste exemplo, fizemos uma aplicação simples para leitura de uma entrada digital(botão) e acionamento de uma saída digital(LED). Esse exemplo servirá de base para quando você precisar trabalhar com entradas e saídas digitais em seus projetos. A configuração é sempre a mesma.

Desafio

Inclua mais um botão e mais um LED no circuito com funcionamento igual ao que fizemos.

AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
- - +

Entradas e Saídas Digitais

Agora que já entendemos a estrutura básica de um programa no CircuitoPython, exploraremos os pinos de I/O como entrada e saída digital. Este exemplo exibe como ler um botão (entrada digital) e acionar um LED (saída digital). Quando o botão for pressionado o estado do LED deverá ser invertido. Assim, ao final teremos um botão Liga/Desliga para controlar o LED.

+

Materiais necessários

+
    +
  • 1 Placa Franzininho WiFi com CircuitPython;
  • +
  • 1 Protoboard;
  • +
  • 1 LED vermelho de 3 mm;
  • +
  • 1 Resistor 330 Ω;
  • +
  • 1 Botão;
  • +
  • Jumpers.
  • +
+

Circuito

+

Faça a seguinte montagem:

+

Circuito Entrada e Saida digital

+

Código

+

Digite o código abaixo no arquivo code.py que está dentro do diretório CIRCUITPY e salve o arquivo:

+
# Entradas e Saídas digitais - Botão Liga/Desliga
+import time
+import board
+from digitalio import DigitalInOut, Direction, Pull
+
+# Configura o pino do botão
+btn = DigitalInOut(board.IO5)      	# mapea para pino 5 
+btn.direction = Direction.INPUT  	# configura como entrada
+btn.pull = Pull.UP                  # habilita pull-up interno
+
+
+# Configura o pino do led
+led = DigitalInOut(board.IO4)       # mapea para pino 4 
+led.direction = Direction.OUTPUT   	# configura como saída
+
+# loop infinito
+while True:
+	if btn.value ==0:			   	# Se botão pressionado                
+		led.value=not led.value		# inverte estado do LED
+		while btn.value==0:			# Aguarda botão ser solto
+			time.sleep(0.01)		# delay de 10 ms
+
+

Análise do código

+

Para acessar os pinos da placa precisamos importar o módulo board:

+
import board
+
+

Como precisaremos de intervalos de temporização importamos o módulo time:

+
import time
+
+

Trabalharemos como entradas e saídas digitais nesse exemplo. Para isso, precisamos importar os seguintes módulos em digitalio:

+
from digitalio import DigitalInOut, Direction
+
+

O botão deve ser configurado como uma entrada digital no pino 5. Além disso, como não usamos resistor de pull-up externo devemos configurar o pull-up interno:

+
# Configura o pino do botão
+btn = DigitalInOut(board.IO5)      	# mapea para pino 5 
+btn.direction = Direction.INPUT  	# configura como entrada
+btn.pull = Pull.UP                  # habilita pull-up interno
+
+

O LED foi configurado como uma saída digital no pino 4, da mesma forma que fizemos no exemplo anterior:

+
# Configura o pino do led
+led = DigitalInOut(board.IO4)       # mapea para pino 4 
+led.direction = Direction.OUTPUT   	# configura como saída
+
+

No loop infinito testamos o valor do pio do botão, caso esteja em nível 0 significa que o usuário apertou. Assim toda vez que o botão é pressionado o valor do LED é invertido. Para evitar que o sejam realizadas diversas operações é aguardado que o usuário solte o botão antes de ler o botão novamente. Essa espera é feita com um loop +while:

+
# loop infinito
+while True:
+	if btn.value ==0:			   	# Se botão pressionado                
+		led.value=not led.value		# inverte estado do LED
+		while btn.value==0:			# Aguarda botão ser solto
+			time.sleep(0.01)		# delay de 10 ms
+
+

Conclusão

+

Neste exemplo, fizemos uma aplicação simples para leitura de uma entrada digital(botão) e acionamento de uma saída digital(LED). Esse exemplo servirá de base para quando você precisar trabalhar com entradas e saídas digitais em seus projetos. A configuração é sempre a mesma.

+

Inclua mais um botão e mais um LED no circuito com funcionamento igual ao que fizemos.

+
AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-circuitpython/ferramentas/index.html b/docs/franzininho-wifi/exemplos-circuitpython/ferramentas/index.html index ba72e347e..17ef9af3f 100755 --- a/docs/franzininho-wifi/exemplos-circuitpython/ferramentas/index.html +++ b/docs/franzininho-wifi/exemplos-circuitpython/ferramentas/index.html @@ -1,18 +1,131 @@ - + - -Instalando as ferramentas | Franzininho - - - + +Instalando as ferramentas | Franzininho + + + -
-

Instalando as ferramentas

O CircuitPython não exige ferramentas específicas para programação. Um simples editor de texto já é suficiente. Porém, para facilitar e dar maior produtividade a codificação podemos usar algumas ferramentas.

Recomendamos as seguintes ferramentas para trabalhar com o CircuitPython:

Nesse tutorial focaremos no Mu Editor pela simplicidade e facilidade do seu uso. Abaixo exibimos o processo de instalação para os sistemas operacionais Windows e Linux.

Windows

Instalando o Mu Editor

Para a instalação do Mu Editor no Windows você deve seguir os seguintes passos:

Passo 1: Acesse o site https://codewith.mu/ e clique em Download:

imagem1

Passo 2: Clique na opção Windows Installer.

imagem2

Passo 3: Salve-o em seu computador.

imagem3

Passo 4: Aguarde até terminar o download e após isso clique em abrir o arquivo que você acabou de baixar.

imagem4

Passo 5: Após baixar o programa, dê dois cliques e então irá aparecer uma tela onde você terá que aceitar os termos de uso do software, clique na caixa de seleção e pressione Install e aguarde a instalação.

imagem5

Passo 8: Procure em seu computador: Mu Editor

imagem8

Passo 9: Ao abrir o programa aguarde, está é a tela de inicio do Mu Editor.

imagem-extra

Passo 10: Após isso escolha CircuitPython, conforme a imagem abaixo: -se por acaso ele não abrir, clique em "Modo".

imagem9

Passo 11: Pronto, agora é só se divertir!

imagem10

Passo 12: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na próxima seção.

Instalação de terminal serial para acesso ao REPL (Opcional)

A seguir apresentaremos a instalação de terminal serial para acesso ao REPL através da comunicação serial.

Instalaremos o terminal serial Putty para nossos exemplos. Faça o download em: https://www.putty.org/

No site, clique na primeira opção

imagem1

Veja qual é o seu sistema. No meu caso é de 64bits por isso vou clicar na opção de 64 bits x86. Após isso é só salvar.

imagem2

Após realizar o download, dê dois cliques no arquivo. Será aberta a janela conforme a figura abaixo. Clique em next e depois em install:

imagem4

imagem3

Novamente clique em install:

imagem4

Aguarde e clique em finish:

imagem5

Pronto finalizamos a etapa de configuração. O próximo passo é abrir o programa PuTTy em seu computador, mais abaixo estarei explicando os primeiros passos com ele.

Como citei acima, abra o programa PuTTY

imagem1

imagem2

Então abrirá uma janela conforme a imagem acima. Enquanto isso, vamos até o gerenciador de dispositivos.

Vá em Portas (COM e LTP). Aqui você encontra em qual porta a placa está conectada. Clicando para expandir você verá Dispositivo Serial USB (COM3)

imagem3

Agora faremos algumas alterações, conforme a imagem abaixo, em COM 1 altere para COM3 e selecione a opção Serial e clique em open.

imagem4

Então aparecerá uma tela, similar a um terminal. Pressione Ctrl + C para entrar no interpretador Python da placa:

imagem5

Agora que a placa já está conectada, podemos enviar alguns comandos para ela executar através do REPL.

Digite print(“Olá, Mundo!”) e dê o enter.

imagem6

Executamos acima o comando print. Você pode testar outras mensagens trocando o texto que está entre aspas.

Podemos também executar algumas operações matemáticas.

imagem7

Também podemos ter acesso às funções do CircuitPython para acesso ao hardware. Vamos ver quais pinos a Franzininho WiFi possui disponível?

Digite import board, dê enter. Digite dir(board) e dê o enter.

imagem8

Esses são os pinos que trabalharemos para nossas aplicações.

Essa foi apenas uma experiência rápida para acesso ao REPL. Essa ferramenta nos ajudará a testar códigos ou dispositivos rapidamente.

Para editar códigos maiores e projetos que você precisa salvar, recomendamos que edite no arquivo code.py

Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):

Linux

Instalando o Mu Editor

Para a instalar o Mu Editor no Linux você deve seguir os passos a seguir:

Passo 1: Acesse o site https://codewith.mu/ e clique em Download:

imagem1

Passo 2: Clique na opção Python Package (Linux or Native Python)

imagem2

Passo 3: Abra seu terminal e digite o comando abaixo, ele vai instalar bibliotecas do python, aguarde até finalizar:

pip3 install mu-editor==1.1.0b5

Passo 4: Agora digite este comando:

mu-editor

Passo 5: Pronto, agora é só se divertir!

imagem3

Passo 6: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na próxima seção.

Instalação de terminal serial para acesso ao REPL (Opcional)

A seguir apresentaremos a instalação de terminal serial para acesso ao REPL através da comunicação serial.

Instale um terminal, por exemplo, para instalar o picocom, digite os comandos abaixo:

sudo apt-get update  
sudo apt-get install picocom

Para acessar a Franzininho WiFi através do REPL usando o terminal serial no Linux, o primeiro passo é conectar a placa Franzininho Wifi em seu computador e logo irá aparecer algo parecido com um dispositivo de pendrive, conforme a imagem abaixo:

imagem1

Agora abriremos o terminal Serial e a porta serial que a placa está conectada. Abra o terminal de comandos e digite o seguinte comando: picomcom /dev/ttyACM0 de enter.

imagem2

Agora pressione Ctrl+C no teclado e então aparecerá >>>

imagem3

Pronto, estamos na placa Franzininho WiFi e podemos enviar comandos diretamente para ela.

Digite: print(“Hello World”) e aperte o enter (você pode escrever qualquer coisa nas aspas, então aparecerá o que você escreveu:

imagem4

Note que estamos executando comando Python através do REPL.

Agora faremos uma operação matemática, digite um numero, escolha uma operação matemática e digite outro valor, aperte o enter e observe o resultado:

imagem5

Agora digite o seguinte código no terminal:

import board  
dir(board)

Então aparecerá o conjunto de pinos disponíveis na Franzininho Wifi.

imagem6

Esse foi apenas uma experiência rápia para acesso ao REPL. Essa ferramenta nos ajudará a testar códigos ou dispositivos rapidamente.

Para editar códigos maiores e projetos que você precisa salvar, recomendamos que edite no arquivo code.py

Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):

imagem7

Agora veremos o que é possível fazer com o CircuitPyhton. Bora lá?

Ferramentas Alternativas

Franzininho WiFi: Configurando o Thonny IDE para trabalhar com CircuitPython

AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
- - +

Instalando as ferramentas

O CircuitPython não exige ferramentas específicas para programação. Um simples editor de texto já é suficiente. Porém, para facilitar e dar maior produtividade a codificação podemos usar algumas ferramentas.

+

Recomendamos as seguintes ferramentas para trabalhar com o CircuitPython:

+ +

Nesse tutorial focaremos no Mu Editor pela simplicidade e facilidade do seu uso. Abaixo exibimos o processo de instalação para os sistemas operacionais Windows e Linux.

+ +

Windows

+

Instalando o Mu Editor

+

Para a instalação do Mu Editor no Windows você deve seguir os seguintes passos:

+

Passo 1: Acesse o site https://codewith.mu/ e clique em Download:

+

imagem1

+

Passo 2: Clique na opção Windows Installer.

+

imagem2

+

Passo 3: Salve-o em seu computador.

+

imagem3

+

Passo 4: Aguarde até terminar o download e após isso clique em abrir o arquivo que você acabou de baixar.

+

imagem4

+

Passo 5: Após baixar o programa, dê dois cliques e então irá aparecer uma tela onde você terá que aceitar os termos de uso do software, clique na caixa de seleção e pressione Install e aguarde a instalação.

+

imagem5

+

Passo 8: Procure em seu computador: Mu Editor

+

imagem8

+

Passo 9: Ao abrir o programa aguarde, está é a tela de inicio do Mu Editor.

+

imagem-extra

+

Passo 10: Após isso escolha CircuitPython, conforme a imagem abaixo: +se por acaso ele não abrir, clique em "Modo".

+

imagem9

+

Passo 11: Pronto, agora é só se divertir!

+

imagem10

+

Passo 12: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na próxima seção.

+

Instalação de terminal serial para acesso ao REPL (Opcional)

+

A seguir apresentaremos a instalação de terminal serial para acesso ao REPL através da comunicação serial.

+

Instalaremos o terminal serial Putty para nossos exemplos. Faça o download em: https://www.putty.org/

+

No site, clique na primeira opção

+

imagem1

+

Veja qual é o seu sistema. No meu caso é de 64bits por isso vou clicar na opção de 64 bits x86. Após isso é só salvar.

+

imagem2

+

Após realizar o download, dê dois cliques no arquivo. Será aberta a janela conforme a figura abaixo. Clique em next e depois em install:

+

imagem4

+

imagem3

+

Novamente clique em install:

+

imagem4

+

Aguarde e clique em finish:

+

imagem5

+

Pronto finalizamos a etapa de configuração. O próximo passo é abrir o programa PuTTy em seu computador, mais abaixo estarei explicando os primeiros passos com ele.

+

Como citei acima, abra o programa PuTTY

+

imagem1

+

imagem2

+

Então abrirá uma janela conforme a imagem acima. Enquanto isso, vamos até o gerenciador de dispositivos.

+

Vá em Portas (COM e LTP). Aqui você encontra em qual porta a placa está conectada. Clicando para expandir você verá Dispositivo Serial USB (COM3)

+

imagem3

+

Agora faremos algumas alterações, conforme a imagem abaixo, em COM 1 altere para COM3 e selecione a opção Serial e clique em open.

+

imagem4

+

Então aparecerá uma tela, similar a um terminal. Pressione Ctrl + C para entrar no interpretador Python da placa:

+

imagem5

+

Agora que a placa já está conectada, podemos enviar alguns comandos para ela executar através do REPL.

+

Digite print(“Olá, Mundo!”) e dê o enter.

+

imagem6

+

Executamos acima o comando print. Você pode testar outras mensagens trocando o texto que está entre aspas.

+

Podemos também executar algumas operações matemáticas.

+

imagem7

+

Também podemos ter acesso às funções do CircuitPython para acesso ao hardware. Vamos ver quais pinos a Franzininho WiFi possui disponível?

+

Digite import board, dê enter. Digite dir(board) e dê o enter.

+

imagem8

+

Esses são os pinos que trabalharemos para nossas aplicações.

+

Essa foi apenas uma experiência rápida para acesso ao REPL. Essa ferramenta nos ajudará a testar códigos ou dispositivos rapidamente.

+

Para editar códigos maiores e projetos que você precisa salvar, recomendamos que edite no arquivo code.py

+

Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):

+

Linux

+

Instalando o Mu Editor

+

Para a instalar o Mu Editor no Linux você deve seguir os passos a seguir:

+

Passo 1: Acesse o site https://codewith.mu/ e clique em Download:

+

imagem1

+

Passo 2: Clique na opção Python Package (Linux or Native Python)

+

imagem2

+

Passo 3: Abra seu terminal e digite o comando abaixo, ele vai instalar bibliotecas do python, aguarde até finalizar:

+

pip3 install mu-editor==1.1.0b5

+

Passo 4: Agora digite este comando:

+
mu-editor
+
+

Passo 5: Pronto, agora é só se divertir!

+

imagem3

+

Passo 6: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na próxima seção.

+

Instalação de terminal serial para acesso ao REPL (Opcional)

+

A seguir apresentaremos a instalação de terminal serial para acesso ao REPL através da comunicação serial.

+

Instale um terminal, por exemplo, para instalar o picocom, digite os comandos abaixo:

+
sudo apt-get update  
+sudo apt-get install picocom
+
+

Para acessar a Franzininho WiFi através do REPL usando o terminal serial no Linux, o primeiro passo é conectar a placa Franzininho Wifi em seu computador e logo irá aparecer algo parecido com um dispositivo de pendrive, conforme a imagem abaixo:

+

imagem1

+

Agora abriremos o terminal Serial e a porta serial que a placa está conectada. Abra o terminal de comandos e digite o seguinte comando: picomcom /dev/ttyACM0 de enter.

+

imagem2

+

Agora pressione Ctrl+C no teclado e então aparecerá >>>

+

imagem3

+

Pronto, estamos na placa Franzininho WiFi e podemos enviar comandos diretamente para ela.

+

Digite: print(“Hello World”) e aperte o enter (você pode escrever qualquer coisa nas aspas, então aparecerá o que você escreveu:

+

imagem4

+

Note que estamos executando comando Python através do REPL.

+

Agora faremos uma operação matemática, digite um numero, escolha uma operação matemática e digite outro valor, aperte o enter e observe o resultado:

+

imagem5

+

Agora digite o seguinte código no terminal:

+
import board  
+dir(board)
+
+

Então aparecerá o conjunto de pinos disponíveis na Franzininho Wifi.

+

imagem6

+

Esse foi apenas uma experiência rápia para acesso ao REPL. Essa ferramenta nos ajudará a testar códigos ou dispositivos rapidamente.

+

Para editar códigos maiores e projetos que você precisa salvar, recomendamos que edite no arquivo code.py

+

Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):

+

imagem7

+

Agora veremos o que é possível fazer com o CircuitPyhton. Bora lá?

+

Ferramentas Alternativas

+

Franzininho WiFi: Configurando o Thonny IDE para trabalhar com CircuitPython

+ +
AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-circuitpython/hello-world/index.html b/docs/franzininho-wifi/exemplos-circuitpython/hello-world/index.html index b565f73f9..17246f617 100755 --- a/docs/franzininho-wifi/exemplos-circuitpython/hello-world/index.html +++ b/docs/franzininho-wifi/exemplos-circuitpython/hello-world/index.html @@ -1,19 +1,74 @@ - + - -Hello World! | Franzininho - - - + +Hello World! | Franzininho + + + -
-

Hello World!

Nesse primeiro exemplo faremos um blink LED, nosso “Hello, World!” com a placa Franzininho WiFi programada em CircuitPython. Assim, aquecemos os motores para explorar diversas aplicações com CircuitPython na Franzininho WiFi.

Materiais necessários

  • 1 Placa Franzininho Wifi com CircuitPython;
  • 1 Protoboard;
  • 1 LED vermelho 3 mm;
  • 1 resistor 330 Ω;
  • Jumpers.

Circuito

Nosso primeiro circuito é bem simples. Realize a seguinte montagem:

franzininho-wifi-hello-world

Código

Digite o código abaixo no arquivo code.py que está no diretório CIRCUITPY e salve o arquivo:

Obs. Provavelmente você encontrará outro código no arquivo code.py. Apague-o e insira o código novo.

""" Hello, World! (Pisca LED)"""
import board
import time
from digitalio import DigitalInOut, Direction

# Configurando o pino do LED, o led que configurei foi o pino 4 = IO4
led = DigitalInOut(board.IO4)
led.direction = Direction.OUTPUT

#loop infinito - executando sempre
while True:
led.value = True
time.sleep(0.5)
led.value = False
time.sleep(0.5)

Finalizando a edição do arquivo, salve-o. -Após salvar o arquivo o LED pisca em intervalos de 0,5 segundos. (Blink LED)

Análise do código

Para acessar os pinos da placa precisamos importar o módulo board:

import board

Como precisaremos de intervalos de temporização importamos o módulo sleep:

import time

O LED foi conectado ao pino 4(IO4) da Franzininho WiFi. Como o LED é um atuador, preciamos configurar o pino como uma saída digital. Para isso, precisamos importar os seguintes módulos: -from digitalio import DigitalInOut, Direction

from digitalio import DigitalInOut, Direction

Com os módulos importados podemos acessar as funções de configuração do pino digital:

led = DigitalInOut(board.IO4)
led.direction = Direction.OUTPUT

Note que primeiro mapeamos o pino e depois configuramos a direção.

Para que o LED fique piscando infinitamente em intervalos de 500 ms, fazemos um loop infinito com o laço while. O valor do LED é invertido a cada 0,5 s loop:

while True:    
led.value = True
time.sleep(0.5)
led.value = False
time.sleep(0.5)
Sugestão

Altere o tempo de intervalo para 0.1 e 1 e observe o efeito.

Conclusão

Neste primeiro exemplo de programação da Franzininho WiFi com o CircuitPython fizemos um código simples em Python para piscar o LED em intervalos de 0,5 segundos. Esse exemplo serviu para nos ensinar como importar as bibliotecas, configurar o pino como saída digital e criar um loop infinito para piscar o LED. Você pode alterar o intervalo de tempo alterando o parâmetro na função sleep.

Com esse exemplo dominado, podemos passar para a próxima etapa.

AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
- - +

Hello World!

Nesse primeiro exemplo faremos um blink LED, nosso “Hello, World!” com a placa Franzininho WiFi programada em CircuitPython. Assim, aquecemos os motores para explorar diversas aplicações com CircuitPython na Franzininho WiFi.

+

Materiais necessários

+
    +
  • 1 Placa Franzininho Wifi com CircuitPython;
  • +
  • 1 Protoboard;
  • +
  • 1 LED vermelho 3 mm;
  • +
  • 1 resistor 330 Ω;
  • +
  • Jumpers.
  • +
+

Circuito

+

Nosso primeiro circuito é bem simples. Realize a seguinte montagem:

+

franzininho-wifi-hello-world

+

Código

+

Digite o código abaixo no arquivo code.py que está no diretório CIRCUITPY e salve o arquivo:

+

Obs. Provavelmente você encontrará outro código no arquivo code.py. Apague-o e insira o código novo.

+
""" Hello, World! (Pisca LED)"""
+import board
+import time
+from digitalio import DigitalInOut, Direction
+
+# Configurando o pino do LED, o led que configurei foi o pino 4 = IO4
+led = DigitalInOut(board.IO4)
+led.direction = Direction.OUTPUT
+
+#loop infinito - executando sempre
+while True:    
+    led.value = True
+    time.sleep(0.5)
+    led.value = False
+    time.sleep(0.5)
+
+

Finalizando a edição do arquivo, salve-o. +Após salvar o arquivo o LED pisca em intervalos de 0,5 segundos. (Blink LED)

+

Análise do código

+

Para acessar os pinos da placa precisamos importar o módulo board:

+
import board
+
+

Como precisaremos de intervalos de temporização importamos o módulo sleep:

+
import time
+
+

O LED foi conectado ao pino 4(IO4) da Franzininho WiFi. Como o LED é um atuador, preciamos configurar o pino como uma saída digital. Para isso, precisamos importar os seguintes módulos: +from digitalio import DigitalInOut, Direction

+
from digitalio import DigitalInOut, Direction
+
+

Com os módulos importados podemos acessar as funções de configuração do pino digital:

+
led = DigitalInOut(board.IO4)
+led.direction = Direction.OUTPUT
+
+

Note que primeiro mapeamos o pino e depois configuramos a direção.

+

Para que o LED fique piscando infinitamente em intervalos de 500 ms, fazemos um loop infinito com o laço while. O valor do LED é invertido a cada 0,5 s loop:

+
while True:    
+    led.value = True
+    time.sleep(0.5)
+    led.value = False
+    time.sleep(0.5)
+
+

Altere o tempo de intervalo para 0.1 e 1 e observe o efeito.

+

Conclusão

+

Neste primeiro exemplo de programação da Franzininho WiFi com o CircuitPython fizemos um código simples em Python para piscar o LED em intervalos de 0,5 segundos. Esse exemplo serviu para nos ensinar como importar as bibliotecas, configurar o pino como saída digital e criar um loop infinito para piscar o LED. Você pode alterar o intervalo de tempo alterando o parâmetro na função sleep.

+

Com esse exemplo dominado, podemos passar para a próxima etapa.

+
AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-circuitpython/irrigacao/index.html b/docs/franzininho-wifi/exemplos-circuitpython/irrigacao/index.html index daf3b0a43..020252acf 100755 --- a/docs/franzininho-wifi/exemplos-circuitpython/irrigacao/index.html +++ b/docs/franzininho-wifi/exemplos-circuitpython/irrigacao/index.html @@ -1,24 +1,154 @@ - + - -Sistema de irrigação automático | Franzininho - - - + +Sistema de irrigação automático | Franzininho + + + -
-

Sistema de irrigação automático

Um sistema de irrigação automático é uma solução para ajudar a manter de forma sistemática a irrigação -de suas plantas.

Esse sistema permite programar as regras de acordo com as necessidades das plantas. Isso garante uma economia +

Sistema de irrigação automático

Um sistema de irrigação automático é uma solução para ajudar a manter de forma sistemática a irrigação +de suas plantas.

+

Esse sistema permite programar as regras de acordo com as necessidades das plantas. Isso garante uma economia de água e tempo, para quem possui um jardim ou horta e para grandes sistemas de irrigação -na agricultura.

Agora vamos descrever um exemplo de um sistema de irrigação automatico possível de construir de forma simples mas com grande -poder de automação.

Materiais Usados

  • 1 Placa Franzininho WiFi
  • 1 Sensor de umidade do solo - Higrômetro com saida digital e analogica
  • 1 Protoboard de 830 pontos
  • 1 Mini bomba de água submersa 5v
  • 1 Relé 5v
  • Cabos Jumpers - Macho/Macho e Macho/Femea

Circuito Eletrônico

Para o exemplo que vamos ver a seguir, realize a seguinte montagem:

Circuito Servo Motor

Observações:

  • O relé é conectado a 5V da placa
  • Cabos azuis: saídas digitais
  • Cabos vermelhos: VCC
  • Cabos pretos: GND

Código-fonte

Para iniciar, é necessário já ter seguido o tutorial de Primeiros passos, que também se encontra na página da Franzininho em documentação, -ter o CircuitPython instalado na placa e para esse projeto utilizamos o Mu editor. Para obter esse ambiente basta seguir os passos em Instalando as ferramentas.

A partir daqui consideramos que os primeiros passos de instalação e do ambiente foram concluídos. -Abaixo está o código do sistema na placa usando CircuitPython, você pode copiar e colar o código fonte na sua IDE.

import board
import time

from digitalio import DigitalInOut, Direction, Pull
from analogio import AnalogIn

relay = DigitalInOut(board.IO0)
relay.switch_to_output()

humid_analog = AnalogIn(board.IO1)
humid_digital = DigitalInOut(board.IO4)
humid_digital.direction = Direction.INPUT

relay.value = True

wait_time = 1
watering_time = 1

dry_value = 51130

while True:
try:
print("humid (Digital value):", humid_digital.value)
print("humid (Analogic value):", humid_analog.value)

time.sleep(1);

if humid_analog.value > dry_value :
print("Starting watering...")

relay.value = False

time.sleep(watering_time)
print("Finishing watering.")

else:
relay.value = True
time.sleep(wait_time)

except RuntimeError as e:
print("Read failure")

time.sleep(1)

Após terminar de escrever, e analisar no ambiente de desenvolvimento. Basta salvar e apertar no serial para executar no mu-editor. Caso esteja utilizando outra IDE, basta executá-la no ambiente escolhido.

Entendendo o Código-fonte

O primeiro módulo que vamos importar, é o board. Ele possibilita o acesso aos pinos da placa:

import board

Este módulo fornece várias funções relacionadas ao tempo:

import time

O digitalio é um módulo que contém classes para fornecer acesso a IO digital básico:

from digitalio import DigitalInOut, Direction, Pull

Cria um objeto e conecta o objeto com uma entrada analógica:

from analogio import AnalogIn 

Agora, vamos atribuir o relé:

relay = DigitalInOut(board.IO0)
relay.switch_to_output()

Atribuimos as entradas analógicas e digitais do sensor de umidade do solo na porta 1, sendo esta uma porta analógica e na porta 4 a digital do franzinho. Configurando também o pino como entrada digital:

humid_analog = AnalogIn(board.IO1)        # analog
humid_digital = DigitalInOut(board.IO4) # digital
humid_digital.direction = Direction.INPUT

O relé foi configurado para usar a porta "sempre fechada",então precisamos defini-lo com o valor verdadeiro para que o relé fique inativo:

relay.value = True

Período de tempo para verificar o sistema. O controle desse período de tempo para manter a rega da planta depende da voltagem que alimenta a bomba:

wait_time = 1
watering_time = 1

Adaptado de acordo com o sensor de umidade do solo, é necessario fazer laguns testes na sua terra para saber o valor da terra que vai ser utilizada:

dry_value = 51130

Por fim, dentro do while True, o nosso loop, faremos com que os sensores leiam continuamente e imprima os valores lidos do sensor de umidade do solo:

while True:
try:

print("humid (Digital value):", humid_digital.value)
print("humid (Analogic value):", humid_analog.value)

time.sleep(1);

Já na condição abaixo, caso o sensor receba um valor que indique que a terra está seca, entramos no condicional if e conectamos o relé no "sempre fechado", -e é por isso que adicionar um Falso a "sempre fechado", signinifica aberto. Então a bomba é acionada realizando a irrigação:

if humid_analog.value > dry_value :
print("Starting watering...")

relay.value = False

time.sleep(watering_time)
print("Finishing watering.")

Se o nível estiver OK, apenas nos certificamos de que o relé esteja fechado:

        else:
relay.value = True
time.sleep(wait_time)

E colocamos o sensor para dormir novamente:

    time.sleep(1)

Também é possivel encontrar o codigo em https://github.com/GiulianeEC/SystemOfIrrigation_Franzininho

Conclusão

No decorrer da explicação, aprendemos a como montar de maneira simples um protótipo de irrigação automatizado.

AutorGiuliane Eulália Corrêa
Data:28/01/2023
- - +na agricultura.

+

Agora vamos descrever um exemplo de um sistema de irrigação automatico possível de construir de forma simples mas com grande +poder de automação.

+

Materiais Usados

+
    +
  • 1 Placa Franzininho WiFi
  • +
  • 1 Sensor de umidade do solo - Higrômetro com saida digital e analogica
  • +
  • 1 Protoboard de 830 pontos
  • +
  • 1 Mini bomba de água submersa 5v
  • +
  • 1 Relé 5v
  • +
  • Cabos Jumpers - Macho/Macho e Macho/Femea
  • +
+

Circuito Eletrônico

+

Para o exemplo que vamos ver a seguir, realize a seguinte montagem:

+

Circuito Servo Motor

+

Observações:

+
    +
  • O relé é conectado a 5V da placa
  • +
  • Cabos azuis: saídas digitais
  • +
  • Cabos vermelhos: VCC
  • +
  • Cabos pretos: GND
  • +
+

Código-fonte

+

Para iniciar, é necessário já ter seguido o tutorial de Primeiros passos, que também se encontra na página da Franzininho em documentação, +ter o CircuitPython instalado na placa e para esse projeto utilizamos o Mu editor. Para obter esse ambiente basta seguir os passos em Instalando as ferramentas.

+

A partir daqui consideramos que os primeiros passos de instalação e do ambiente foram concluídos. +Abaixo está o código do sistema na placa usando CircuitPython, você pode copiar e colar o código fonte na sua IDE.

+
import board
+import time
+
+from digitalio import DigitalInOut, Direction, Pull
+from analogio import AnalogIn  
+
+relay = DigitalInOut(board.IO0)
+relay.switch_to_output()
+
+humid_analog = AnalogIn(board.IO1)       
+humid_digital = DigitalInOut(board.IO4)   
+humid_digital.direction = Direction.INPUT 
+
+relay.value = True
+
+wait_time = 1
+watering_time = 1
+
+dry_value = 51130
+
+while True:
+    try:
+        print("humid (Digital value):", humid_digital.value)
+        print("humid (Analogic value):", humid_analog.value)
+
+        time.sleep(1);
+
+        if humid_analog.value > dry_value :
+            print("Starting watering...")
+
+            relay.value = False
+
+            time.sleep(watering_time)
+            print("Finishing watering.")
+
+        else:
+            relay.value = True
+            time.sleep(wait_time)
+
+    except RuntimeError as e:
+        print("Read failure")
+
+    time.sleep(1)
+
+

Após terminar de escrever, e analisar no ambiente de desenvolvimento. Basta salvar e apertar no serial para executar no mu-editor. Caso esteja utilizando outra IDE, basta executá-la no ambiente escolhido.

+

Entendendo o Código-fonte

+

O primeiro módulo que vamos importar, é o board. Ele possibilita o acesso aos pinos da placa:

+
import board
+
+

Este módulo fornece várias funções relacionadas ao tempo:

+
import time
+
+

O digitalio é um módulo que contém classes para fornecer acesso a IO digital básico:

+
from digitalio import DigitalInOut, Direction, Pull
+
+

Cria um objeto e conecta o objeto com uma entrada analógica:

+
from analogio import AnalogIn 
+
+

Agora, vamos atribuir o relé:

+
relay = DigitalInOut(board.IO0)
+relay.switch_to_output()
+
+

Atribuimos as entradas analógicas e digitais do sensor de umidade do solo na porta 1, sendo esta uma porta analógica e na porta 4 a digital do franzinho. Configurando também o pino como entrada digital:

+
humid_analog = AnalogIn(board.IO1)        # analog
+humid_digital = DigitalInOut(board.IO4)   # digital
+humid_digital.direction = Direction.INPUT
+
+

O relé foi configurado para usar a porta "sempre fechada",então precisamos defini-lo com o valor verdadeiro para que o relé fique inativo:

+
relay.value = True
+
+

Período de tempo para verificar o sistema. O controle desse período de tempo para manter a rega da planta depende da voltagem que alimenta a bomba:

+
wait_time = 1
+watering_time = 1
+
+

Adaptado de acordo com o sensor de umidade do solo, é necessario fazer laguns testes na sua terra para saber o valor da terra que vai ser utilizada:

+
dry_value = 51130
+
+

Por fim, dentro do while True, o nosso loop, faremos com que os sensores leiam continuamente e imprima os valores lidos do sensor de umidade do solo:

+
while True:
+    try:
+
+        print("humid (Digital value):", humid_digital.value)
+        print("humid (Analogic value):", humid_analog.value)
+
+        time.sleep(1);
+
+

Já na condição abaixo, caso o sensor receba um valor que indique que a terra está seca, entramos no condicional if e conectamos o relé no "sempre fechado", +e é por isso que adicionar um Falso a "sempre fechado", signinifica aberto. Então a bomba é acionada realizando a irrigação:

+
if humid_analog.value > dry_value :
+            print("Starting watering...")
+
+            relay.value = False
+
+            time.sleep(watering_time)
+            print("Finishing watering.")
+
+
+

Se o nível estiver OK, apenas nos certificamos de que o relé esteja fechado:

+
        else:
+            relay.value = True
+            time.sleep(wait_time)
+
+
+

E colocamos o sensor para dormir novamente:

+
    time.sleep(1)
+
+

Também é possivel encontrar o codigo em https://github.com/GiulianeEC/SystemOfIrrigation_Franzininho

+

Conclusão

+

No decorrer da explicação, aprendemos a como montar de maneira simples um protótipo de irrigação automatizado.

+
AutorGiuliane Eulália Corrêa
Data:28/01/2023
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos/index.html b/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos/index.html index a2e23fe98..b1d24dc3d 100755 --- a/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos/index.html +++ b/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos/index.html @@ -1,17 +1,29 @@ - + - -Primeiros Passos | Franzininho - - - + +Primeiros Passos | Franzininho + + + -
-

Primeiros Passos

Este documento pretende ajudá-lo a configurar a placa Franzininho WiFi para ser programada usando o CircuitPython.

O CircuitPython é um fork do projeto MicroPython, realizado pela empresa Adafruit. A Adafruit vem desenvolvendo diversas bibliotecas e recursos para programação de microcontroladores com Python. Saiba mais sobre o projeto em: CircuitPython.

A seguir apresentamos os passos para gravação do CircuitPython na Franzininho WiFi e preparar o ambiente.

O que é CircuitPython?

CircuitPython é uma linguagem de programação projetada para simplificar a experimentação e o aprendizado de programação em placas com microcontroladores de baixo custo. Isso torna os primeiros passos mais fáceis do que nunca, sem a necessidade de downloads iniciais no computador de trabalho. Assim, após configurar a placa, abra qualquer editor de texto e comece a editar o código.

O CircuitPython traz o Python para dentro dos microcontroladores. Você pode saber mais sobre o projeto CircuitPython aqui: learn.adafruit.com/circuitpython

A placa Franzininho WiFi foi adicionada ao CircuitPython e todas as releases do CircuitPyhton serão compilados para ela. Esse foi um passo muito importante para o projeto e possibilitará o desenvolvimento de aplicações com o ESP32-S2 usando a linguagem Python.

Instalação

Antes de começar a diversão de programar a Franzininho WIFI com o CircuitPython, precisamos realizar alguns passos para configuração. Nesta etapa gravaremos o firmware do CircuitPython na Franzininho WiFi e prepararemos o ambiente para você usar sua placa.

info

Se sua placa já está com o CircuitPython, você não precisa fazer essa etapa. Para verificar se sua placa está com CircuitPython plugue-a no computador e veja se é criado um dispositivo de armazenamento chamado CIRCUITPY. Caso contrário, faça o procedimento abaixo.

Nesse momento você precisará apenas de um computador com o sistema operacional que você está acostumado a usar e a placa Franzininho WiFi.

Bora! Colocar a mão na massa?

Gravação do CircuitPython na Franzininho WiFi

Ferramenta de gravação: https://franzininho.github.io/webdfu-franzininho-wifi/dfu-util/

AutorFábio Souza
Data:16/09/2021
- - +

Primeiros Passos

Este documento pretende ajudá-lo a configurar a placa Franzininho WiFi para ser programada usando o CircuitPython.

+

O CircuitPython é um fork do projeto MicroPython, realizado pela empresa Adafruit. A Adafruit vem desenvolvendo diversas bibliotecas e recursos para programação de microcontroladores com Python. Saiba mais sobre o projeto em: CircuitPython.

+

A seguir apresentamos os passos para gravação do CircuitPython na Franzininho WiFi e preparar o ambiente.

+

O que é CircuitPython?

+

CircuitPython é uma linguagem de programação projetada para simplificar a experimentação e o aprendizado de programação em placas com microcontroladores de baixo custo. Isso torna os primeiros passos mais fáceis do que nunca, sem a necessidade de downloads iniciais no computador de trabalho. Assim, após configurar a placa, abra qualquer editor de texto e comece a editar o código.

+

O CircuitPython traz o Python para dentro dos microcontroladores. Você pode saber mais sobre o projeto CircuitPython aqui: learn.adafruit.com/circuitpython

+

A placa Franzininho WiFi foi adicionada ao CircuitPython e todas as releases do CircuitPyhton serão compilados para ela. Esse foi um passo muito importante para o projeto e possibilitará o desenvolvimento de aplicações com o ESP32-S2 usando a linguagem Python.

+

Instalação

+

Antes de começar a diversão de programar a Franzininho WIFI com o CircuitPython, precisamos realizar alguns passos para configuração. Nesta etapa gravaremos o firmware do CircuitPython na Franzininho WiFi e prepararemos o ambiente para você usar sua placa.

+

Se sua placa já está com o CircuitPython, você não precisa fazer essa etapa. Para verificar se sua placa está com CircuitPython plugue-a no computador e veja se é criado um dispositivo de armazenamento chamado CIRCUITPY. Caso contrário, faça o procedimento abaixo.

+

Nesse momento você precisará apenas de um computador com o sistema operacional que você está acostumado a usar e a placa Franzininho WiFi.

+

Bora! Colocar a mão na massa?

+

Gravação do CircuitPython na Franzininho WiFi

+ +

Ferramenta de gravação: https://franzininho.github.io/webdfu-franzininho-wifi/dfu-util/

+
AutorFábio Souza
Data:16/09/2021
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-circuitpython/pwm/index.html b/docs/franzininho-wifi/exemplos-circuitpython/pwm/index.html index 5d33123de..338e5d423 100755 --- a/docs/franzininho-wifi/exemplos-circuitpython/pwm/index.html +++ b/docs/franzininho-wifi/exemplos-circuitpython/pwm/index.html @@ -1,19 +1,111 @@ - + - -PWM - Pulse Width Modulation | Franzininho - - - + +PWM - Pulse Width Modulation | Franzininho + + + -
-

PWM - Pulse Width Modulation

Neste artigo vamos aprender a usar o PWM no CircuitPython, uma técnica muito usada para controle de potência. Veja como é fácil aplicar.

PWM é abreviação para, Pulse Width Modulation – que significa – Modulação por Largura de Pulso. Essa é uma técnica onde, uma saída digital é usada para simular uma saída analógica. Isso acontece por meio de mudanças constantes de sinal, que são imperceptíveis e, dessa maneira o componente conectado a esse pino apenas tira uma média de quanto tempo está em estado alto e baixo. Quanto mais tempo ligado, maior o valor e, consequentemente, quando menor tempo ligado, menor o valor.

Neste exemplo, vamos aprender a usar PWM com CircuitPython na Franzininho WiFi.

Materiais necessários

  • 1 Placa Franzininho WiFi com CircuitPython;
  • 1 Protoboard;
  • 1 LED;
  • 1 potenciômetro de 10 kΩ;
  • 1 resistor de 220 Ω ou 330 Ω;
  • Jumpers.

Circuito

Para os nossos primeiros experimentos, realize a seguinte montagem:

franzininho-wifi-pwm -Figura 1 – Circuito para teste de PWM com CircuitPython na Franzininho WiFi

Código para PWM com CircuitPython

Para esse código, utilizaremos a biblioteca simpleio, que será necessária para realizarmos a conversão de valores. As bibliotecas do CircuitPython podem ser encontradas no seguinte endereço: https://circuitpython.org/libraries. Faça o download, de acordo com a versão do CircuitPython instalada na sua Franzininho WiFi.

franzininho-wifi-pwm

Após baixar o arquivo, copie a pasta desejada para a pasta de arquivos da Franzininho WiFi:

simpleio.mpy

Escreva o código abaixo no arquivo code.py, que está localizado no diretório da Franzininho:

import pwmio
import math
import simpleio
from analogio import AnalogIn
from time import sleep

potIn = board.IO2
pot = AnalogIn(potIn)

LED = board.IO4
led = pwmio.PWMOut(LED)

def converter(pin):
pinValue = pin.value
mapValue = math.trunc(simpleio.map_range
(pinValue, 536, 51355, 0, 65535))
print('Valor Original: ', pinValue,
'Valor Convertido: ', mapValue)
return mapValue

while True:
potValue = converter(pot)
led.duty_cycle = potValue
sleep(0.1)

Depois de finalizar a edição do código, salve. Execute o programa.

Utilizaremos o módulo board para acessarmos os pinos da Franzininho:

import board

E para configurarmos os pinos PWM, é necessário importarmos o pwmio:

import pwmio

Além disso, será necessário a biblioteca math, para “eliminar” as casas decimais:

import math

Como dito anteriormente, usaremos o módulo simpleio:

import simpleio

Ademais, importaremos a função AnalogIn do módulo analogio para, configuramos o potenciômetro como uma entrada analógica:

from analogio import AnalogIn

Também, iremos chamar a função sleep, da biblioteca time, pois precisaremos de intervalos de temporização:

from time import sleep

Agora, após importarmos todas os módulos que vamos utilizar, vamos configurar os pinos. Primeiro, vamos associar o GPIO2 a uma variável chamada potIn. Após isso, vamos criar um objeto chamado pot e configurá-lo como uma entrada analógica:

LED = board.IO4
led = pwmio.PWMOut(LED)

Configurações iniciais encerradas! Depois disso, vamos criar uma função chamada converte. Como parâmetro, essa função receberá o pino que estamos realizando a leitura:

def converter(pin):

Dentro da função, realizaremos a leitura do valor do potenciômetro, que será armazenada na variável pinValue:

pinValue = pin.value

Além disso, vamos converter o valor do potenciômetro para o valor aceito pelos pinos PWM. Para isso, vamos usar a função simpleio.map_range. Os parâmetros dessa função são: valor bruto (no caso, o valor recebido naquele instante), valor mínimo de entrada, valor máximo de entrada, valor mínimo de saída e valor máximo de saída. E, vamos precisar da função math.trunc, que eliminará as casas decimais. Todas essas informações ficarão armazenadas na variável mapValue:

mapValue = math.trunc(simpleio.map_range
(pinValue, 536, 51355, 0, 65535))

Colocaremos o print apenas para visualizarmos a conversão:

print('Valor Original: ', pinValue,
'Valor Convertido: ', mapValue)
return mapValue

E a função nos retornará o valor de mapValue:

return mapValue

E por fim, o loop. Dentro do while True, vamos associar o valor retornado pela função converte a variável potValue e mandar esse valor para o led. Para enviarmos um valor para o componente, utilizamos a função duty_cycle, que é o ciclo de trabalho, ou seja, quanto tempo o sinal estará ligado ou não. Também, colocaremos um delay:

while True:
potValue = converter(pot)
led.duty_cycle = potValue
sleep(0.1)

Conclusão

Nesse exemplo, aprendemos a como usar os pinos PWM com CircuitPython e, como controlá-los através de um potenciômetro. Além disso, aprendemos a como mapear valores. No próximo exemplo, vamos aprender a como usar Servos Motores. -Outros artigos da série.

AutorMateus Adriano Ventura Vieira
Data:09/05/2022
- - +

PWM - Pulse Width Modulation

Neste artigo vamos aprender a usar o PWM no CircuitPython, uma técnica muito usada para controle de potência. Veja como é fácil aplicar.

+

PWM é abreviação para, Pulse Width Modulation – que significa – Modulação por Largura de Pulso. Essa é uma técnica onde, uma saída digital é usada para simular uma saída analógica. Isso acontece por meio de mudanças constantes de sinal, que são imperceptíveis e, dessa maneira o componente conectado a esse pino apenas tira uma média de quanto tempo está em estado alto e baixo. Quanto mais tempo ligado, maior o valor e, consequentemente, quando menor tempo ligado, menor o valor.

+

Neste exemplo, vamos aprender a usar PWM com CircuitPython na Franzininho WiFi.

+

Materiais necessários

+
    +
  • 1 Placa Franzininho WiFi com CircuitPython;
  • +
  • 1 Protoboard;
  • +
  • 1 LED;
  • +
  • 1 potenciômetro de 10 kΩ;
  • +
  • 1 resistor de 220 Ω ou 330 Ω;
  • +
  • Jumpers.
  • +
+

Circuito

+

Para os nossos primeiros experimentos, realize a seguinte montagem:

+

franzininho-wifi-pwm +Figura 1 – Circuito para teste de PWM com CircuitPython na Franzininho WiFi

+

Código para PWM com CircuitPython

+

Para esse código, utilizaremos a biblioteca simpleio, que será necessária para realizarmos a conversão de valores. As bibliotecas do CircuitPython podem ser encontradas no seguinte endereço: https://circuitpython.org/libraries. Faça o download, de acordo com a versão do CircuitPython instalada na sua Franzininho WiFi.

+

franzininho-wifi-pwm

+

Após baixar o arquivo, copie a pasta desejada para a pasta de arquivos da Franzininho WiFi:

+

simpleio.mpy

+

Escreva o código abaixo no arquivo code.py, que está localizado no diretório da Franzininho:

+
import pwmio
+import math
+import simpleio
+from analogio import AnalogIn
+from time import sleep
+
+potIn = board.IO2
+pot = AnalogIn(potIn)
+
+LED = board.IO4
+led = pwmio.PWMOut(LED)
+
+def converter(pin):
+    pinValue = pin.value
+    mapValue = math.trunc(simpleio.map_range
+               (pinValue, 536, 51355, 0, 65535))
+    print('Valor Original: ', pinValue,
+          'Valor Convertido: ', mapValue)
+    return mapValue
+
+while True:
+    potValue = converter(pot)
+    led.duty_cycle = potValue
+    sleep(0.1)
+
+

Depois de finalizar a edição do código, salve. Execute o programa.

+

Utilizaremos o módulo board para acessarmos os pinos da Franzininho:

+
import board
+
+

E para configurarmos os pinos PWM, é necessário importarmos o pwmio:

+
import pwmio
+
+

Além disso, será necessário a biblioteca math, para “eliminar” as casas decimais:

+
import math
+
+

Como dito anteriormente, usaremos o módulo simpleio:

+
import simpleio
+
+

Ademais, importaremos a função AnalogIn do módulo analogio para, configuramos o potenciômetro como uma entrada analógica:

+
from analogio import AnalogIn
+
+

Também, iremos chamar a função sleep, da biblioteca time, pois precisaremos de intervalos de temporização:

+
from time import sleep
+
+

Agora, após importarmos todas os módulos que vamos utilizar, vamos configurar os pinos. Primeiro, vamos associar o GPIO2 a uma variável chamada potIn. Após isso, vamos criar um objeto chamado pot e configurá-lo como uma entrada analógica:

+
LED = board.IO4
+led = pwmio.PWMOut(LED)
+
+

Configurações iniciais encerradas! Depois disso, vamos criar uma função chamada converte. Como parâmetro, essa função receberá o pino que estamos realizando a leitura:

+
def converter(pin):
+
+

Dentro da função, realizaremos a leitura do valor do potenciômetro, que será armazenada na variável pinValue:

+
pinValue = pin.value
+
+

Além disso, vamos converter o valor do potenciômetro para o valor aceito pelos pinos PWM. Para isso, vamos usar a função simpleio.map_range. Os parâmetros dessa função são: valor bruto (no caso, o valor recebido naquele instante), valor mínimo de entrada, valor máximo de entrada, valor mínimo de saída e valor máximo de saída. E, vamos precisar da função math.trunc, que eliminará as casas decimais. Todas essas informações ficarão armazenadas na variável mapValue:

+
mapValue = math.trunc(simpleio.map_range
+               (pinValue, 536, 51355, 0, 65535))
+
+

Colocaremos o print apenas para visualizarmos a conversão:

+
print('Valor Original: ', pinValue,
+          'Valor Convertido: ', mapValue)
+    return mapValue
+
+

E a função nos retornará o valor de mapValue:

+
return mapValue
+
+

E por fim, o loop. Dentro do while True, vamos associar o valor retornado pela função converte a variável potValue e mandar esse valor para o led. Para enviarmos um valor para o componente, utilizamos a função duty_cycle, que é o ciclo de trabalho, ou seja, quanto tempo o sinal estará ligado ou não. Também, colocaremos um delay:

+
while True:
+    potValue = converter(pot)
+    led.duty_cycle = potValue
+    sleep(0.1)
+
+

Conclusão

+

Nesse exemplo, aprendemos a como usar os pinos PWM com CircuitPython e, como controlá-los através de um potenciômetro. Além disso, aprendemos a como mapear valores. No próximo exemplo, vamos aprender a como usar Servos Motores. +Outros artigos da série.

+
AutorMateus Adriano Ventura Vieira
Data:09/05/2022
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04/index.html b/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04/index.html index 17cdf75ff..eedbf0490 100755 --- a/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04/index.html +++ b/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04/index.html @@ -1,19 +1,77 @@ - + - -Sensor de Distância Ultrassônico HC-SR04 | Franzininho - - - + +Sensor de Distância Ultrassônico HC-SR04 | Franzininho + + + -
-

Sensor de Distância Ultrassônico HC-SR04

Nesse exemplo aprenderemos a ler valores de distância com o sensor HC-SR04 usando o CircuitPython.

Materiais necessários

Identifique os seguintes materiais necessários para este projeto:

  • 1 Franzininho WiFi.
  • 1 Sensor de Distância Ultrassônico HC-SR04.
  • 1 Protoboard.
  • Cabos de ligação.

Circuito

A próxima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:

Circuito HC-SR04

A tabela abaixo resume as conexões entre o sensor e a Franzininho:

HC-SR04Franzininho WiFi
EchoGPIO35
TrigGPIO36
Vcc5v
GndGND

Código

Neste exemplo, vamos fazer o uso de uma biblioteca que implementa os métodos necessários para uso do sensor.

As bibliotecas para o CircuitPython podem ser obtidas através do endereço https://circuitpython.org/libraries. Escolha e baixe o arquivo de acordo com a versão do CircuitPyhthon que você tem instalado na Franzininho WiFi.

Bibliotecas

Em seguida, copie o arquivo diretamente para a pasta lib do sistema de arquivos da Franzininho WiFi:

  • adafruit_hcsr04.mpy

Implemente o programa abaixo no arquivo code.py que está localizado na pasta raiz da Franzininho WiFi.

import board
import time
import adafruit_hcsr04

sonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)

while True:
try:
print((sonar.distance,))
except RuntimeError:
print("Retrying!")
time.sleep(0.1)

Análise do código

Para acessar os pinos da placa precisamos importar o módulo board:

import board

Como precisaremos fazer o uso do sleep, importamos o módulo time:

import time

A biblioteca que vamos utilizar para realizar as leituras do sensor é o adafruit_hcsr04, importaremos esse módulo:

import adafruit_hcsr04

Em seguida criamos uma instância da classe HCSR04, passando como parâmetro trigger_pin sendo o pino 36, o echo_pin o pino 35 e o timeout sendo 0.5 segundos. +

Sensor de Distância Ultrassônico HC-SR04

Nesse exemplo aprenderemos a ler valores de distância com o sensor HC-SR04 usando o CircuitPython.

+

Materiais necessários

+

Identifique os seguintes materiais necessários para este projeto:

+
    +
  • 1 Franzininho WiFi.
  • +
  • 1 Sensor de Distância Ultrassônico HC-SR04.
  • +
  • 1 Protoboard.
  • +
  • Cabos de ligação.
  • +
+

Circuito

+

A próxima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:

+

Circuito HC-SR04

+

A tabela abaixo resume as conexões entre o sensor e a Franzininho:

+
HC-SR04Franzininho WiFi
EchoGPIO35
TrigGPIO36
Vcc5v
GndGND
+

Código

+

Neste exemplo, vamos fazer o uso de uma biblioteca que implementa os métodos necessários para uso do sensor.

+

As bibliotecas para o CircuitPython podem ser obtidas através do endereço https://circuitpython.org/libraries. Escolha e baixe o arquivo de acordo com a versão do CircuitPyhthon que você tem instalado na Franzininho WiFi.

+

Bibliotecas

+

Em seguida, copie o arquivo diretamente para a pasta lib do sistema de arquivos da Franzininho WiFi:

+
    +
  • adafruit_hcsr04.mpy
  • +
+

Implemente o programa abaixo no arquivo code.py que está localizado na pasta raiz da Franzininho WiFi.

+
import board
+import time
+import adafruit_hcsr04
+
+sonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)
+
+while True:
+    try:
+        print((sonar.distance,))
+    except RuntimeError:
+        print("Retrying!")
+    time.sleep(0.1)
+
+

Análise do código

+

Para acessar os pinos da placa precisamos importar o módulo board:

+
import board
+
+

Como precisaremos fazer o uso do sleep, importamos o módulo time:

+
import time
+
+

A biblioteca que vamos utilizar para realizar as leituras do sensor é o adafruit_hcsr04, importaremos esse módulo:

+
import adafruit_hcsr04
+
+

Em seguida criamos uma instância da classe HCSR04, passando como parâmetro trigger_pin sendo o pino 36, o echo_pin o pino 35 e o timeout sendo 0.5 segundos. O trigger_pin (em português: Gatilho) tem a função de disparar uma espécie de onda sonora ultrassônica, a qual irá colidir com algum obstáculo e retorna para o sensor fazendo com que o pino echo_pin envie pulsos para a Franzininho, o tempo desse processo será convertido em distância. O parâmetro timeout é o tempo máximo de leitura do sensor, que nesse caso é 0.5 segundos. -Conforme podemos observar na pinagem, disponível em https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi

sonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)

No loop infinito fazemos a leitura do valor de distância a cada 0.1 segundos através dos método sonar.distance, e imprimimos o valor lido no terminal serial. O valor retornado de sonar.distance tem a unidade de medida centímetros.

while True:
try:
print((sonar.distance,))
except RuntimeError:
print("Retrying!")
time.sleep(0.1)

Resultado

A figura a seguir exibe os valores lidos no terminal serial(REPL):

Terminal Serial

info

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

AutorWallace Brito
Data:31/10/2021
- - +Conforme podemos observar na pinagem, disponível em https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi

+
sonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)
+
+

No loop infinito fazemos a leitura do valor de distância a cada 0.1 segundos através dos método sonar.distance, e imprimimos o valor lido no terminal serial. O valor retornado de sonar.distance tem a unidade de medida centímetros.

+
while True:
+    try:
+        print((sonar.distance,))
+    except RuntimeError:
+        print("Retrying!")
+    time.sleep(0.1)
+
+

Resultado

+

A figura a seguir exibe os valores lidos no terminal serial(REPL):

+

Terminal Serial

+

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

+
AutorWallace Brito
Data:31/10/2021
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-circuitpython/serial-console/index.html b/docs/franzininho-wifi/exemplos-circuitpython/serial-console/index.html index 6f5c2635a..1ca623878 100755 --- a/docs/franzininho-wifi/exemplos-circuitpython/serial-console/index.html +++ b/docs/franzininho-wifi/exemplos-circuitpython/serial-console/index.html @@ -1,20 +1,116 @@ - + - -Serial Console | Franzininho - - - + +Serial Console | Franzininho + + + -
-

Serial Console

Neste exemplo iremos utilizar o console serial para controlar a cor do LED da Franzininho WiFi com CircuitPython.

Materiais necessários

  • 1 Placa Franzininho Wifi com CircuitPython;

Circuito

Para este exemplo não será necessário nenhum componente extra, apenas a placa Franzininho WiFi:

franzininho-wifi-serial-console

Obs. Neste exemplo vamos utilizar o Mu Editor, mas qualquer editor com suporte a comunicação serial pode ser utilizado.

Código

Digite o código abaixo no arquivo code.py que está no diretório CIRCUITPY e salve o arquivo:

Observação

Provavelmente você encontrará outro código no arquivo code.py. -Apague-o e insira o código novo.

# code.py

""" Controle da cor do LED RGB através da serial console """
import board
import digitalio
import neopixel_write

pin = digitalio.DigitalInOut(board.NEOPIXEL)
pin.direction = digitalio.Direction.OUTPUT

while True:
print("Digite a intesidade da cor vermelho:")
r = int(input())
print("Digite a intesidade da cor verde:")
g = int(input())
print("Digite a intesidade da cor azul:")
b = int(input())
cor = bytearray([r, g, b])
neopixel_write.neopixel_write(pin, cor)
print("Cor: {} {} {}".format(r,g,b) )
print("[ENTER] - para mudar a cor.")
input()

Finalizando a edição do arquivo, salve-o. -Após salvar o arquivo, abra o console serial do Mu Editor.

Análise do código

Para acessar os pinos da placa precisamos importar o módulo board:

import board

Utilizaremos o LED Neopixel existente na própria placa da Franzininho WiFi, este LED está conectado a GPIO 18 do ESP32-S2 da Franzininho WiFi.

franzininho-wifi-serial-console

Como o LED é um atuador, precisamos configurar o pino como uma saída digital. Para isso, precisamos importar o módulo:

import digitalio

O LED RGB Neopixel utiliza um protocolo de comunicação específico já que dentro do LED existe um chip de controle integrado que controla os três LED dentro do encapsulamento. -Para facilitar a implementação de nosso programa, optamos por utilizar um biblioteca disponível dentro do próprio circuitpython que é a neopixel_write:

import neopixel_write

Com todos os módulos importados, podemos acessar as funções de configuração do pino digital:

pin = digitalio.DigitalInOut(board.NEOPIXEL)
pin.direction = digitalio.Direction.OUTPUT

Note que primeiro mapeamos o pino e depois configuramos a direção.

Diferentemente de outros framework como Arduino, ESP-IDF e a maioria dos framework escrito em C/C++, o interpretador do Python já habilitar UART para a comunicação serial por padrão, dispensado a inicialização da serial como seria no Arduino por exemplo.

Fragmento de código necessário para configurar a comunicação serial no Arduino:

Serial.begin(115200);
Dica

Nunca mais você vai esquecer de habilitar a serial antes de tentar imprimir. 😉

Neste exemplo duas funções são importante destacar. São as funções que permite escrever e ler dados do console.

A função "print" para imprimir mensagem no console serial.

print("Algum coisa para ser impresso na serial")

E a função "input" para ler valores do console serial.

uma_variavel = input()

Agora vamos criar nosso loop principal:

while True:
print('Digite a intensidade da cor vermelho:')
r = int(input())
print('Digite a intensidade da cor verde:')
g = int(input())
print('Digite a intensidade da cor azul:')
b = int(input())
cor = bytearray([r, g, b])
neopixel_write.neopixel_write(pin, cor)
print('Cor: {} {} {}'.format(r,g,b) )
print('[ENTER] - para mudar a cor.')
input()

No loop principal iremos utilizar as funções print/input para ler o valor das cores dos três LED.

Iremos montar um bytearray e chamar a função neopixel_write para atualizar a cor do LED Neopixel.

cor = bytearray([r, g, b])

A função neopixel_write precisa apenas de dois parâmetros, o pino onde está conectado o LED e um bytearray contendo um byte para cada uma das cores do LED.

neopixel_write.neopixel_write(pin, cor)

O bytearray segue o seguinte formato: primeiro byte representa a intensidade do LED vermelho (Red), o segundo byte representa a intensidade do LED verde (Green) e o terceiro byte representa a intensidade do LED azul (Blue).

Execução

Para abrir o console serial no Mu Editor, click no botão "Serial" e depois pressione "Ctrl + D" para reiniciar a execução do script na placa. Logo em seguida você poderá ver a primeira mensagem do script, solicitado o valor da primeira cor no console, a cor vermelha.

franzininho-wifi-serial-console

Aqui temos um exemplo de execução no console serial do Mu Editor.

franzininho-wifi-serial-console

Resultado da execução na placa Franzininho WiFi.

franzininho-wifi-serial-console

Outro exemplo de execução.

franzininho-wifi-serial-console

Sugestão de experimento

Execute uma informando os valores [10,10,10], execute novamente agora informando os valores [100,100,100] e observe a diferença entre as duas execuções.

Conclusão

Neste exemplo exploramos duas importante ferramentas no desenvolvimento de qualquer projeto, a comunicação serial do console e o LED Builtin da placa Franzininho WiFi que também é um LED Neopixel que pode dar um charme a mais a seus projetos!!!

AutorEwerton Leandro de Sousa
Data:07/10/2021
- - +

Serial Console

Neste exemplo iremos utilizar o console serial para controlar a cor do LED da Franzininho WiFi com CircuitPython.

+

Materiais necessários

+
    +
  • 1 Placa Franzininho Wifi com CircuitPython;
  • +
+

Circuito

+

Para este exemplo não será necessário nenhum componente extra, apenas a placa Franzininho WiFi:

+

franzininho-wifi-serial-console

+

Obs. Neste exemplo vamos utilizar o Mu Editor, mas qualquer editor com suporte a comunicação serial pode ser utilizado.

+

Código

+

Digite o código abaixo no arquivo code.py que está no diretório CIRCUITPY e salve o arquivo:

+

Provavelmente você encontrará outro código no arquivo code.py. +Apague-o e insira o código novo.

+
# code.py
+
+""" Controle da cor do LED RGB através da serial console """
+import board
+import digitalio
+import neopixel_write
+
+pin = digitalio.DigitalInOut(board.NEOPIXEL)
+pin.direction = digitalio.Direction.OUTPUT
+
+while True:
+    print("Digite a intesidade da cor vermelho:")
+    r = int(input())
+    print("Digite a intesidade da cor verde:")
+    g = int(input())
+    print("Digite a intesidade da cor azul:")
+    b = int(input())
+    cor = bytearray([r, g, b])
+    neopixel_write.neopixel_write(pin, cor)
+    print("Cor: {} {} {}".format(r,g,b) )
+    print("[ENTER] - para mudar a cor.")
+    input()
+
+

Finalizando a edição do arquivo, salve-o. +Após salvar o arquivo, abra o console serial do Mu Editor.

+

Análise do código

+

Para acessar os pinos da placa precisamos importar o módulo board:

+
import board
+
+

Utilizaremos o LED Neopixel existente na própria placa da Franzininho WiFi, este LED está conectado a GPIO 18 do ESP32-S2 da Franzininho WiFi.

+

franzininho-wifi-serial-console

+

Como o LED é um atuador, precisamos configurar o pino como uma saída digital. Para isso, precisamos importar o módulo:

+
import digitalio
+
+

O LED RGB Neopixel utiliza um protocolo de comunicação específico já que dentro do LED existe um chip de controle integrado que controla os três LED dentro do encapsulamento. +Para facilitar a implementação de nosso programa, optamos por utilizar um biblioteca disponível dentro do próprio circuitpython que é a neopixel_write:

+
import neopixel_write
+
+

Com todos os módulos importados, podemos acessar as funções de configuração do pino digital:

+
pin = digitalio.DigitalInOut(board.NEOPIXEL)
+pin.direction = digitalio.Direction.OUTPUT
+
+

Note que primeiro mapeamos o pino e depois configuramos a direção.

+

Diferentemente de outros framework como Arduino, ESP-IDF e a maioria dos framework escrito em C/C++, o interpretador do Python já habilitar UART para a comunicação serial por padrão, dispensado a inicialização da serial como seria no Arduino por exemplo.

+

Fragmento de código necessário para configurar a comunicação serial no Arduino:

+
Serial.begin(115200);
+
+

Nunca mais você vai esquecer de habilitar a serial antes de tentar imprimir. 😉

+

Neste exemplo duas funções são importante destacar. São as funções que permite escrever e ler dados do console.

+

A função "print" para imprimir mensagem no console serial.

+
print("Algum coisa para ser impresso na serial")
+
+

E a função "input" para ler valores do console serial.

+
uma_variavel = input()
+
+

Agora vamos criar nosso loop principal:

+
while True:
+    print('Digite a intensidade da cor vermelho:')
+    r = int(input())
+    print('Digite a intensidade da cor verde:')
+    g = int(input())
+    print('Digite a intensidade da cor azul:')
+    b = int(input())
+    cor = bytearray([r, g, b])
+    neopixel_write.neopixel_write(pin, cor)
+    print('Cor: {} {} {}'.format(r,g,b) )
+    print('[ENTER] - para mudar a cor.')
+    input()
+
+

No loop principal iremos utilizar as funções print/input para ler o valor das cores dos três LED.

+

Iremos montar um bytearray e chamar a função neopixel_write para atualizar a cor do LED Neopixel.

+
cor = bytearray([r, g, b])
+
+

A função neopixel_write precisa apenas de dois parâmetros, o pino onde está conectado o LED e um bytearray contendo um byte para cada uma das cores do LED.

+
neopixel_write.neopixel_write(pin, cor)
+
+

O bytearray segue o seguinte formato: primeiro byte representa a intensidade do LED vermelho (Red), o segundo byte representa a intensidade do LED verde (Green) e o terceiro byte representa a intensidade do LED azul (Blue).

+

Execução

+

Para abrir o console serial no Mu Editor, click no botão "Serial" e depois pressione "Ctrl + D" para reiniciar a execução do script na placa. Logo em seguida você poderá ver a primeira mensagem do script, solicitado o valor da primeira cor no console, a cor vermelha.

+

franzininho-wifi-serial-console

+

Aqui temos um exemplo de execução no console serial do Mu Editor.

+

franzininho-wifi-serial-console

+

Resultado da execução na placa Franzininho WiFi.

+

franzininho-wifi-serial-console

+

Outro exemplo de execução.

+

franzininho-wifi-serial-console

+

Execute uma informando os valores [10,10,10], execute novamente agora informando os valores [100,100,100] e observe a diferença entre as duas execuções.

+

Conclusão

+

Neste exemplo exploramos duas importante ferramentas no desenvolvimento de qualquer projeto, a comunicação serial do console e o LED Builtin da placa Franzininho WiFi que também é um LED Neopixel que pode dar um charme a mais a seus projetos!!!

+
AutorEwerton Leandro de Sousa
Data:07/10/2021
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-circuitpython/servo-motor/index.html b/docs/franzininho-wifi/exemplos-circuitpython/servo-motor/index.html index b7932e21b..586461373 100755 --- a/docs/franzininho-wifi/exemplos-circuitpython/servo-motor/index.html +++ b/docs/franzininho-wifi/exemplos-circuitpython/servo-motor/index.html @@ -1,17 +1,158 @@ - + - -Servo motor | Franzininho - - - + +Servo motor | Franzininho + + + -
-

Servo motor

Um servo motor é um pequeno motor de corrente contínua. Diferentemente dos demais motores DC, onde apenas controlamos a velocidade de giro, conseguimos controlar a posição de um servo, através do PWM.

O servo que vamos utilizar nesse exemplo, tem a resolução de meia volta, ou seja, de 0° a 180°.

Materiais Necessários

  • 1 Placa Franzininho WiFi com CircuitPython;
  • 1 Micro servo 9g;
  • 1 Protoboard;
  • 1 potenciômetro de 10 kΩ;
  • Jumpers.

Circuito

Para os exemplos que vamos ver a seguir, realize a seguinte montagem:

Circuito Servo Motor

Observação: o servo deve ser conectado ao 5V da placa. E, caso deseje usar mais de dois servos, uma fonte externa deve ser usada.

Códigos

Assim como quando aprendemos a usar PWM, vamos importar o módulo simpleio. Também, vamos importar um novo módulo para trabalharmos com o servo motor.

Para ter acesso a esses módulos, acesse o endereço: https://circuitpython.org/libraries. Faça o download, de acordo com a versão do CircuitPython instalada na sua Franzininho WiFi.

Circuito Servo Motor

Após finalizar o download, importe os dois módulos para a pasta de arquivos da Franzininho WiFi:

  • simpleio.mpy;
  • adafruit_motor.

Exemplo 1

No primeiro exemplo, vamos aprender a como programar um servo motor usando CircuitPython. Para isso, copie o código abaixo:

import board
import pwmio
from adafruit_motor import servo
from time import sleep

pin = board.IO1
pwm = pwmio.PWMOut(pin, frequency = 50)

my_servo = servo.Servo(pwm)

while True:
for angle in range(0, 180, 10):
my_servo.angle = angle
sleep(0.1)
for angle in range(180, 0, -10):
my_servo.angle = angle
sleep(0.1)

Salve e execute o código.

Exemplo 2

Já nesse exemplo, vamos controlar o posicionamento do servo através de um potenciômetro. E para isso, vamos usar alguns recursos que aprendemos anteriormente. Escreva o código abaixo:

import board
import pwmio
from adafruit_motor import servo
import simpleio
import math
from analogio import AnalogIn
from time import sleep

pin = board.IO1
pwm = pwmio.PWMOut(pin, frequency = 50)
my_servo = servo.Servo(pwm)

potPin = board.IO2
pot = AnalogIn(potPin)

def converter(pin):
pinValue = pin.value
mapValue = math.trunc(simpleio.map_range
(pinValue, 536, 51355, 0, 180))
return mapValue

while True:
angle = converter(pot)
my_servo.angle = angle
sleep(0.1)

Após terminar de escrever, salve o código e teste-o.

Análise dos Códigos

Exemplo 1

O primeiro módulo que vamos importar, é o board. Ele possibilita o acesso aos pinos da placa:

import board

Para conseguirmos usar os pinos PWM, precisamos do módulo pwmio:

import pwmio

Também, será necessário a biblioteca auxiliar adafruit_motor.servo. Ela será útil para controlar o servo com base na saída PWM:

from adafruit_motor import servo

E, por último, precisaremos da função sleep do módulo time, para intervalos de temporização:

from time import sleep

Agora, vamos atribuir o GPIO1 da placa a variável pin:

pin  =  board.IO1

Também, configuraremos esse pino como uma saída PWM. Repare, que diferente do LED, precisamos informar a frequência, pois, por padrão ela está configurada com 500Hz e o padrão do servo motor é 50Hz:

pwm  =  pwmio.PWMOut(pin,  frequency  =  50)

Além disso, vamos criar o objeto my_servo e atribuir o pino pwm a ele:

my_servo  =  servo.Servo(pwm)

Por fim, dentro do while True, o nosso loop, faremos com que o servo se mova continuamente. Para isso, usaremos a estrutura de repetição for e o comando range( ), que gera uma lista.

Como parâmetros do primeiro laço, vamos informar o valor inicial (0), valor final(180) e o intervalo de contagem, ou seja, de 10 em 10. Dentro do laço, esse valor será enviado para o servo a cada 0.1 segundos:

while True:
for angle in range(0, 180, 10):
my_servo.angle = angle
sleep(0.1)

Já no segundo laço, faremos o mesmo. Porém, invés de incrementar de 10 em 10, a contagem será decrescente:

for angle in range(180, 0, -10): 
my_servo.angle = angle
sleep(0.1)

Exemplo 2

Além dos módulos que já usamos no primeiro exemplo, precisaremos importar simpleio, para usarmos a função de mapeamento:

import simpleio

Vamos precisar também da biblioteca math:

import math

E, da função AnalogIn da biblioteca analogio:

from analogio import AnalogIn

Além de configurarmos o servo, também vamos configurar o potenciômetro. Para isso, primeiro vamos atribuir o GPIO2 a variável potPin:

potPin  =  board.IO2

Por fim, vamos atribuir esse pino ao objeto pot como uma entrada analógica:

pot  =  AnalogIn(potPin)

Agora, vamos criar uma função chamada converte. Essa função receberá como parâmetro o pino que estamos lendo:

def converter(pin):

Dentro da função, faremos a leitura do valor enviado pelo potenciômetro e armazená-la na variável pinValue:

pinValue  =  pin.value

Ademais, converteremos o valor da leitura para graus. Para tal, usaremos a função simpleio.map_range. Os parâmetros dessa função são: valor bruto (valor da leitura naquele instante), valor mínimo de entrada, valor máximo de entrada, valor mínimo de saída e valor máximo de saída. Também, precisaremos da função math.trunc, que eliminará as casas decimais. Todas essas informações ficarão armazenadas na variável mapValue:

mapValue = math.trunc(simpleio.map_range(pinValue, 536, 51355, 0, 180))

E, a função nos retornará o valor de mapValue:

return  mapValue

No laço de repetição infinita, while True, atribuiremos o valor retornado pela função converte a variável angle. Esse valor será enviado para o servo motor a cada 0.1 segundos:

while True:
angle = converter(pot)
my_servo.angle = angle
sleep(0.1)

Conclusão

No decorrer da explicação, aprendemos a como usar um servo motor de uma maneira simples utilizando CircuitPython. Também, pudemos ver como usar um potenciômetro para controlar a movimentação dos nossos servos.

AutorMateus Adriano Ventura Vieira
Data:17/05/2022
- - +

Servo motor

Um servo motor é um pequeno motor de corrente contínua. Diferentemente dos demais motores DC, onde apenas controlamos a velocidade de giro, conseguimos controlar a posição de um servo, através do PWM.

+

O servo que vamos utilizar nesse exemplo, tem a resolução de meia volta, ou seja, de 0° a 180°.

+

Materiais Necessários

+
    +
  • 1 Placa Franzininho WiFi com CircuitPython;
  • +
  • 1 Micro servo 9g;
  • +
  • 1 Protoboard;
  • +
  • 1 potenciômetro de 10 kΩ;
  • +
  • Jumpers.
  • +
+

Circuito

+

Para os exemplos que vamos ver a seguir, realize a seguinte montagem:

+

Circuito Servo Motor

+

Observação: o servo deve ser conectado ao 5V da placa. E, caso deseje usar mais de dois servos, uma fonte externa deve ser usada.

+

Códigos

+

Assim como quando aprendemos a usar PWM, vamos importar o módulo simpleio. Também, vamos importar um novo módulo para trabalharmos com o servo motor.

+

Para ter acesso a esses módulos, acesse o endereço: https://circuitpython.org/libraries. Faça o download, de acordo com a versão do CircuitPython instalada na sua Franzininho WiFi.

+

Circuito Servo Motor

+

Após finalizar o download, importe os dois módulos para a pasta de arquivos da Franzininho WiFi:

+
    +
  • simpleio.mpy;
  • +
  • adafruit_motor.
  • +
+

Exemplo 1

+

No primeiro exemplo, vamos aprender a como programar um servo motor usando CircuitPython. Para isso, copie o código abaixo:

+
import board
+import pwmio
+from adafruit_motor import servo 
+from time import sleep
+
+pin = board.IO1
+pwm = pwmio.PWMOut(pin, frequency = 50)
+
+my_servo = servo.Servo(pwm)
+
+while True:
+    for angle in range(0, 180, 10): 
+        my_servo.angle = angle
+        sleep(0.1)
+    for angle in range(180, 0, -10): 
+        my_servo.angle = angle
+        sleep(0.1)
+
+

Salve e execute o código.

+

Exemplo 2

+

Já nesse exemplo, vamos controlar o posicionamento do servo através de um potenciômetro. E para isso, vamos usar alguns recursos que aprendemos anteriormente. Escreva o código abaixo:

+
import board
+import pwmio
+from adafruit_motor import servo
+import simpleio
+import math
+from analogio import AnalogIn
+from time import sleep
+
+pin = board.IO1
+pwm = pwmio.PWMOut(pin, frequency = 50)
+my_servo = servo.Servo(pwm)
+
+potPin = board.IO2
+pot = AnalogIn(potPin)
+
+def converter(pin):
+    pinValue = pin.value
+    mapValue = math.trunc(simpleio.map_range
+               (pinValue, 536, 51355, 0, 180))
+    return mapValue
+
+while True:
+    angle = converter(pot)
+    my_servo.angle = angle
+    sleep(0.1)
+
+

Após terminar de escrever, salve o código e teste-o.

+

Análise dos Códigos

+

Exemplo 1

+

O primeiro módulo que vamos importar, é o board. Ele possibilita o acesso aos pinos da placa:

+
import board
+
+

Para conseguirmos usar os pinos PWM, precisamos do módulo pwmio:

+
import pwmio
+
+

Também, será necessário a biblioteca auxiliar adafruit_motor.servo. Ela será útil para controlar o servo com base na saída PWM:

+
from adafruit_motor import servo
+
+

E, por último, precisaremos da função sleep do módulo time, para intervalos de temporização:

+
from time import sleep
+
+

Agora, vamos atribuir o GPIO1 da placa a variável pin:

+
pin  =  board.IO1
+
+

Também, configuraremos esse pino como uma saída PWM. Repare, que diferente do LED, precisamos informar a frequência, pois, por padrão ela está configurada com 500Hz e o padrão do servo motor é 50Hz:

+
pwm  =  pwmio.PWMOut(pin,  frequency  =  50)
+
+

Além disso, vamos criar o objeto my_servo e atribuir o pino pwm a ele:

+
my_servo  =  servo.Servo(pwm)
+
+

Por fim, dentro do while True, o nosso loop, faremos com que o servo se mova continuamente. Para isso, usaremos a estrutura de repetição for e o comando range( ), que gera uma lista.

+

Como parâmetros do primeiro laço, vamos informar o valor inicial (0), valor final(180) e o intervalo de contagem, ou seja, de 10 em 10. Dentro do laço, esse valor será enviado para o servo a cada 0.1 segundos:

+
while True:
+    for angle in range(0, 180, 10): 
+        my_servo.angle = angle
+        sleep(0.1)
+
+

Já no segundo laço, faremos o mesmo. Porém, invés de incrementar de 10 em 10, a contagem será decrescente:

+
for angle in range(180, 0, -10): 
+        my_servo.angle = angle
+        sleep(0.1)
+
+

Exemplo 2

+

Além dos módulos que já usamos no primeiro exemplo, precisaremos importar simpleio, para usarmos a função de mapeamento:

+
import simpleio
+
+

Vamos precisar também da biblioteca math:

+
import math
+
+

E, da função AnalogIn da biblioteca analogio:

+
from analogio import AnalogIn
+
+

Além de configurarmos o servo, também vamos configurar o potenciômetro. Para isso, primeiro vamos atribuir o GPIO2 a variável potPin:

+
potPin  =  board.IO2
+
+

Por fim, vamos atribuir esse pino ao objeto pot como uma entrada analógica:

+
pot  =  AnalogIn(potPin)
+
+

Agora, vamos criar uma função chamada converte. Essa função receberá como parâmetro o pino que estamos lendo:

+
def converter(pin):
+
+

Dentro da função, faremos a leitura do valor enviado pelo potenciômetro e armazená-la na variável pinValue:

+
pinValue  =  pin.value
+
+

Ademais, converteremos o valor da leitura para graus. Para tal, usaremos a função simpleio.map_range. Os parâmetros dessa função são: valor bruto (valor da leitura naquele instante), valor mínimo de entrada, valor máximo de entrada, valor mínimo de saída e valor máximo de saída. Também, precisaremos da função math.trunc, que eliminará as casas decimais. Todas essas informações ficarão armazenadas na variável mapValue:

+
mapValue = math.trunc(simpleio.map_range(pinValue, 536, 51355, 0, 180))
+
+

E, a função nos retornará o valor de mapValue:

+
return  mapValue
+
+

No laço de repetição infinita, while True, atribuiremos o valor retornado pela função converte a variável angle. Esse valor será enviado para o servo motor a cada 0.1 segundos:

+
while True:
+    angle = converter(pot)
+    my_servo.angle = angle
+    sleep(0.1)
+
+

Conclusão

+

No decorrer da explicação, aprendemos a como usar um servo motor de uma maneira simples utilizando CircuitPython. Também, pudemos ver como usar um potenciômetro para controlar a movimentação dos nossos servos.

+
AutorMateus Adriano Ventura Vieira
Data:17/05/2022
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo/index.html b/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo/index.html index 191866813..e6ce2adee 100755 --- a/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo/index.html +++ b/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo/index.html @@ -1,17 +1,95 @@ - + - -Pinos de Toque Capacitivo | Franzininho - - - + +Pinos de Toque Capacitivo | Franzininho + + + -
-

Pinos de Toque Capacitivo

A capacitância pode ser definida, basicamente, como a capacidade de um corpo de armazenar energia elétrica. Dessa maneira, os pinos de toque capacitivo detectam a mudança na capacitância de um elemento. Esses pinos, podem ser utilizados por toque, e até mesmo, pela aproximação de um dedo.

Neste exemplo, vamos fazer um “interruptor” por aproximação e, aprender como usar o módulo responsável pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.

Materiais necessários

  • 1 Placa Franzininho WiFi com CircuitPython;
  • 1 Protoboard;
  • 1 LED;
  • 1 resistor de 220 Ω ou 330 Ω;
  • Jumpers.

Circuito

Realize a seguinte montagem para este projeto. No lugar do “sensor” de toque capacitivo, pode ser utilizado um jumper, um pedaço de fio ou qualquer outro material.

Circuito

Código

Implemente o código abaixo e teste seu circuito.

#Toque Capacitivo

import board
import touchio
from digitalio import DigitalInOut, Direction
from time import sleep

estado = 0

pin = board.IO1
touch = touchio.TouchIn(pin)

led = DigitalInOut(board.IO4)
led.direction = Direction.OUTPUT

while True:
if touch.value:
estado = not estado

led.value = estado
sleep(1)

Após finalizar a edição do código, salve-o. Execute o programa. Ao aproximar, ou, encostar o dedo no “sensor” escolhido por você, ele deve funcionar como um interruptor, ligando e desligando o LED.

Análise do Código

Para acessarmos os pinos da placa devemos importar o módulo board:

import board

Além disso, para o uso dos pinos de toque capacitivo, usaremos a biblioteca touchio:

import touchio

E, para configurarmos o LED como uma saída digital, temos que importar as funções DigitalInOut e Direction do módulo digitalio:

from digitalio import DigitalInOut,  Direction

Por último, vamos chamar a função sleep do módulo time, que usaremos para intervalos de temporização:

from time import sleep

Após importarmos as bibliotecas necessárias, criaremos uma variável estado, que vai armazenar o estado do LED:

estado  =  0

Agora, vamos configurar o GPIO1, como um pino touch. Primeiro, iremos atribuir esse pino a uma variável, no caso, a variável pin. Após isso, iremos criar o objeto touch e atribuir o pin a esse objeto:

pin  =  board.IO1
touch = touchio.TouchIn(pin)

Ademais, iremos atribuir o GPIO4 a varável led e, configurá-lo como uma saída digital:

led  =  DigitalInOut(board.IO4)
led.direction = Direction.OUTPUT

Na sequência, criaremos um laço infinito (while True). Dentro do loop, verificamos se houve mudança na capacitância do “sensor”. Caso aconteça a mudança, o estado do led também mudará:

while True:
if touch.value:
estado = not estado

led.value = estado
sleep(1)

Como ajustar a sensibilidade do touch?

Nesse exemplo, estamos acionando o led apenas por aproximar o dedo. Porém, pode ser que você deseje ajustar o seu “sensor” para acionar por toque. Para isso, vamos utilizar o comando threshold.

Primeiro, vamos verificar a medição do toque bruto. Para isso, utilizaremos a função raw_value. Depois, ajustaremos a sensibilidade, para que ele seja acionado apenas por toque:

pin = board.IO1
touch = touchio.TouchIn(pin)
print(touch.raw_value)
touch.threshold = 17300

Após adicionarmos a função threshold, o led só é acionado se tocarmos o “sensor”. Isso acontece, pois, o configuramos com uma sensibilidade menor, ou seja, um valor mínimo de capacitância maior, para que a mudança seja percebida pela placa.

Conclusão

Aprendemos, através de um exemplo prático, a como usar um pino toque capacitivo, que, em muitas situações pode ser usado para substituir botões e interruptores, por exemplo, apresentando-se como uma solução mais simples, pois seu funcionamento não é mecânico. Além disso, pudemos ver como ajustar a sensibilidade desse sensor as nossas necessidades.

AutorMateus Adriano Ventura Vieira
Data:06/05/2022
- - +

Pinos de Toque Capacitivo

A capacitância pode ser definida, basicamente, como a capacidade de um corpo de armazenar energia elétrica. Dessa maneira, os pinos de toque capacitivo detectam a mudança na capacitância de um elemento. Esses pinos, podem ser utilizados por toque, e até mesmo, pela aproximação de um dedo.

+

Neste exemplo, vamos fazer um “interruptor” por aproximação e, aprender como usar o módulo responsável pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.

+

Materiais necessários

+
    +
  • 1 Placa Franzininho WiFi com CircuitPython;
  • +
  • 1 Protoboard;
  • +
  • 1 LED;
  • +
  • 1 resistor de 220 Ω ou 330 Ω;
  • +
  • Jumpers.
  • +
+

Circuito

+

Realize a seguinte montagem para este projeto. No lugar do “sensor” de toque capacitivo, pode ser utilizado um jumper, um pedaço de fio ou qualquer outro material.

+

Circuito

+

Código

+

Implemente o código abaixo e teste seu circuito.

+
#Toque Capacitivo
+
+import board 
+import touchio
+from digitalio import DigitalInOut, Direction
+from time import sleep 
+
+estado = 0
+
+pin = board.IO1
+touch = touchio.TouchIn(pin)
+
+led = DigitalInOut(board.IO4)
+led.direction = Direction.OUTPUT
+
+while True:
+    if touch.value:
+        estado = not estado
+    
+    led.value = estado
+    sleep(1)
+
+

Após finalizar a edição do código, salve-o. Execute o programa. Ao aproximar, ou, encostar o dedo no “sensor” escolhido por você, ele deve funcionar como um interruptor, ligando e desligando o LED.

+

Análise do Código

+

Para acessarmos os pinos da placa devemos importar o módulo board:

+
import board
+
+

Além disso, para o uso dos pinos de toque capacitivo, usaremos a biblioteca touchio:

+
import touchio
+
+

E, para configurarmos o LED como uma saída digital, temos que importar as funções DigitalInOut e Direction do módulo digitalio:

+
from digitalio import DigitalInOut,  Direction
+
+

Por último, vamos chamar a função sleep do módulo time, que usaremos para intervalos de temporização:

+
from time import sleep
+
+

Após importarmos as bibliotecas necessárias, criaremos uma variável estado, que vai armazenar o estado do LED:

+
estado  =  0
+
+

Agora, vamos configurar o GPIO1, como um pino touch. Primeiro, iremos atribuir esse pino a uma variável, no caso, a variável pin. Após isso, iremos criar o objeto touch e atribuir o pin a esse objeto:

+
pin  =  board.IO1
+touch  =  touchio.TouchIn(pin)
+
+

Ademais, iremos atribuir o GPIO4 a varável led e, configurá-lo como uma saída digital:

+
led  =  DigitalInOut(board.IO4)
+led.direction  =  Direction.OUTPUT
+
+

Na sequência, criaremos um laço infinito (while True). Dentro do loop, verificamos se houve mudança na capacitância do “sensor”. Caso aconteça a mudança, o estado do led também mudará:

+
while True:
+    if touch.value:
+        estado = not estado
+    
+    led.value = estado
+    sleep(1)
+
+

Como ajustar a sensibilidade do touch?

+

Nesse exemplo, estamos acionando o led apenas por aproximar o dedo. Porém, pode ser que você deseje ajustar o seu “sensor” para acionar por toque. Para isso, vamos utilizar o comando threshold.

+

Primeiro, vamos verificar a medição do toque bruto. Para isso, utilizaremos a função raw_value. Depois, ajustaremos a sensibilidade, para que ele seja acionado apenas por toque:

+
pin = board.IO1
+touch = touchio.TouchIn(pin)
+print(touch.raw_value)
+touch.threshold = 17300
+
+

Após adicionarmos a função threshold, o led só é acionado se tocarmos o “sensor”. Isso acontece, pois, o configuramos com uma sensibilidade menor, ou seja, um valor mínimo de capacitância maior, para que a mudança seja percebida pela placa.

+

Conclusão

+

Aprendemos, através de um exemplo prático, a como usar um pino toque capacitivo, que, em muitas situações pode ser usado para substituir botões e interruptores, por exemplo, apresentando-se como uma solução mais simples, pois seu funcionamento não é mecânico. Além disso, pudemos ver como ajustar a sensibilidade desse sensor as nossas necessidades.

+
AutorMateus Adriano Ventura Vieira
Data:06/05/2022
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-espidf/aws/index.html b/docs/franzininho-wifi/exemplos-espidf/aws/index.html index 882fea90a..f43b286c1 100755 --- a/docs/franzininho-wifi/exemplos-espidf/aws/index.html +++ b/docs/franzininho-wifi/exemplos-espidf/aws/index.html @@ -1,18 +1,156 @@ - + - -Primeiros passos com a AWS | Franzininho - - - + +Primeiros passos com a AWS | Franzininho + + + -
-

Primeiros passos com a AWS

Introdução

Neste tutorial exploraremos a utilização do AWS IoT Core para conectar a placa Franzininho WiFi à nuvem utilizando o ESP-IDF. Além do IoT Core, a AWS oferece várias outras formas de conectar um dispositivo, como AWS IoT Greengrass Stream Manager ou AWS IoT SiteWise. Esses outros serviços para ingestão e visualização de dados podem ser vistos nesse link.

AWS IOT Core

O AWS IoT Core é o broker de mensagens que permite conectar dispositivos IoT com a nuvem AWS e seus diversos serviços. Através dele, podemos criar, configurar e gerenciar nossos dispositivos.

Atualmente suporta os seguintes protocolos de comunicação:

  • MQTT
  • MQTT over WSS (Websockets Secure)
  • HTTPS
  • LoRaWAN

Resumidamente, o serviço se baseia em:

  • Things: Dispositivos (“coisas”) que queremos conectar;
  • Jobs: Ações remotas que você pode agendar para realizar operações nos seus dispositivos, como atualizações de firmware;
  • Rules: Regras através das quais podemos direcionar as mensagens recebidas pelo broker para outros serviços da AWS, por exemplo, para armazenar dados no DynamoDB.
  • Segurança: onde é possível gerenciar os certificados de autorização, políticas (policies) e papeis (roles) de autenticação.

Parte 1 - Criando a Franzininho na AWS

Para seguir o tutorial, você deve ter acesso ao console da AWS. Para começar, vamos criar uma nova “coisa” (thing) para representar nossa Franzininho na nuvem. Certifique-se que você está na região mais próxima antes de começar, selecionando-a no menu do canto superior direito. Para o Brasil, a região é sa-east-1.

  1. Na AWS, procure pelo serviço IoT Core (Service > Internet of Things > IoT core) e crie uma nova “coisa” em Manage > All devices > Things > Create new thing.

  2. Vamos criar apenas um dispositivo (Create a single thing), mas saiba que também é possível criar vários de uma vez (Create many things). Você precisará especificar as propriedades desse dispositivo:

  • Thing name: o nome do seu dispositivo para identificá-lo de forma única. Escolha sabiamente, pois essa propriedade não pode ser alterada depois que o dispositivo é criado.
  • Configurações adicionais: podem ser utilizadas para detalhar, organizar, gerenciar e pesquisar os dispositivos, como tipo, atributos ou grupos.
  • Device shadow permite que o estado do seu dispositivo fique disponível para outros serviços mesmo que ele não esteja conectado.

Por enquanto, basta preencher o nome e prosseguir. Chamarei o meu carinhosamente de Franz.

Criar thing

  1. Para conseguir se autenticar ao serivço da AWS, cada dispositivo deve ter um certificado. Utilizaremos o gerado automaticamente (Auto-generate a new certificate), mas você também tem a opção de utilizar certificados próprios.

  2. Para gerenciar o nível de acesso desse certificado aos recursos, é preciso criar uma política de autorização (policy), que é uma lista de ações permitidas ou proibidas para aquele certificado. Você pode criar uma política direto dessa aba, em Create policy, ou pela barra de navegação do IoT Core em Security > Policies.

Uma policy deve ter um nome e uma ou mais declarações (statements). Cada declaração é composta por um efeito de uma ação à um recurso.

O efeito pode ser de permissão (allow) ou proibição (deny).

As possíveis ações desse serviço são várias, mas utilizaremos as seguintes principais:

  • iot:Connect: permite a conexão do dispositivo ao serviço;
  • iot:Publish: permite que o dispositivo publique mensagens no broker;
  • iot:Receive: permite que o dispositivo receba mensagem do broker;
  • iot:Subscribe: permite que o dispositivo se inscreva nos tópicos do broker.

E o recurso é o nome do serviço da AWS que a ação vai se utilizar, neste caso arn:aws:iot:region:account-id.

Você pode adicionar policies já existentes utilizando a aba Policy Examples ou criá-las manualmente. Para este exemplo, utilizei as seguintes políticas:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"
},
{
"Effect": "Allow",
"Action": "iot:Publish",
"Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"
},
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": "arn:aws:iot:sa-east-1:<account-id>:topicfilter/${iot:Connection.Thing.ThingName}/*"
},
{
"Effect": "Allow",
"Action": "iot:Publish",
"Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"
},
{
"Effect": "Allow",
"Action": "iot:Receive",
"Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"
}
]
}

Altere o <account-id> para o número da sua conta, disponível no menu do canto superior direito.

Account ID

  1. Por fim, baixe os arquivos de certificados e chaves que a AWS criou automaticamente para autenticar esse dispositivo. Este é o único momento que você conseguirá baixar as chaves para esse certificado, então guarde-as com carinho para utilizá-los no próximo passo.

Parte 2 - Conectando a Franzininho com ESP-IDF

Agora que temos nosso dispositivo configurado, precisamos escrever o firmware para conectá-lo. A própria Espressif disponibiliza um SDK para comunicação com AWS IoT baseada no FreeRTOS. Para utilizar, basta clonar o repositório, preferencialmente direto na pasta de componentes do seu diretório de instalação.

git clone https://github.com/espressif/esp-aws-iot <esp-dir-path>/esp-idf/components

Dentro desse componente, já são disponibilizados alguns exemplos para utilizar com a AWS. Vamos começar utilizando o exemplo básico de MQTT em examples/mqtt/tls_mutual_auth.

Para configurar, utilizaremos o menuconfig:

  1. Nas configurações do exemplo (Example Configuration), insira o nome do dispositivo exatamente como foi criado na AWS (Franz, no meu caso) e o endpoint do broker MQTT, que está disponível no menu AWS IoT > Settings > Device endpoint na sua conta do AWS. As demais configurações podem ser deixadas como padrão.

Device Endpoint -Menuconfig

  1. Nas configurações de rede (Example Connection Configuration), insira as configurações da sua rede Wi-Fi (SSID e senha)

  2. O método padrão de autenticação com a AWS é utilizando credenciais PKI embarcadas no diretório certs/. Lembra dos certificados que foram gerados automaticamente ao criar um dispositivo? É aqui que você vai colocá-los para embarcar no dispositivo. Copie o certificado, a chave privada e um dos certificados de root que você tinha armazenado anteriormente.

cp certificate.pem.crt main/certs/client.crt
cp private.pem.key main/certs/client.key
cp AmazonRootCAx.pem main/certs/root_cert_auth.pem

Com tudo configurado, é só buildar e passar pra placa (siga o tutorial em Primeiros passos). Este exemplo se conecta ao broker MQTT, se sobrescreve no tópico CLIENT_IDENTIFIER "/example/topic” (Franz/example/topic, por exemplo) e publica mensagens de Hello World.

Sua conexão foi estabelecida com sucesso caso receba a mensagem a seguir:

I (7329) coreMQTT: Connection accepted.
I (7339) coreMQTT: Received MQTT CONNACK successfully from broker.
I (7349) coreMQTT: MQTT connection established with the broker.
I (7349) coreMQTT: MQTT connection successfully established with broker.

Parte 3 - Monitorando a Franzininho

Agora que a Franzininho está conectado, podemos monitorar sua atividade pelo console da AWS.

  • Você pode ver as mensagens mais recentes em Manage > Things > Nome do seu dispositivo > Activity.

Menu Activity

  • E você também pode interagir através do MQTT Test Client, por exemplo, publicando no tópico CLIENT_IDENTIFIER "/example/topic” que estamos inscritos.

MQTT Test Client

A mensagem recebida pode ser vista na Franzininho:

I (17668) coreMQTT: Packet received. ReceivedBytes=66.
I (17668) coreMQTT: De-serialized incoming PUBLISH packet: DeserializerResult=MQTTSuccess.
I (17668) coreMQTT: State record updated. New state=MQTTPublishDone.
I (17678) coreMQTT: Incoming QOS : 0.
I (17678) coreMQTT: Incoming Publish Topic Name: Franz/example/topic matches subscribed topic.
Incoming Publish message Packet Id is 0.
Incoming Publish Message : {
"message": "Hello from AWS IoT console"
}.

E é isso, agora você pode brincar de Internet das Coisas com sua Franzininho WiFi utilizando a AWS!

AutoraAna Carolina Cabral
Data:07/01/2023
- - +

Primeiros passos com a AWS

Introdução

+

Neste tutorial exploraremos a utilização do AWS IoT Core para conectar a placa Franzininho WiFi à nuvem utilizando o ESP-IDF. Além do IoT Core, a AWS oferece várias outras formas de conectar um dispositivo, como AWS IoT Greengrass Stream Manager ou AWS IoT SiteWise. Esses outros serviços para ingestão e visualização de dados podem ser vistos nesse link.

+

AWS IOT Core

+

O AWS IoT Core é o broker de mensagens que permite conectar dispositivos IoT com a nuvem AWS e seus diversos serviços. Através dele, podemos criar, configurar e gerenciar nossos dispositivos.

+

Atualmente suporta os seguintes protocolos de comunicação:

+
    +
  • MQTT
  • +
  • MQTT over WSS (Websockets Secure)
  • +
  • HTTPS
  • +
  • LoRaWAN
  • +
+

Resumidamente, o serviço se baseia em:

+
    +
  • Things: Dispositivos (“coisas”) que queremos conectar;
  • +
  • Jobs: Ações remotas que você pode agendar para realizar operações nos seus dispositivos, como atualizações de firmware;
  • +
  • Rules: Regras através das quais podemos direcionar as mensagens recebidas pelo broker para outros serviços da AWS, por exemplo, para armazenar dados no DynamoDB.
  • +
  • Segurança: onde é possível gerenciar os certificados de autorização, políticas (policies) e papeis (roles) de autenticação.
  • +
+

Parte 1 - Criando a Franzininho na AWS

+

Para seguir o tutorial, você deve ter acesso ao console da AWS. Para começar, vamos criar uma nova “coisa” (thing) para representar nossa Franzininho na nuvem. Certifique-se que você está na região mais próxima antes de começar, selecionando-a no menu do canto superior direito. Para o Brasil, a região é sa-east-1.

+
    +
  1. +

    Na AWS, procure pelo serviço IoT Core (Service > Internet of Things > IoT core) e crie uma nova “coisa” em Manage > All devices > Things > Create new thing.

    +
  2. +
  3. +

    Vamos criar apenas um dispositivo (Create a single thing), mas saiba que também é possível criar vários de uma vez (Create many things). Você precisará especificar as propriedades desse dispositivo:

    +
  4. +
+
    +
  • Thing name: o nome do seu dispositivo para identificá-lo de forma única. Escolha sabiamente, pois essa propriedade não pode ser alterada depois que o dispositivo é criado.
  • +
  • Configurações adicionais: podem ser utilizadas para detalhar, organizar, gerenciar e pesquisar os dispositivos, como tipo, atributos ou grupos.
  • +
  • Device shadow permite que o estado do seu dispositivo fique disponível para outros serviços mesmo que ele não esteja conectado.
  • +
+

Por enquanto, basta preencher o nome e prosseguir. Chamarei o meu carinhosamente de Franz.

+

Criar thing

+
    +
  1. +

    Para conseguir se autenticar ao serivço da AWS, cada dispositivo deve ter um certificado. Utilizaremos o gerado automaticamente (Auto-generate a new certificate), mas você também tem a opção de utilizar certificados próprios.

    +
  2. +
  3. +

    Para gerenciar o nível de acesso desse certificado aos recursos, é preciso criar uma política de autorização (policy), que é uma lista de ações permitidas ou proibidas para aquele certificado. Você pode criar uma política direto dessa aba, em Create policy, ou pela barra de navegação do IoT Core em Security > Policies.

    +
  4. +
+

Uma policy deve ter um nome e uma ou mais declarações (statements). Cada declaração é composta por um efeito de uma ação à um recurso.

+

O efeito pode ser de permissão (allow) ou proibição (deny).

+

As possíveis ações desse serviço são várias, mas utilizaremos as seguintes principais:

+
    +
  • iot:Connect: permite a conexão do dispositivo ao serviço;
  • +
  • iot:Publish: permite que o dispositivo publique mensagens no broker;
  • +
  • iot:Receive: permite que o dispositivo receba mensagem do broker;
  • +
  • iot:Subscribe: permite que o dispositivo se inscreva nos tópicos do broker.
  • +
+

E o recurso é o nome do serviço da AWS que a ação vai se utilizar, neste caso arn:aws:iot:region:account-id.

+

Você pode adicionar policies já existentes utilizando a aba Policy Examples ou criá-las manualmente. Para este exemplo, utilizei as seguintes políticas:

+
{
+  "Version": "2012-10-17",
+  "Statement": [
+    {
+      "Effect": "Allow",
+      "Action": "iot:Connect",
+      "Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"
+    },
+    {
+      "Effect": "Allow",
+      "Action": "iot:Publish",
+      "Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"
+    },
+    {
+      "Effect": "Allow",
+      "Action": "iot:Subscribe",
+      "Resource": "arn:aws:iot:sa-east-1:<account-id>:topicfilter/${iot:Connection.Thing.ThingName}/*"
+    },
+    {
+      "Effect": "Allow",
+      "Action": "iot:Publish",
+      "Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"
+    },
+    {
+      "Effect": "Allow",
+      "Action": "iot:Receive",
+      "Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"
+    }
+  ]
+}
+
+

Altere o <account-id> para o número da sua conta, disponível no menu do canto superior direito.

+

Account ID

+
    +
  1. Por fim, baixe os arquivos de certificados e chaves que a AWS criou automaticamente para autenticar esse dispositivo. Este é o único momento que você conseguirá baixar as chaves para esse certificado, então guarde-as com carinho para utilizá-los no próximo passo.
  2. +
+

Parte 2 - Conectando a Franzininho com ESP-IDF

+

Agora que temos nosso dispositivo configurado, precisamos escrever o firmware para conectá-lo. A própria Espressif disponibiliza um SDK para comunicação com AWS IoT baseada no FreeRTOS. Para utilizar, basta clonar o repositório, preferencialmente direto na pasta de componentes do seu diretório de instalação.

+
git clone https://github.com/espressif/esp-aws-iot <esp-dir-path>/esp-idf/components
+
+

Dentro desse componente, já são disponibilizados alguns exemplos para utilizar com a AWS. Vamos começar utilizando o exemplo básico de MQTT em examples/mqtt/tls_mutual_auth.

+

Para configurar, utilizaremos o menuconfig:

+
    +
  1. Nas configurações do exemplo (Example Configuration), insira o nome do dispositivo exatamente como foi criado na AWS (Franz, no meu caso) e o endpoint do broker MQTT, que está disponível no menu AWS IoT > Settings > Device endpoint na sua conta do AWS. As demais configurações podem ser deixadas como padrão.
  2. +
+

Device Endpoint +Menuconfig

+
    +
  1. +

    Nas configurações de rede (Example Connection Configuration), insira as configurações da sua rede Wi-Fi (SSID e senha)

    +
  2. +
  3. +

    O método padrão de autenticação com a AWS é utilizando credenciais PKI embarcadas no diretório certs/. Lembra dos certificados que foram gerados automaticamente ao criar um dispositivo? É aqui que você vai colocá-los para embarcar no dispositivo. Copie o certificado, a chave privada e um dos certificados de root que você tinha armazenado anteriormente.

    +
  4. +
+
cp certificate.pem.crt main/certs/client.crt
+cp private.pem.key main/certs/client.key
+cp AmazonRootCAx.pem main/certs/root_cert_auth.pem
+
+

Com tudo configurado, é só buildar e passar pra placa (siga o tutorial em Primeiros passos). Este exemplo se conecta ao broker MQTT, se sobrescreve no tópico CLIENT_IDENTIFIER "/example/topic” (Franz/example/topic, por exemplo) e publica mensagens de Hello World.

+

Sua conexão foi estabelecida com sucesso caso receba a mensagem a seguir:

+
I (7329) coreMQTT: Connection accepted.
+I (7339) coreMQTT: Received MQTT CONNACK successfully from broker.
+I (7349) coreMQTT: MQTT connection established with the broker.
+I (7349) coreMQTT: MQTT connection successfully established with broker.
+
+

Parte 3 - Monitorando a Franzininho

+

Agora que a Franzininho está conectado, podemos monitorar sua atividade pelo console da AWS.

+
    +
  • Você pode ver as mensagens mais recentes em Manage > Things > Nome do seu dispositivo > Activity.
  • +
+

Menu Activity

+
    +
  • E você também pode interagir através do MQTT Test Client, por exemplo, publicando no tópico CLIENT_IDENTIFIER "/example/topic” que estamos inscritos.
  • +
+

MQTT Test Client

+

A mensagem recebida pode ser vista na Franzininho:

+
I (17668) coreMQTT: Packet received. ReceivedBytes=66.
+I (17668) coreMQTT: De-serialized incoming PUBLISH packet: DeserializerResult=MQTTSuccess.
+I (17668) coreMQTT: State record updated. New state=MQTTPublishDone.
+I (17678) coreMQTT: Incoming QOS : 0.
+I (17678) coreMQTT: Incoming Publish Topic Name: Franz/example/topic matches subscribed topic.
+Incoming Publish message Packet Id is 0.
+Incoming Publish Message : {
+  "message": "Hello from AWS IoT console"
+}.
+
+

E é isso, agora você pode brincar de Internet das Coisas com sua Franzininho WiFi utilizando a AWS!

+
AutoraAna Carolina Cabral
Data:07/01/2023
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-espidf/entrada-analogica/index.html b/docs/franzininho-wifi/exemplos-espidf/entrada-analogica/index.html index 9f451abc3..4ae6bae13 100755 --- a/docs/franzininho-wifi/exemplos-espidf/entrada-analogica/index.html +++ b/docs/franzininho-wifi/exemplos-espidf/entrada-analogica/index.html @@ -1,17 +1,88 @@ - + - -Entrada Analógica | Franzininho - - - + +Entrada Analógica | Franzininho + + + -
-

Entrada Analógica

Nesse exemplo vamos entender como usar o Conversor Analógico-Digital (Analog to Digital Converter(ADC)) na Franzininho WiFi. O objetivo deste exemplo é apresentar projeto simples para configurar o ADC, ler o valor de uma entrada analógica controlada por um potenciômetro e imprimir o valor da conversão através da comunicação serial. Ao final, estaremos preparados para fazer leitura analógica simples como também para utilização de sensores mais complexos.

Recursos

  • Placa Franzininho WiFi
  • Potenciômetro
  • Protoboard
  • Jumpers
  • Computador com ESP-IDF instalado e configurado.

Desenvolvimento

Um potenciômetro é um dispositivo analógico rotativo operado mecanicamente por meio de Um potenciômetro é um dispositivo analógico rotativo operado mecanicamente por meio de 3 terminais, ele fornece uma quantidade variável de resistência quando seu eixo é girado. Quando uma tensão é aplicada nos terminais do potenciômetro, que está conectado a uma entrada analógica, conseguimos medir uma resistência produzida pelo potenciômetro como um valor analógico.

potenciometro

O Conversor Analogico-Digital é um dispositivo que converte um sinal analógico num sinal digital. Logo, este exemplo vem com o intuito de monitorar o estado do potenciômetro a partir de uma comunicação serial, assim podemos ter base para trabalharmos futuramente com sensores analógicos.

Conecte os três fios do potenciômetro à sua placa. O primeiro fio vai de um dos pinos externos do potenciômetro para o GND. Já o segundo vai do outro pino externo do potenciômetro para 3,3 Volts. E por último, o terceiro vai do pino do meio do potenciômetro ao pino analógico GPIO1.

Quando se gira o potenciômetro, altera-se a resistência, impactando diretamente no pino central do potenciômetro, portanto, muda-se a tensão. Quando o eixo é girado no sentido direito a tensão se aproxima de 3,3V, ao contrário se aproxima de 0. Essa tensão que você está lendo na entrada analógica.

A Franzininho WIFI possui 20 entradas de ADC, sendo que o ADC1 possui 10 canais configurados do GPIO1 ao GPIO10, já o ADC2 possui 10 canais configurados do GPIO11 ao GPIO20. O conversor analógico-digital da ESP32-S2 que iremos utilizar possui 12bits de resolução, portanto, ele lê a tensão e a converte em um número entre 0 a 4095. A função adc1_get_raw() irá fazer a captura da quantidade de tensão aplicada ao pino do canal configurado.

Esquemático

esquemático

Em uma protoboard, conecte os três fios do potenciômetro na Franzininho WIFI. O primeiro vai de um dos pinos externos do potenciômetro para o GND. O segundo vai do outro pino externo do potenciômetro para 3,3 volts. O terceiro vai do pino do meio do potenciômetro ao pino analógico GPIO1.

Código

/*
Autor : Kayann Soares
Utilização simples da Leitura de Dados Analogicos.
*/

// Bibliotecas Necessarias
#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include <driver/adc.h>

// Main
void app_main(){

// Configurando a resolução do ADC para 13bits
adc1_config_width(ADC_WIDTH_BIT_13);
// Configurando o Channel do ADC para o Channel 0
adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_DB_11);


while(1){

// Função que de leitura do valor analogico, passando o ADC1 que é o do GPIO1
int sensorValue = adc1_get_raw(ADC1_CHANNEL_0);

// Imprimindo valores lidos
printf("%d\n", sensorValue);

// Rotina de Delay de 1 segundo
vTaskDelay(1000 / portTICK_PERIOD_MS);
// Descarrega os buffers de saída de dados
fflush(stdout);

}
}

Você encontra o projeto completo em: Entrada Analógica

Compilação

Após a codificação vamos compilar o código, mas antes selecione o set-target para ESP 32-S2:

idf.py set-target esp32s2

Após a compilação vamos enviar o código fonte para nossa placa, no editor pressione o ícone de raio para dar o FLASH e aguarde alguns segundos para assim dar início ao programa

compilar

Para vermos a saída de dados do nosso projeto clique no ícone no formato de monitor:

upload

Resultados

Valores mostrados no terminal quando o potenciômetro é rotacionado.

resultado

Conclusão

Concluímos o estudo do periférico base para iniciar no desenvolvimento com microcontroladores da Espressif usando o Framework IDF, a partir desse artigo podemos replicar para as demais famílias do ESP32, estes conceitos podem ser levados também para trabalharmos com outros microcontroladores que utilizem C e uma programação mais abstrata. Este artigo visa no estudo do periférico ADC, ao final deste projeto é possível aprender a utilizar o ADC da Franzininho WiFi para leitura de dados analógicos e lhe dará o desafio de aplicar esse aprendizado na leitura de sensores analógicos para você aplicar em seus projetos utilizando o ESP-IDF. Bons estudos.

AutorKayann Soares
Data:01/06/2021
- - +

Entrada Analógica

Nesse exemplo vamos entender como usar o Conversor Analógico-Digital (Analog to Digital Converter(ADC)) na Franzininho WiFi. O objetivo deste exemplo é apresentar projeto simples para configurar o ADC, ler o valor de uma entrada analógica controlada por um potenciômetro e imprimir o valor da conversão através da comunicação serial. Ao final, estaremos preparados para fazer leitura analógica simples como também para utilização de sensores mais complexos.

+

Recursos

+
    +
  • Placa Franzininho WiFi
  • +
  • Potenciômetro
  • +
  • Protoboard
  • +
  • Jumpers
  • +
  • Computador com ESP-IDF instalado e configurado.
  • +
+

Desenvolvimento

+

Um potenciômetro é um dispositivo analógico rotativo operado mecanicamente por meio de Um potenciômetro é um dispositivo analógico rotativo operado mecanicamente por meio de 3 terminais, ele fornece uma quantidade variável de resistência quando seu eixo é girado. Quando uma tensão é aplicada nos terminais do potenciômetro, que está conectado a uma entrada analógica, conseguimos medir uma resistência produzida pelo potenciômetro como um valor analógico.

+

potenciometro

+

O Conversor Analogico-Digital é um dispositivo que converte um sinal analógico num sinal digital. Logo, este exemplo vem com o intuito de monitorar o estado do potenciômetro a partir de uma comunicação serial, assim podemos ter base para trabalharmos futuramente com sensores analógicos.

+

Conecte os três fios do potenciômetro à sua placa. O primeiro fio vai de um dos pinos externos do potenciômetro para o GND. Já o segundo vai do outro pino externo do potenciômetro para 3,3 Volts. E por último, o terceiro vai do pino do meio do potenciômetro ao pino analógico GPIO1.

+

Quando se gira o potenciômetro, altera-se a resistência, impactando diretamente no pino central do potenciômetro, portanto, muda-se a tensão. Quando o eixo é girado no sentido direito a tensão se aproxima de 3,3V, ao contrário se aproxima de 0. Essa tensão que você está lendo na entrada analógica.

+

A Franzininho WIFI possui 20 entradas de ADC, sendo que o ADC1 possui 10 canais configurados do GPIO1 ao GPIO10, já o ADC2 possui 10 canais configurados do GPIO11 ao GPIO20. O conversor analógico-digital da ESP32-S2 que iremos utilizar possui 12bits de resolução, portanto, ele lê a tensão e a converte em um número entre 0 a 4095. A função adc1_get_raw() irá fazer a captura da quantidade de tensão aplicada ao pino do canal configurado.

+

Esquemático

+

esquemático

+

Em uma protoboard, conecte os três fios do potenciômetro na Franzininho WIFI. O primeiro vai de um dos pinos externos do potenciômetro para o GND. O segundo vai do outro pino externo do potenciômetro para 3,3 volts. O terceiro vai do pino do meio do potenciômetro ao pino analógico GPIO1.

+

Código

+
/*
+    Autor : Kayann Soares
+    Utilização simples da Leitura de Dados Analogicos.
+*/
+
+// Bibliotecas Necessarias
+#include <stdio.h>
+#include "sdkconfig.h"
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "esp_system.h"
+#include "esp_spi_flash.h"
+#include <driver/adc.h>
+
+// Main
+void app_main(){
+
+  // Configurando a resolução do ADC para 13bits        
+  adc1_config_width(ADC_WIDTH_BIT_13);
+  // Configurando o Channel do ADC para o Channel 0
+  adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_DB_11);
+
+
+  while(1){
+
+    // Função que de leitura do valor analogico, passando o ADC1 que é o do GPIO1
+    int sensorValue = adc1_get_raw(ADC1_CHANNEL_0);
+
+    // Imprimindo valores lidos
+    printf("%d\n", sensorValue);
+
+    // Rotina de Delay de 1 segundo
+    vTaskDelay(1000 / portTICK_PERIOD_MS);
+    // Descarrega os buffers de saída de dados
+    fflush(stdout);
+
+  }
+}
+
+
+

Você encontra o projeto completo em: Entrada Analógica

+

Compilação

+

Após a codificação vamos compilar o código, mas antes selecione o set-target para ESP 32-S2:

+
idf.py set-target esp32s2
+
+

Após a compilação vamos enviar o código fonte para nossa placa, no editor pressione o ícone de raio para dar o FLASH e aguarde alguns segundos para assim dar início ao programa

+

compilar

+

Para vermos a saída de dados do nosso projeto clique no ícone no formato de monitor:

+

upload

+

Resultados

+

Valores mostrados no terminal quando o potenciômetro é rotacionado.

+

resultado

+

Conclusão

+

Concluímos o estudo do periférico base para iniciar no desenvolvimento com microcontroladores da Espressif usando o Framework IDF, a partir desse artigo podemos replicar para as demais famílias do ESP32, estes conceitos podem ser levados também para trabalharmos com outros microcontroladores que utilizem C e uma programação mais abstrata. Este artigo visa no estudo do periférico ADC, ao final deste projeto é possível aprender a utilizar o ADC da Franzininho WiFi para leitura de dados analógicos e lhe dará o desafio de aplicar esse aprendizado na leitura de sensores analógicos para você aplicar em seus projetos utilizando o ESP-IDF. Bons estudos.

+
AutorKayann Soares
Data:01/06/2021
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-espidf/entrada-digital/index.html b/docs/franzininho-wifi/exemplos-espidf/entrada-digital/index.html index 581579de9..015d75ac6 100755 --- a/docs/franzininho-wifi/exemplos-espidf/entrada-digital/index.html +++ b/docs/franzininho-wifi/exemplos-espidf/entrada-digital/index.html @@ -1,17 +1,140 @@ - + - -Entrada digital | Franzininho - - - + +Entrada digital | Franzininho + + + -
-

Entrada digital

Seguindo nas aplicações com o ESP-IDF naa placa Franzininho WiFi vamos dar continuidade aos trabalhos com o periférico de Entrada/Saída de Propósito Geral ou do inglês General Purpose Input/Output (GPIO) . O objetivo deste texto é apresentar um exemplo de projeto para configurar os pinos como entrada digital. Ao final, estaremos preparados para manipular tanto as saídas digitais, vista anteriormente, quanto às entradas de digitais.

Recursos Necessários

Os materiais necessários para realizar esse exemplo são:

  • Placa Franzininho WiFi;
  • Protoboard;
  • Botão ou chave táctil;
  • LED;
  • Resistor de 220 ou 330 Ohm;
  • Cabos Jumpers;
  • Computador com ESP-IDF instalado e configurado.

Recursos Necessários

Os materiais necessários para realizar esse exemplo são:

  • Placa Franzininho WiFi;
  • Protoboard;
  • Botão ou chave táctil;
  • LED;
  • Resistor de 220 ou 330 Ohm;
  • Cabos Jumpers;
  • Computador com ESP-IDF instalado e configurado.

Desenvolvimento

Nesse artigo vamos apresentar um exemplo de projeto utilizando as duas funções do periférico GPIO: entrada digital e saída digital. Na entrada digital vamos realizar a leitura do botão táctil e armazenar seu estado em uma variável que irá interagir com o monitor e um LED externo, atuando como uma saída digital que irá nos indicar o estado atual do botão.

O programa desenvolvido possibilita utilizar duas topologias de circuito : pull up ou pull down, para mais informações sobre essas topologias acesse os links referente a cada circuito. Nesse exemplo de projeto iremos utilizar a topologia com o pull up interno do processador, desta forma deve-se observar os comentários ao longo do código a fim de habilitar ou desabilitar as topologias de circuito.

Na placa Franzininho WiFI temos 38 pinos programáveis com o periférico GPIO, encorajamos aos leitores que alterem o código da forma como achar necessário e praticar a codificação do programa a fim de consolidar o conhecimento adquirido.

Esquemático

Para darmos início ao projeto é importante realizar a montagem do circuito em protoboard observando com cuidado as conexões, iremos conectar um dos terminais do resistor no GPIO 2 e outro no LED externo por fim ligamos a GPIO 15 no botão táctil. Abaixo segue o esquemático proposto:

circuito

Código

O programa desenvolvido possui uma estrutura bem simples e não é necessário acrescentar nenhuma biblioteca, apenas a manutenção dos arquivos de cabeçalho já presentes no projeto. Ao criar um novo projeto no IDF automaticamente já temos arquivos configurados e prontos para programação do dispositivo, desta forma digite e comente as linhas do seguinte código no arquivo main.c :

/*
Autor : Halysson Junior
Data: 31/03/21
Descrição:
Neste exemplo utilizou-se um botão táctil (entrada digital) para acionar um LED (saída digital)
e mostra seu estado no terminal.

*/

// Inclusão arquivos de cabeçalho

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "sdkconfig.h"

// Definições de Pinos
#define BTN 15
#define LED 2

// Definição de habilitação (PULLUP / PULLDOWN)
#define PULLUP
// #define PULLDOWN (Para habilitar pulldown descomente aqui e comente -> " #define PULLUP ")

// Definições de estado lógico (caso altere para pulldown, deve-se inverter os estado lógicos)
#define ON 1
#define OFF 0

void app_main(void){ // Main

gpio_pad_select_gpio(LED);
gpio_set_direction(LED,GPIO_MODE_OUTPUT);// onfigura LED como saída digital

gpio_pad_select_gpio(BTN);
gpio_set_direction(BTN,GPIO_MODE_INPUT); // Configura LED como saída digital

#ifdef PULLDOWN // Habilita pulldown

gpio_pulldown_en(BTN);
gpio_pullup_dis(BTN);

#endif

#ifdef PULLUP // Habilita pullup
gpio_pullup_en(BTN);
gpio_pulldown_dis(BTN);

#endif

// Váriavel Local
bool last_state_btn = 0; // Armazena o último estado do botão

while (1) { // Loop

// Váriavel Local
bool state_btn = gpio_get_level(BTN); // Leitura do botão

if(!state_btn && !last_state_btn) {
gpio_set_level(LED,ON); // Se botão for zero então ... liga LED
printf("LED LIGADO"); // Mostra informação no monitor "LED LIGADO"
last_state_btn = true; // Botão pressionado
}

else if(state_btn && last_state_btn){
gpio_set_level(LED,OFF); // Senão... desliga LED
printf ("LED DESLIGADO"); // Mostra informação no monitor "LED DESLIGADO"
last_state_btn = false; // Botão solto
}
vTaskDelay(1/ portTICK_PERIOD_MS); // Rotina de Delay de 1 segundo
fflush(stdout); // Descarrega os buffers de saída de dados

}// endLoop

}// endMain

Você encontra o projeto completo na documentação da Franzininho: Button

Caso ainda não tenha instalado e configurado o IDF no seu computador ou tenha dúvidas sobre as ferramentas, acesse o tutorial de instalação (Clique Aqui).

Compilação

Após a codificação vamos compilar o código, mas antes selecione o set-target para ESP 32-S2:

idf.py set-target esp32s2

Ao final da compilação o resultado final deve ser semelhante à imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu código.

resultado da compilação

Após a etapa de compilação vamos enviar o código fonte para nossa placa, no editor pressione o ícone abaixo e aguarde alguns segundos para assim dar início ao programa “Button”(seta preta) e para vermos a saída de dados do nosso projeto clique no ícone no formato de monitor (seta vermelha):

atalhos de compilação

Resultados

Finalizando o exemplo de projeto o leitor deve ter observado que no programa Button, foram utilizadas as estruturas de condição IF / ELSE IF para interagir com o estado atual do botão, adicionou-se às uma nova label nativa para indicar as entradas digitais (GPIO_MODE_INPUT) e as funções para indicar topologia do circuito ( gpio_pullup_en()/gpio pulldown_dis()) utilizado e verificar a leitura digital no pino definido no cabeçalho do código.

Abaixo segue o resultado final dos dados de saída no monitor:

saída monitor serial

Abaixo segue o nosso circuito do nosso projeto:

teste na bancada

Conclusão

Nesse projeto concluímos o estudo do periférico base para iniciar no mundo dos microcontroladores, pois a partir desse conhecimento adquirido podemos reciclar para as outras famílias do ESP32, como também em outros chips baseados na linguagem C para estruturar seu programa. Como mencionado na seção de Desenvolvimento, este segundo artigo deseja consolidar o conhecimento nesse periférico (GPIO), por tanto deixo o desafio de criar um contador de pulsos de 0 até 10 e reiniciado sempre quando forma maior que 10, ao final de cada contagem deve-se acionar um LED e mostrar quantas contagens já foram feitas. Desejo sorte àqueles que irão realizar o desafio e bons estudos, que a força esteja com todos nós.

AutorHalysson Junior
Data:01/06/2021
- - +

Entrada digital

Seguindo nas aplicações com o ESP-IDF naa placa Franzininho WiFi vamos dar continuidade aos trabalhos com o periférico de Entrada/Saída de Propósito Geral ou do inglês General Purpose Input/Output (GPIO) . O objetivo deste texto é apresentar um exemplo de projeto para configurar os pinos como entrada digital. Ao final, estaremos preparados para manipular tanto as saídas digitais, vista anteriormente, quanto às entradas de digitais.

+

Recursos Necessários

+

Os materiais necessários para realizar esse exemplo são:

+
    +
  • Placa Franzininho WiFi;
  • +
  • Protoboard;
  • +
  • Botão ou chave táctil;
  • +
  • LED;
  • +
  • Resistor de 220 ou 330 Ohm;
  • +
  • Cabos Jumpers;
  • +
  • Computador com ESP-IDF instalado e configurado.
  • +
+

Recursos Necessários

+

Os materiais necessários para realizar esse exemplo são:

+
    +
  • Placa Franzininho WiFi;
  • +
  • Protoboard;
  • +
  • Botão ou chave táctil;
  • +
  • LED;
  • +
  • Resistor de 220 ou 330 Ohm;
  • +
  • Cabos Jumpers;
  • +
  • Computador com ESP-IDF instalado e configurado.
  • +
+

Desenvolvimento

+

Nesse artigo vamos apresentar um exemplo de projeto utilizando as duas funções do periférico GPIO: entrada digital e saída digital. Na entrada digital vamos realizar a leitura do botão táctil e armazenar seu estado em uma variável que irá interagir com o monitor e um LED externo, atuando como uma saída digital que irá nos indicar o estado atual do botão.

+

O programa desenvolvido possibilita utilizar duas topologias de circuito : pull up ou pull down, para mais informações sobre essas topologias acesse os links referente a cada circuito. Nesse exemplo de projeto iremos utilizar a topologia com o pull up interno do processador, desta forma deve-se observar os comentários ao longo do código a fim de habilitar ou desabilitar as topologias de circuito.

+

Na placa Franzininho WiFI temos 38 pinos programáveis com o periférico GPIO, encorajamos aos leitores que alterem o código da forma como achar necessário e praticar a codificação do programa a fim de consolidar o conhecimento adquirido.

+

Esquemático

+

Para darmos início ao projeto é importante realizar a montagem do circuito em protoboard observando com cuidado as conexões, iremos conectar um dos terminais do resistor no GPIO 2 e outro no LED externo por fim ligamos a GPIO 15 no botão táctil. Abaixo segue o esquemático proposto:

+

circuito

+

Código

+

O programa desenvolvido possui uma estrutura bem simples e não é necessário acrescentar nenhuma biblioteca, apenas a manutenção dos arquivos de cabeçalho já presentes no projeto. Ao criar um novo projeto no IDF automaticamente já temos arquivos configurados e prontos para programação do dispositivo, desta forma digite e comente as linhas do seguinte código no arquivo main.c :

+
/*
+    Autor : Halysson Junior
+    Data: 31/03/21
+    Descrição:
+    Neste exemplo utilizou-se um botão táctil (entrada digital) para acionar um LED (saída digital)
+    e mostra seu estado no terminal.
+
+*/
+
+// Inclusão arquivos de cabeçalho
+
+#include <stdio.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "driver/gpio.h"
+#include "sdkconfig.h"
+
+// Definições de Pinos
+#define BTN 15
+#define LED 2
+
+// Definição de habilitação (PULLUP / PULLDOWN)
+#define PULLUP
+// #define PULLDOWN (Para habilitar pulldown descomente aqui e comente -> " #define PULLUP ")
+
+// Definições de estado lógico (caso altere para pulldown, deve-se inverter os estado lógicos)
+#define ON 1
+#define OFF 0
+
+void app_main(void){  // Main
+
+ gpio_pad_select_gpio(LED);                
+ gpio_set_direction(LED,GPIO_MODE_OUTPUT);// onfigura LED como saída digital
+
+ gpio_pad_select_gpio(BTN);  
+ gpio_set_direction(BTN,GPIO_MODE_INPUT); // Configura LED como saída digital
+
+  #ifdef PULLDOWN // Habilita pulldown
+
+   gpio_pulldown_en(BTN);
+   gpio_pullup_dis(BTN);  
+
+  #endif
+
+  #ifdef PULLUP  // Habilita pullup
+  gpio_pullup_en(BTN);
+  gpio_pulldown_dis(BTN);
+
+  #endif
+
+// Váriavel Local
+bool last_state_btn = 0; // Armazena o último estado do botão       
+
+    while (1) { // Loop
+
+    // Váriavel Local  
+     bool state_btn = gpio_get_level(BTN); // Leitura do botão
+
+      if(!state_btn && !last_state_btn) {
+          gpio_set_level(LED,ON);           // Se botão for zero então ... liga LED
+          printf("LED LIGADO");             // Mostra informação no monitor "LED LIGADO"
+          last_state_btn = true;            // Botão pressionado
+      }
+
+      else if(state_btn && last_state_btn){
+        gpio_set_level(LED,OFF);            // Senão... desliga LED
+         printf ("LED DESLIGADO");          // Mostra informação no monitor "LED DESLIGADO"
+        last_state_btn = false;             // Botão solto
+      }
+      vTaskDelay(1/ portTICK_PERIOD_MS);    // Rotina de Delay de 1 segundo
+      fflush(stdout);                       // Descarrega os buffers de saída de dados   
+
+    }// endLoop
+
+}// endMain
+
+

Você encontra o projeto completo na documentação da Franzininho: Button

+

Caso ainda não tenha instalado e configurado o IDF no seu computador ou tenha dúvidas sobre as ferramentas, acesse o tutorial de instalação (Clique Aqui).

+

Compilação

+

Após a codificação vamos compilar o código, mas antes selecione o set-target para ESP 32-S2:

+
idf.py set-target esp32s2
+
+

Ao final da compilação o resultado final deve ser semelhante à imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu código.

+

resultado da compilação

+

Após a etapa de compilação vamos enviar o código fonte para nossa placa, no editor pressione o ícone abaixo e aguarde alguns segundos para assim dar início ao programa “Button”(seta preta) e para vermos a saída de dados do nosso projeto clique no ícone no formato de monitor (seta vermelha):

+

atalhos de compilação

+

Resultados

+

Finalizando o exemplo de projeto o leitor deve ter observado que no programa Button, foram utilizadas as estruturas de condição IF / ELSE IF para interagir com o estado atual do botão, adicionou-se às uma nova label nativa para indicar as entradas digitais (GPIO_MODE_INPUT) e as funções para indicar topologia do circuito ( gpio_pullup_en()/gpio pulldown_dis()) utilizado e verificar a leitura digital no pino definido no cabeçalho do código.

+

Abaixo segue o resultado final dos dados de saída no monitor:

+

saída monitor serial

+

Abaixo segue o nosso circuito do nosso projeto:

+

teste na bancada

+

Conclusão

+

Nesse projeto concluímos o estudo do periférico base para iniciar no mundo dos microcontroladores, pois a partir desse conhecimento adquirido podemos reciclar para as outras famílias do ESP32, como também em outros chips baseados na linguagem C para estruturar seu programa. Como mencionado na seção de Desenvolvimento, este segundo artigo deseja consolidar o conhecimento nesse periférico (GPIO), por tanto deixo o desafio de criar um contador de pulsos de 0 até 10 e reiniciado sempre quando forma maior que 10, ao final de cada contagem deve-se acionar um LED e mostrar quantas contagens já foram feitas. Desejo sorte àqueles que irão realizar o desafio e bons estudos, que a força esteja com todos nós.

+
AutorHalysson Junior
Data:01/06/2021
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf/index.html b/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf/index.html index 1e497d8c8..d0d9ddf4b 100755 --- a/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf/index.html +++ b/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf/index.html @@ -1,17 +1,106 @@ - + - -Hello World! ESP-IDF | Franzininho - - - + +Hello World! ESP-IDF | Franzininho + + + -
-

Hello World! ESP-IDF

O artigo proposto dará início a uma série de projetos utilizando o framework oficial da Espressif, o IDF. O objetivo deste artigo é apresentar um exemplo de projeto que sirva como base para aqueles que estão dando seus primeiros passos na família de microcontroladores ESP32.

Como é de praxe na programação sempre que iniciamos uma nova linguagem ou quando aprendemos sobre um novo processador o primeiro projeto a ser criado é o “Olá Mundo“, caso contrário teremos um eterno azar, então o que acha de começarmos a estudar e apresentar nosso projeto ao Mundo?

Ao final desse exemplo você saberá como é a estrutura básica de um programa no ESP-IDF e estará pronto para os próximos passos.

Recursos Necessários

Para esse exemplo você precisará dos seguintes recursos:

  • Placa Franzininho WiFi;
  • Protoboard;
  • LED;
  • Resistor 220R ou 150R;
  • Computador com ESP-IDF instalado e configurado

Desenvolvimento

Nesse projeto foi utilizado a Franzininho WiFi, uma placa de desenvolvimento baseada no módulo ESP 32-S2 (Wroom ou Wrover), o qual faz parte de uma iniciativa open hardware para ensinar sobre programação e eletrônica aliando habilidades na soldagem de componentes eletrônicos.

Como mencionado, vamos fazer o Olá Mundo (Hello, World!), um programa base que tem como objetivo apresentar os recursos primários do processador em estudo. Nesse primeiro projeto vamos explorar as GPIOs, configuradas como saída digital, conectada a um LED externo para ligar e desligar numa frequência de 1 Hertz (1 segundo) e enviar alguns dados de saída para serem mostrados no monitor do editor, para aqueles que estão migrando do Arduino já estão familiarizados com esse exemplo, o famoso “Blink”.

Esquemático

Antes de começarmos a escrever as primeiras linhas de código vamos realizar a montagem do circuito, vale ressaltar que na placa Franzininho WiFi há um LED RGB on board endereçável, contudo será utilizado um LED externo, conectado a GPIO 2 ,para o primeiro projeto, vamos nos familiarizarmos com os comandos básicos. Abaixo segue o esquemático proposto:

Hello World_circuito

Código

O nosso código possui uma estrutura bem simples e não é necessário acrescentar nenhuma biblioteca. Ao criar um novo projeto no IDF já temos arquivos configurados e prontos para programação do dispositivo, desta forma digite e comente as linhas do seguinte código no arquivo main.c :

/*
Descrição: Exemplo que mostra Hello World utilizando quatro modalidade de saída de dados por meio do
terminal e interagindo com um LED externo para indicação de estado.

Autor: Halysson Junior
Data : 28/03/21
*/


// Arquivos de cabeçalho
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "driver/gpio.h"


// Definição de pino

#define LED 2

// Variável Global
char status[2] = {'L','H'}; // Caracter para indicar estado do LED H- HIGH e L - LOW


void app_main(void) // Main
{

gpio_pad_select_gpio(LED);// Mapeamento do pino LED
gpio_set_direction(LED,GPIO_MODE_OUTPUT); // Definição

printf("Exemplo - Hello World \n");// Mostra informação no terminal


//Variáveis Local
bool i = 0 ; // Varia o estado lógico do LED

for (;;) {// Loop

i= i^1; // Operação lógica XOR para alternar o estado do LED
gpio_set_level(LED,i); // Envia os níveis lógicos 1 ou 0

printf("Hello World, i am Franzininho WiFi ----> LED status : %c \n", status[i]);

vTaskDelay(1000 / portTICK_PERIOD_MS); // Rotina de Delay de 1 segundo
fflush(stdout); // Descarrega os buffers de saída de dados

}// end Loop


}// end Main

Você encontra o projeto completo na documentação da Franzininho: Hello_World

Caso ainda não tenha instalado e configurado o IDF no seu computador ou tem dúvidas sobre as ferramentas, acesse o tutorial de instalação

Compilação

Após a codificação vamos compilar o código, mas antes selecione o set target para ESP 32-S2.

idf.py set-target esp32s2

Ao final da compilação o resultado final deve ser semelhante à imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu código.

resultado da compilação

Agora vamos enviar o código fonte para nossa placa, no editor vamos pressionar o ícone abaixo e aguarde alguns segundos para assim dar início ao programa “Olá Mundo”.

Gravando

Para vermos a saída de dados do nosso projeto clique no ícone apresentado abaixo.

Monitor

Resultados

Com a finalização do projeto o leitor observou que utilizamos uma estruturação da linguagem C (main(), printf, fflush()), laços de repetição (for()) e alguns tipos de variáveis primitivas (int e char) para formar nosso código . Aliados a isso utilizamos labels nativas do IDF para definir os pinos de entrada ou saída digital (GPIO_MODE_OUTPUT ).

Abaixo segue o resultado final dos dados de saída :

monitor

Abaixo segue o nosso circuito do nosso projeto

Monitor

Portanto, a partir deste projeto é possível aplicar a lógica estruturada no código em diversos outros tipos de sensores, por exemplo : sensor de vibração, sensor infravermelho, sensor de som e outros sensores digitais comumente comercializados.

Conclusão

Nesse projeto apresentamos os conceitos básicos para aqueles que desejam dar o pontapé inicial nos estudos sobre o IDF, contudo aconselhamos aos leitores a modificar o código no intuito de revisar a linguagem C e fixar algumas funções nativas, os quais serão normalmente utilizadas em outros projetos também não limitar-se apenas aos periféricos GPIOs do microcontrolador, pois o ESP32-S2 possui diversos recursos tanto em hardware quanto em software. Desta forma o artigo servirá de acervo aos leitores para relembrar conceitos específicos e aprimorar os que já possuem.

AutorHalysson Junior
Data:13/05/2021
- - +

Hello World! ESP-IDF

O artigo proposto dará início a uma série de projetos utilizando o framework oficial da Espressif, o IDF. O objetivo deste artigo é apresentar um exemplo de projeto que sirva como base para aqueles que estão dando seus primeiros passos na família de microcontroladores ESP32.

+

Como é de praxe na programação sempre que iniciamos uma nova linguagem ou quando aprendemos sobre um novo processador o primeiro projeto a ser criado é o “Olá Mundo“, caso contrário teremos um eterno azar, então o que acha de começarmos a estudar e apresentar nosso projeto ao Mundo?

+

Ao final desse exemplo você saberá como é a estrutura básica de um programa no ESP-IDF e estará pronto para os próximos passos.

+

Recursos Necessários

+

Para esse exemplo você precisará dos seguintes recursos:

+
    +
  • Placa Franzininho WiFi;
  • +
  • Protoboard;
  • +
  • LED;
  • +
  • Resistor 220R ou 150R;
  • +
  • Computador com ESP-IDF instalado e configurado
  • +
+

Desenvolvimento

+

Nesse projeto foi utilizado a Franzininho WiFi, uma placa de desenvolvimento baseada no módulo ESP 32-S2 (Wroom ou Wrover), o qual faz parte de uma iniciativa open hardware para ensinar sobre programação e eletrônica aliando habilidades na soldagem de componentes eletrônicos.

+

Como mencionado, vamos fazer o Olá Mundo (Hello, World!), um programa base que tem como objetivo apresentar os recursos primários do processador em estudo. Nesse primeiro projeto vamos explorar as GPIOs, configuradas como saída digital, conectada a um LED externo para ligar e desligar numa frequência de 1 Hertz (1 segundo) e enviar alguns dados de saída para serem mostrados no monitor do editor, para aqueles que estão migrando do Arduino já estão familiarizados com esse exemplo, o famoso “Blink”.

+

Esquemático

+

Antes de começarmos a escrever as primeiras linhas de código vamos realizar a montagem do circuito, vale ressaltar que na placa Franzininho WiFi há um LED RGB on board endereçável, contudo será utilizado um LED externo, conectado a GPIO 2 ,para o primeiro projeto, vamos nos familiarizarmos com os comandos básicos. Abaixo segue o esquemático proposto:

+

Hello World_circuito

+

Código

+

O nosso código possui uma estrutura bem simples e não é necessário acrescentar nenhuma biblioteca. Ao criar um novo projeto no IDF já temos arquivos configurados e prontos para programação do dispositivo, desta forma digite e comente as linhas do seguinte código no arquivo main.c :

+
/*
+ Descrição: Exemplo que mostra Hello World utilizando quatro modalidade de saída de dados por meio do
+ terminal e interagindo com um LED externo para indicação de estado.
+
+ Autor: Halysson Junior
+ Data : 28/03/21
+*/
+
+
+// Arquivos de cabeçalho
+#include <stdio.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "esp_system.h"
+#include "driver/gpio.h"
+
+
+// Definição de pino
+
+#define LED 2
+
+// Variável Global
+char status[2] = {'L','H'}; // Caracter para indicar estado do LED H- HIGH e L - LOW
+
+
+void app_main(void) // Main
+{
+
+    gpio_pad_select_gpio(LED);// Mapeamento do pino LED
+    gpio_set_direction(LED,GPIO_MODE_OUTPUT); // Definição
+
+    printf("Exemplo - Hello World \n");// Mostra informação no terminal
+
+
+    //Variáveis Local
+     bool i = 0 ; // Varia o estado lógico do LED
+
+      for (;;) {// Loop
+
+        i= i^1; // Operação lógica XOR para alternar o estado do LED
+        gpio_set_level(LED,i); // Envia os níveis lógicos 1 ou 0
+
+       printf("Hello World, i am Franzininho WiFi ----> LED status : %c \n", status[i]);
+
+        vTaskDelay(1000 / portTICK_PERIOD_MS); // Rotina de Delay de 1 segundo
+        fflush(stdout);  // Descarrega os buffers de saída de dados   
+
+    }// end Loop
+
+
+}// end Main
+
+

Você encontra o projeto completo na documentação da Franzininho: Hello_World

+

Caso ainda não tenha instalado e configurado o IDF no seu computador ou tem dúvidas sobre as ferramentas, acesse o tutorial de instalação

+

Compilação

+

Após a codificação vamos compilar o código, mas antes selecione o set target para ESP 32-S2.

+

idf.py set-target esp32s2

+

Ao final da compilação o resultado final deve ser semelhante à imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu código.

+

resultado da compilação

+

Agora vamos enviar o código fonte para nossa placa, no editor vamos pressionar o ícone abaixo e aguarde alguns segundos para assim dar início ao programa “Olá Mundo”.

+

Gravando

+

Para vermos a saída de dados do nosso projeto clique no ícone apresentado abaixo.

+

Monitor

+

Resultados

+

Com a finalização do projeto o leitor observou que utilizamos uma estruturação da linguagem C (main(), printf, fflush()), laços de repetição (for()) e alguns tipos de variáveis primitivas (int e char) para formar nosso código . Aliados a isso utilizamos labels nativas do IDF para definir os pinos de entrada ou saída digital (GPIO_MODE_OUTPUT ).

+

Abaixo segue o resultado final dos dados de saída :

+

monitor

+

Abaixo segue o nosso circuito do nosso projeto

+

Monitor

+

Portanto, a partir deste projeto é possível aplicar a lógica estruturada no código em diversos outros tipos de sensores, por exemplo : sensor de vibração, sensor infravermelho, sensor de som e outros sensores digitais comumente comercializados.

+

Conclusão

+

Nesse projeto apresentamos os conceitos básicos para aqueles que desejam dar o pontapé inicial nos estudos sobre o IDF, contudo aconselhamos aos leitores a modificar o código no intuito de revisar a linguagem C e fixar algumas funções nativas, os quais serão normalmente utilizadas em outros projetos também não limitar-se apenas aos periféricos GPIOs do microcontrolador, pois o ESP32-S2 possui diversos recursos tanto em hardware quanto em software. Desta forma o artigo servirá de acervo aos leitores para relembrar conceitos específicos e aprimorar os que já possuem.

+
AutorHalysson Junior
Data:13/05/2021
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-espidf/ledc/index.html b/docs/franzininho-wifi/exemplos-espidf/ledc/index.html index a0e5367a4..dfe8023e1 100755 --- a/docs/franzininho-wifi/exemplos-espidf/ledc/index.html +++ b/docs/franzininho-wifi/exemplos-espidf/ledc/index.html @@ -1,17 +1,151 @@ - + - -PWM com LEDC | Franzininho - - - + +PWM com LEDC | Franzininho + + + -
-

PWM com LEDC

Seguindo os estudos do ESP-IDF, vamos agora estudar um novo periférico, o LED Control (LEDC), o qual tem a função de controlar a intensidade luminosa do LED e também servir como fonte geradora de sinal pulsado, Pulse Width Modulation (PWM), para diferentes propósitos como: controle de velocidade em motores de corrente contínua (CC), angulação em servomotores, mudança de cores em LED RGB e outras mais aplicações.

Com isso, ao final deste artigo estaremos familiarizados com os recursos oferecidos pelo periférico além de dominar as configurações básicas para implementar em projetos.

Recursos Necessários

Os materiais necessários para realizar esse exemplo são:

  • Placa Franzininho WiFi;
  • Protoboard;
  • LED;
  • Resistor de 220 Ohm;
  • Cabos Jumpers;
  • Computador com ESP-IDF instalado e configurado.

Desenvolvimento

Na placa Franzininho WiFi o periférico LEDC está disposto em dois grupos de oito canais, sendo um grupo operando no High Speed Mode (HSM) e outro em Low Speed Mode (LSM) operando independente uns dos outros . O modo High Speed é implementado em hardware oferecendo mudanças automáticas sem interferir no duty cycle do PWM, ou seja, caso haja alterações na temporização serão atualizadas no próximo estouro do timer. Em contraste isso o modo Low Speed deve ser explicitar o via software as configurações de temporização.

Para utilizarmos esse periféricos precisamos seguir algumas etapas fundamentais para nossa aplicação de estudo que são: Configuração do Temporizador , Configuração do Canal e Alteração do PWM.

  • Configuração do Temporizador : nessa primeira etapa vamos especificar a frequência e a resolução do sinal PWM preenchendo a estrutura de dados ledc_timer_config_t e apontando-a para a função led_timer_config() .

  • Configuração do Canal: nessa segunda etapa iremos direcionar o GPIO que será a saída do sinal PWM, o qual é selecionado dentro da estrutura de configuração do periférico.

  • Alteração do PWM: na última etapa vamos realizar o aumento e a redução do duty cycle na saída da geradora de sinal criando assim o fade no LED externo, o qual será habilitado via hardware pela função ledc_fade_func_install().

Com a finalização das três etapas de configuração o acionamento do periférico LED Control estará em funcionamento, contudo devemos agora seguir para montagem do circuito para concluir o projeto.

Configuração do Periférico LED Control

Esquemático

Nesta parte daremos início a montagem do circuito em protoboard, iremos conectar um dos terminais do resistor no GPIO 2 e outro no LED externo.

Abaixo segue o esquemático proposto :

Imagem do Circuito

Código

/*
Autor: Halysson Junior
Data : 10/04/21

Nesse exemplo foi configurado o periferico LEDC para controlar a intensidade do LED.

*/

// Inclusão de arqivos de cabeçalho
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/ledc.h"
#include "esp_err.h"

// Definição para configuração do periférico
#define LEDC_GPIO 2
#define LEDC_FADE_TIME 500
#define LEDC_RESOLUTION 1024
#define LEDC_FREQ 5000


void app_main(void) // Main
{

// Estrutura de dados para receber as váriaveis de configuração de frequência (1Hz, 100 Hz e outros), modo (HIGH ou LOW) e selecionar o TIMER (0,1,2)

ledc_timer_config_t timer = { // Configuração do timer

.speed_mode = LEDC_LOW_SPEED_MODE, // Modo de Velocidade -> LOW
.duty_resolution = LEDC_TIMER_10_BIT, // Resolução do do ciclo de trabalho (2^10 = 1024 valores)
.timer_num = LEDC_TIMER_0, // Utilizado o TIMER 0
.freq_hz = LEDC_FREQ, // Frequência de operação do sinal PWM
.clk_cfg = LEDC_AUTO_CLK // Seleção automatica da fonte geradora do clock (interna ou externa)

};


ledc_timer_config(&timer); // Envia o endereço da estrutura timer para a função de configuração do canal PWM

/*
NOTA:
A frequencia e a resolução do ciclo de trabalho são independentes. Para uma elevada frequência do PWM,
terá uma baixa resolução do ciclo de trabalho disponivel e vice-versa
*/

// Estrutura de dados para receber as váriaveis de configuração de frequencia (1Hz, 100 Hz e outros), modo (HIGH ou LOW), selecionar o TIMER (0,1,2)

ledc_channel_config_t channel_LEDC = {
.gpio_num = LEDC_GPIO, // Seleciona o pino para atuar o PWM
.speed_mode = LEDC_LOW_SPEED_MODE, // Modo de Velocidade -> LOW
.channel = LEDC_CHANNEL_0,
.timer_sel = LEDC_TIMER_0,
.duty = 0,
.hpoint = 0

};

ledc_channel_config(&channel_LEDC);


ledc_fade_func_install(0); // Inicializa o serviço do Fade

for(;;){ // Loop

// Define e inicia a função de fade no periférico LEDC
ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , 0 , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);
ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , LEDC_RESOLUTION , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);


}// endLoop

}//endMain

/*
*** Paramentrização da função " ledc_set_fade_time_and_start(); " ***

ledc_set_fade_time_and_start(ledc_mode_tspeed_mode, ledc_channel_tchannel, uint32_t target_duty, uint32_t max_fade_time_ms, ledc_fade_mode_tfade_mode)

ledc_mode_tspeed_mode -> modo do timer utilizado
ledc_channel_tchannel -> indice do canal LEDC (0-7)
uint32_t target_duty -> (2 ** resolução_ciclo_de_trabalho) - 1
uint32_t max_fade_time_ms -> tempo máximo (ms) para o fading
ledc_fade_mode_tfade_mode ->
*/

O programa desenvolvido possui uma estrutura bem simples e não é necessário acrescentar nenhuma biblioteca, apenas a manutenção dos arquivos de cabeçalho já presentes no projeto.

Ao criar um novo projeto no IDF automaticamente já temos arquivos configurados e prontos para programação do dispositivo, desta forma digite e comente as linhas do seguinte código no arquivo main.c :

Você encontra o projeto completo na documentação da Franzininho: PWM_LEDC

Caso ainda não tenha instalado e configurado o IDF no seu computador ou tenha dúvidas sobre as ferramentas, acesse o tutorial de instalação (Clique Aqui).

Compilação

Após a codificação vamos compilar o código, mas antes selecione o set-target para ESP32-S2. Caso não possua a placa Franzininho WiFi altere o target para o modelo de ESP32 utilizando em seu projeto.

idf.py set-target esp32s2

Ao final da compilação o resultado final deve ser semelhante à imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu código.

Imagem do Terminal Visual Code

Após a etapa de compilação vamos enviar o código fonte para nossa placa, no editor pressione o ícone abaixo e aguarde alguns segundos para assim dar início ao upload do programa “PWM” (seta preta) .

Barra inferior do Visual Code

Resultados

Após enviar seu código e com o circuito devidamente montado o LED externo conectado começará a aumentar e diminuir sua intensidade luminosa gradualmente criando o fade desejado. Na figura 5 temos a imagem do osciloscópio mostrando a forma de onda gerada e o duty cycle atuando no momento e na figura 6 o circuito em perfeito funcionamento.

Saída do sinal PWM

Imagem do circuito em funcionamento

Conclusão

Neste exemplo apresentamos tópicos intermediários sobre a manipulação do periférico LED Control, utilizamos conceitos importantes da linguagem C estrutura de dados e ponteiros implementado na configuração do sinal pulsado.

Deve-se deixar claro que o artigo aborda um conteúdo para darmos os primeiros passo com este periférico, encorajamos que o leitor reconfigure a saída do sinal PWM como também acesse a documentação oferecida pela Espressif para compreender como o hardware do chip comporta-se com cada configuração realizada além das funções implementadas em software.

AutorHalysson Junior
Data:22/07/2021
- - +

PWM com LEDC

Seguindo os estudos do ESP-IDF, vamos agora estudar um novo periférico, o LED Control (LEDC), o qual tem a função de controlar a intensidade luminosa do LED e também servir como fonte geradora de sinal pulsado, Pulse Width Modulation (PWM), para diferentes propósitos como: controle de velocidade em motores de corrente contínua (CC), angulação em servomotores, mudança de cores em LED RGB e outras mais aplicações.

+

Com isso, ao final deste artigo estaremos familiarizados com os recursos oferecidos pelo periférico além de dominar as configurações básicas para implementar em projetos.

+

Recursos Necessários

+

Os materiais necessários para realizar esse exemplo são:

+
    +
  • Placa Franzininho WiFi;
  • +
  • Protoboard;
  • +
  • LED;
  • +
  • Resistor de 220 Ohm;
  • +
  • Cabos Jumpers;
  • +
  • Computador com ESP-IDF instalado e configurado.
  • +
+

Desenvolvimento

+

Na placa Franzininho WiFi o periférico LEDC está disposto em dois grupos de oito canais, sendo um grupo operando no High Speed Mode (HSM) e outro em Low Speed Mode (LSM) operando independente uns dos outros . O modo High Speed é implementado em hardware oferecendo mudanças automáticas sem interferir no duty cycle do PWM, ou seja, caso haja alterações na temporização serão atualizadas no próximo estouro do timer. Em contraste isso o modo Low Speed deve ser explicitar o via software as configurações de temporização.

+

Para utilizarmos esse periféricos precisamos seguir algumas etapas fundamentais para nossa aplicação de estudo que são: Configuração do Temporizador , Configuração do Canal e Alteração do PWM.

+
    +
  • +

    Configuração do Temporizador : nessa primeira etapa vamos especificar a frequência e a resolução do sinal PWM preenchendo a estrutura de dados ledc_timer_config_t e apontando-a para a função led_timer_config() .

    +
  • +
  • +

    Configuração do Canal: nessa segunda etapa iremos direcionar o GPIO que será a saída do sinal PWM, o qual é selecionado dentro da estrutura de configuração do periférico.

    +
  • +
  • +

    Alteração do PWM: na última etapa vamos realizar o aumento e a redução do duty cycle na saída da geradora de sinal criando assim o fade no LED externo, o qual será habilitado via hardware pela função ledc_fade_func_install().

    +
  • +
+

Com a finalização das três etapas de configuração o acionamento do periférico LED Control estará em funcionamento, contudo devemos agora seguir para montagem do circuito para concluir o projeto.

+

Configuração do Periférico LED Control

+

Esquemático

+

Nesta parte daremos início a montagem do circuito em protoboard, iremos conectar um dos terminais do resistor no GPIO 2 e outro no LED externo.

+

Abaixo segue o esquemático proposto :

+

Imagem do Circuito

+

Código

+
/*
+   Autor: Halysson Junior
+   Data : 10/04/21   
+
+    Nesse exemplo foi configurado o periferico LEDC para controlar a intensidade do LED.
+     
+*/
+
+// Inclusão de arqivos de cabeçalho
+#include <stdio.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "driver/ledc.h"
+#include "esp_err.h"
+
+// Definição para configuração do periférico
+#define LEDC_GPIO         2
+#define LEDC_FADE_TIME    500
+#define LEDC_RESOLUTION   1024
+#define LEDC_FREQ         5000
+
+
+void app_main(void) // Main
+{
+
+  //  Estrutura de dados para receber  as váriaveis  de configuração de frequência (1Hz, 100 Hz e outros), modo (HIGH ou LOW) e selecionar o TIMER (0,1,2)  
+  
+  ledc_timer_config_t timer = {                   // Configuração do timer 
+
+      .speed_mode      = LEDC_LOW_SPEED_MODE,     // Modo de Velocidade -> LOW
+      .duty_resolution = LEDC_TIMER_10_BIT,       // Resolução do do ciclo de trabalho (2^10 = 1024 valores)
+      .timer_num       = LEDC_TIMER_0,            // Utilizado o TIMER 0
+      .freq_hz         = LEDC_FREQ,               // Frequência de operação do sinal PWM
+      .clk_cfg         = LEDC_AUTO_CLK            // Seleção automatica da fonte geradora do clock (interna ou externa)
+    
+  };
+
+  
+  ledc_timer_config(&timer); // Envia o endereço  da estrutura timer para a função de configuração do canal PWM 
+ 
+ /*
+   NOTA:
+   A frequencia e a resolução do ciclo de trabalho são independentes. Para uma elevada frequência do PWM, 
+   terá uma baixa resolução do ciclo de trabalho disponivel e vice-versa  
+ */
+
+ //  Estrutura de dados para receber  as váriaveis  de configuração de frequencia (1Hz, 100 Hz e outros), modo (HIGH ou LOW), selecionar o TIMER (0,1,2) 
+  
+  ledc_channel_config_t channel_LEDC = {
+      .gpio_num   =   LEDC_GPIO,             // Seleciona o pino para atuar o PWM
+      .speed_mode =   LEDC_LOW_SPEED_MODE,   // Modo de Velocidade -> LOW
+      .channel    =   LEDC_CHANNEL_0,           
+      .timer_sel  =   LEDC_TIMER_0,
+      .duty       =   0,
+      .hpoint     =   0
+    
+    };
+  
+  ledc_channel_config(&channel_LEDC);
+ 
+ 
+  ledc_fade_func_install(0); // Inicializa o serviço do Fade
+  
+  for(;;){ // Loop
+
+   // Define e inicia a função de fade no periférico LEDC
+    ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , 0               , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);
+    ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , LEDC_RESOLUTION , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);
+  
+  
+  }// endLoop
+
+}//endMain
+
+/*
+ *** Paramentrização da função " ledc_set_fade_time_and_start(); " ***
+
+ledc_set_fade_time_and_start(ledc_mode_tspeed_mode, ledc_channel_tchannel, uint32_t target_duty, uint32_t max_fade_time_ms, ledc_fade_mode_tfade_mode)
+
+  ledc_mode_tspeed_mode     -> modo do timer utilizado
+  ledc_channel_tchannel     -> indice do canal LEDC (0-7)
+  uint32_t target_duty      -> (2 ** resolução_ciclo_de_trabalho) -  1
+  uint32_t max_fade_time_ms -> tempo máximo (ms) para o fading  
+  ledc_fade_mode_tfade_mode ->  
+*/
+
+

O programa desenvolvido possui uma estrutura bem simples e não é necessário acrescentar nenhuma biblioteca, apenas a manutenção dos arquivos de cabeçalho já presentes no projeto.

+

Ao criar um novo projeto no IDF automaticamente já temos arquivos configurados e prontos para programação do dispositivo, desta forma digite e comente as linhas do seguinte código no arquivo main.c :

+

Você encontra o projeto completo na documentação da Franzininho: PWM_LEDC

+

Caso ainda não tenha instalado e configurado o IDF no seu computador ou tenha dúvidas sobre as ferramentas, acesse o tutorial de instalação (Clique Aqui).

+

Compilação

+

Após a codificação vamos compilar o código, mas antes selecione o set-target para ESP32-S2. Caso não possua a placa Franzininho WiFi altere o target para o modelo de ESP32 utilizando em seu projeto.

+

idf.py set-target esp32s2

+

Ao final da compilação o resultado final deve ser semelhante à imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu código.

+

Imagem do Terminal Visual Code

+

Após a etapa de compilação vamos enviar o código fonte para nossa placa, no editor pressione o ícone abaixo e aguarde alguns segundos para assim dar início ao upload do programa “PWM” (seta preta) .

+

Barra inferior do Visual Code

+

Resultados

+

Após enviar seu código e com o circuito devidamente montado o LED externo conectado começará a aumentar e diminuir sua intensidade luminosa gradualmente criando o fade desejado. Na figura 5 temos a imagem do osciloscópio mostrando a forma de onda gerada e o duty cycle atuando no momento e na figura 6 o circuito em perfeito funcionamento.

+

Saída do sinal PWM

+

Imagem do circuito em funcionamento

+

Conclusão

+

Neste exemplo apresentamos tópicos intermediários sobre a manipulação do periférico LED Control, utilizamos conceitos importantes da linguagem C estrutura de dados e ponteiros implementado na configuração do sinal pulsado.

+

Deve-se deixar claro que o artigo aborda um conteúdo para darmos os primeiros passo com este periférico, encorajamos que o leitor reconfigure a saída do sinal PWM como também acesse a documentação oferecida pela Espressif para compreender como o hardware do chip comporta-se com cada configuração realizada além das funções implementadas em software.

+
AutorHalysson Junior
Data:22/07/2021
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-espidf/primeiros-passos/index.html b/docs/franzininho-wifi/exemplos-espidf/primeiros-passos/index.html index 3904cf49f..ad4b767ab 100755 --- a/docs/franzininho-wifi/exemplos-espidf/primeiros-passos/index.html +++ b/docs/franzininho-wifi/exemplos-espidf/primeiros-passos/index.html @@ -1,22 +1,158 @@ - + - -Primeiros Passos com ESP-IDF | Franzininho - - - + +Primeiros Passos com ESP-IDF | Franzininho + + + -
-

Primeiros Passos com ESP-IDF

Este documento tem como objetivo ajudá-lo a configurar o ESP-IDF (Espressif IoT Development Framework) para trabalhar com a Franzininho WiFi que usa o ESP32-S2 da Espressif.

Ao final, faremos um exemplo simples para compilar, gravar e monitorar usando o ESP-IDF, assim, garantiremos que tudo estará funcionando.

Introdução

Para essa configuração, vamos instalar o ESP-IDF e usá-lo através de linha de comando. Caso você queira usar o IDF integrado a ambientes de desenvolvimento integrado (IDE) como VScode e Eclipse, confira os seguintes links:

Você poderá instalar o ESP-IDF no seu sistema operacional preferido (Linux, Windows, macOS).

Para a experiência completa, você precisará de uma placa Franzininho WiFi, Computador: com Windows, Linux ou macOS

Passo 1 - Instalação dos pré-requisitos

Algumas ferramentas precisam ser instaladas no computador antes de prosseguir para as próximas etapas. Siga os links abaixo para obter as instruções para o seu sistema operacional:

É muito importante a instalação de todos os pré-requisitos.

Passo 2 - Instalação do ESP-IDF

Nessa etapa vamos instalar o ESP-IDF e conjunto de ferramentas e bibliotecas. Vamos usar o código mantido pela Espressif no repositório do ESP-IDF

O ESP-IDF é o framework oficial da Espressif para o desenvolvimento de aplicações parar toda a família ESP32. O procedimento apresentado aqui servirá para trabalhar com toda a família ESP32. Porém, vamos dar foco ao ESP32-S2 que é usado na Franzininho WiFi.

Linux e macOS

Abra o terminal e execute:

mkdir -p ~/esp
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git

O ESP-IDF será baixado no seguinte repositório ~/esp/esp-idf.

Windows

Além de instalar as ferramentas, o ESP-IDF Tools Installer para Windows apresentado no passo 1 ele também baixa uma cópia do ESP-IDF. Dessa forma você não precisará baixar o ESP-IDF agora, se já tiver baixado anteriormente junto aos pré-requisitos.

Se desejar fazer o download do ESP-IDF sem a ajuda do ESP-IDF Tools Installer, consulte estas instruções.

Instalando O ESP-IDF e ferramentas

Além do ESP-IDF, você também precisa instalar as ferramentas usadas pelo ESP-IDF, como compilador, depurador, pacotes Python, etc.

Windows

O ESP-IDF Tools Installer para Windows apresentado no passo 1 instala todas as ferramentas necessárias.

Se você deseja instalar as ferramentas sem a ajuda do ESP-IDF Tools Installer, abra o Prompt de Comando e siga estas etapas:

cd %userprofile%\esp\esp-idf
install.bat

Ou no Windows PowerShell

cd ~/esp/esp-idf
./install.ps1

Linux e macOS

No Linux ou macOS há um script para instalação.Abra o terminal e execute:

cd ~/esp/esp-idf
./install.sh

Ou se tiver usando o Fish:

cd ~/esp/esp-idf
./install.fish

Configurando as variáveis de ambientes

As ferramentas instaladas ainda não foram adicionadas à variável de ambiente PATH. Para tornar as ferramentas utilizáveis na linha de comando, algumas variáveis de ambiente devem ser definidas. ESP-IDF fornece alguns scripts que ajudam nesse processo.

Windows

O ESP-IDF Tools Installer para Windows cria um atalho “ESP-IDF Command Prompt” no menu Iniciar. Este atalho abre o Prompt de Comando e configura todas as variáveis de ambiente necessárias. Você pode abrir este atalho e prosseguir para a próxima etapa.

Caso não funcione e você precise configurar manualmente, execute os seguintes comandos:

Prompt de Comando:

%userprofile%\esp\esp-idf\export.bat

Windows PowerShell:

.$HOME/esp/esp-idf/export.ps1

Linux e macOS

No terminal execute:

. $HOME/esp/esp-idf/export.sh

Ou no Fish(suportado apenas em versões a partir da 3.0.0):

. $HOME/esp/esp-idf/export.fish
Importante

Você precisa fazer isso toda vez que iniciar o terminal para usar o ESP-IDF.

Passo 3 - Criando um novo projeto

Agora que já temos as ferramentas instaladas, vamos fazer um exemplo para validar o funcionamento das mesmas. Vamos executar o exemplo blink que já vem no IDF.

Copiando um projeto exemplo

Vamos copiar o projeto blink para preservarmos o exemplo presente na pasta do IDF:

Windows

cd %userprofile%\esp
xcopy /e /i %IDF_PATH%\examples\get-started\blink blink

Linux e macOS

cd ~/esp
cp -r $IDF_PATH/examples/get-started/blink .

Fique a vontade para testar os outros exemplos também.

O sistema de compilação ESP-IDF não oferece suporte a espaços nos caminhos para o ESP-IDF ou para projetos.

Configuração

Agora vamos configurar o target para qual será compilado e já fazer uma configuração no menuconfig. No nosso caso vamos trabalhar com o ESP32-S2:

Windows

cd %userprofile%\esp\blink
idf.py set-target esp32s2
idf.py menuconfig

Linux e macOS

cd ~/esp/blink
idf.py set-target esp32s2
idf.py menuconfig

Será aberto o menuconfig: -menuconfig

Acesse a opção Component config ---> -menuconfig

Em seguida ESP System Settings ---> -menuconfig

Agora selecione Channel for console output (Default: UART0) ---> -menuconfig

E por fim, selecione (X) USB CDC: -menuconfig

Salve(S), Enter, enter, Saia do menu(ESC)

Essa configuração permitirá que usemos a USB no próximo upload.

Importante

Sempre que iniciar um projeto novo faça essas configuração para que continue usando a USB como interface de programação.

Para mais detalhes acesse:

Compilando o projeto em modo DFU

A primeira compilação nós vamos fazer usando o modo DFU, que já vem por padrão no ESP32-S2 permitindo o upload através da USB:

Para crie a imagem DFU:

idf.py dfu

A primeira compilação pode demorar um pouco. Da até pra ir pegar um café ;)

Após a compilação, conecte a Franzininho WiFi no computador. Antes de fazermos o upload é necessário entrar no modo DFU. Para entrar no modo DFU pressione as teclas na seguinte sequencia:

  1. pressione e segure a tecla BOOT
  2. pressione rapidamente e solte a tecla RESET
  3. solte a tecla BOOT

Dessa forma a placa entrará no modo DFU e poderá receber o firmware através da USB.

Para fazer a gravação, digite:

idf.py dfu-flash
Dica

Caso a gravação através da USB não funcione, veja esse link com as instruções de configurações da USB

Após alguns segundos a placa estará gravada.

Pressione novamente o botão RESET.

Compilação, gravação e monitor em modo normal

Agora você poderá compilar, gravar e monitorar usando a porta USB. Esse processo é idêntico ao que fazemos para desenvolver com o ESP32:

Compilar:

idf.py build

Gravar:

idf.py -p PORT [-b BAUD] flash

Monitorar:

idf.py -p /dev/ttyUSB0 monitor

Maravilha, você configurou o ambiente para trabalhar com o ESP-IDF.

Caso queira trabalhar com a extensão para VSCODE, confira o video:

- - +

Primeiros Passos com ESP-IDF

Este documento tem como objetivo ajudá-lo a configurar o ESP-IDF (Espressif IoT Development Framework) para trabalhar com a Franzininho WiFi que usa o ESP32-S2 da Espressif.

+

Ao final, faremos um exemplo simples para compilar, gravar e monitorar usando o ESP-IDF, assim, garantiremos que tudo estará funcionando.

+

Introdução

+

Para essa configuração, vamos instalar o ESP-IDF e usá-lo através de linha de comando. Caso você queira usar o IDF integrado a ambientes de desenvolvimento integrado (IDE) como VScode e Eclipse, confira os seguintes links:

+ +

Você poderá instalar o ESP-IDF no seu sistema operacional preferido (Linux, Windows, macOS).

+

Para a experiência completa, você precisará de uma placa Franzininho WiFi, Computador: com Windows, Linux ou macOS

+

Passo 1 - Instalação dos pré-requisitos

+

Algumas ferramentas precisam ser instaladas no computador antes de prosseguir para as próximas etapas. Siga os links abaixo para obter as instruções para o seu sistema operacional:

+ +

É muito importante a instalação de todos os pré-requisitos.

+

Passo 2 - Instalação do ESP-IDF

+

Nessa etapa vamos instalar o ESP-IDF e conjunto de ferramentas e bibliotecas. Vamos usar o código mantido pela Espressif no repositório do ESP-IDF

+

O ESP-IDF é o framework oficial da Espressif para o desenvolvimento de aplicações parar toda a família ESP32. O procedimento apresentado aqui servirá para trabalhar com toda a família ESP32. Porém, vamos dar foco ao ESP32-S2 que é usado na Franzininho WiFi.

+

Linux e macOS

+

Abra o terminal e execute:

+
mkdir -p ~/esp
+cd ~/esp
+git clone --recursive https://github.com/espressif/esp-idf.git
+
+

O ESP-IDF será baixado no seguinte repositório ~/esp/esp-idf.

+

Windows

+

Além de instalar as ferramentas, o ESP-IDF Tools Installer para Windows apresentado no passo 1 ele também baixa uma cópia do ESP-IDF. Dessa forma você não precisará baixar o ESP-IDF agora, se já tiver baixado anteriormente junto aos pré-requisitos.

+

Se desejar fazer o download do ESP-IDF sem a ajuda do ESP-IDF Tools Installer, consulte estas instruções.

+

Instalando O ESP-IDF e ferramentas

+

Além do ESP-IDF, você também precisa instalar as ferramentas usadas pelo ESP-IDF, como compilador, depurador, pacotes Python, etc.

+

Windows

+

O ESP-IDF Tools Installer para Windows apresentado no passo 1 instala todas as ferramentas necessárias.

+

Se você deseja instalar as ferramentas sem a ajuda do ESP-IDF Tools Installer, abra o Prompt de Comando e siga estas etapas:

+
cd %userprofile%\esp\esp-idf
+install.bat
+
+

Ou no Windows PowerShell

+
cd ~/esp/esp-idf
+./install.ps1
+
+

Linux e macOS

+

No Linux ou macOS há um script para instalação.Abra o terminal e execute:

+
cd ~/esp/esp-idf
+./install.sh
+
+

Ou se tiver usando o Fish:

+
cd ~/esp/esp-idf
+./install.fish
+
+

Configurando as variáveis de ambientes

+

As ferramentas instaladas ainda não foram adicionadas à variável de ambiente PATH. Para tornar as ferramentas utilizáveis na linha de comando, algumas variáveis de ambiente devem ser definidas. ESP-IDF fornece alguns scripts que ajudam nesse processo.

+

Windows

+

O ESP-IDF Tools Installer para Windows cria um atalho “ESP-IDF Command Prompt” no menu Iniciar. Este atalho abre o Prompt de Comando e configura todas as variáveis de ambiente necessárias. Você pode abrir este atalho e prosseguir para a próxima etapa.

+

Caso não funcione e você precise configurar manualmente, execute os seguintes comandos:

+

Prompt de Comando:

+
%userprofile%\esp\esp-idf\export.bat
+
+

Windows PowerShell:

+
.$HOME/esp/esp-idf/export.ps1
+
+

Linux e macOS

+

No terminal execute:

+
. $HOME/esp/esp-idf/export.sh
+
+

Ou no Fish(suportado apenas em versões a partir da 3.0.0):

+
. $HOME/esp/esp-idf/export.fish
+
+

Você precisa fazer isso toda vez que iniciar o terminal para usar o ESP-IDF.

+

Passo 3 - Criando um novo projeto

+

Agora que já temos as ferramentas instaladas, vamos fazer um exemplo para validar o funcionamento das mesmas. Vamos executar o exemplo blink que já vem no IDF.

+

Copiando um projeto exemplo

+

Vamos copiar o projeto blink para preservarmos o exemplo presente na pasta do IDF:

+

Windows

+
cd %userprofile%\esp
+xcopy /e /i %IDF_PATH%\examples\get-started\blink blink
+
+

Linux e macOS

+
cd ~/esp
+cp -r $IDF_PATH/examples/get-started/blink .
+
+

Fique a vontade para testar os outros exemplos também.

+

O sistema de compilação ESP-IDF não oferece suporte a espaços nos caminhos para o ESP-IDF ou para projetos.

+

Configuração

+

Agora vamos configurar o target para qual será compilado e já fazer uma configuração no menuconfig. No nosso caso vamos trabalhar com o ESP32-S2:

+

Windows

+
cd %userprofile%\esp\blink
+idf.py set-target esp32s2
+idf.py menuconfig
+
+

Linux e macOS

+
cd ~/esp/blink
+idf.py set-target esp32s2
+idf.py menuconfig
+
+

Será aberto o menuconfig: +menuconfig

+

Acesse a opção Component config ---> +menuconfig

+

Em seguida ESP System Settings ---> +menuconfig

+

Agora selecione Channel for console output (Default: UART0) ---> +menuconfig

+

E por fim, selecione (X) USB CDC: +menuconfig

+

Salve(S), Enter, enter, Saia do menu(ESC)

+

Essa configuração permitirá que usemos a USB no próximo upload.

+

Sempre que iniciar um projeto novo faça essas configuração para que continue usando a USB como interface de programação.

+

Para mais detalhes acesse:

+ +

Compilando o projeto em modo DFU

+

A primeira compilação nós vamos fazer usando o modo DFU, que já vem por padrão no ESP32-S2 permitindo o upload através da USB:

+

Para crie a imagem DFU:

+
idf.py dfu
+
+

A primeira compilação pode demorar um pouco. Da até pra ir pegar um café ;)

+

Após a compilação, conecte a Franzininho WiFi no computador. Antes de fazermos o upload é necessário entrar no modo DFU. Para entrar no modo DFU pressione as teclas na seguinte sequencia:

+
    +
  1. pressione e segure a tecla BOOT
  2. +
  3. pressione rapidamente e solte a tecla RESET
  4. +
  5. solte a tecla BOOT
  6. +
+

Dessa forma a placa entrará no modo DFU e poderá receber o firmware através da USB.

+

Para fazer a gravação, digite:

+
idf.py dfu-flash
+
+

Caso a gravação através da USB não funcione, veja esse link com as instruções de configurações da USB

+

Após alguns segundos a placa estará gravada.

+

Pressione novamente o botão RESET.

+

Compilação, gravação e monitor em modo normal

+

Agora você poderá compilar, gravar e monitorar usando a porta USB. Esse processo é idêntico ao que fazemos para desenvolver com o ESP32:

+

Compilar:

+
idf.py build
+
+

Gravar:

+
idf.py -p PORT [-b BAUD] flash
+
+

Monitorar:

+
idf.py -p /dev/ttyUSB0 monitor
+
+

Maravilha, você configurou o ambiente para trabalhar com o ESP-IDF.

+

Caso queira trabalhar com a extensão para VSCODE, confira o video:

+
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais/index.html b/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais/index.html index 1201dd6e4..65e22b406 100755 --- a/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais/index.html +++ b/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais/index.html @@ -1,18 +1,43 @@ - + - -Explore as entradas e saídas digitais da Franzininho WiFi no MicroPython | Franzininho - - - + +Explore as entradas e saídas digitais da Franzininho WiFi no MicroPython | Franzininho + + + -
-

Explore as entradas e saídas digitais da Franzininho WiFi no MicroPython

Introdução

A Franzininho WiFi conta com pinos que podem operar em dois modos: OUTPUT e INPUT. Além disso, é possível usar resistores internos nos pinos configurados como Pull-Up ou Pull-Down para os pinos configurados como entradas.

Neste artigo, vamos explorar como utilizar o MicroPython para controlar os pinos de I/O.

Para isso vamos criar um código para manipular os LEDs e botões da placa Franzininho WiFi LAB01, permitindo criar funcionalidades personalizadas e interativas.

Recursos necessários

Para iniciar o trabalho com os GPIOs, é essencial possuir o diagrama de pinos da placa Franzininho WiFI LAB01 à disposição, pois isso permitirá que você identifique tanto os nomes quanto as funções associadas a cada um deles.

Tabela 1 – Franzininho WiFi LAB01 mapeamento de pinos

PinoRecurso
IO1LDR
IO2BT6
IO3BT5
IO4BT4
IO5BT3
IO6BT2
IO7BT1
IO8OLED_SDA
IO9OLED_SCL
IO10TFT_DC
IO11TFT_RES
IO12LED AZUL
IO13LED VERDE
IO14LED VERMELHO
IO15DHT11
IO17BUZZER
IO35TFT_SDA
IO36TFT_SCL

Nesta prática iremos utilizar o LED RGB e os botões da Franzininho WiFi LAB01, conforme destacado na Figura abaixo:

Figura 1 – Resumo dos recursos da placa -entradas e saídas digitais da Franzininho WiFi com MicroPython

Módulos do MicroPython

O machine contém funções específicas relacionadas ao hardware de uma placa em particular. A maioria das funções neste módulo permitem obter acesso direto e irrestrito aos blocos de hardware em um sistema, como: pinos, I2C, UART, SPI, ADC.

No MicroPython, como no Python, é possível importar apenas parte de uma biblioteca, ao invés de importar a biblioteca inteira. Um recurso útil que utilizaremos bastante.

A biblioteca ‘utime’ é uma versão projetada para microcontroladores da biblioteca ‘time’. Essa biblioteca é útil para inserir os atrasos necessários em muitos projetos.

Obs: se você esquecer e usar import time , não se preocupe: o MicroPython usará automaticamente a biblioteca utime em seu lugar.

Código

Com a Franzininho WiFi conectada ao seu computador, abra o Thonny e crie um novo arquivo contendo o código a seguir:

Para criar o programa que controla o LED RGB, começamos com a instrução from machine import Pin. Isso instrui o MicroPython a importar apenas a função Pin da biblioteca machine, em vez de importar a biblioteca inteira. Dessa forma, teremos acesso apenas à funcionalidade necessária para controlar os pinos da placa.

É importante enfatizar que o Micropython é case-sensitive, isso significa que se você digitar pin a biblioteca não será reconhecida, então se atente no uso das letras maiúsculas e minúsculas.

Em seguida, vamos nomear os LEDs e associá-los aos pinos da placa como saída (Pin.OUT). Consultando a tabela de pinos da Franzininho WiFi LAB01, identificamos que o pino 12 é responsável pela cor azul do LED RGB, o pino 13 pela cor verde e o pino 14 pela cor vermelha. Com isso fazemos a atribuição setando todos os pinos como saída.

De forma semelhante, realizamos o mesmo procedimento com os botões. Ao consultar a tabela de pinos, identificamos que o pino 7 corresponde ao botão 1, o pino 6 ao botão 2 e o pino 5 ao botão 3. É importante lembrar que esses dispositivos operam com a configuração pull-up, e essa informação deve ser incluída no programa.

Por último, o loop principal monitora constantemente o estado dos botões para determinar se o LED deve ser ligado. Há uma pequena pausa de 100 milissegundos entre cada atualização do LED em resposta ao estado dos botões. Esses atrasos são usados para evitar que a leitura dos botões e as alterações nos LEDs aconteçam muito rapidamente e possam ser difíceis de perceber.

Se você não possui a Franzininho WiFi LAB01 para testar o projeto, é possível testar o programa utilizando a montagem do circuito em uma protoboard.

Pressione as teclas e verifique que os leds acenderão conforme a tecla pressionada:

Funcionamento

Conclusão

Neste artigo, explicamos o funcionamento básico dos pinos de I/O da Franzininho WiFi usando a placa de aplicação Franzininho WiFi LAB01. Exploramos as bibliotecas e funções essenciais que nos permitem configurar esses pinos e acessar seus estados lógicos.

Encorajamos que continue desenvolvendo suas habilidades de programação e eletrônica, adaptando o código e criando projetos mais complexos. Isso permitirá explorar todo o potencial da Franzininho WiFi LAB01 com o MicroPython.

AutorSthefania Fernandes
Data:17/11/2023
- - +

Explore as entradas e saídas digitais da Franzininho WiFi no MicroPython

Introdução

+

A Franzininho WiFi conta com pinos que podem operar em dois modos: OUTPUT e INPUT. Além disso, é possível usar resistores internos nos pinos configurados como Pull-Up ou Pull-Down para os pinos configurados como entradas.

+

Neste artigo, vamos explorar como utilizar o MicroPython para controlar os pinos de I/O.

+

Para isso vamos criar um código para manipular os LEDs e botões da placa Franzininho WiFi LAB01, permitindo criar funcionalidades personalizadas e interativas.

+

Recursos necessários

+

Para iniciar o trabalho com os GPIOs, é essencial possuir o diagrama de pinos da placa Franzininho WiFI LAB01 à disposição, pois isso permitirá que você identifique tanto os nomes quanto as funções associadas a cada um deles.

+

Tabela 1 – Franzininho WiFi LAB01 mapeamento de pinos

+
PinoRecurso
IO1LDR
IO2BT6
IO3BT5
IO4BT4
IO5BT3
IO6BT2
IO7BT1
IO8OLED_SDA
IO9OLED_SCL
IO10TFT_DC
IO11TFT_RES
IO12LED AZUL
IO13LED VERDE
IO14LED VERMELHO
IO15DHT11
IO17BUZZER
IO35TFT_SDA
IO36TFT_SCL
+

Nesta prática iremos utilizar o LED RGB e os botões da Franzininho WiFi LAB01, conforme destacado na Figura abaixo:

+

Figura 1 – Resumo dos recursos da placa +entradas e saídas digitais da Franzininho WiFi com MicroPython

+

Módulos do MicroPython

+

O machine contém funções específicas relacionadas ao hardware de uma placa em particular. A maioria das funções neste módulo permitem obter acesso direto e irrestrito aos blocos de hardware em um sistema, como: pinos, I2C, UART, SPI, ADC.

+

No MicroPython, como no Python, é possível importar apenas parte de uma biblioteca, ao invés de importar a biblioteca inteira. Um recurso útil que utilizaremos bastante.

+

A biblioteca ‘utime’ é uma versão projetada para microcontroladores da biblioteca ‘time’. Essa biblioteca é útil para inserir os atrasos necessários em muitos projetos.

+

Obs: se você esquecer e usar import time , não se preocupe: o MicroPython usará automaticamente a biblioteca utime em seu lugar.

+

Código

+

Com a Franzininho WiFi conectada ao seu computador, abra o Thonny e crie um novo arquivo contendo o código a seguir:

+

Para criar o programa que controla o LED RGB, começamos com a instrução from machine import Pin. Isso instrui o MicroPython a importar apenas a função Pin da biblioteca machine, em vez de importar a biblioteca inteira. Dessa forma, teremos acesso apenas à funcionalidade necessária para controlar os pinos da placa.

+

É importante enfatizar que o Micropython é case-sensitive, isso significa que se você digitar pin a biblioteca não será reconhecida, então se atente no uso das letras maiúsculas e minúsculas.

+

Em seguida, vamos nomear os LEDs e associá-los aos pinos da placa como saída (Pin.OUT). Consultando a tabela de pinos da Franzininho WiFi LAB01, identificamos que o pino 12 é responsável pela cor azul do LED RGB, o pino 13 pela cor verde e o pino 14 pela cor vermelha. Com isso fazemos a atribuição setando todos os pinos como saída.

+

De forma semelhante, realizamos o mesmo procedimento com os botões. Ao consultar a tabela de pinos, identificamos que o pino 7 corresponde ao botão 1, o pino 6 ao botão 2 e o pino 5 ao botão 3. É importante lembrar que esses dispositivos operam com a configuração pull-up, e essa informação deve ser incluída no programa.

+

Por último, o loop principal monitora constantemente o estado dos botões para determinar se o LED deve ser ligado. Há uma pequena pausa de 100 milissegundos entre cada atualização do LED em resposta ao estado dos botões. Esses atrasos são usados para evitar que a leitura dos botões e as alterações nos LEDs aconteçam muito rapidamente e possam ser difíceis de perceber.

+

Se você não possui a Franzininho WiFi LAB01 para testar o projeto, é possível testar o programa utilizando a montagem do circuito em uma protoboard.

+

Pressione as teclas e verifique que os leds acenderão conforme a tecla pressionada:

+

Funcionamento

+

Conclusão

+

Neste artigo, explicamos o funcionamento básico dos pinos de I/O da Franzininho WiFi usando a placa de aplicação Franzininho WiFi LAB01. Exploramos as bibliotecas e funções essenciais que nos permitem configurar esses pinos e acessar seus estados lógicos.

+

Encorajamos que continue desenvolvendo suas habilidades de programação e eletrônica, adaptando o código e criando projetos mais complexos. Isso permitirá explorar todo o potencial da Franzininho WiFi LAB01 com o MicroPython.

+
AutorSthefania Fernandes
Data:17/11/2023
\ No newline at end of file diff --git a/docs/franzininho-wifi/exemplos-micropython/primeiros-passos/index.html b/docs/franzininho-wifi/exemplos-micropython/primeiros-passos/index.html index 85026a85d..180347c2a 100755 --- a/docs/franzininho-wifi/exemplos-micropython/primeiros-passos/index.html +++ b/docs/franzininho-wifi/exemplos-micropython/primeiros-passos/index.html @@ -1,17 +1,52 @@ - + - -Primeiros Passos com MicroPython | Franzininho - - - + +Primeiros Passos com MicroPython | Franzininho + + + -
-

Primeiros Passos com MicroPython

A Franzininho WIFI é uma placa de desenvolvimento de hardware de código aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal é tornar o desenvolvimento de projetos eletrônicos mais acessível a makers, entusiastas e desenvolvedores brasileiros.

A placa pode ser programada de várias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes.

A Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns são:

  • ESP-IDF, Arduino, CircuitPython e MicroPython

A Franzininho WiFi LAB01 é uma placa de expansão para a placa Franzininho WiFi, com a proposta de ser um laboratório para auxiliar no ensino e aprendizagem do ESP32, baseada na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experiências.

Nessa série de artigos, vamos explorar a programação em MicroPython com a Franzininho WiFi LAB01. Primeiramente, é preciso entender que o MicroPython é uma implementação completa da linguagem Python 3 para rodar em hardware embarcado.

Assim, para poder programar a sua placa Franzininho WiFi com MicroPython é preciso, primeiro, gravar o firmware do MicroPython nela. Para facilitar a instalação do MicroPython, vamos usar a ferramenta de gravação através do browser, criada pela comunidade Franzininho: franzininho.github.io (funciona no Chrome e similares). Aproveitamos para agradecer ao Ewerton Sousa pela contribuição com essa ferramenta.

A seguir apresentamos os passos para gravação do MicroPython na Franzininho WiFI e a IDE que usaremos nessa serie de artigos.

Gravando o MicroPython na Franzininho WiFi

Acesse a ferramenta Franzininho – ESP Web Tools. Com essa ferramenta é possível obter o firmware não somente o firmware do Micropython, mas também das outras ferramentas de software que a placa suporta. Então, atente-se para selecionar a aba do MicroPython, conforme exibido abaixo:

Ferramenta de Gravação

Seguindo o tutorial, comece conectando sua placa Franzininho a uma das portas USB de seu computador. Em seguida coloque sua placa em modo DFU que significa executar os seguintes passos:

  1. Pressione e segure o botão boot;
  2. Pressione o botão reset;
  3. Após soltar o reset solte o boot.

Franzininho WiFI

Feito isso, clique no botão Conectar do site franzininho.github.io, selecione a placa e clique em conectar:

Conectando a placa a ferramenta

Com a placa conectada, clique em instalar MicroPython:

Intale o MicroPython

Selecione a opção apagar dispositivo:

Apagar dispositivo

Clique em instalar e aguarde finalizar a instalação (mantenha a página aberta até o final da instalação):

Instalando o MicroPython

Instalando o MicroPython

Uma vez instalado clique novamente no botão de reset para iniciar o MicroPython.

Tudo pronto, agora é possível programar sua Franzininho WiFi LAB01 com MicroPython.

Observação: Quando você colocar a placa em modo DFU, o buzzer pode ser ativado, o que pode causar ruído indesejado. Para evitar isso, desconecte o jumper do buzzer (IO17), que é o primeiro da esquerda para a direita.

Apresentando o Thonny IDE

O Thonny é um IDE popular para Python e MicroPython e é o que recomendamos para a programação da Franzininho WiFi.

Para realizar o download, basta visitar o site thonny.org e selecionar o link de download localizado no topo da página, conforme o seu sistema operacional.

Em seguida, inicie o Thonny enquanto a placa ainda estiver conectada via USB. Na parte inferior direita, selecione a opção MicroPython (ESP32). Desta forma, o Thonny irá detectar automaticamente a Franzininho WiFi.

MicroPython Conectado

Agora tudo está pronto para iniciar seus projetos com MicroPython na Franzininho WiFi.

AutorSthefania Fernandes
Data:10/11/2023
- - +

Primeiros Passos com MicroPython

A Franzininho WIFI é uma placa de desenvolvimento de hardware de código aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal é tornar o desenvolvimento de projetos eletrônicos mais acessível a makers, entusiastas e desenvolvedores brasileiros.

+

A placa pode ser programada de várias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes.

+

A Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns são:

+
    +
  • ESP-IDF, Arduino, CircuitPython e MicroPython
  • +
+

A Franzininho WiFi LAB01 é uma placa de expansão para a placa Franzininho WiFi, com a proposta de ser um laboratório para auxiliar no ensino e aprendizagem do ESP32, baseada na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experiências.

+

Nessa série de artigos, vamos explorar a programação em MicroPython com a Franzininho WiFi LAB01. Primeiramente, é preciso entender que o MicroPython é uma implementação completa da linguagem Python 3 para rodar em hardware embarcado.

+

Assim, para poder programar a sua placa Franzininho WiFi com MicroPython é preciso, primeiro, gravar o firmware do MicroPython nela. Para facilitar a instalação do MicroPython, vamos usar a ferramenta de gravação através do browser, criada pela comunidade Franzininho: franzininho.github.io (funciona no Chrome e similares). Aproveitamos para agradecer ao Ewerton Sousa pela contribuição com essa ferramenta.

+

A seguir apresentamos os passos para gravação do MicroPython na Franzininho WiFI e a IDE que usaremos nessa serie de artigos.

+

Gravando o MicroPython na Franzininho WiFi

+

Acesse a ferramenta Franzininho – ESP Web Tools. Com essa ferramenta é possível obter o firmware não somente o firmware do Micropython, mas também das outras ferramentas de software que a placa suporta. Então, atente-se para selecionar a aba do MicroPython, conforme exibido abaixo:

+

Ferramenta de Gravação

+

Seguindo o tutorial, comece conectando sua placa Franzininho a uma das portas USB de seu computador. Em seguida coloque sua placa em modo DFU que significa executar os seguintes passos:

+
    +
  1. Pressione e segure o botão boot;
  2. +
  3. Pressione o botão reset;
  4. +
  5. Após soltar o reset solte o boot.
  6. +
+

Franzininho WiFI

+

Feito isso, clique no botão Conectar do site franzininho.github.io, selecione a placa e clique em conectar:

+

Conectando a placa a ferramenta

+

Com a placa conectada, clique em instalar MicroPython:

+

Intale o MicroPython

+

Selecione a opção apagar dispositivo:

+

Apagar dispositivo

+

Clique em instalar e aguarde finalizar a instalação (mantenha a página aberta até o final da instalação):

+

Instalando o MicroPython

+

Instalando o MicroPython

+

Uma vez instalado clique novamente no botão de reset para iniciar o MicroPython.

+

Tudo pronto, agora é possível programar sua Franzininho WiFi LAB01 com MicroPython.

+

Observação: Quando você colocar a placa em modo DFU, o buzzer pode ser ativado, o que pode causar ruído indesejado. Para evitar isso, desconecte o jumper do buzzer (IO17), que é o primeiro da esquerda para a direita.

+

Apresentando o Thonny IDE

+

O Thonny é um IDE popular para Python e MicroPython e é o que recomendamos para a programação da Franzininho WiFi.

+

Para realizar o download, basta visitar o site thonny.org e selecionar o link de download localizado no topo da página, conforme o seu sistema operacional.

+

Em seguida, inicie o Thonny enquanto a placa ainda estiver conectada via USB. Na parte inferior direita, selecione a opção MicroPython (ESP32). Desta forma, o Thonny irá detectar automaticamente a Franzininho WiFi.

+

MicroPython Conectado

+

Agora tudo está pronto para iniciar seus projetos com MicroPython na Franzininho WiFi.

+
AutorSthefania Fernandes
Data:10/11/2023
\ No newline at end of file diff --git a/docs/franzininho-wifi/franzininho-wifi-dev-edition/index.html b/docs/franzininho-wifi/franzininho-wifi-dev-edition/index.html index adc228496..46c42208f 100755 --- a/docs/franzininho-wifi/franzininho-wifi-dev-edition/index.html +++ b/docs/franzininho-wifi/franzininho-wifi-dev-edition/index.html @@ -1,19 +1,57 @@ - + - -Placa Franzininho WiFi dev Edition | Franzininho - - - + +Placa Franzininho WiFi dev Edition | Franzininho + + + -
-

Placa Franzininho WiFi dev Edition

Atenção

Essa placa foi feita apenas como protótipo. Não está em produção

A Franzininho WiFi Developer Edition é uma placa de desenvolvimento para avaliar os módulos ESP32-S2 (Wroom e Wrover) e desenvolver a nova geração de placas Franzininho. O projeto Franzininho foi criado para desenvolver habilidades em pessoas nas áreas de eletrônica e programação, por meio de atividades no formato DIY e em conjunto com a cultura maker, no Brasil.

Placa Franzininho WiFi Developer Edition Front

Como não existem muitas placas no mercado brasileiro com ESP32-S2, desenvolvemos o Franzininho WiFi Developer Edition (em 2020) para servir como plataforma de desenvolvimento ESP32-S2 e nos ajudar a avaliar e validar aplicações com este SoC.

Placa Franzininho WiFi Developer Edition

Características

  • ESP32-S2 module( Wrover ou Wroom):
    • Xtensa®single-core32-bit LX7 microprocessor, up to 240 MHz
    • 128 KB ROM
    • 320 KB SRAM
    • 16 KB SRAM in RTC
    • 2 MB (8 Mbit) PSRAM ( Only with Wrover Module)
    • WiFi 802.11 b/g/n
  • Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera interface, IR, pulse counter, LED PWM, TWAI(compatible with ISO 11898-1), USB 1.1OTG, ADC, DAC, touch sensor, temperature sensor.
  • USB Type-A Male
  • RGB LED (WS2812) (GPIO 18)
  • 40 pin broken out to 2x20 2.54mm header pins(36 GPIO) - Breadboard Friendly
  • Reset and DFU (BOOT0) buttons to get into the ROM bootloader (which is a USB serial port so you don’t need a separate cable!)
  • Serial debug pins ( TX and RX, for checking the hardware serial debug console) -JTAG pads for advanced debugging access.
  • 3.3 V Power On LED
  • 3.3 V Regulator
  • Power:
    • Micro USB port (default power supply)
    • 5V and GND header pins
    • 3V3 and GND header pins
  • Dimensions: 72 mm x 30 mm
  • Works with ESP-IDF or CircuitPython

Placa Franzininho WiFi Developer Edition back

Pinout

Pinout placa Franzininho WiFi Developer Edition

Licença

O projeto é um hardware de código aberto e está disponível na licença de hardware aberto do CERN.

A placa Franzininho WiFi Developer Edition é certificada na OSHWA: -UID BR000006

oshwa

- - +

Placa Franzininho WiFi dev Edition

Essa placa foi feita apenas como protótipo. Não está em produção

+

A Franzininho WiFi Developer Edition é uma placa de desenvolvimento para avaliar os módulos ESP32-S2 (Wroom e Wrover) e desenvolver a nova geração de placas Franzininho. O projeto Franzininho foi criado para desenvolver habilidades em pessoas nas áreas de eletrônica e programação, por meio de atividades no formato DIY e em conjunto com a cultura maker, no Brasil.

+

Placa Franzininho WiFi Developer Edition Front

+

Como não existem muitas placas no mercado brasileiro com ESP32-S2, desenvolvemos o Franzininho WiFi Developer Edition (em 2020) para servir como plataforma de desenvolvimento ESP32-S2 e nos ajudar a avaliar e validar aplicações com este SoC.

+

Placa Franzininho WiFi Developer Edition

+

Características

+
    +
  • ESP32-S2 module( Wrover ou Wroom): +
      +
    • Xtensa®single-core32-bit LX7 microprocessor, up to 240 MHz
    • +
    • 128 KB ROM
    • +
    • 320 KB SRAM
    • +
    • 16 KB SRAM in RTC
    • +
    • 2 MB (8 Mbit) PSRAM ( Only with Wrover Module)
    • +
    • WiFi 802.11 b/g/n
    • +
    +
  • +
  • Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera interface, IR, pulse counter, LED PWM, TWAI(compatible with ISO 11898-1), USB 1.1OTG, ADC, DAC, touch sensor, temperature sensor.
  • +
  • USB Type-A Male
  • +
  • RGB LED (WS2812) (GPIO 18)
  • +
  • 40 pin broken out to 2x20 2.54mm header pins(36 GPIO) - Breadboard Friendly
  • +
  • Reset and DFU (BOOT0) buttons to get into the ROM bootloader (which is a USB serial port so you don’t need a separate cable!)
  • +
  • Serial debug pins ( TX and RX, for checking the hardware serial debug console) +JTAG pads for advanced debugging access.
  • +
  • 3.3 V Power On LED
  • +
  • 3.3 V Regulator
  • +
  • Power: +
      +
    • Micro USB port (default power supply)
    • +
    • 5V and GND header pins
    • +
    • 3V3 and GND header pins
    • +
    +
  • +
  • Dimensions: 72 mm x 30 mm
  • +
  • Works with ESP-IDF or CircuitPython
  • +
+

Placa Franzininho WiFi Developer Edition back

+

Pinout

+

Pinout placa Franzininho WiFi Developer Edition

+

Licença

+

O projeto é um hardware de código aberto e está disponível na licença de hardware aberto do CERN.

+

A placa Franzininho WiFi Developer Edition é certificada na OSHWA: +UID BR000006

+

oshwa

\ No newline at end of file diff --git a/docs/franzininho-wifi/franzininho-wifi/index.html b/docs/franzininho-wifi/franzininho-wifi/index.html index beb7c7450..e9f65b3a4 100755 --- a/docs/franzininho-wifi/franzininho-wifi/index.html +++ b/docs/franzininho-wifi/franzininho-wifi/index.html @@ -1,17 +1,75 @@ - + - -Placa Franzininho WiFi | Franzininho - - - + +Placa Franzininho WiFi | Franzininho + + + -
-

Placa Franzininho WiFi

A Franzininho WIFI é uma placa de desenvolvimento de hardware de código aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal é tornar o desenvolvimento de projetos eletrônicos mais acessível a makers, entusiastas e desenvolvedores brasileiros.

A placa pode ser programada de várias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes.

Neste texto, apresentaremos os recursos disponíveis, as formas de programação e informações relevantes para aqueles que estão iniciando o uso da Franzininho WiFi ou têm interesse em conhecê-la.

Compre sua Franzininho WiFi (com frete gratis) clicando neste link

Placa Franzininho WiFi

Resumo de recursos da placa Franzininho WiFi:

A Franzininho WiFi possui os seguintes recursos:

  • Módulo ESP32-S2
    • Microcontrolador Xtensa® single-core32-bit LX7 operando em até 240 MHz
    • Memórias: 128 KB de ROM, 320 KB de SRAM, 16 KB SRAM no RTC, 4MB de Flash
    • WiFi 802.11 b/g/n
    • Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera, IR,contador de pulsos, LED PWM, TWAI(CAN), USB 1.1 OTG, ADC, DAC, touch, sensor de temperatura interno.
  • Pinout:
    • 40 pinos divididos em 2×20 headers de 2,54 mm
    • 35 GPIOs
    • Compatível com protoboard
  • 2 LEDS de uso geral
  • Botões: 1xReset, 1 x Boot
  • USB: conector micro USB – OTG 1.1
  • Alimentação:
    • 5V via conector USB
    • 5V e GND via pinos
    • 3V3 e GND via pinos
  • Formas de programação:
    • ESP-IDF,
    • Arduino,
    • CircuitPyhton,
    • MicroPython,
    • Zephyr,
    • NuttX

Pinout da Franzininho WiFi

A imagem a seguir exibe o pinout da Franzininho WiFi com mapeamento dos pinos e recursos:

Nova Franzininho WiFI: pinout

Licença

A placa Franzininho WiFi é um projeto de hardware de código aberto, licenciado sob a CERN Open Hardware License. Essa licença é utilizada em projetos de hardware que são desenvolvidos e disponibilizados como código aberto, permitindo que outras pessoas possam reproduzir e criar derivações do projeto. Para garantir a conformidade com a licença, é importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar derivações do projeto. Dessa forma, podem garantir que estão seguindo as diretrizes corretas e respeitando a licença escolhida para o projeto.

Você encontra o projeto do hardware no Github organização Franzininho: https://github.com/Franzininho/Franzininho-WiFi

Simulação da Franzininho WiFi no Wokwi

O Wokwi é uma ferramenta de simulação online e gratuita que permite que desenvolvedores de projetos eletrônicos testem suas criações em um ambiente leve e intuitivo. Com suporte a diversas placas de desenvolvimento, incluindo o Arduino Uno, ESP32, RP2040, e muitas outras, o simulador é um diferencial na área. A ferramenta oferece recursos exclusivos, como simulação de Wi-Fi, Analisador Lógico Virtual, Depuração avançada com GDB, simulação de cartão SD, API dos chips (criação de chips personalizados) e integração com o Visual Studio Code.

A placa Franzininho WiFi também é suportada no simulador. Para começar a criar projetos, acesse a lista de placas suportadas pelo Wokwi e comece a testar suas criações em um ambiente seguro e de fácil acesso. Além disso, compartilhar seus projetos com a comunidade pode ajudar outros desenvolvedores a iniciarem no universo da eletrônica, permitindo que cresçam juntos e desenvolvam soluções cada vez mais inovadoras.

A figura a seguir exibe a Franzininho WiFi no ambiente de simulação do Wokwi:

Franzininho WiFi

Entenda melhor sobre a ferramenta, acessando os links abaixo:

Documentação do Wokwi

Simulação Franzininho WiFi

Documentação da Franzininho Wokwi

Componente para o Fritzing

O Fritzing é uma ferramenta open-source que permite a interação com o hardware, possibilitando a montagem de circuitos eletrônicos, criação de placas de circuito impresso e inclusão do código-fonte do projeto proposto. Com sua riqueza de detalhes e ampla variedade de componentes, o Fritzing é uma opção ideal para documentação de projetos. Para facilitar a documentação de projetos, criamos um componente para ser adicionado ao Fritzing:

Franzininho WiFi

- - +

Placa Franzininho WiFi

A Franzininho WIFI é uma placa de desenvolvimento de hardware de código aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal é tornar o desenvolvimento de projetos eletrônicos mais acessível a makers, entusiastas e desenvolvedores brasileiros.

+

A placa pode ser programada de várias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes.

+

Neste texto, apresentaremos os recursos disponíveis, as formas de programação e informações relevantes para aqueles que estão iniciando o uso da Franzininho WiFi ou têm interesse em conhecê-la.

+

Compre sua Franzininho WiFi (com frete gratis) clicando neste link

+

Placa Franzininho WiFi

+

Resumo de recursos da placa Franzininho WiFi:

+

A Franzininho WiFi possui os seguintes recursos:

+
    +
  • Módulo ESP32-S2 +
      +
    • Microcontrolador Xtensa® single-core32-bit LX7 operando em até 240 MHz
    • +
    • Memórias: 128 KB de ROM, 320 KB de SRAM, 16 KB SRAM no RTC, 4MB de Flash
    • +
    • WiFi 802.11 b/g/n
    • +
    • Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera, IR,contador de pulsos, LED PWM, TWAI(CAN), USB 1.1 OTG, ADC, DAC, touch, sensor de temperatura interno.
    • +
    +
  • +
  • Pinout: +
      +
    • 40 pinos divididos em 2×20 headers de 2,54 mm
    • +
    • 35 GPIOs
    • +
    • Compatível com protoboard
    • +
    +
  • +
  • 2 LEDS de uso geral
  • +
  • Botões: 1xReset, 1 x Boot
  • +
  • USB: conector micro USB – OTG 1.1
  • +
  • Alimentação: +
      +
    • 5V via conector USB
    • +
    • 5V e GND via pinos
    • +
    • 3V3 e GND via pinos
    • +
    +
  • +
  • Formas de programação: +
      +
    • ESP-IDF,
    • +
    • Arduino,
    • +
    • CircuitPyhton,
    • +
    • MicroPython,
    • +
    • Zephyr,
    • +
    • NuttX
    • +
    +
  • +
+

Pinout da Franzininho WiFi

+

A imagem a seguir exibe o pinout da Franzininho WiFi com mapeamento dos pinos e recursos:

+

Nova Franzininho WiFI: pinout

+

Licença

+

A placa Franzininho WiFi é um projeto de hardware de código aberto, licenciado sob a CERN Open Hardware License. Essa licença é utilizada em projetos de hardware que são desenvolvidos e disponibilizados como código aberto, permitindo que outras pessoas possam reproduzir e criar derivações do projeto. Para garantir a conformidade com a licença, é importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar derivações do projeto. Dessa forma, podem garantir que estão seguindo as diretrizes corretas e respeitando a licença escolhida para o projeto.

+

Você encontra o projeto do hardware no Github organização Franzininho: https://github.com/Franzininho/Franzininho-WiFi

+

Simulação da Franzininho WiFi no Wokwi

+

O Wokwi é uma ferramenta de simulação online e gratuita que permite que desenvolvedores de projetos eletrônicos testem suas criações em um ambiente leve e intuitivo. Com suporte a diversas placas de desenvolvimento, incluindo o Arduino Uno, ESP32, RP2040, e muitas outras, o simulador é um diferencial na área. A ferramenta oferece recursos exclusivos, como simulação de Wi-Fi, Analisador Lógico Virtual, Depuração avançada com GDB, simulação de cartão SD, API dos chips (criação de chips personalizados) e integração com o Visual Studio Code.

+

A placa Franzininho WiFi também é suportada no simulador. Para começar a criar projetos, acesse a lista de placas suportadas pelo Wokwi e comece a testar suas criações em um ambiente seguro e de fácil acesso. Além disso, compartilhar seus projetos com a comunidade pode ajudar outros desenvolvedores a iniciarem no universo da eletrônica, permitindo que cresçam juntos e desenvolvam soluções cada vez mais inovadoras.

+

A figura a seguir exibe a Franzininho WiFi no ambiente de simulação do Wokwi:

+

Franzininho WiFi

+

Entenda melhor sobre a ferramenta, acessando os links abaixo:

+

Documentação do Wokwi

+

Simulação Franzininho WiFi

+

Documentação da Franzininho Wokwi

+

Componente para o Fritzing

+

O Fritzing é uma ferramenta open-source que permite a interação com o hardware, possibilitando a montagem de circuitos eletrônicos, criação de placas de circuito impresso e inclusão do código-fonte do projeto proposto. Com sua riqueza de detalhes e ampla variedade de componentes, o Fritzing é uma opção ideal para documentação de projetos. Para facilitar a documentação de projetos, criamos um componente para ser adicionado ao Fritzing:

+

Franzininho WiFi

\ No newline at end of file diff --git a/docs/franzininho-wifi/wokwi/primeiros-passos/index.html b/docs/franzininho-wifi/wokwi/primeiros-passos/index.html index bbd550274..3e9078c22 100755 --- a/docs/franzininho-wifi/wokwi/primeiros-passos/index.html +++ b/docs/franzininho-wifi/wokwi/primeiros-passos/index.html @@ -1,17 +1,44 @@ - + - -Como simular a Franzininho WiFi no Wokwi | Franzininho - - - + +Como simular a Franzininho WiFi no Wokwi | Franzininho + + + -
-

Como simular a Franzininho WiFi no Wokwi

Wokwi é um simulador de eletrônica online. Você pode usá-lo para simular Arduino, ESP32 e muitas outras placas, componentes e sensores populares. Foi desenvolvido para makers, por makers.

Você pode usar o Wokwi para aprender a programar o Franzininho WiFi, criar protótipos de suas idéias, e compartilhar seus projetos com outros makers.

Wokwi Franzininho WiFi

Dica

Use o Template do Franzininho wifi clicando na imagem acima para começar um novo projeto no Wokwi.

Saiba mais

Documentação da Franzininho WiFi no WokWi

Caso queira saber mais sobre outras funcionalidades do simulador, dê uma olhada na lista abaixo. Você pode também consultar as peças na lista de Referência do Diagrama, disponível na documentação do Wokwi.

Exemplos no simulador

- - +

Como simular a Franzininho WiFi no Wokwi

Wokwi é um simulador de eletrônica online. Você pode usá-lo para simular Arduino, ESP32 e muitas outras placas, componentes e sensores populares. Foi desenvolvido para makers, por makers.

+

Você pode usar o Wokwi para aprender a programar o Franzininho WiFi, criar protótipos de suas idéias, e compartilhar seus projetos com outros makers.

+

Wokwi Franzininho WiFi

+

Use o Template do Franzininho wifi clicando na imagem acima para começar um novo projeto no Wokwi.

+

Saiba mais

+

Documentação da Franzininho WiFi no WokWi

+

Caso queira saber mais sobre outras funcionalidades do simulador, dê uma olhada na lista abaixo. Você pode também consultar as peças na lista de Referência do Diagrama, disponível na documentação do Wokwi.

+ +

Exemplos no simulador

+
\ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 4cd6f2c18..d8e7cfd0a 100755 --- a/docs/index.html +++ b/docs/index.html @@ -1,18 +1,36 @@ - + - -Seja bem vindo a documentação do projeto Franzininho | Franzininho - - - + +Seja bem vindo a documentação do projeto Franzininho | Franzininho + + + -
-

Seja bem vindo a documentação do projeto Franzininho

Aqui você encontra a documentação (em Desenvolvimento) para trabalhar com todas as placas e Kits Franzininho.

Caso precise de ajuda e não encontre aqui, fique a vontade para participar da comunidade no Discord

Se não conhece o projeto Franzininho, segue um breve resumo:

Sobre o projeto Franzininho

O projeto Franzininho nasceu com o objetivo de incentivare capacitar os brasileiros para se tornarem protagonistas no desenvolvimento de projetos eletrônicos que envolvam sistemas embarcados e IoT.

Buscamos tornar os estudo das tecnologias atuais acessíveis para a sociedade brasileira através de conteúdos, materiais didáticos, ferramentas de desenvolvimento, projetos compartilhados e uma comunidade envolvida.

Trabalhamos baseados nos seguintes pilares: Open source software e hardware, materiais didáticos abertos, comunidade, compartilhamento de conhecimento, colaboração.

Como contribuir?

Você pode socilitar novos tutoriais e exemplos através da área de Issue no github.

Você também pode contribuir com a documentação adicionando exemplos e projetos. Caso queira fazer diretamente na documentação, abra um Issue para explicar o que deseja fazer. Outra possibilidade é conversar diretamente na comunidade na área de documentação.

Caso não tenha conhecimento no Github, você pode enviar o seu material através desse formulário. Fizemos um template bacana que você pode seguir para criar seu material.

Participe da Comunidade

Entre em contato com os organizadores

Creative Commons License
-Este obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

- - +

Seja bem vindo a documentação do projeto Franzininho

Aqui você encontra a documentação (em Desenvolvimento) para trabalhar com todas as placas e Kits Franzininho.

+

Caso precise de ajuda e não encontre aqui, fique a vontade para participar da comunidade no Discord

+

Se não conhece o projeto Franzininho, segue um breve resumo:

+

Sobre o projeto Franzininho

+

O projeto Franzininho nasceu com o objetivo de incentivare capacitar os brasileiros para se tornarem protagonistas no desenvolvimento de projetos eletrônicos que envolvam sistemas embarcados e IoT.

+

Buscamos tornar os estudo das tecnologias atuais acessíveis para a sociedade brasileira através de conteúdos, materiais didáticos, ferramentas de desenvolvimento, projetos compartilhados e uma comunidade envolvida.

+

Trabalhamos baseados nos seguintes pilares: Open source software e hardware, materiais didáticos abertos, comunidade, compartilhamento de conhecimento, colaboração.

+

Como contribuir?

+

Você pode socilitar novos tutoriais e exemplos através da área de Issue no github.

+

Você também pode contribuir com a documentação adicionando exemplos e projetos. Caso queira fazer diretamente na documentação, abra um Issue para explicar o que deseja fazer. Outra possibilidade é conversar diretamente na comunidade na área de documentação.

+

Caso não tenha conhecimento no Github, você pode enviar o seu material através desse formulário. Fizemos um template bacana que você pode seguir para criar seu material.

+

Participe da Comunidade

+ +

Entre em contato com os organizadores

+ +

Creative Commons License
+Este obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

\ No newline at end of file diff --git a/docs/programacao/tutoriais-introducao/index.html b/docs/programacao/tutoriais-introducao/index.html index 757be2be4..87d44a932 100755 --- a/docs/programacao/tutoriais-introducao/index.html +++ b/docs/programacao/tutoriais-introducao/index.html @@ -1,17 +1,16 @@ - + - -Introdução | Franzininho - - - + +Introdução | Franzininho + + + -
-

Introdução

Configuração da Arduino IDE

Para a correta compilação e gravação da placa Franzininho DIY na IDE do Arduino, é necessário a correta configuração da IDE.

danger

TBD

- - +

Introdução

Configuração da Arduino IDE

+

Para a correta compilação e gravação da placa Franzininho DIY na IDE do Arduino, é necessário a correta configuração da IDE.

+

TBD

\ No newline at end of file diff --git a/en/404.html b/en/404.html index a366115da..4d9becd39 100755 --- a/en/404.html +++ b/en/404.html @@ -2,16 +2,13 @@ - -Page Not Found | Franzininho - - - + +Page Not Found | Franzininho + + + -
-

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - +

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

\ No newline at end of file diff --git a/en/assets/css/styles.048ffe62.css b/en/assets/css/styles.048ffe62.css new file mode 100755 index 000000000..300e6eaa9 --- /dev/null +++ b/en/assets/css/styles.048ffe62.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:rgba(0,0,0,.05);--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 rgba(0,0,0,.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,.2),0 2px 4px 0 rgba(0,0,0,.1);--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:rgba(0,0,0,.03);--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#2c8240;--ifm-color-primary-dark:#21af90;--ifm-color-primary-darker:#1fa588;--ifm-color-primary-darkest:#1a8870;--ifm-color-primary-light:#46cbae;--ifm-color-primary-lighter:#66d4bd;--ifm-color-primary-lightest:#92e0d0;--ifm-code-font-size:95%;--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:rgba(0,0,0,.1);--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:transparent}*{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid rgba(0,0,0,.1);border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%;height:auto;width:auto}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:rgba(53,120,229,.15);--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:rgba(235,237,240,.15);--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:rgba(0,164,0,.15);--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:rgba(84,199,236,.15);--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:rgba(255,186,0,.15);--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:rgba(250,56,62,.15);--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:transparent;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.sidebar_re4s,.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor transparent;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title,.title_f1Hy{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:hsla(0,0%,100%,.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,.5);color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:hsla(0,0%,100%,.05);--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:rgba(0,0,0,.6);right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover,.sidebarItemLink_mo7H:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.sidebarItemTitle_pO2u,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid transparent;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:hsla(0,0%,100%,.05);--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:hsla(0,0%,100%,.1);--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:hsla(0,0%,100%,.07);--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}.docusaurus-highlight-code-line{background-color:#484d5b;display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_YfHR,.sidebarLogo_isFc,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}[data-theme=dark]:root{--docusaurus-collapse-button-bg:hsla(0,0%,100%,.05);--docusaurus-collapse-button-bg-hover:hsla(0,0%,100%,.1)}.collapseSidebarButton_PEFL{display:none;margin:0}.iconExternalLink_nPIU{margin-left:.3rem}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}@supports selector(:has(*)){.navbarSearchContainer_Bca1:not(:has(>*)){display:none}}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.sidebar_re4s{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size)}.container_mt6G,.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.authorCol_Hf19{flex-grow:1!important;max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.heroBanner_UJJx{overflow:hidden;padding:4rem 0;position:relative;text-align:center}.buttons_pzbO{justify-content:center}.buttons_pzbO,.features_keug{align-items:center;display:flex}.features_keug{padding:2rem 0;text-align:center;width:100%}.featureImage_yA8i{height:200px;width:200px}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tocCollapsibleContent_vkbj a{display:block}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:transparent transparent transparent var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.img_ev3q{height:auto}.tableOfContents_bqdL{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_JAkA{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.sidebar_re4s,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media screen and (max-width:966px){.heroBanner_UJJx{padding:2rem}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.title_f1Hy{font-size:2rem}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/en/assets/css/styles.b14a2c92.css b/en/assets/css/styles.b14a2c92.css deleted file mode 100755 index 409567688..000000000 --- a/en/assets/css/styles.b14a2c92.css +++ /dev/null @@ -1 +0,0 @@ -.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#2c8240;--ifm-color-primary-dark:#21af90;--ifm-color-primary-darker:#1fa588;--ifm-color-primary-darkest:#1a8870;--ifm-color-primary-light:#46cbae;--ifm-color-primary-lighter:#66d4bd;--ifm-color-primary-lightest:#92e0d0;--ifm-code-font-size:95%;--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}*{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_tbUL,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.sidebar_re4s,.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_S0QG>:last-child,.collapsibleContent_i85q>:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title,.title_f1Hy{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover,.sidebarItemLink_mo7H:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.sidebarItemTitle_pO2u,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}.docusaurus-highlight-code-line{background-color:#484d5b;display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_b6E3,.sidebarLogo_isFc,.themedImage_ToTc,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA,html:not([data-theme]) .themedComponent--light_NU7w{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.sidebar_re4s{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size)}.container_mt6G,.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.docMainContainer_gTbr,.docPage__5DB{display:flex;width:100%}.docPage__5DB{flex:1 0}.docsWrapper_BCFX{display:flex;flex:1 0 auto}.authorCol_Hf19{flex-grow:1!important;max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.heroBanner_UJJx{overflow:hidden;padding:4rem 0;position:relative;text-align:center}.buttons_pzbO{justify-content:center}.buttons_pzbO,.features_keug{align-items:center;display:flex}.features_keug{padding:2rem 0;text-align:center;width:100%}.featureImage_yA8i{height:200px;width:200px}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_vwxv{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tocCollapsibleContent_vkbj a{display:block}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.img_ev3q{height:auto}.admonition_LlT9{margin-bottom:1em}.admonitionHeading_tbUL{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem}.admonitionHeading_tbUL code{text-transform:none}.admonitionIcon_kALy{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_kALy svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.blogPostFooterDetailsFull_mRVl{flex-direction:column}.tableOfContents_bqdL{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_m80_{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.searchBox_ZlJk{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_BlDH,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_m80_:focus,.expandButton_m80_:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_m80_{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_BlDH{transform:rotate(180deg)}.docSidebarContainer_b6E3{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_b3ry{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_Xe31{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_gTbr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_Uz_u{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_czyv{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.sidebar_re4s,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media screen and (max-width:966px){.heroBanner_UJJx{padding:2rem}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.title_f1Hy{font-size:2rem}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/en/assets/js/01a85c17.4eb05196.js b/en/assets/js/01a85c17.4eb05196.js new file mode 100755 index 000000000..706bc942c --- /dev/null +++ b/en/assets/js/01a85c17.4eb05196.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8412],{9452:(e,s,t)=>{t.d(s,{c:()=>v});var a=t(11504),i=t(34064),r=t(99012),n=t(11432),l=t(10867),c=t(84357),o=t(55592),m=t(13376);function d(e){const{pathname:s}=(0,o.IT)();return(0,a.useMemo)((()=>e.filter((e=>function(e,s){return!(e.unlisted&&!(0,m.Sc)(e.permalink,s))}(e,s)))),[e,s])}const u={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};var h=t(17624);function g(e){let{sidebar:s}=e;const t=d(s.items);return(0,h.jsx)("aside",{className:"col col--3",children:(0,h.jsxs)("nav",{className:(0,i.c)(u.sidebar,"thin-scrollbar"),"aria-label":(0,c.G)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,h.jsx)("div",{className:(0,i.c)(u.sidebarItemTitle,"margin-bottom--md"),children:s.title}),(0,h.jsx)("ul",{className:(0,i.c)(u.sidebarItemList,"clean-list"),children:t.map((e=>(0,h.jsx)("li",{className:u.sidebarItem,children:(0,h.jsx)(l.c,{isNavLink:!0,to:e.permalink,className:u.sidebarItemLink,activeClassName:u.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var b=t(45168);function j(e){let{sidebar:s}=e;const t=d(s.items);return(0,h.jsx)("ul",{className:"menu__list",children:t.map((e=>(0,h.jsx)("li",{className:"menu__list-item",children:(0,h.jsx)(l.c,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function p(e){return(0,h.jsx)(b.Mx,{component:j,props:e})}function x(e){let{sidebar:s}=e;const t=(0,n.U)();return s?.items.length?"mobile"===t?(0,h.jsx)(p,{sidebar:s}):(0,h.jsx)(g,{sidebar:s}):null}function v(e){const{sidebar:s,toc:t,children:a,...n}=e,l=s&&s.items.length>0;return(0,h.jsx)(r.c,{...n,children:(0,h.jsx)("div",{className:"container margin-vert--lg",children:(0,h.jsxs)("div",{className:"row",children:[(0,h.jsx)(x,{sidebar:s}),(0,h.jsx)("main",{className:(0,i.c)("col",{"col--7":l,"col--9 col--offset-1":!l}),children:a}),t&&(0,h.jsx)("div",{className:"col col--2",children:t})]})})})}},43024:(e,s,t)=>{t.r(s),t.d(s,{default:()=>j});t(11504);var a=t(34064),i=t(84357);const r=()=>(0,i.G)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var n=t(68900),l=t(45864),c=t(9452),o=t(83020),m=t(56448);const d={tag:"tag_Nnez"};var u=t(17624);function h(e){let{letterEntry:s}=e;return(0,u.jsxs)("article",{children:[(0,u.jsx)(m.c,{as:"h2",id:s.letter,children:s.letter}),(0,u.jsx)("ul",{className:"padding--none",children:s.tags.map((e=>(0,u.jsx)("li",{className:d.tag,children:(0,u.jsx)(o.c,{...e})},e.permalink)))}),(0,u.jsx)("hr",{})]})}function g(e){let{tags:s}=e;const t=function(e){const s={};return Object.values(e).forEach((e=>{const t=function(e){return e[0].toUpperCase()}(e.label);s[t]??=[],s[t].push(e)})),Object.entries(s).sort(((e,s)=>{let[t]=e,[a]=s;return t.localeCompare(a)})).map((e=>{let[s,t]=e;return{letter:s,tags:t.sort(((e,s)=>e.label.localeCompare(s.label)))}}))}(s);return(0,u.jsx)("section",{className:"margin-vert--lg",children:t.map((e=>(0,u.jsx)(h,{letterEntry:e},e.letter)))})}var b=t(48712);function j(e){let{tags:s,sidebar:t}=e;const i=r();return(0,u.jsxs)(n.cr,{className:(0,a.c)(l.W.wrapper.blogPages,l.W.page.blogTagsListPage),children:[(0,u.jsx)(n.U7,{title:i}),(0,u.jsx)(b.c,{tag:"blog_tags_list"}),(0,u.jsxs)(c.c,{sidebar:t,children:[(0,u.jsx)(m.c,{as:"h1",children:i}),(0,u.jsx)(g,{tags:s})]})]})}},83020:(e,s,t)=>{t.d(s,{c:()=>l});t(11504);var a=t(34064),i=t(10867);const r={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var n=t(17624);function l(e){let{permalink:s,label:t,count:l}=e;return(0,n.jsxs)(i.c,{href:s,className:(0,a.c)(r.tag,l?r.tagWithCount:r.tagRegular),children:[t,l&&(0,n.jsx)("span",{children:l})]})}}}]); \ No newline at end of file diff --git a/en/assets/js/01a85c17.933066fe.js b/en/assets/js/01a85c17.933066fe.js deleted file mode 100755 index 8b8eba153..000000000 --- a/en/assets/js/01a85c17.933066fe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4013],{9058:(e,t,a)=>{a.d(t,{Z:()=>E});var l=a(7294),n=a(4334),r=a(7961),s=a(7524),i=a(9960),c=a(5999);const m={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};function o(e){let{sidebar:t}=e;return l.createElement("aside",{className:"col col--3"},l.createElement("nav",{className:(0,n.Z)(m.sidebar,"thin-scrollbar"),"aria-label":(0,c.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},l.createElement("div",{className:(0,n.Z)(m.sidebarItemTitle,"margin-bottom--md")},t.title),l.createElement("ul",{className:(0,n.Z)(m.sidebarItemList,"clean-list")},t.items.map((e=>l.createElement("li",{key:e.permalink,className:m.sidebarItem},l.createElement(i.Z,{isNavLink:!0,to:e.permalink,className:m.sidebarItemLink,activeClassName:m.sidebarItemLinkActive},e.title)))))))}var u=a(3102);function g(e){let{sidebar:t}=e;return l.createElement("ul",{className:"menu__list"},t.items.map((e=>l.createElement("li",{key:e.permalink,className:"menu__list-item"},l.createElement(i.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title)))))}function b(e){return l.createElement(u.Zo,{component:g,props:e})}function d(e){let{sidebar:t}=e;const a=(0,s.i)();return t?.items.length?"mobile"===a?l.createElement(b,{sidebar:t}):l.createElement(o,{sidebar:t}):null}function E(e){const{sidebar:t,toc:a,children:s,...i}=e,c=t&&t.items.length>0;return l.createElement(r.Z,i,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement(d,{sidebar:t}),l.createElement("main",{className:(0,n.Z)("col",{"col--7":c,"col--9 col--offset-1":!c}),itemScope:!0,itemType:"http://schema.org/Blog"},s),a&&l.createElement("div",{className:"col col--2"},a))))}},1223:(e,t,a)=>{a.r(t),a.d(t,{default:()=>E});var l=a(7294),n=a(4334),r=a(5999);const s=()=>(0,r.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var i=a(1944),c=a(5281),m=a(9058),o=a(3008);const u={tag:"tag_Nnez"};function g(e){let{letterEntry:t}=e;return l.createElement("article",null,l.createElement("h2",null,t.letter),l.createElement("ul",{className:"padding--none"},t.tags.map((e=>l.createElement("li",{key:e.permalink,className:u.tag},l.createElement(o.Z,e))))),l.createElement("hr",null))}function b(e){let{tags:t}=e;const a=function(e){const t={};return Object.values(e).forEach((e=>{const a=function(e){return e[0].toUpperCase()}(e.label);t[a]??=[],t[a].push(e)})),Object.entries(t).sort(((e,t)=>{let[a]=e,[l]=t;return a.localeCompare(l)})).map((e=>{let[t,a]=e;return{letter:t,tags:a.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}(t);return l.createElement("section",{className:"margin-vert--lg"},a.map((e=>l.createElement(g,{key:e.letter,letterEntry:e}))))}var d=a(197);function E(e){let{tags:t,sidebar:a}=e;const r=s();return l.createElement(i.FG,{className:(0,n.Z)(c.k.wrapper.blogPages,c.k.page.blogTagsListPage)},l.createElement(i.d,{title:r}),l.createElement(d.Z,{tag:"blog_tags_list"}),l.createElement(m.Z,{sidebar:a},l.createElement("h1",null,r),l.createElement(b,{tags:t})))}},3008:(e,t,a)=>{a.d(t,{Z:()=>i});var l=a(7294),n=a(4334),r=a(9960);const s={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function i(e){let{permalink:t,label:a,count:i}=e;return l.createElement(r.Z,{href:t,className:(0,n.Z)(s.tag,i?s.tagWithCount:s.tagRegular)},a,i&&l.createElement("span",null,i))}}}]); \ No newline at end of file diff --git a/en/assets/js/032edc05.6afef94a.js b/en/assets/js/032edc05.6afef94a.js new file mode 100755 index 000000000..db236c79f --- /dev/null +++ b/en/assets/js/032edc05.6afef94a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1288],{25444:(A,e,a)=>{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>s,default:()=>l,frontMatter:()=>n,metadata:()=>t,toc:()=>d});var i=a(17624),r=a(95788);const n={id:"circuitpython-ferramentas",title:"Instalando as ferramentas",slug:"/franzininho-wifi/exemplos-circuitpython/ferramentas",description:"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi",author:"Diana Santos"},s=void 0,t={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas",title:"Instalando as ferramentas",description:"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/instalacao-ferramentas.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/ferramentas",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/instalacao-ferramentas.md",tags:[],version:"current",frontMatter:{id:"circuitpython-ferramentas",title:"Instalando as ferramentas",slug:"/franzininho-wifi/exemplos-circuitpython/ferramentas",description:"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos"},next:{title:"Hello World!",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world"}},o={},d=[{value:"Windows",id:"windows",level:2},{value:"Instalando o Mu Editor",id:"instalando-o-mu-editor",level:3},{value:"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)",id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional",level:3},{value:"Linux",id:"linux",level:2},{value:"Instalando o Mu Editor",id:"instalando-o-mu-editor-1",level:3},{value:"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)",id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional-1",level:3},{value:"Ferramentas Alternativas",id:"ferramentas-alternativas",level:2},{value:"Franzininho WiFi: Configurando o Thonny IDE para trabalhar com CircuitPython",id:"franzininho-wifi-configurando-o-thonny-ide-para-trabalhar-com-circuitpython",level:3}];function c(A){const e={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...A.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.p,{children:"O CircuitPython n\xe3o exige ferramentas espec\xedficas para programa\xe7\xe3o. Um simples editor de texto j\xe1 \xe9 suficiente. Por\xe9m, para facilitar e dar maior produtividade a codifica\xe7\xe3o podemos usar algumas ferramentas."}),"\n",(0,i.jsx)(e.p,{children:"Recomendamos as seguintes ferramentas para trabalhar com o CircuitPython:"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsx)(e.li,{children:(0,i.jsx)(e.a,{href:"https://codewith.mu/",children:"Mu Editor"})}),"\n",(0,i.jsx)(e.li,{children:(0,i.jsx)(e.a,{href:"https://thonny.org/",children:"Thonny IDE"})}),"\n",(0,i.jsx)(e.li,{children:(0,i.jsx)(e.a,{href:"https://code.visualstudio.com/",children:"VS Code"})}),"\n"]}),"\n",(0,i.jsxs)(e.p,{children:["Nesse tutorial focaremos no Mu Editor pela simplicidade e facilidade do seu uso. Abaixo exibimos o processo de instala\xe7\xe3o para os sistemas operacionais ",(0,i.jsx)(e.a,{href:"#windows",children:"Windows"})," e ",(0,i.jsx)(e.a,{href:"#linux",children:"Linux"}),"."]}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/BIs9uYHytJk",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,i.jsx)(e.h2,{id:"windows",children:"Windows"}),"\n",(0,i.jsx)(e.h3,{id:"instalando-o-mu-editor",children:"Instalando o Mu Editor"}),"\n",(0,i.jsx)(e.p,{children:"Para a instala\xe7\xe3o do Mu Editor no Windows voc\xea deve seguir os seguintes passos:"}),"\n",(0,i.jsxs)(e.p,{children:["Passo 1: Acesse o site ",(0,i.jsx)(e.a,{href:"https://codewith.mu/",children:"https://codewith.mu/"})," e clique em Download:"]}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem1",src:a(7588).c+"",width:"512",height:"84"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 2: Clique na op\xe7\xe3o Windows Installer."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem2",src:a(4564).c+"",width:"512",height:"203"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 3: Salve-o em seu computador."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem3",src:a(68232).c+"",width:"1497",height:"884"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 4: Aguarde at\xe9 terminar o download e ap\xf3s isso clique em abrir o arquivo que voc\xea acabou de baixar."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem4",src:a(52660).c+"",width:"326",height:"88"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 5: Ap\xf3s baixar o programa, d\xea dois cliques e ent\xe3o ir\xe1 aparecer uma tela onde voc\xea ter\xe1 que aceitar os termos de uso do software, clique na caixa de sele\xe7\xe3o e pressione Install e aguarde a instala\xe7\xe3o."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem5",src:a(64916).c+"",width:"493",height:"389"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 8: Procure em seu computador: Mu Editor"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem8",src:a(81128).c+"",width:"667",height:"630"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 9: Ao abrir o programa aguarde, est\xe1 \xe9 a tela de inicio do Mu Editor."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem-extra",src:a(71116).c+"",width:"837",height:"663"})}),"\n",(0,i.jsx)(e.p,{children:'Passo 10: Ap\xf3s isso escolha CircuitPython, conforme a imagem abaixo:\nse por acaso ele n\xe3o abrir, clique em "Modo".'}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem9",src:a(22084).c+"",width:"995",height:"617"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 11: Pronto, agora \xe9 s\xf3 se divertir!"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem10",src:a(49576).c+"",width:"512",height:"311"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 12: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na pr\xf3xima se\xe7\xe3o."}),"\n",(0,i.jsx)(e.h3,{id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional",children:"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)"}),"\n",(0,i.jsx)(e.p,{children:"A seguir apresentaremos a instala\xe7\xe3o de terminal serial para acesso ao REPL atrav\xe9s da comunica\xe7\xe3o serial."}),"\n",(0,i.jsxs)(e.p,{children:["Instalaremos o terminal serial Putty para nossos exemplos. Fa\xe7a o download em: ",(0,i.jsx)(e.a,{href:"https://www.putty.org/",children:"https://www.putty.org/"})]}),"\n",(0,i.jsx)(e.p,{children:"No site, clique na primeira op\xe7\xe3o"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem1",src:a(29056).c+"",width:"512",height:"249"})}),"\n",(0,i.jsx)(e.p,{children:"Veja qual \xe9 o seu sistema. No meu caso \xe9 de 64bits por isso vou clicar na op\xe7\xe3o de 64 bits x86. Ap\xf3s isso \xe9 s\xf3 salvar."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem2",src:a(52288).c+"",width:"512",height:"246"})}),"\n",(0,i.jsx)(e.p,{children:"Ap\xf3s realizar o download, d\xea dois cliques no arquivo. Ser\xe1 aberta a janela conforme a figura abaixo. Clique em next e depois em install:"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem4",src:a(49892).c+"",width:"512",height:"399"})}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem3",src:a(9956).c+"",width:"512",height:"399"})}),"\n",(0,i.jsx)(e.p,{children:"Novamente clique em install:"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem4",src:a(79404).c+"",width:"512",height:"403"})}),"\n",(0,i.jsx)(e.p,{children:"Aguarde e clique em finish:"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem5",src:a(96160).c+"",width:"512",height:"404"})}),"\n",(0,i.jsx)(e.p,{children:"Pronto finalizamos a etapa de configura\xe7\xe3o. O pr\xf3ximo passo \xe9 abrir o programa PuTTy em seu computador, mais abaixo estarei explicando os primeiros passos com ele."}),"\n",(0,i.jsx)(e.p,{children:"Como citei acima, abra o programa PuTTY"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem1",src:a(34352).c+"",width:"512",height:"420"})}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem2",src:a(89672).c+"",width:"512",height:"463"})}),"\n",(0,i.jsx)(e.p,{children:"Ent\xe3o abrir\xe1 uma janela conforme a imagem acima. Enquanto isso, vamos at\xe9 o gerenciador de dispositivos."}),"\n",(0,i.jsx)(e.p,{children:"V\xe1 em Portas (COM e LTP). Aqui voc\xea encontra em qual porta a placa est\xe1 conectada. Clicando para expandir voc\xea ver\xe1 Dispositivo Serial USB (COM3)"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem3",src:a(82636).c+"",width:"512",height:"375"})}),"\n",(0,i.jsx)(e.p,{children:"Agora faremos algumas altera\xe7\xf5es, conforme a imagem abaixo, em COM 1 altere para COM3 e selecione a op\xe7\xe3o Serial e clique em open."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem4",src:a(23615).c+"",width:"512",height:"464"})}),"\n",(0,i.jsx)(e.p,{children:"Ent\xe3o aparecer\xe1 uma tela, similar a um terminal. Pressione Ctrl + C para entrar no interpretador Python da placa:"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem5",src:a(76204).c+"",width:"512",height:"325"})}),"\n",(0,i.jsx)(e.p,{children:"Agora que a placa j\xe1 est\xe1 conectada, podemos enviar alguns comandos para ela executar atrav\xe9s do REPL."}),"\n",(0,i.jsx)(e.p,{children:"Digite print(\u201cOl\xe1, Mundo!\u201d) e d\xea o enter."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem6",src:a(24404).c+"",width:"512",height:"323"})}),"\n",(0,i.jsx)(e.p,{children:"Executamos acima o comando print. Voc\xea pode testar outras mensagens trocando o texto que est\xe1 entre aspas."}),"\n",(0,i.jsx)(e.p,{children:"Podemos tamb\xe9m executar algumas opera\xe7\xf5es matem\xe1ticas."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem7",src:a(43524).c+"",width:"512",height:"317"})}),"\n",(0,i.jsx)(e.p,{children:"Tamb\xe9m podemos ter acesso \xe0s fun\xe7\xf5es do CircuitPython para acesso ao hardware. Vamos ver quais pinos a Franzininho WiFi possui dispon\xedvel?"}),"\n",(0,i.jsx)(e.p,{children:"Digite import board, d\xea enter. Digite dir(board) e d\xea o enter."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem8",src:a(63228).c+"",width:"512",height:"323"})}),"\n",(0,i.jsx)(e.p,{children:"Esses s\xe3o os pinos que trabalharemos para nossas aplica\xe7\xf5es."}),"\n",(0,i.jsx)(e.p,{children:"Essa foi apenas uma experi\xeancia r\xe1pida para acesso ao REPL. Essa ferramenta nos ajudar\xe1 a testar c\xf3digos ou dispositivos rapidamente."}),"\n",(0,i.jsx)(e.p,{children:"Para editar c\xf3digos maiores e projetos que voc\xea precisa salvar, recomendamos que edite no arquivo code.py"}),"\n",(0,i.jsx)(e.p,{children:"Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):"}),"\n",(0,i.jsx)(e.h2,{id:"linux",children:"Linux"}),"\n",(0,i.jsx)(e.h3,{id:"instalando-o-mu-editor-1",children:"Instalando o Mu Editor"}),"\n",(0,i.jsx)(e.p,{children:"Para a instalar o Mu Editor no Linux voc\xea deve seguir os passos a seguir:"}),"\n",(0,i.jsxs)(e.p,{children:["Passo 1: Acesse o site ",(0,i.jsx)(e.a,{href:"https://codewith.mu/",children:"https://codewith.mu/"})," e clique em Download:"]}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem1",src:a(7588).c+"",width:"512",height:"84"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 2: Clique na op\xe7\xe3o Python Package (Linux or Native Python)"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem2",src:a(41244).c+"",width:"512",height:"208"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 3: Abra seu terminal e digite o comando abaixo, ele vai instalar bibliotecas do python, aguarde at\xe9 finalizar:"}),"\n",(0,i.jsx)(e.p,{children:"pip3 install mu-editor==1.1.0b5"}),"\n",(0,i.jsx)(e.p,{children:"Passo 4: Agora digite este comando:"}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{children:"mu-editor\n"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 5: Pronto, agora \xe9 s\xf3 se divertir!"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem3",src:a(49576).c+"",width:"512",height:"311"})}),"\n",(0,i.jsx)(e.p,{children:"Passo 6: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na pr\xf3xima se\xe7\xe3o."}),"\n",(0,i.jsx)(e.h3,{id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional-1",children:"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)"}),"\n",(0,i.jsx)(e.p,{children:"A seguir apresentaremos a instala\xe7\xe3o de terminal serial para acesso ao REPL atrav\xe9s da comunica\xe7\xe3o serial."}),"\n",(0,i.jsx)(e.p,{children:"Instale um terminal, por exemplo, para instalar o picocom, digite os comandos abaixo:"}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{children:"sudo apt-get update \nsudo apt-get install picocom\n"})}),"\n",(0,i.jsx)(e.p,{children:"Para acessar a Franzininho WiFi atrav\xe9s do REPL usando o terminal serial no Linux, o primeiro passo \xe9 conectar a placa Franzininho Wifi em seu computador e logo ir\xe1 aparecer algo parecido com um dispositivo de pendrive, conforme a imagem abaixo:"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem1",src:a(97400).c+"",width:"512",height:"288"})}),"\n",(0,i.jsx)(e.p,{children:"Agora abriremos o terminal Serial e a porta serial que a placa est\xe1 conectada. Abra o terminal de comandos e digite o seguinte comando: picomcom /dev/ttyACM0 de enter."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem2",src:a(59384).c+"",width:"512",height:"185"})}),"\n",(0,i.jsx)(e.p,{children:"Agora pressione Ctrl+C no teclado e ent\xe3o aparecer\xe1 >>>"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem3",src:a(20664).c+"",width:"512",height:"350"})}),"\n",(0,i.jsx)(e.p,{children:"Pronto, estamos na placa Franzininho WiFi e podemos enviar comandos diretamente para ela."}),"\n",(0,i.jsx)(e.p,{children:"Digite: print(\u201cHello World\u201d) e aperte o enter (voc\xea pode escrever qualquer coisa nas aspas, ent\xe3o aparecer\xe1 o que voc\xea escreveu:"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem4",src:a(95384).c+"",width:"512",height:"350"})}),"\n",(0,i.jsx)(e.p,{children:"Note que estamos executando comando Python atrav\xe9s do REPL."}),"\n",(0,i.jsx)(e.p,{children:"Agora faremos uma opera\xe7\xe3o matem\xe1tica, digite um numero, escolha uma opera\xe7\xe3o matem\xe1tica e digite outro valor, aperte o enter e observe o resultado:"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem5",src:a(16508).c+"",width:"512",height:"197"})}),"\n",(0,i.jsx)(e.p,{children:"Agora digite o seguinte c\xf3digo no terminal:"}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{children:"import board \ndir(board)\n"})}),"\n",(0,i.jsx)(e.p,{children:"Ent\xe3o aparecer\xe1 o conjunto de pinos dispon\xedveis na Franzininho Wifi."}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem6",src:a(15311).c+"",width:"512",height:"455"})}),"\n",(0,i.jsx)(e.p,{children:"Esse foi apenas uma experi\xeancia r\xe1pia para acesso ao REPL. Essa ferramenta nos ajudar\xe1 a testar c\xf3digos ou dispositivos rapidamente."}),"\n",(0,i.jsx)(e.p,{children:"Para editar c\xf3digos maiores e projetos que voc\xea precisa salvar, recomendamos que edite no arquivo code.py"}),"\n",(0,i.jsx)(e.p,{children:"Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):"}),"\n",(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{alt:"imagem7",src:a(49828).c+"",width:"512",height:"288"})}),"\n",(0,i.jsx)(e.p,{children:"Agora veremos o que \xe9 poss\xedvel fazer com o CircuitPyhton. Bora l\xe1?"}),"\n",(0,i.jsx)(e.h2,{id:"ferramentas-alternativas",children:"Ferramentas Alternativas"}),"\n",(0,i.jsx)(e.h3,{id:"franzininho-wifi-configurando-o-thonny-ide-para-trabalhar-com-circuitpython",children:"Franzininho WiFi: Configurando o Thonny IDE para trabalhar com CircuitPython"}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/Yetzf8qK4II",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,i.jsxs)(e.table,{children:[(0,i.jsx)(e.thead,{children:(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.th,{children:"Autor"}),(0,i.jsx)(e.th,{children:"Diana Santos"})]})}),(0,i.jsxs)(e.tbody,{children:[(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:"Autor"}),(0,i.jsx)(e.td,{children:(0,i.jsx)(e.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]}),(0,i.jsxs)(e.tr,{children:[(0,i.jsx)(e.td,{children:"Data:"}),(0,i.jsx)(e.td,{children:"16/09/2021"})]})]})]})]})}function l(A={}){const{wrapper:e}={...(0,r.MN)(),...A.components};return e?(0,i.jsx)(e,{...A,children:(0,i.jsx)(c,{...A})}):c(A)}},95788:(A,e,a)=>{a.d(e,{MN:()=>d});var i=a(11504);function r(A,e,a){return e in A?Object.defineProperty(A,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):A[e]=a,A}function n(A,e){var a=Object.keys(A);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(A);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(A,e).enumerable}))),a.push.apply(a,i)}return a}function s(A){for(var e=1;e=0||(r[a]=A[a]);return r}(A,e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(A);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(A,a)&&(r[a]=A[a])}return r}var o=i.createContext({}),d=function(A){var e=i.useContext(o),a=e;return A&&(a="function"==typeof A?A(e):s(s({},e),A)),a},c={inlineCode:"code",wrapper:function(A){var e=A.children;return i.createElement(i.Fragment,{},e)}},l=i.forwardRef((function(A,e){var a=A.components,r=A.mdxType,n=A.originalType,o=A.parentName,l=t(A,["components","mdxType","originalType","parentName"]),p=d(a),m=r,E=p["".concat(o,".").concat(m)]||p[m]||c[m]||n;return a?i.createElement(E,s(s({ref:e},l),{},{components:a})):i.createElement(E,s({ref:e},l))}));l.displayName="MDXCreateElement"},7588:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x00-Editor_MU-ba3cd8ace939ffb0580dccaa4d0cdf53.png"},4564:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x01_download_MU-1e512cd327051fda3b809c3dca11e0e1.png"},68232:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x02_Salvando_MU-627c3187f23bd43d9b79bc1029a65d2c.png"},52660:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x03_Baixando_MU-cddf32749baf5f161bc03512ba6509a6.png"},64916:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x04_instalando_Mu-editor-fed42a430dfd8203d44422123c053adf.gif"},81128:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x07-mu-editor-bc3568dc373360e74c594f28cb4dbded.png"},22084:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x08-selecione-modo-CircuitPython-cb06a6b862933996fb94dc153d7d44aa.png"},49576:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x09_Interface_MU-9c35d912dbd0ca1a16f4e0b523982bac.png"},41244:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x10_download_MU_Linux-a46194baf736d62391b0d282854d3a0e.png"},29056:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x11_download_PuTTY-a2fd196a5e5149dca4811e220668539e.png"},52288:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x12_download_PuTTY-f5a2bf87198362425fdf0e409182d301.png"},49892:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x13_instalando_PuTTY-b45a58274db088bdc65b073e7db5cf31.png"},9956:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x14_instalando_PuTTY-d24ca496b48bc5fa2d87cf80ced6d87c.png"},79404:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x15_instalando_PuTTY-8a2fbf9577e279e73d02a14c70f289f4.png"},96160:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x16_instalando_PuTTY-8bb87629f700be7f5995b4ba08a175b5.png"},34352:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x17_abrindo_PuTTY-20d9bdb1e80562c28eaba1eb272e4284.png"},89672:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x18_programa_PuTTY-915f0658ce66350947a7735b23620b09.png"},82636:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x19_portasCOM_PuTTY-7a25cf5c79c7671f146598766973b79f.png"},23615:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x20_portasCOM_PuTTY-1cc40445920776386501a52dfd3afc01.png"},76204:(A,e,a)=>{a.d(e,{c:()=>i});const i="data:image/png;base64,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"},24404:(A,e,a)=>{a.d(e,{c:()=>i});const i="data:image/png;base64,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"},43524:(A,e,a)=>{a.d(e,{c:()=>i});const i="data:image/png;base64,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"},63228:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x24_import_board_PuTTY-df7b0aa097c0c1401a4eef05125f0b68.png"},97400:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x25_Abrindo_CircuitPython-fb8b73b9a545ac844c7417339ae1a3d3.png"},59384:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x26_picocom_CircuitPython-98bf26e28bd6b7844fd511a9fb03d515.png"},20664:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x27_picocom_CircuitPython-875a98e0cc370a46b3b7fd5570ea2561.png"},95384:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x28_picocom_CircuitPython-875a98e0cc370a46b3b7fd5570ea2561.png"},16508:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x29_picocom_CircuitPython-b38e05a5af6b1d093d1104121738c9d2.png"},15311:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x30_picocom_CircuitPython-e811b70d31657093cf5e7b9543204f48.png"},49828:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/0x31_picocom_CircuitPython-4e4bbca646ac4c84260448666800499d.png"},71116:(A,e,a)=>{a.d(e,{c:()=>i});const i=a.p+"assets/images/tela-mu-editor-048cc19129e3e39e76455b7a837ae9e1.png"}}]); \ No newline at end of file diff --git a/en/assets/js/032edc05.b05000bb.js b/en/assets/js/032edc05.b05000bb.js deleted file mode 100755 index ab73aa5b1..000000000 --- a/en/assets/js/032edc05.b05000bb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9860],{3905:(A,a,e)=>{e.d(a,{Zo:()=>d,kt:()=>c});var t=e(7294);function r(A,a,e){return a in A?Object.defineProperty(A,a,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[a]=e,A}function i(A,a){var e=Object.keys(A);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(A);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(A,a).enumerable}))),e.push.apply(e,t)}return e}function o(A){for(var a=1;a=0||(r[e]=A[e]);return r}(A,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(A);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(A,e)&&(r[e]=A[e])}return r}var s=t.createContext({}),l=function(A){var a=t.useContext(s),e=a;return A&&(e="function"==typeof A?A(a):o(o({},a),A)),e},d=function(A){var a=l(A.components);return t.createElement(s.Provider,{value:a},A.children)},p="mdxType",m={inlineCode:"code",wrapper:function(A){var a=A.children;return t.createElement(t.Fragment,{},a)}},u=t.forwardRef((function(A,a){var e=A.components,r=A.mdxType,i=A.originalType,s=A.parentName,d=n(A,["components","mdxType","originalType","parentName"]),p=l(e),u=r,c=p["".concat(s,".").concat(u)]||p[u]||m[u]||i;return e?t.createElement(c,o(o({ref:a},d),{},{components:e})):t.createElement(c,o({ref:a},d))}));function c(A,a){var e=arguments,r=a&&a.mdxType;if("string"==typeof A||r){var i=e.length,o=new Array(i);o[0]=u;var n={};for(var s in a)hasOwnProperty.call(a,s)&&(n[s]=a[s]);n.originalType=A,n[p]="string"==typeof A?A:r,o[1]=n;for(var l=2;l{e.r(a),e.d(a,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>n,toc:()=>l});var t=e(3117),r=(e(7294),e(3905));const i={id:"circuitpython-ferramentas",title:"Instalando as ferramentas",slug:"/franzininho-wifi/exemplos-circuitpython/ferramentas",description:"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi",author:"Diana Santos"},o=void 0,n={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas",title:"Instalando as ferramentas",description:"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/instalacao-ferramentas.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/ferramentas",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/instalacao-ferramentas.md",tags:[],version:"current",frontMatter:{id:"circuitpython-ferramentas",title:"Instalando as ferramentas",slug:"/franzininho-wifi/exemplos-circuitpython/ferramentas",description:"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos"},next:{title:"Hello World!",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world"}},s={},l=[{value:"Windows",id:"windows",level:2},{value:"Instalando o Mu Editor",id:"instalando-o-mu-editor",level:3},{value:"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)",id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional",level:3},{value:"Linux",id:"linux",level:2},{value:"Instalando o Mu Editor",id:"instalando-o-mu-editor-1",level:3},{value:"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)",id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional-1",level:3},{value:"Ferramentas Alternativas",id:"ferramentas-alternativas",level:2},{value:"Franzininho WiFi: Configurando o Thonny IDE para trabalhar com CircuitPython",id:"franzininho-wifi-configurando-o-thonny-ide-para-trabalhar-com-circuitpython",level:3}],d={toc:l},p="wrapper";function m(A){let{components:a,...i}=A;return(0,r.kt)(p,(0,t.Z)({},d,i,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"O CircuitPython n\xe3o exige ferramentas espec\xedficas para programa\xe7\xe3o. Um simples editor de texto j\xe1 \xe9 suficiente. Por\xe9m, para facilitar e dar maior produtividade a codifica\xe7\xe3o podemos usar algumas ferramentas."),(0,r.kt)("p",null,"Recomendamos as seguintes ferramentas para trabalhar com o CircuitPython:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://codewith.mu/"},"Mu Editor")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://thonny.org/"},"Thonny IDE")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://code.visualstudio.com/"},"VS Code"))),(0,r.kt)("p",null,"Nesse tutorial focaremos no Mu Editor pela simplicidade e facilidade do seu uso. Abaixo exibimos o processo de instala\xe7\xe3o para os sistemas operacionais ",(0,r.kt)("a",{parentName:"p",href:"#windows"},"Windows")," e ",(0,r.kt)("a",{parentName:"p",href:"#linux"},"Linux"),"."),(0,r.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/BIs9uYHytJk",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,r.kt)("h2",{id:"windows"},"Windows"),(0,r.kt)("h3",{id:"instalando-o-mu-editor"},"Instalando o Mu Editor"),(0,r.kt)("p",null,"Para a instala\xe7\xe3o do Mu Editor no Windows voc\xea deve seguir os seguintes passos:"),(0,r.kt)("p",null,"Passo 1: Acesse o site ",(0,r.kt)("a",{parentName:"p",href:"https://codewith.mu/"},"https://codewith.mu/")," e clique em Download:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem1",src:e(2010).Z,width:"512",height:"84"})),(0,r.kt)("p",null,"Passo 2: Clique na op\xe7\xe3o Windows Installer."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem2",src:e(793).Z,width:"512",height:"203"})),(0,r.kt)("p",null,"Passo 3: Salve-o em seu computador."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem3",src:e(3716).Z,width:"1497",height:"884"})),(0,r.kt)("p",null,"Passo 4: Aguarde at\xe9 terminar o download e ap\xf3s isso clique em abrir o arquivo que voc\xea acabou de baixar."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem4",src:e(6782).Z,width:"326",height:"88"})),(0,r.kt)("p",null,"Passo 5: Ap\xf3s baixar o programa, d\xea dois cliques e ent\xe3o ir\xe1 aparecer uma tela onde voc\xea ter\xe1 que aceitar os termos de uso do software, clique na caixa de sele\xe7\xe3o e pressione Install e aguarde a instala\xe7\xe3o."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem5",src:e(2079).Z,width:"493",height:"389"})),(0,r.kt)("p",null,"Passo 8: Procure em seu computador: Mu Editor"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem8",src:e(2962).Z,width:"667",height:"630"})),(0,r.kt)("p",null,"Passo 9: Ao abrir o programa aguarde, est\xe1 \xe9 a tela de inicio do Mu Editor."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem-extra",src:e(1845).Z,width:"837",height:"663"})),(0,r.kt)("p",null,'Passo 10: Ap\xf3s isso escolha CircuitPython, conforme a imagem abaixo:\nse por acaso ele n\xe3o abrir, clique em "Modo".'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem9",src:e(5093).Z,width:"995",height:"617"})),(0,r.kt)("p",null,"Passo 11: Pronto, agora \xe9 s\xf3 se divertir!"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem10",src:e(394).Z,width:"512",height:"311"})),(0,r.kt)("p",null,"Passo 12: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na pr\xf3xima se\xe7\xe3o. "),(0,r.kt)("h3",{id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional"},"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)"),(0,r.kt)("p",null,"A seguir apresentaremos a instala\xe7\xe3o de terminal serial para acesso ao REPL atrav\xe9s da comunica\xe7\xe3o serial."),(0,r.kt)("p",null,"Instalaremos o terminal serial Putty para nossos exemplos. Fa\xe7a o download em: ",(0,r.kt)("a",{parentName:"p",href:"https://www.putty.org/"},"https://www.putty.org/")),(0,r.kt)("p",null,"No site, clique na primeira op\xe7\xe3o"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem1",src:e(4492).Z,width:"512",height:"249"})),(0,r.kt)("p",null,"Veja qual \xe9 o seu sistema. No meu caso \xe9 de 64bits por isso vou clicar na op\xe7\xe3o de 64 bits x86. Ap\xf3s isso \xe9 s\xf3 salvar."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem2",src:e(5294).Z,width:"512",height:"246"})),(0,r.kt)("p",null,"Ap\xf3s realizar o download, d\xea dois cliques no arquivo. Ser\xe1 aberta a janela conforme a figura abaixo. Clique em next e depois em install:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem4",src:e(1846).Z,width:"512",height:"399"})),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem3",src:e(3874).Z,width:"512",height:"399"})),(0,r.kt)("p",null,"Novamente clique em install:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem4",src:e(4653).Z,width:"512",height:"403"})),(0,r.kt)("p",null,"Aguarde e clique em finish:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem5",src:e(7148).Z,width:"512",height:"404"})),(0,r.kt)("p",null,"Pronto finalizamos a etapa de configura\xe7\xe3o. O pr\xf3ximo passo \xe9 abrir o programa PuTTy em seu computador, mais abaixo estarei explicando os primeiros passos com ele."),(0,r.kt)("p",null,"Como citei acima, abra o programa PuTTY"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem1",src:e(4172).Z,width:"512",height:"420"})),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem2",src:e(7582).Z,width:"512",height:"463"})),(0,r.kt)("p",null,"Ent\xe3o abrir\xe1 uma janela conforme a imagem acima. Enquanto isso, vamos at\xe9 o gerenciador de dispositivos."),(0,r.kt)("p",null,"V\xe1 em Portas (COM e LTP). Aqui voc\xea encontra em qual porta a placa est\xe1 conectada. Clicando para expandir voc\xea ver\xe1 Dispositivo Serial USB (COM3)"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem3",src:e(9114).Z,width:"512",height:"375"})),(0,r.kt)("p",null,"Agora faremos algumas altera\xe7\xf5es, conforme a imagem abaixo, em COM 1 altere para COM3 e selecione a op\xe7\xe3o Serial e clique em open."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem4",src:e(7456).Z,width:"512",height:"464"})),(0,r.kt)("p",null,"Ent\xe3o aparecer\xe1 uma tela, similar a um terminal. Pressione Ctrl + C para entrar no interpretador Python da placa:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem5",src:e(166).Z,width:"512",height:"325"})),(0,r.kt)("p",null,"Agora que a placa j\xe1 est\xe1 conectada, podemos enviar alguns comandos para ela executar atrav\xe9s do REPL."),(0,r.kt)("p",null,"Digite print(\u201cOl\xe1, Mundo!\u201d) e d\xea o enter."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem6",src:e(1262).Z,width:"512",height:"323"})),(0,r.kt)("p",null,"Executamos acima o comando print. Voc\xea pode testar outras mensagens trocando o texto que est\xe1 entre aspas."),(0,r.kt)("p",null,"Podemos tamb\xe9m executar algumas opera\xe7\xf5es matem\xe1ticas."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem7",src:e(4537).Z,width:"512",height:"317"})),(0,r.kt)("p",null,"Tamb\xe9m podemos ter acesso \xe0s fun\xe7\xf5es do CircuitPython para acesso ao hardware. Vamos ver quais pinos a Franzininho WiFi possui dispon\xedvel?"),(0,r.kt)("p",null,"Digite import board, d\xea enter. Digite dir(board) e d\xea o enter."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem8",src:e(5013).Z,width:"512",height:"323"})),(0,r.kt)("p",null,"Esses s\xe3o os pinos que trabalharemos para nossas aplica\xe7\xf5es."),(0,r.kt)("p",null,"Essa foi apenas uma experi\xeancia r\xe1pida para acesso ao REPL. Essa ferramenta nos ajudar\xe1 a testar c\xf3digos ou dispositivos rapidamente."),(0,r.kt)("p",null,"Para editar c\xf3digos maiores e projetos que voc\xea precisa salvar, recomendamos que edite no arquivo code.py"),(0,r.kt)("p",null,"Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):"),(0,r.kt)("h2",{id:"linux"},"Linux"),(0,r.kt)("h3",{id:"instalando-o-mu-editor-1"},"Instalando o Mu Editor"),(0,r.kt)("p",null,"Para a instalar o Mu Editor no Linux voc\xea deve seguir os passos a seguir:"),(0,r.kt)("p",null,"Passo 1: Acesse o site ",(0,r.kt)("a",{parentName:"p",href:"https://codewith.mu/"},"https://codewith.mu/")," e clique em Download:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem1",src:e(2010).Z,width:"512",height:"84"})),(0,r.kt)("p",null,"Passo 2: Clique na op\xe7\xe3o Python Package (Linux or Native Python)"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem2",src:e(2589).Z,width:"512",height:"208"})),(0,r.kt)("p",null,"Passo 3: Abra seu terminal e digite o comando abaixo, ele vai instalar bibliotecas do python, aguarde at\xe9 finalizar:"),(0,r.kt)("p",null,"pip3 install mu-editor==1.1.0b5"),(0,r.kt)("p",null,"Passo 4: Agora digite este comando:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"mu-editor\n")),(0,r.kt)("p",null,"Passo 5: Pronto, agora \xe9 s\xf3 se divertir!"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem3",src:e(394).Z,width:"512",height:"311"})),(0,r.kt)("p",null,"Passo 6: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na pr\xf3xima se\xe7\xe3o. "),(0,r.kt)("h3",{id:"instala\xe7\xe3o-de-terminal-serial-para-acesso-ao-repl-opcional-1"},"Instala\xe7\xe3o de terminal serial para acesso ao REPL (Opcional)"),(0,r.kt)("p",null,"A seguir apresentaremos a instala\xe7\xe3o de terminal serial para acesso ao REPL atrav\xe9s da comunica\xe7\xe3o serial."),(0,r.kt)("p",null,"Instale um terminal, por exemplo, para instalar o picocom, digite os comandos abaixo:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"sudo apt-get update \nsudo apt-get install picocom\n")),(0,r.kt)("p",null,"Para acessar a Franzininho WiFi atrav\xe9s do REPL usando o terminal serial no Linux, o primeiro passo \xe9 conectar a placa Franzininho Wifi em seu computador e logo ir\xe1 aparecer algo parecido com um dispositivo de pendrive, conforme a imagem abaixo:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem1",src:e(5604).Z,width:"512",height:"288"})),(0,r.kt)("p",null,"Agora abriremos o terminal Serial e a porta serial que a placa est\xe1 conectada. Abra o terminal de comandos e digite o seguinte comando: picomcom /dev/ttyACM0 de enter."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem2",src:e(3816).Z,width:"512",height:"185"})),(0,r.kt)("p",null,"Agora pressione Ctrl+C no teclado e ent\xe3o aparecer\xe1 >>>"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem3",src:e(5151).Z,width:"512",height:"350"})),(0,r.kt)("p",null,"Pronto, estamos na placa Franzininho WiFi e podemos enviar comandos diretamente para ela."),(0,r.kt)("p",null,"Digite: print(\u201cHello World\u201d) e aperte o enter (voc\xea pode escrever qualquer coisa nas aspas, ent\xe3o aparecer\xe1 o que voc\xea escreveu:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem4",src:e(2305).Z,width:"512",height:"350"})),(0,r.kt)("p",null,"Note que estamos executando comando Python atrav\xe9s do REPL."),(0,r.kt)("p",null,"Agora faremos uma opera\xe7\xe3o matem\xe1tica, digite um numero, escolha uma opera\xe7\xe3o matem\xe1tica e digite outro valor, aperte o enter e observe o resultado:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem5",src:e(4598).Z,width:"512",height:"197"})),(0,r.kt)("p",null,"Agora digite o seguinte c\xf3digo no terminal:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"import board \ndir(board)\n")),(0,r.kt)("p",null,"Ent\xe3o aparecer\xe1 o conjunto de pinos dispon\xedveis na Franzininho Wifi."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem6",src:e(8943).Z,width:"512",height:"455"})),(0,r.kt)("p",null,"Esse foi apenas uma experi\xeancia r\xe1pia para acesso ao REPL. Essa ferramenta nos ajudar\xe1 a testar c\xf3digos ou dispositivos rapidamente."),(0,r.kt)("p",null,"Para editar c\xf3digos maiores e projetos que voc\xea precisa salvar, recomendamos que edite no arquivo code.py"),(0,r.kt)("p",null,"Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"imagem7",src:e(2716).Z,width:"512",height:"288"})),(0,r.kt)("p",null,"Agora veremos o que \xe9 poss\xedvel fazer com o CircuitPyhton. Bora l\xe1?"),(0,r.kt)("h2",{id:"ferramentas-alternativas"},"Ferramentas Alternativas"),(0,r.kt)("h3",{id:"franzininho-wifi-configurando-o-thonny-ide-para-trabalhar-com-circuitpython"},"Franzininho WiFi: Configurando o Thonny IDE para trabalhar com CircuitPython"),(0,r.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/Yetzf8qK4II",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Autor"),(0,r.kt)("th",{parentName:"tr",align:null},"Diana Santos"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Autor"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data:"),(0,r.kt)("td",{parentName:"tr",align:null},"16/09/2021")))))}m.isMDXComponent=!0},2010:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x00-Editor_MU-ba3cd8ace939ffb0580dccaa4d0cdf53.png"},793:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x01_download_MU-1e512cd327051fda3b809c3dca11e0e1.png"},3716:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x02_Salvando_MU-627c3187f23bd43d9b79bc1029a65d2c.png"},6782:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x03_Baixando_MU-cddf32749baf5f161bc03512ba6509a6.png"},2079:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x04_instalando_Mu-editor-fed42a430dfd8203d44422123c053adf.gif"},2962:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x07-mu-editor-bc3568dc373360e74c594f28cb4dbded.png"},5093:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x08-selecione-modo-CircuitPython-cb06a6b862933996fb94dc153d7d44aa.png"},394:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x09_Interface_MU-9c35d912dbd0ca1a16f4e0b523982bac.png"},2589:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x10_download_MU_Linux-a46194baf736d62391b0d282854d3a0e.png"},4492:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x11_download_PuTTY-a2fd196a5e5149dca4811e220668539e.png"},5294:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x12_download_PuTTY-f5a2bf87198362425fdf0e409182d301.png"},1846:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x13_instalando_PuTTY-b45a58274db088bdc65b073e7db5cf31.png"},3874:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x14_instalando_PuTTY-d24ca496b48bc5fa2d87cf80ced6d87c.png"},4653:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x15_instalando_PuTTY-8a2fbf9577e279e73d02a14c70f289f4.png"},7148:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x16_instalando_PuTTY-8bb87629f700be7f5995b4ba08a175b5.png"},4172:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x17_abrindo_PuTTY-20d9bdb1e80562c28eaba1eb272e4284.png"},7582:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x18_programa_PuTTY-915f0658ce66350947a7735b23620b09.png"},9114:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x19_portasCOM_PuTTY-7a25cf5c79c7671f146598766973b79f.png"},7456:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x20_portasCOM_PuTTY-1cc40445920776386501a52dfd3afc01.png"},166:(A,a,e)=>{e.d(a,{Z:()=>t});const t="data:image/png;base64,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"},1262:(A,a,e)=>{e.d(a,{Z:()=>t});const t="data:image/png;base64,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"},4537:(A,a,e)=>{e.d(a,{Z:()=>t});const t="data:image/png;base64,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"},5013:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x24_import_board_PuTTY-df7b0aa097c0c1401a4eef05125f0b68.png"},5604:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x25_Abrindo_CircuitPython-fb8b73b9a545ac844c7417339ae1a3d3.png"},3816:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x26_picocom_CircuitPython-98bf26e28bd6b7844fd511a9fb03d515.png"},5151:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x27_picocom_CircuitPython-875a98e0cc370a46b3b7fd5570ea2561.png"},2305:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x28_picocom_CircuitPython-875a98e0cc370a46b3b7fd5570ea2561.png"},4598:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x29_picocom_CircuitPython-b38e05a5af6b1d093d1104121738c9d2.png"},8943:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x30_picocom_CircuitPython-e811b70d31657093cf5e7b9543204f48.png"},2716:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/0x31_picocom_CircuitPython-4e4bbca646ac4c84260448666800499d.png"},1845:(A,a,e)=>{e.d(a,{Z:()=>t});const t=e.p+"assets/images/tela-mu-editor-048cc19129e3e39e76455b7a837ae9e1.png"}}]); \ No newline at end of file diff --git a/en/assets/js/06f5a5e3.247616fc.js b/en/assets/js/06f5a5e3.247616fc.js new file mode 100755 index 000000000..94e9bd41a --- /dev/null +++ b/en/assets/js/06f5a5e3.247616fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7952],{15644:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>d,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var n=a(17624),i=a(95788);const r={id:"franzininho-wifi-espidf-03",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-espidf/entrada-analogica",description:"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico",author:"Kayann Soares"},s=void 0,t={id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03",title:"Entrada Anal\xf3gica",description:"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x03-entrada-analogica.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/entrada-analogica",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x03-entrada-analogica.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-03",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-espidf/entrada-analogica",description:"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico",author:"Kayann Soares"},sidebar:"docs",previous:{title:"Entrada digital",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital"},next:{title:"PWM com LEDC",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/ledc"}},d={},c=[{value:"Recursos",id:"recursos",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function l(e){const o={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.p,{children:"Nesse exemplo vamos entender como usar o Conversor Anal\xf3gico-Digital (Analog to Digital Converter(ADC)) na Franzininho WiFi. O objetivo deste exemplo \xe9 apresentar projeto simples para configurar o ADC, ler o valor de uma entrada anal\xf3gica controlada por um potenci\xf4metro e imprimir o valor da convers\xe3o atrav\xe9s da comunica\xe7\xe3o serial. Ao final, estaremos preparados para fazer leitura anal\xf3gica simples como tamb\xe9m para utiliza\xe7\xe3o de sensores mais complexos."}),"\n",(0,n.jsx)(o.h2,{id:"recursos",children:"Recursos"}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:"Placa Franzininho WiFi"}),"\n",(0,n.jsx)(o.li,{children:"Potenci\xf4metro"}),"\n",(0,n.jsx)(o.li,{children:"Protoboard"}),"\n",(0,n.jsx)(o.li,{children:"Jumpers"}),"\n",(0,n.jsx)(o.li,{children:"Computador com ESP-IDF instalado e configurado."}),"\n"]}),"\n",(0,n.jsx)(o.h2,{id:"desenvolvimento",children:"Desenvolvimento"}),"\n",(0,n.jsx)(o.p,{children:"Um potenci\xf4metro \xe9 um dispositivo anal\xf3gico rotativo operado mecanicamente por meio de Um potenci\xf4metro \xe9 um dispositivo anal\xf3gico rotativo operado mecanicamente por meio de 3 terminais, ele fornece uma quantidade vari\xe1vel de resist\xeancia quando seu eixo \xe9 girado. Quando uma tens\xe3o \xe9 aplicada nos terminais do potenci\xf4metro, que est\xe1 conectado a uma entrada anal\xf3gica, conseguimos medir uma resist\xeancia produzida pelo potenci\xf4metro como um valor anal\xf3gico."}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"potenciometro",src:a(52904).c+"",width:"600",height:"600"})}),"\n",(0,n.jsx)(o.p,{children:"O Conversor Analogico-Digital \xe9 um dispositivo que converte um sinal anal\xf3gico num sinal digital. Logo, este exemplo vem com o intuito de monitorar o estado do potenci\xf4metro a partir de uma comunica\xe7\xe3o serial, assim podemos ter base para trabalharmos futuramente com sensores anal\xf3gicos."}),"\n",(0,n.jsx)(o.p,{children:"Conecte os tr\xeas fios do potenci\xf4metro \xe0 sua placa. O primeiro fio vai de um dos pinos externos do potenci\xf4metro para o GND. J\xe1 o segundo vai do outro pino externo do potenci\xf4metro para 3,3 Volts. E por \xfaltimo, o terceiro vai do pino do meio do potenci\xf4metro ao pino anal\xf3gico GPIO1."}),"\n",(0,n.jsx)(o.p,{children:"Quando se gira o potenci\xf4metro, altera-se a resist\xeancia, impactando diretamente no pino central do potenci\xf4metro, portanto, muda-se a tens\xe3o. Quando o eixo \xe9 girado no sentido direito a tens\xe3o se aproxima de 3,3V, ao contr\xe1rio se aproxima de 0. Essa tens\xe3o que voc\xea est\xe1 lendo na entrada anal\xf3gica."}),"\n",(0,n.jsx)(o.p,{children:"A Franzininho WIFI possui 20 entradas de ADC, sendo que o ADC1 possui 10 canais configurados do GPIO1 ao GPIO10, j\xe1 o ADC2 possui 10 canais configurados do GPIO11 ao GPIO20. O conversor anal\xf3gico-digital da ESP32-S2 que iremos utilizar possui 12bits de resolu\xe7\xe3o, portanto, ele l\xea a tens\xe3o e a converte em um n\xfamero entre 0 a 4095. A fun\xe7\xe3o adc1_get_raw() ir\xe1 fazer a captura da quantidade de tens\xe3o aplicada ao pino do canal configurado."}),"\n",(0,n.jsx)(o.h3,{id:"esquem\xe1tico",children:"Esquem\xe1tico"}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"esquem\xe1tico",src:a(61412).c+"",width:"1053",height:"552"})}),"\n",(0,n.jsx)(o.p,{children:"Em uma protoboard, conecte os tr\xeas fios do potenci\xf4metro na Franzininho WIFI. O primeiro vai de um dos pinos externos do potenci\xf4metro para o GND. O segundo vai do outro pino externo do potenci\xf4metro para 3,3 volts. O terceiro vai do pino do meio do potenci\xf4metro ao pino anal\xf3gico GPIO1."}),"\n",(0,n.jsx)(o.h3,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-c",children:'/*\n Autor : Kayann Soares\n Utiliza\xe7\xe3o simples da Leitura de Dados Analogicos.\n*/\n\n// Bibliotecas Necessarias\n#include \n#include "sdkconfig.h"\n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "esp_system.h"\n#include "esp_spi_flash.h"\n#include \n\n// Main\nvoid app_main(){\n\n // Configurando a resolu\xe7\xe3o do ADC para 13bits \n adc1_config_width(ADC_WIDTH_BIT_13);\n // Configurando o Channel do ADC para o Channel 0\n adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_DB_11);\n\n\n while(1){\n\n // Fun\xe7\xe3o que de leitura do valor analogico, passando o ADC1 que \xe9 o do GPIO1\n int sensorValue = adc1_get_raw(ADC1_CHANNEL_0);\n\n // Imprimindo valores lidos\n printf("%d\\n", sensorValue);\n\n // Rotina de Delay de 1 segundo\n vTaskDelay(1000 / portTICK_PERIOD_MS);\n // Descarrega os buffers de sa\xedda de dados\n fflush(stdout);\n\n }\n}\n\n'})}),"\n",(0,n.jsxs)(o.p,{children:["Voc\xea encontra o projeto completo em: ",(0,n.jsx)(o.a,{href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/EntradaAnalogica",children:"Entrada Anal\xf3gica"})]}),"\n",(0,n.jsx)(o.h3,{id:"compila\xe7\xe3o",children:"Compila\xe7\xe3o"}),"\n",(0,n.jsx)(o.p,{children:"Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o set-target para ESP 32-S2:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{children:"idf.py set-target esp32s2\n"})}),"\n",(0,n.jsx)(o.p,{children:"Ap\xf3s a compila\xe7\xe3o vamos enviar o c\xf3digo fonte para nossa placa, no editor pressione o \xedcone de raio para dar o FLASH e aguarde alguns segundos para assim dar in\xedcio ao programa"}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"compilar",src:a(96384).c+"",width:"290",height:"38"})}),"\n",(0,n.jsx)(o.p,{children:"Para vermos a sa\xedda de dados do nosso projeto clique no \xedcone no formato de monitor:"}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"upload",src:a(69652).c+"",width:"290",height:"38"})}),"\n",(0,n.jsx)(o.h3,{id:"resultados",children:"Resultados"}),"\n",(0,n.jsx)(o.p,{children:"Valores mostrados no terminal quando o potenci\xf4metro \xe9 rotacionado."}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"resultado",src:a(26564).c+"",width:"870",height:"1034"})}),"\n",(0,n.jsx)(o.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,n.jsx)(o.p,{children:"Conclu\xedmos o estudo do perif\xe9rico base para iniciar no desenvolvimento com microcontroladores da Espressif usando o Framework IDF, a partir desse artigo podemos replicar para as demais fam\xedlias do ESP32, estes conceitos podem ser levados tamb\xe9m para trabalharmos com outros microcontroladores que utilizem C e uma programa\xe7\xe3o mais abstrata. Este artigo visa no estudo do perif\xe9rico ADC, ao final deste projeto \xe9 poss\xedvel aprender a utilizar o ADC da Franzininho WiFi para leitura de dados anal\xf3gicos e lhe dar\xe1 o desafio de aplicar esse aprendizado na leitura de sensores anal\xf3gicos para voc\xea aplicar em seus projetos utilizando o ESP-IDF. Bons estudos."}),"\n",(0,n.jsxs)(o.table,{children:[(0,n.jsx)(o.thead,{children:(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.th,{children:"Autor"}),(0,n.jsx)(o.th,{children:(0,n.jsx)(o.a,{href:"https://www.linkedin.com/in/kayann-soares/",children:"Kayann Soares"})})]})}),(0,n.jsx)(o.tbody,{children:(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.td,{children:"Data:"}),(0,n.jsx)(o.td,{children:"01/06/2021"})]})})]})]})}function p(e={}){const{wrapper:o}={...(0,i.MN)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},95788:(e,o,a)=>{a.d(o,{MN:()=>c});var n=a(11504);function i(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function r(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var o=1;o=0||(i[a]=e[a]);return i}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var d=n.createContext({}),c=function(e){var o=n.useContext(d),a=o;return e&&(a="function"==typeof e?e(o):s(s({},o),e)),a},l={inlineCode:"code",wrapper:function(e){var o=e.children;return n.createElement(n.Fragment,{},o)}},p=n.forwardRef((function(e,o){var a=e.components,i=e.mdxType,r=e.originalType,d=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),m=c(a),u=i,h=m["".concat(d,".").concat(u)]||m[u]||l[u]||r;return a?n.createElement(h,s(s({ref:o},p),{},{components:a})):n.createElement(h,s({ref:o},p))}));p.displayName="MDXCreateElement"},52904:(e,o,a)=>{a.d(o,{c:()=>n});const n=a.p+"assets/images/1-0b0654e661127263f869c0c80b03bac3.png"},61412:(e,o,a)=>{a.d(o,{c:()=>n});const n=a.p+"assets/images/2-69ca8447ac89435582336566a7ce32b9.png"},96384:(e,o,a)=>{a.d(o,{c:()=>n});const n="data:image/png;base64,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"},69652:(e,o,a)=>{a.d(o,{c:()=>n});const n="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASIAAAAmCAIAAADvOgFDAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAspSURBVHhe7doPTNNXHgDwt9nKiimk0hLsjVaLuZ9Z60AEh9JbMRRjTYAUuI4BilcuOKdzFTdjmD3CwdgGc/YU5mEOJgqGEZAMNsssBNiBMuSfsxi7jc5Srhj+NUBWYHSX+/3aB4eKZ/9eIHufNOH93u/5a23f9/f+/L7PsVgsgKxIvf9eay1se/4XawFZpZ6Hf5EVZjHGcEvLyGqEwgxB3A6FGYK4HQozBHE7FGYI4nYozBDE7VCYIYjboTBDELdDYYYgbofCDEHcDoUZgrgdCjMEcTsUZgjidijMEMTtUJghiNs998amTFhEVpL356tgyeI9sgSWkFUIjWYI4nYozBDE7VCYrVBLZ4loxrjaObI2848M9PMCYGr0dpMBVrkCfSd3kx+JKLn6ygQ2Z1swxdTTr9HBClfaioVufoEouOOTuwWNzjaOueOrAEyemAF+vKO+C4+dRsMiaeNN2jF4uCrZFWZM/60G/V2+rE/EIZnJ5sGaoJJGNo2uM7rgKxAnfZTPpcyZibKHWftBjqLUUu8kdmB8XlT4DhrFbJ7/FYA1JDJpdqyzqy5TedtVnSwh6aMcjIJfnGDsfENR3mYt228xXJ9uxiU9+HDaJ8cYA2eLiy4aYY2zaKGno/eJA3w8ASC+ZwDmprXVqvLcO072DfrxQ395i6k/ryg466qPahNevky6B6jlZaX1Lnhf28MMS1ElhW+c0ZYNeokpjdv7t3XzTeUG/3Su91DXxahaNWxmL44wJ4SF/zY0ZtAOoPnaMAOADz+QPnRH8wAAk6Fd3qaBLR3AkTanYoauug/r2xe75taQxFPCXUxt0e4qJ668iBZTczR0uEp+VAPYfNm13eRLOQXn4Tl7pTRkB3sYJ+fg4TI8qD5z6mN7a+Ghw6Rpn2QwgXmkJba4zgW3GyylISkY9F/PVjXegp3SPyE68d2wDUNtpfFKR/sGDkv/RkL/cYLOna555XI7rHQ3mqAwLZ4/09cEePso93NLLlY4G2m2rs1EVZIdv3aV52o9E/C4MrSCDv0QlSem9J2s6gRB6V9Gc2BDe1H9MBYvhosxwfgQoHOZ/lymp3HUtM5SiTHwyakTmF408MvU6ODS2/9dw/CUGdCo/vDYOZGi0Jcm+grwgKUJ83azHnR85miMEdaYB68osvc+/XXFYMYHCqeF8xmke/+83u8bmuHo7/ZfNGGFJHiq+ezeqsUYw+mr6wskysGN/NcKMVi1VL7sgvZ94qUSw5rl0E8Leb9qaqRKtSlAcJoGa5dl2wVtwBRVHIoPNSr3F5WeKDr7qTHg9CHZW0x40lG2hpmyWDPpx/JrqcqO/fivsUq8piY269irJTUmLrbRrL1Wr7W2s9udcknH4M/Gu8U600992V+NmHqaO38Cw19ZKiW1t2Ezh5nB5qjMH7LPdb+T1SDL6c4+98OR2M14rWuIDgWsbfu2Bh8QpHH7gifaM1SrYAkRKdkbPNt5rqXxhmHdyyF0WOsosSiKO9LybouezZee4S9cDUs8E83TtSk+0KyNFMazYS2Ej6UJoJ3z3mGOUsMIycqH1U/gpySs117BJx3a0iuD9IQ4Iax/gq0XfCYs8cs0EXOwRlKitNya9edLCnIHfd5My8xa7mZhM5vCzD81WpqM30uYO7JCgA5wz8g+UcuzzoTh36lIGkCfm57nimMSnIt42voNm2nA33cDm+qzmbHBNWMNbloTlXNYWPZZrup6cXNdblWR8L2MqIFJeNY5fMmurROduV14SXaEQyH5Cr56Jz0BnlyhIsVZf+OMf1pGLCDLJiZp1CB4wkGh+1jk/n5i5ulF8oqIersQ7xVYfI14F5dCwaOrum1glInth42thJFMcKurnCi2KW6M+m1bfvzB8kNYQ13lpdGZ6iOJpdc6h1jh+cuPvTZe8BnYgdKGJMGLhrrdV1uXTKTHKq7KzxroqUk5xH/NQTaFmSAlDPM23My+XCjtAqlxsZEzLfIOU2RUSipQJpcUyfvGN2KiQ6/A1iuQTttbe+c28XLlTqPoGHftLctQxja05laVnrymvAW2iCPg6RWILcos5JnKaxXWnQ8x1dNEC++TSSMtZx2C+VMn/2XZ87nboohTje8UvfuNROClubi3yrLJpNXqZ73ZgUSDBX6+L8B/grs/PcNYv8wwxY6K2fPCwCXlGCCRPckkYKy8NOC5JyrmsYHRwqYLPgvnz/xN44blJyP45EdnGH95u3AbrLCX7c/NSGTrOmnp2gAvb6VS/Kie8Pg3JYIXYNTcmA8VB/K8iDCe2blbFDzdXtoCz688wrwQek9zwYcgpUGeUxjI4ft6+VFJJipPyoctHLC0P+j61ffNXi+SJr+7t3Tbg+xBgSWbhZ/evmGg+/NqeEiorm8f8A0/HQIPXU0rL5InjyysJpg8cSD+y4bi46SVeUTxalFlLzyyl01h1lrccvcBhXf8wPGKCFB67YsmSkROmGeTqrwUhB8XSw9hPpMaZfG3sPVvRYuyCfCyJNI8PjZF7P+m75m/ebK4pgmeXnnCeFtm7l9ow/JEO14krdvImjrx8WFOlrxAN78FE8A2dtMPz3r/zhqlNGHF0RjmQGVy83hEUla+dTFD8/MljX3fYSnbjC0S8M3qs9aFrnneNG/p/ca6Twd+4b/y+ErPDQSlB47kx+3PiZP+/cCRVFjpDJvCTF+tKu+n0NcZ7xO3amPrCUUGLyf7hAawQXt2txaQTNdr66pXxWNZV1KfLGu5NzvW1Kg5eESKx9iJosqVG2M4ElhjNrUFCiNp+mLVIIP7p1OWSKidNq0BZEsLB7TW6eaDA4munxgt8NfVHbzaeqtFcbJrni9MxAeeSBHGMPTmwsZWD0cWIxOALVTK6EQjPIAso25HKZwGDqu//l5vLTZdbe1ZH573+Nj7zAvai+xBnulUHeOpND+Tya7Y2rVx0shKjGORHgz0eopkN7MvNETjVfFfyHIa3pG9Pq3VkbGDDm/oL/he03lDD/Qjw7rp8R9Hh+H3urIlRIcHjPQbhdI/kntcE2Mkb75EeubpLz7VkibjGMOUkcY6RSV7GIfPtykyNZ6p0cRs8S1fn7l5x/eE8LncPV/BP8S8ysvyVy83Wpe+TfV5u4oqRwOlpwLMN1qIjeklGpsMYGdIClHky/YwHvY++hiQLxEET3RmLqy1HtV4QT0ZGJLyaKA944IrgJ2PpxnG22Ujm1IprUH9vG6+qXbEPxnzNmrqXl/4fh0RKG0WYXOzJnhoRfL0Mqp2lTh3W7I+nu6oXprzQeSFiAQueDzNSVGlbjWNkH9P7jmqKHfFOEZPFsUEU+EBbiMndBt1qtfypH7BZI+qxtGnpfT0tMzjtJ9N1KlLWQXnQYoqm/VdF4gMmi8rdCrHgh2WfknE8xhs/eBazULOhH+qeP+bQd4aVcGBtif3FYQV8vidRL7LzC1lRvIjESWqkMdwZx4+fOozF5IfY12/KiP5kTXw/7igPcRZP/BIA9OAgb9FfcYBIOuOZk2NTgKqn1l9OMrx6LUr2cqaCPdYshXTHxj0jseYBZFw+Ph92jVZReww6bkI3ktUkjWNi5gPmKfuaa4fq1q6aesQpuiCJOoPoOdt18TYEtGZ6hA//O8aEtkDgDlLmhgYuckrqrScdgbvVNprqRxvXYdi73R8XxSHZNSU1ys+dD4fhik4I4ndx6DgSylrUptpVF3b/LkDyVb/t4yz5cB8XWCesqS/LubZOvmOKyh12L3ckzpMZ9PGdE6MA8sjsm+f2JubfVircdFUGuYNu+PDW/olsPZRZJEjYYYgiF1sf26GIIiDUJghiNuhMEMQNwPgP7All7/VrDUzAAAAAElFTkSuQmCC"},26564:(e,o,a)=>{a.d(o,{c:()=>n});const n=a.p+"assets/images/5-6b4ef51aea33afc7045c96689c8d6371.png"}}]); \ No newline at end of file diff --git a/en/assets/js/06f5a5e3.b8c4e73c.js b/en/assets/js/06f5a5e3.b8c4e73c.js deleted file mode 100755 index d87d964ac..000000000 --- a/en/assets/js/06f5a5e3.b8c4e73c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6817],{3905:(e,a,o)=>{o.d(a,{Zo:()=>c,kt:()=>f});var n=o(7294);function i(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function r(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function t(e){for(var a=1;a=0||(i[o]=e[o]);return i}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var l=n.createContext({}),d=function(e){var a=n.useContext(l),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},c=function(e){var a=d(e.components);return n.createElement(l.Provider,{value:a},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var o=e.components,i=e.mdxType,r=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=d(o),u=i,f=p["".concat(l,".").concat(u)]||p[u]||m[u]||r;return o?n.createElement(f,t(t({ref:a},c),{},{components:o})):n.createElement(f,t({ref:a},c))}));function f(e,a){var o=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var r=o.length,t=new Array(r);t[0]=u;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[p]="string"==typeof e?e:i,t[1]=s;for(var d=2;d{o.r(a),o.d(a,{assets:()=>l,contentTitle:()=>t,default:()=>m,frontMatter:()=>r,metadata:()=>s,toc:()=>d});var n=o(3117),i=(o(7294),o(3905));const r={id:"franzininho-wifi-espidf-03",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-espidf/entrada-analogica",description:"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico",author:"Kayann Soares"},t=void 0,s={unversionedId:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03",id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03",title:"Entrada Anal\xf3gica",description:"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x03-entrada-analogica.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/entrada-analogica",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x03-entrada-analogica.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-03",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-espidf/entrada-analogica",description:"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico",author:"Kayann Soares"},sidebar:"docs",previous:{title:"Entrada digital",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital"},next:{title:"PWM com LEDC",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/ledc"}},l={},d=[{value:"Recursos",id:"recursos",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],c={toc:d},p="wrapper";function m(e){let{components:a,...r}=e;return(0,i.kt)(p,(0,n.Z)({},c,r,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Nesse exemplo vamos entender como usar o Conversor Anal\xf3gico-Digital (Analog to Digital Converter(ADC)) na Franzininho WiFi. O objetivo deste exemplo \xe9 apresentar projeto simples para configurar o ADC, ler o valor de uma entrada anal\xf3gica controlada por um potenci\xf4metro e imprimir o valor da convers\xe3o atrav\xe9s da comunica\xe7\xe3o serial. Ao final, estaremos preparados para fazer leitura anal\xf3gica simples como tamb\xe9m para utiliza\xe7\xe3o de sensores mais complexos."),(0,i.kt)("h2",{id:"recursos"},"Recursos"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Placa Franzininho WiFi"),(0,i.kt)("li",{parentName:"ul"},"Potenci\xf4metro"),(0,i.kt)("li",{parentName:"ul"},"Protoboard"),(0,i.kt)("li",{parentName:"ul"},"Jumpers"),(0,i.kt)("li",{parentName:"ul"},"Computador com ESP-IDF instalado e configurado.")),(0,i.kt)("h2",{id:"desenvolvimento"},"Desenvolvimento"),(0,i.kt)("p",null,"Um potenci\xf4metro \xe9 um dispositivo anal\xf3gico rotativo operado mecanicamente por meio de Um potenci\xf4metro \xe9 um dispositivo anal\xf3gico rotativo operado mecanicamente por meio de 3 terminais, ele fornece uma quantidade vari\xe1vel de resist\xeancia quando seu eixo \xe9 girado. Quando uma tens\xe3o \xe9 aplicada nos terminais do potenci\xf4metro, que est\xe1 conectado a uma entrada anal\xf3gica, conseguimos medir uma resist\xeancia produzida pelo potenci\xf4metro como um valor anal\xf3gico."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"potenciometro",src:o(4618).Z,width:"600",height:"600"})),(0,i.kt)("p",null,"O Conversor Analogico-Digital \xe9 um dispositivo que converte um sinal anal\xf3gico num sinal digital. Logo, este exemplo vem com o intuito de monitorar o estado do potenci\xf4metro a partir de uma comunica\xe7\xe3o serial, assim podemos ter base para trabalharmos futuramente com sensores anal\xf3gicos."),(0,i.kt)("p",null,"Conecte os tr\xeas fios do potenci\xf4metro \xe0 sua placa. O primeiro fio vai de um dos pinos externos do potenci\xf4metro para o GND. J\xe1 o segundo vai do outro pino externo do potenci\xf4metro para 3,3 Volts. E por \xfaltimo, o terceiro vai do pino do meio do potenci\xf4metro ao pino anal\xf3gico GPIO1."),(0,i.kt)("p",null,"Quando se gira o potenci\xf4metro, altera-se a resist\xeancia, impactando diretamente no pino central do potenci\xf4metro, portanto, muda-se a tens\xe3o. Quando o eixo \xe9 girado no sentido direito a tens\xe3o se aproxima de 3,3V, ao contr\xe1rio se aproxima de 0. Essa tens\xe3o que voc\xea est\xe1 lendo na entrada anal\xf3gica."),(0,i.kt)("p",null,"A Franzininho WIFI possui 20 entradas de ADC, sendo que o ADC1 possui 10 canais configurados do GPIO1 ao GPIO10, j\xe1 o ADC2 possui 10 canais configurados do GPIO11 ao GPIO20. O conversor anal\xf3gico-digital da ESP32-S2 que iremos utilizar possui 12bits de resolu\xe7\xe3o, portanto, ele l\xea a tens\xe3o e a converte em um n\xfamero entre 0 a 4095. A fun\xe7\xe3o adc1_get_raw() ir\xe1 fazer a captura da quantidade de tens\xe3o aplicada ao pino do canal configurado."),(0,i.kt)("h3",{id:"esquem\xe1tico"},"Esquem\xe1tico"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"esquem\xe1tico",src:o(4624).Z,width:"1053",height:"552"})),(0,i.kt)("p",null,"Em uma protoboard, conecte os tr\xeas fios do potenci\xf4metro na Franzininho WIFI. O primeiro vai de um dos pinos externos do potenci\xf4metro para o GND. O segundo vai do outro pino externo do potenci\xf4metro para 3,3 volts. O terceiro vai do pino do meio do potenci\xf4metro ao pino anal\xf3gico GPIO1."),(0,i.kt)("h3",{id:"c\xf3digo"},"C\xf3digo"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-c"},'/*\n Autor : Kayann Soares\n Utiliza\xe7\xe3o simples da Leitura de Dados Analogicos.\n*/\n\n// Bibliotecas Necessarias\n#include \n#include "sdkconfig.h"\n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "esp_system.h"\n#include "esp_spi_flash.h"\n#include \n\n// Main\nvoid app_main(){\n\n // Configurando a resolu\xe7\xe3o do ADC para 13bits \n adc1_config_width(ADC_WIDTH_BIT_13);\n // Configurando o Channel do ADC para o Channel 0\n adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_DB_11);\n\n\n while(1){\n\n // Fun\xe7\xe3o que de leitura do valor analogico, passando o ADC1 que \xe9 o do GPIO1\n int sensorValue = adc1_get_raw(ADC1_CHANNEL_0);\n\n // Imprimindo valores lidos\n printf("%d\\n", sensorValue);\n\n // Rotina de Delay de 1 segundo\n vTaskDelay(1000 / portTICK_PERIOD_MS);\n // Descarrega os buffers de sa\xedda de dados\n fflush(stdout);\n\n }\n}\n\n')),(0,i.kt)("p",null,"Voc\xea encontra o projeto completo em: ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/EntradaAnalogica"},"Entrada Anal\xf3gica")),(0,i.kt)("h3",{id:"compila\xe7\xe3o"},"Compila\xe7\xe3o"),(0,i.kt)("p",null,"Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o set-target para ESP 32-S2:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"idf.py set-target esp32s2\n")),(0,i.kt)("p",null,"Ap\xf3s a compila\xe7\xe3o vamos enviar o c\xf3digo fonte para nossa placa, no editor pressione o \xedcone de raio para dar o FLASH e aguarde alguns segundos para assim dar in\xedcio ao programa"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"compilar",src:o(1134).Z,width:"290",height:"38"})),(0,i.kt)("p",null,"Para vermos a sa\xedda de dados do nosso projeto clique no \xedcone no formato de monitor:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"upload",src:o(7428).Z,width:"290",height:"38"})),(0,i.kt)("h3",{id:"resultados"},"Resultados"),(0,i.kt)("p",null,"Valores mostrados no terminal quando o potenci\xf4metro \xe9 rotacionado."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"resultado",src:o(8453).Z,width:"870",height:"1034"})),(0,i.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,i.kt)("p",null,"Conclu\xedmos o estudo do perif\xe9rico base para iniciar no desenvolvimento com microcontroladores da Espressif usando o Framework IDF, a partir desse artigo podemos replicar para as demais fam\xedlias do ESP32, estes conceitos podem ser levados tamb\xe9m para trabalharmos com outros microcontroladores que utilizem C e uma programa\xe7\xe3o mais abstrata. Este artigo visa no estudo do perif\xe9rico ADC, ao final deste projeto \xe9 poss\xedvel aprender a utilizar o ADC da Franzininho WiFi para leitura de dados anal\xf3gicos e lhe dar\xe1 o desafio de aplicar esse aprendizado na leitura de sensores anal\xf3gicos para voc\xea aplicar em seus projetos utilizando o ESP-IDF. Bons estudos."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Autor"),(0,i.kt)("th",{parentName:"tr",align:null},(0,i.kt)("a",{parentName:"th",href:"https://www.linkedin.com/in/kayann-soares/"},"Kayann Soares")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Data:"),(0,i.kt)("td",{parentName:"tr",align:null},"01/06/2021")))))}m.isMDXComponent=!0},4618:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/1-0b0654e661127263f869c0c80b03bac3.png"},4624:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/2-69ca8447ac89435582336566a7ce32b9.png"},1134:(e,a,o)=>{o.d(a,{Z:()=>n});const n="data:image/png;base64,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"},7428:(e,a,o)=>{o.d(a,{Z:()=>n});const n="data:image/png;base64,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"},8453:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/5-6b4ef51aea33afc7045c96689c8d6371.png"}}]); \ No newline at end of file diff --git a/en/assets/js/09e1b884.2c4adf47.js b/en/assets/js/09e1b884.ba1dccda.js similarity index 65% rename from en/assets/js/09e1b884.2c4adf47.js rename to en/assets/js/09e1b884.ba1dccda.js index ea42d1bd9..89daa94d1 100755 --- a/en/assets/js/09e1b884.2c4adf47.js +++ b/en/assets/js/09e1b884.ba1dccda.js @@ -1 +1 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6250],{4469:n=>{n.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7804],{6792:n=>{n.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file diff --git a/en/assets/js/17896441.5b1e31d0.js b/en/assets/js/17896441.5b1e31d0.js deleted file mode 100755 index 382caa128..000000000 --- a/en/assets/js/17896441.5b1e31d0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7918],{8945:(e,t,n)=>{n.r(t),n.d(t,{default:()=>ie});var a=n(7294),l=n(1944),o=n(902);const r=a.createContext(null);function s(e){let{children:t,content:n}=e;const l=function(e){return(0,a.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return a.createElement(r.Provider,{value:l},t)}function c(){const e=(0,a.useContext)(r);if(null===e)throw new o.i6("DocProvider");return e}function i(){const{metadata:e,frontMatter:t,assets:n}=c();return a.createElement(l.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var d=n(4334),m=n(7524),u=n(3117),v=n(5999),b=n(2244);function p(e){const{previous:t,next:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,v.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&a.createElement(b.Z,(0,u.Z)({},t,{subLabel:a.createElement(v.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&a.createElement(b.Z,(0,u.Z)({},n,{subLabel:a.createElement(v.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}function h(){const{metadata:e}=c();return a.createElement(p,{previous:e.previous,next:e.next})}var f=n(2263),E=n(9960),g=n(143),L=n(5281),C=n(373),N=n(4477);const k={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(v.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(v.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function _(e){const t=k[e.versionMetadata.banner];return a.createElement(t,e)}function Z(e){let{versionLabel:t,to:n,onClick:l}=e;return a.createElement(v.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(E.Z,{to:n,onClick:l},a.createElement(v.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function x(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:l}}=(0,f.Z)(),{pluginId:o}=(0,g.gA)({failfast:!0}),{savePreferredVersionName:r}=(0,C.J)(o),{latestDocSuggestion:s,latestVersionSuggestion:c}=(0,g.Jo)(o),i=s??(m=c).docs.find((e=>e.id===m.mainDocId));var m;return a.createElement("div",{className:(0,d.Z)(t,L.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(_,{siteTitle:l,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(Z,{versionLabel:c.label,to:i.path,onClick:()=>r(c.name)})))}function T(e){let{className:t}=e;const n=(0,N.E)();return n.banner?a.createElement(x,{className:t,versionMetadata:n}):null}function H(e){let{className:t}=e;const n=(0,N.E)();return n.badge?a.createElement("span",{className:(0,d.Z)(t,L.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(v.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}function U(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return a.createElement(v.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:a.createElement("b",null,a.createElement("time",{dateTime:new Date(1e3*t).toISOString()},n))}}," on {date}")}function y(e){let{lastUpdatedBy:t}=e;return a.createElement(v.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:a.createElement("b",null,t)}}," by {user}")}function A(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:l}=e;return a.createElement("span",{className:L.k.common.lastUpdated},a.createElement(v.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?a.createElement(U,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:l?a.createElement(y,{lastUpdatedBy:l}):""}},"Last updated{atDate}{byUser}"),!1)}var w=n(4881),M=n(1526);const I={lastUpdated:"lastUpdated_vwxv"};function B(e){return a.createElement("div",{className:(0,d.Z)(L.k.docs.docFooterTagsRow,"row margin-bottom--sm")},a.createElement("div",{className:"col"},a.createElement(M.Z,e)))}function O(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:l,formattedLastUpdatedAt:o}=e;return a.createElement("div",{className:(0,d.Z)(L.k.docs.docFooterEditMetaRow,"row")},a.createElement("div",{className:"col"},t&&a.createElement(w.Z,{editUrl:t})),a.createElement("div",{className:(0,d.Z)("col",I.lastUpdated)},(n||l)&&a.createElement(A,{lastUpdatedAt:n,formattedLastUpdatedAt:o,lastUpdatedBy:l})))}function V(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:l,lastUpdatedBy:o,tags:r}=e,s=r.length>0,i=!!(t||n||o);return s||i?a.createElement("footer",{className:(0,d.Z)(L.k.docs.docFooter,"docusaurus-mt-lg")},s&&a.createElement(B,{tags:r}),i&&a.createElement(O,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:o,formattedLastUpdatedAt:l})):null}var P=n(6043),S=n(3743);const D={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function F(e){let{collapsed:t,...n}=e;return a.createElement("button",(0,u.Z)({type:"button"},n,{className:(0,d.Z)("clean-btn",D.tocCollapsibleButton,!t&&D.tocCollapsibleButtonExpanded,n.className)}),a.createElement(v.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const R={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function z(e){let{toc:t,className:n,minHeadingLevel:l,maxHeadingLevel:o}=e;const{collapsed:r,toggleCollapsed:s}=(0,P.u)({initialState:!0});return a.createElement("div",{className:(0,d.Z)(R.tocCollapsible,!r&&R.tocCollapsibleExpanded,n)},a.createElement(F,{collapsed:r,onClick:s}),a.createElement(P.z,{lazy:!0,className:R.tocCollapsibleContent,collapsed:r},a.createElement(S.Z,{toc:t,minHeadingLevel:l,maxHeadingLevel:o})))}const q={tocMobile:"tocMobile_ITEo"};function j(){const{toc:e,frontMatter:t}=c();return a.createElement(z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,d.Z)(L.k.docs.docTocMobile,q.tocMobile)})}var $=n(9407);function G(){const{toc:e,frontMatter:t}=c();return a.createElement($.Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:L.k.docs.docTocDesktop})}var J=n(2503),Y=n(1506);function K(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return a.createElement("div",{className:(0,d.Z)(L.k.docs.docMarkdown,"markdown")},n&&a.createElement("header",null,a.createElement(J.Z,{as:"h1"},n)),a.createElement(Y.Z,null,t))}var Q=n(2802),W=n(8596),X=n(4996);function ee(e){return a.createElement("svg",(0,u.Z)({viewBox:"0 0 24 24"},e),a.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const te={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function ne(){const e=(0,X.Z)("/");return a.createElement("li",{className:"breadcrumbs__item"},a.createElement(E.Z,{"aria-label":(0,v.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e},a.createElement(ee,{className:te.breadcrumbHomeIcon})))}const ae={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function le(e){let{children:t,href:n,isLast:l}=e;const o="breadcrumbs__link";return l?a.createElement("span",{className:o,itemProp:"name"},t):n?a.createElement(E.Z,{className:o,href:n,itemProp:"item"},a.createElement("span",{itemProp:"name"},t)):a.createElement("span",{className:o},t)}function oe(e){let{children:t,active:n,index:l,addMicrodata:o}=e;return a.createElement("li",(0,u.Z)({},o&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,d.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,a.createElement("meta",{itemProp:"position",content:String(l+1)}))}function re(){const e=(0,Q.s1)(),t=(0,W.Ns)();return e?a.createElement("nav",{className:(0,d.Z)(L.k.docs.docBreadcrumbs,ae.breadcrumbsContainer),"aria-label":(0,v.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},a.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(ne,null),e.map(((t,n)=>{const l=n===e.length-1;return a.createElement(oe,{key:n,active:l,index:n,addMicrodata:!!t.href},a.createElement(le,{href:t.href,isLast:l},t.label))})))):null}const se={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function ce(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.i)(),l=e.hide_table_of_contents,o=!l&&t.length>0;return{hidden:l,mobile:o?a.createElement(j,null):void 0,desktop:!o||"desktop"!==n&&"ssr"!==n?void 0:a.createElement(G,null)}}();return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,d.Z)("col",!n.hidden&&se.docItemCol)},a.createElement(T,null),a.createElement("div",{className:se.docItemContainer},a.createElement("article",null,a.createElement(re,null),a.createElement(H,null),n.mobile,a.createElement(K,null,t),a.createElement(V,null)),a.createElement(h,null))),n.desktop&&a.createElement("div",{className:"col col--3"},n.desktop))}function ie(e){const t=`docs-doc-id-${e.content.metadata.unversionedId}`,n=e.content;return a.createElement(s,{content:e.content},a.createElement(l.FG,{className:t},a.createElement(i,null),a.createElement(ce,null,a.createElement(n,null))))}},9407:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(3117),l=n(7294),o=n(4334),r=n(3743);const s={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},c="table-of-contents__link toc-highlight",i="table-of-contents__link--active";function d(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,o.Z)(s.tableOfContents,"thin-scrollbar",t)},l.createElement(r.Z,(0,a.Z)({},n,{linkClassName:c,linkActiveClassName:i})))}},3743:(e,t,n)=>{n.d(t,{Z:()=>b});var a=n(3117),l=n(7294),o=n(6668);function r(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function s(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=s({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function c(e){const t=e.getBoundingClientRect();return t.top===t.bottom?c(e.parentNode):t}function i(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>c(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function m(e){const t=(0,l.useRef)(void 0),n=d();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:o,maxHeadingLevel:r}=e;function s(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),s=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:o,maxHeadingLevel:r}),c=i(s,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===d)}))}return document.addEventListener("scroll",s),document.addEventListener("resize",s),s(),()=>{document.removeEventListener("scroll",s),document.removeEventListener("resize",s)}}),[e,n])}function u(e){let{toc:t,className:n,linkClassName:a,isChild:o}=e;return t.length?l.createElement("ul",{className:o?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(u,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const v=l.memo(u);function b(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:i,minHeadingLevel:d,maxHeadingLevel:u,...b}=e;const p=(0,o.L)(),h=d??p.tableOfContents.minHeadingLevel,f=u??p.tableOfContents.maxHeadingLevel,E=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,l.useMemo)((()=>s({toc:r(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:h,maxHeadingLevel:f});return m((0,l.useMemo)((()=>{if(c&&i)return{linkClassName:c,linkActiveClassName:i,minHeadingLevel:h,maxHeadingLevel:f}}),[c,i,h,f])),l.createElement(v,(0,a.Z)({toc:E,className:n,linkClassName:c},b))}},4477:(e,t,n)=>{n.d(t,{E:()=>s,q:()=>r});var a=n(7294),l=n(902);const o=a.createContext(null);function r(e){let{children:t,version:n}=e;return a.createElement(o.Provider,{value:n},t)}function s(){const e=(0,a.useContext)(o);if(null===e)throw new l.i6("DocsVersionProvider");return e}}}]); \ No newline at end of file diff --git a/en/assets/js/17896441.62d02e28.js b/en/assets/js/17896441.62d02e28.js new file mode 100755 index 000000000..dd68cc58f --- /dev/null +++ b/en/assets/js/17896441.62d02e28.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6752],{29752:(e,n,t)=>{t.r(n),t.d(n,{default:()=>ae});var s=t(11504),a=t(68900),i=t(91100),o=t(17624);const l=s.createContext(null);function c(e){let{children:n,content:t}=e;const a=function(e){return(0,s.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(t);return(0,o.jsx)(l.Provider,{value:a,children:n})}function r(){const e=(0,s.useContext)(l);if(null===e)throw new i.AH("DocProvider");return e}function d(){const{metadata:e,frontMatter:n,assets:t}=r();return(0,o.jsx)(a.U7,{title:e.title,description:e.description,keywords:n.keywords,image:t.image??n.image})}var u=t(34064),m=t(11432),h=t(84357),v=t(70308);function b(e){const{previous:n,next:t}=e;return(0,o.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,h.G)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[n&&(0,o.jsx)(v.c,{...n,subLabel:(0,o.jsx)(h.c,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),t&&(0,o.jsx)(v.c,{...t,subLabel:(0,o.jsx)(h.c,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}function x(){const{metadata:e}=r();return(0,o.jsx)(b,{previous:e.previous,next:e.next})}var f=t(28264),p=t(10867),g=t(62840),j=t(45864),C=t(94592),L=t(69920);const N={unreleased:function(e){let{siteTitle:n,versionMetadata:t}=e;return(0,o.jsx)(h.c,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:n,versionLabel:(0,o.jsx)("b",{children:t.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:n,versionMetadata:t}=e;return(0,o.jsx)(h.c,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:n,versionLabel:(0,o.jsx)("b",{children:t.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function _(e){const n=N[e.versionMetadata.banner];return(0,o.jsx)(n,{...e})}function k(e){let{versionLabel:n,to:t,onClick:s}=e;return(0,o.jsx)(h.c,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:n,latestVersionLink:(0,o.jsx)("b",{children:(0,o.jsx)(p.c,{to:t,onClick:s,children:(0,o.jsx)(h.c,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function H(e){let{className:n,versionMetadata:t}=e;const{siteConfig:{title:s}}=(0,f.c)(),{pluginId:a}=(0,g.UF)({failfast:!0}),{savePreferredVersionName:i}=(0,C.iy)(a),{latestDocSuggestion:l,latestVersionSuggestion:c}=(0,g.i8)(a),r=l??(d=c).docs.find((e=>e.id===d.mainDocId));var d;return(0,o.jsxs)("div",{className:(0,u.c)(n,j.W.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,o.jsx)("div",{children:(0,o.jsx)(_,{siteTitle:s,versionMetadata:t})}),(0,o.jsx)("div",{className:"margin-top--md",children:(0,o.jsx)(k,{versionLabel:c.label,to:r.path,onClick:()=>i(c.name)})})]})}function T(e){let{className:n}=e;const t=(0,L.E)();return t.banner?(0,o.jsx)(H,{className:n,versionMetadata:t}):null}function M(e){let{className:n}=e;const t=(0,L.E)();return t.badge?(0,o.jsx)("span",{className:(0,u.c)(n,j.W.docs.docVersionBadge,"badge badge--secondary"),children:(0,o.jsx)(h.c,{id:"theme.docs.versionBadge.label",values:{versionLabel:t.label},children:"Version: {versionLabel}"})}):null}var y=t(1096),E=t(43092);function I(){const{metadata:e}=r(),{editUrl:n,lastUpdatedAt:t,lastUpdatedBy:s,tags:a}=e,i=a.length>0,l=!!(n||t||s);return i||l?(0,o.jsxs)("footer",{className:(0,u.c)(j.W.docs.docFooter,"docusaurus-mt-lg"),children:[i&&(0,o.jsx)("div",{className:(0,u.c)("row margin-top--sm",j.W.docs.docFooterTagsRow),children:(0,o.jsx)("div",{className:"col",children:(0,o.jsx)(y.c,{tags:a})})}),l&&(0,o.jsx)(E.c,{className:(0,u.c)("margin-top--sm",j.W.docs.docFooterEditMetaRow),editUrl:n,lastUpdatedAt:t,lastUpdatedBy:s})]}):null}var w=t(58448),A=t(43088);const B={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function O(e){let{collapsed:n,...t}=e;return(0,o.jsx)("button",{type:"button",...t,className:(0,u.c)("clean-btn",B.tocCollapsibleButton,!n&&B.tocCollapsibleButtonExpanded,t.className),children:(0,o.jsx)(h.c,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const U={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function V(e){let{toc:n,className:t,minHeadingLevel:s,maxHeadingLevel:a}=e;const{collapsed:i,toggleCollapsed:l}=(0,w.a)({initialState:!0});return(0,o.jsxs)("div",{className:(0,u.c)(U.tocCollapsible,!i&&U.tocCollapsibleExpanded,t),children:[(0,o.jsx)(O,{collapsed:i,onClick:l}),(0,o.jsx)(w.U,{lazy:!0,className:U.tocCollapsibleContent,collapsed:i,children:(0,o.jsx)(A.c,{toc:n,minHeadingLevel:s,maxHeadingLevel:a})})]})}const S={tocMobile:"tocMobile_ITEo"};function P(){const{toc:e,frontMatter:n}=r();return(0,o.jsx)(V,{toc:e,minHeadingLevel:n.toc_min_heading_level,maxHeadingLevel:n.toc_max_heading_level,className:(0,u.c)(j.W.docs.docTocMobile,S.tocMobile)})}var F=t(75124);function W(){const{toc:e,frontMatter:n}=r();return(0,o.jsx)(F.c,{toc:e,minHeadingLevel:n.toc_min_heading_level,maxHeadingLevel:n.toc_max_heading_level,className:j.W.docs.docTocDesktop})}var R=t(56448),z=t(15216);function D(e){let{children:n}=e;const t=function(){const{metadata:e,frontMatter:n,contentTitle:t}=r();return n.hide_title||void 0!==t?null:e.title}();return(0,o.jsxs)("div",{className:(0,u.c)(j.W.docs.docMarkdown,"markdown"),children:[t&&(0,o.jsx)("header",{children:(0,o.jsx)(R.c,{as:"h1",children:t})}),(0,o.jsx)(z.c,{children:n})]})}var G=t(79940),q=t(13376),$=t(70964);function Y(e){return(0,o.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,o.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const Z={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function J(){const e=(0,$.c)("/");return(0,o.jsx)("li",{className:"breadcrumbs__item",children:(0,o.jsx)(p.c,{"aria-label":(0,h.G)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,o.jsx)(Y,{className:Z.breadcrumbHomeIcon})})})}const K={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function Q(e){let{children:n,href:t,isLast:s}=e;const a="breadcrumbs__link";return s?(0,o.jsx)("span",{className:a,itemProp:"name",children:n}):t?(0,o.jsx)(p.c,{className:a,href:t,itemProp:"item",children:(0,o.jsx)("span",{itemProp:"name",children:n})}):(0,o.jsx)("span",{className:a,children:n})}function X(e){let{children:n,active:t,index:s,addMicrodata:a}=e;return(0,o.jsxs)("li",{...a&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,u.c)("breadcrumbs__item",{"breadcrumbs__item--active":t}),children:[n,(0,o.jsx)("meta",{itemProp:"position",content:String(s+1)})]})}function ee(){const e=(0,G.js)(),n=(0,q.Y5)();return e?(0,o.jsx)("nav",{className:(0,u.c)(j.W.docs.docBreadcrumbs,K.breadcrumbsContainer),"aria-label":(0,h.G)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,o.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[n&&(0,o.jsx)(J,{}),e.map(((n,t)=>{const s=t===e.length-1,a="category"===n.type&&n.linkUnlisted?void 0:n.href;return(0,o.jsx)(X,{active:s,index:t,addMicrodata:!!a,children:(0,o.jsx)(Q,{href:a,isLast:s,children:n.label})},t)}))]})}):null}var ne=t(61528);const te={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function se(e){let{children:n}=e;const t=function(){const{frontMatter:e,toc:n}=r(),t=(0,m.U)(),s=e.hide_table_of_contents,a=!s&&n.length>0;return{hidden:s,mobile:a?(0,o.jsx)(P,{}):void 0,desktop:!a||"desktop"!==t&&"ssr"!==t?void 0:(0,o.jsx)(W,{})}}(),{metadata:{unlisted:s}}=r();return(0,o.jsxs)("div",{className:"row",children:[(0,o.jsxs)("div",{className:(0,u.c)("col",!t.hidden&&te.docItemCol),children:[s&&(0,o.jsx)(ne.c,{}),(0,o.jsx)(T,{}),(0,o.jsxs)("div",{className:te.docItemContainer,children:[(0,o.jsxs)("article",{children:[(0,o.jsx)(ee,{}),(0,o.jsx)(M,{}),t.mobile,(0,o.jsx)(D,{children:n}),(0,o.jsx)(I,{})]}),(0,o.jsx)(x,{})]})]}),t.desktop&&(0,o.jsx)("div",{className:"col col--3",children:t.desktop})]})}function ae(e){const n=`docs-doc-id-${e.content.metadata.id}`,t=e.content;return(0,o.jsx)(c,{content:e.content,children:(0,o.jsxs)(a.cr,{className:n,children:[(0,o.jsx)(d,{}),(0,o.jsx)(se,{children:(0,o.jsx)(t,{})})]})})}},75124:(e,n,t)=>{t.d(n,{c:()=>r});t(11504);var s=t(34064),a=t(43088);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var o=t(17624);const l="table-of-contents__link toc-highlight",c="table-of-contents__link--active";function r(e){let{className:n,...t}=e;return(0,o.jsx)("div",{className:(0,s.c)(i.tableOfContents,"thin-scrollbar",n),children:(0,o.jsx)(a.c,{...t,linkClassName:l,linkActiveClassName:c})})}},43088:(e,n,t)=>{t.d(n,{c:()=>b});var s=t(11504),a=t(21824);function i(e){const n=e.map((e=>({...e,parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const s=t.slice(2,e.level);e.parentIndex=Math.max(...s),t[e.level]=n}));const s=[];return n.forEach((e=>{const{parentIndex:t,...a}=e;t>=0?n[t].children.push(a):s.push(a)})),s}function o(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:s}=e;return n.flatMap((e=>{const n=o({toc:e.children,minHeadingLevel:t,maxHeadingLevel:s});return function(e){return e.level>=t&&e.level<=s}(e)?[{...e,children:n}]:n}))}function l(e){const n=e.getBoundingClientRect();return n.top===n.bottom?l(e.parentNode):n}function c(e,n){let{anchorTopOffset:t}=n;const s=e.find((e=>l(e).top>=t));if(s){return function(e){return e.top>0&&e.bottom{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function d(e){const n=(0,s.useRef)(void 0),t=r();(0,s.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:a,minHeadingLevel:i,maxHeadingLevel:o}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),l=function(e){let{minHeadingLevel:n,maxHeadingLevel:t}=e;const s=[];for(let a=n;a<=t;a+=1)s.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(s.join()))}({minHeadingLevel:i,maxHeadingLevel:o}),r=c(l,{anchorTopOffset:t.current}),d=e.find((e=>r&&r.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(a),e.classList.add(a),n.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,t])}var u=t(10867),m=t(17624);function h(e){let{toc:n,className:t,linkClassName:s,isChild:a}=e;return n.length?(0,m.jsx)("ul",{className:a?void 0:t,children:n.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.c,{to:`#${e.id}`,className:s??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(h,{isChild:!0,toc:e.children,className:t,linkClassName:s})]},e.id)))}):null}const v=s.memo(h);function b(e){let{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:c,minHeadingLevel:r,maxHeadingLevel:u,...h}=e;const b=(0,a.y)(),x=r??b.tableOfContents.minHeadingLevel,f=u??b.tableOfContents.maxHeadingLevel,p=function(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return(0,s.useMemo)((()=>o({toc:i(n),minHeadingLevel:t,maxHeadingLevel:a})),[n,t,a])}({toc:n,minHeadingLevel:x,maxHeadingLevel:f});return d((0,s.useMemo)((()=>{if(l&&c)return{linkClassName:l,linkActiveClassName:c,minHeadingLevel:x,maxHeadingLevel:f}}),[l,c,x,f])),(0,m.jsx)(v,{toc:p,className:t,linkClassName:l,...h})}},61528:(e,n,t)=>{t.d(n,{c:()=>h});t(11504);var s=t(34064),a=t(84357),i=t(56952),o=t(17624);function l(){return(0,o.jsx)(a.c,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function c(){return(0,o.jsx)(a.c,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function r(){return(0,o.jsx)(i.c,{children:(0,o.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=t(45864),u=t(30304);function m(e){let{className:n}=e;return(0,o.jsx)(u.c,{type:"caution",title:(0,o.jsx)(l,{}),className:(0,s.c)(n,d.W.common.unlistedBanner),children:(0,o.jsx)(c,{})})}function h(e){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r,{}),(0,o.jsx)(m,{...e})]})}}}]); \ No newline at end of file diff --git a/en/assets/js/1be78505.0a057c22.js b/en/assets/js/1be78505.0a057c22.js deleted file mode 100755 index 73a051986..000000000 --- a/en/assets/js/1be78505.0a057c22.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9514,4972],{9963:(e,t,n)=>{n.r(t),n.d(t,{default:()=>ge});var a=n(7294),o=n(4334),l=n(1944),r=n(5281),c=n(3320),i=n(2802),s=n(4477),d=n(1116),m=n(7961),u=n(5999),b=n(2466),p=n(5936);const h={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};function E(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),l=(0,a.useRef)(!1),{startScroll:r,cancelScroll:c}=(0,b.Ct)();return(0,b.RF)(((e,n)=>{let{scrollY:a}=e;const r=n?.scrollY;r&&(l.current?l.current=!1:a>=r?(c(),o(!1)):a{e.location.hash&&(l.current=!0,o(!1))})),{shown:n,scrollToTop:()=>r(0)}}({threshold:300});return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.Z)("clean-btn",r.k.common.backToTopButton,h.backToTopButton,e&&h.backToTopButtonShow),type:"button",onClick:t})}var f=n(1442),g=n(6550),v=n(7524),k=n(6668),_=n(1327),C=n(3117);function S(e){return a.createElement("svg",(0,C.Z)({width:"20",height:"20","aria-hidden":"true"},e),a.createElement("g",{fill:"#7a7a7a"},a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))}const I={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function N(e){let{onClick:t}=e;return a.createElement("button",{type:"button",title:(0,u.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.Z)("button button--secondary button--outline",I.collapseSidebarButton),onClick:t},a.createElement(S,{className:I.collapseSidebarButtonIcon}))}var T=n(9689),x=n(902);const Z=Symbol("EmptyContext"),B=a.createContext(Z);function w(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),l=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return a.createElement(B.Provider,{value:l},t)}var y=n(6043),L=n(8596),A=n(9960),F=n(2389);function M(e){let{categoryLabel:t,onClick:n}=e;return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel",message:"Toggle the collapsible sidebar category '{label}'",description:"The ARIA label to toggle the collapsible sidebar category"},{label:t}),type:"button",className:"clean-btn menu__caret",onClick:n})}function H(e){let{item:t,onItemClick:n,activePath:l,level:c,index:s,...d}=e;const{items:m,label:u,collapsible:b,className:p,href:h}=t,{docs:{sidebar:{autoCollapseCategories:E}}}=(0,k.L)(),f=function(e){const t=(0,F.Z)();return(0,a.useMemo)((()=>e.href?e.href:!t&&e.collapsible?(0,i.Wl)(e):void 0),[e,t])}(t),g=(0,i._F)(t,l),v=(0,L.Mg)(h,l),{collapsed:_,setCollapsed:S}=(0,y.u)({initialState:()=>!!b&&(!g&&t.collapsed)}),{expandedItem:I,setExpandedItem:N}=function(){const e=(0,a.useContext)(B);if(e===Z)throw new x.i6("DocSidebarItemsExpandedStateProvider");return e}(),T=function(e){void 0===e&&(e=!_),N(e?null:s),S(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const l=(0,x.D9)(t);(0,a.useEffect)((()=>{t&&!l&&n&&o(!1)}),[t,l,n,o])}({isActive:g,collapsed:_,updateCollapsed:T}),(0,a.useEffect)((()=>{b&&null!=I&&I!==s&&E&&S(!0)}),[b,I,s,S,E]),a.createElement("li",{className:(0,o.Z)(r.k.docs.docSidebarItemCategory,r.k.docs.docSidebarItemCategoryLevel(c),"menu__list-item",{"menu__list-item--collapsed":_},p)},a.createElement("div",{className:(0,o.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v})},a.createElement(A.Z,(0,C.Z)({className:(0,o.Z)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!h&&b,"menu__link--active":g}),onClick:b?e=>{n?.(t),h?T(!1):(e.preventDefault(),T())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":b?!_:void 0,href:b?f??"#":f},d),u),h&&b&&a.createElement(M,{categoryLabel:u,onClick:e=>{e.preventDefault(),T()}})),a.createElement(y.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:_},a.createElement(j,{items:m,tabIndex:_?-1:0,onItemClick:n,activePath:l,level:c+1})))}var P=n(3919),W=n(9471);const D={menuExternalLink:"menuExternalLink_NmtK"};function R(e){let{item:t,onItemClick:n,activePath:l,level:c,index:s,...d}=e;const{href:m,label:u,className:b,autoAddBaseUrl:p}=t,h=(0,i._F)(t,l),E=(0,P.Z)(m);return a.createElement("li",{className:(0,o.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(c),"menu__list-item",b),key:u},a.createElement(A.Z,(0,C.Z)({className:(0,o.Z)("menu__link",!E&&D.menuExternalLink,{"menu__link--active":h}),autoAddBaseUrl:p,"aria-current":h?"page":void 0,to:m},E&&{onClick:n?()=>n(t):void 0},d),u,!E&&a.createElement(W.Z,null)))}const V={menuHtmlItem:"menuHtmlItem_M9Kj"};function z(e){let{item:t,level:n,index:l}=e;const{value:c,defaultStyle:i,className:s}=t;return a.createElement("li",{className:(0,o.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(n),i&&[V.menuHtmlItem,"menu__list-item"],s),key:l,dangerouslySetInnerHTML:{__html:c}})}function U(e){let{item:t,...n}=e;switch(t.type){case"category":return a.createElement(H,(0,C.Z)({item:t},n));case"html":return a.createElement(z,(0,C.Z)({item:t},n));default:return a.createElement(R,(0,C.Z)({item:t},n))}}function K(e){let{items:t,...n}=e;return a.createElement(w,null,t.map(((e,t)=>a.createElement(U,(0,C.Z)({key:t,item:e,index:t},n)))))}const j=(0,a.memo)(K),q={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function G(e){let{path:t,sidebar:n,className:l}=e;const c=function(){const{isActive:e}=(0,T.nT)(),[t,n]=(0,a.useState)(e);return(0,b.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return a.createElement("nav",{"aria-label":(0,u.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.Z)("menu thin-scrollbar",q.menu,c&&q.menuWithAnnouncementBar,l)},a.createElement("ul",{className:(0,o.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(j,{items:n,activePath:t,level:1})))}const Y="sidebar_njMd",O="sidebarWithHideableNavbar_wUlq",X="sidebarHidden_VK0M",J="sidebarLogo_isFc";function Q(e){let{path:t,sidebar:n,onCollapse:l,isHidden:r}=e;const{navbar:{hideOnScroll:c},docs:{sidebar:{hideable:i}}}=(0,k.L)();return a.createElement("div",{className:(0,o.Z)(Y,c&&O,r&&X)},c&&a.createElement(_.Z,{tabIndex:-1,className:J}),a.createElement(G,{path:t,sidebar:n}),i&&a.createElement(N,{onClick:l}))}const $=a.memo(Q);var ee=n(3102),te=n(2961);const ne=e=>{let{sidebar:t,path:n}=e;const l=(0,te.e)();return a.createElement("ul",{className:(0,o.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(j,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&l.toggle(),"link"===e.type&&l.toggle()},level:1}))};function ae(e){return a.createElement(ee.Zo,{component:ne,props:e})}const oe=a.memo(ae);function le(e){const t=(0,v.i)(),n="desktop"===t||"ssr"===t,o="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement($,e),o&&a.createElement(oe,e))}const re={expandButton:"expandButton_m80_",expandButtonIcon:"expandButtonIcon_BlDH"};function ce(e){let{toggleSidebar:t}=e;return a.createElement("div",{className:re.expandButton,title:(0,u.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t},a.createElement(S,{className:re.expandButtonIcon}))}const ie={docSidebarContainer:"docSidebarContainer_b6E3",docSidebarContainerHidden:"docSidebarContainerHidden_b3ry",sidebarViewport:"sidebarViewport_Xe31"};function se(e){let{children:t}=e;const n=(0,d.V)();return a.createElement(a.Fragment,{key:n?.name??"noSidebar"},t)}function de(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:l}=e;const{pathname:c}=(0,g.TH)(),[i,s]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{i&&s(!1),!i&&(0,f.n)()&&s(!0),l((e=>!e))}),[l,i]);return a.createElement("aside",{className:(0,o.Z)(r.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&s(!0)}},a.createElement(se,null,a.createElement("div",{className:(0,o.Z)(ie.sidebarViewport,i&&ie.sidebarViewportHidden)},a.createElement(le,{sidebar:t,path:c,onCollapse:d,isHidden:i}),i&&a.createElement(ce,{toggleSidebar:d}))))}const me={docMainContainer:"docMainContainer_gTbr",docMainContainerEnhanced:"docMainContainerEnhanced_Uz_u",docItemWrapperEnhanced:"docItemWrapperEnhanced_czyv"};function ue(e){let{hiddenSidebarContainer:t,children:n}=e;const l=(0,d.V)();return a.createElement("main",{className:(0,o.Z)(me.docMainContainer,(t||!l)&&me.docMainContainerEnhanced)},a.createElement("div",{className:(0,o.Z)("container padding-top--md padding-bottom--lg",me.docItemWrapper,t&&me.docItemWrapperEnhanced)},n))}const be={docPage:"docPage__5DB",docsWrapper:"docsWrapper_BCFX","themedComponent--light":"themedComponent--light_NU7w"};function pe(e){let{children:t}=e;const n=(0,d.V)(),[o,l]=(0,a.useState)(!1);return a.createElement(m.Z,{wrapperClassName:be.docsWrapper},a.createElement(E,null),a.createElement("div",{className:be.docPage},n&&a.createElement(de,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:l}),a.createElement(ue,{hiddenSidebarContainer:o},t)))}var he=n(4972),Ee=n(197);function fe(e){const{versionMetadata:t}=e;return a.createElement(a.Fragment,null,a.createElement(Ee.Z,{version:t.version,tag:(0,c.os)(t.pluginId,t.version)}),a.createElement(l.d,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function ge(e){const{versionMetadata:t}=e,n=(0,i.hI)(e);if(!n)return a.createElement(he.default,null);const{docElement:c,sidebarName:m,sidebarItems:u}=n;return a.createElement(a.Fragment,null,a.createElement(fe,e),a.createElement(l.FG,{className:(0,o.Z)(r.k.wrapper.docsPages,r.k.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.q,{version:t},a.createElement(d.b,{name:m,items:u},a.createElement(pe,null,c)))))}},4972:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});var a=n(7294),o=n(5999),l=n(1944),r=n(7961);function c(){return a.createElement(a.Fragment,null,a.createElement(l.d,{title:(0,o.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}},4477:(e,t,n)=>{n.d(t,{E:()=>c,q:()=>r});var a=n(7294),o=n(902);const l=a.createContext(null);function r(e){let{children:t,version:n}=e;return a.createElement(l.Provider,{value:n},t)}function c(){const e=(0,a.useContext)(l);if(null===e)throw new o.i6("DocsVersionProvider");return e}}}]); \ No newline at end of file diff --git a/en/assets/js/21c04bfb.42f474c7.js b/en/assets/js/21c04bfb.42f474c7.js new file mode 100755 index 000000000..6f9d5a70c --- /dev/null +++ b/en/assets/js/21c04bfb.42f474c7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8968],{93232:(e,a,i)=>{i.r(a),i.d(a,{assets:()=>d,contentTitle:()=>c,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>t});var n=i(17624),o=i(95788);const r={id:"pacote",title:"Configura\xe7\xe3o da Arduino IDE",slug:"/franzininho-diy/pacote",description:"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho"},c=void 0,s={id:"FranzininhoDIY/exemplos-arduino/pacote",title:"Configura\xe7\xe3o da Arduino IDE",description:"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho",source:"@site/docs/FranzininhoDIY/exemplos-arduino/pacote.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/pacote",permalink:"/en/docs/franzininho-diy/pacote",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/pacote.md",tags:[],version:"current",frontMatter:{id:"pacote",title:"Configura\xe7\xe3o da Arduino IDE",slug:"/franzininho-diy/pacote",description:"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho"},sidebar:"docs",previous:{title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",permalink:"/en/docs/franzininho-diy/drivers-micronucleus"},next:{title:"Entradas e Sa\xeddas Digitais",permalink:"/en/docs/franzininho-diy/entradas-saidas-digitais"}},d={},t=[{value:"Configura\xe7\xe3o da Arduino IDE",id:"configura\xe7\xe3o-da-arduino-ide",level:2},{value:"Upload de c\xf3digo",id:"upload-de-c\xf3digo",level:2},{value:"Resolvendo problemas de configura\xe7\xe3o e upload",id:"resolvendo-problemas-de-configura\xe7\xe3o-e-upload",level:2}];function l(e){const a={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",p:"p",strong:"strong",...(0,o.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(a.p,{children:["Para programa\xe7\xe3o da Franzininho DIY recomendamos o uso do pacote ATtinyCore, mantido pelo Spence Konde, ",(0,n.jsx)(a.a,{href:"https://github.com/SpenceKonde/ATTinyCore",children:"aqui"}),"."]}),"\n",(0,n.jsx)(a.admonition,{type:"tip",children:(0,n.jsx)(a.p,{children:"Em breve teremos um pacote Franzininho que facilitar\xe1 o processo de configura\xe7\xe3o da IDE. Fique ligado(a) nas atualiza\xe7\xf5es."})}),"\n",(0,n.jsx)(a.h2,{id:"configura\xe7\xe3o-da-arduino-ide",children:"Configura\xe7\xe3o da Arduino IDE"}),"\n",(0,n.jsxs)(a.p,{children:["Ap\xf3s instalar a Arduino IDE(",(0,n.jsx)(a.a,{href:"https://www.arduino.cc/en/software",children:"baixe aqui"}),"), acesse **Arquivo -> Prefer\xeancias ** e cole a URL a seguir em ",(0,n.jsx)(a.strong,{children:"URL Adicionais Para Gerenciadores de Placas"}),":"]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.code,{children:"http://drazzy.com/package_drazzy.com_index.json"})}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"URL ATTINY CORE",src:i(22324).c+"",width:"924",height:"620"})}),"\n",(0,n.jsxs)(a.p,{children:["Agora, abra o Gerenciador de placas, acesse: ",(0,n.jsx)(a.strong,{children:"Ferramentas -> Placa -> Gerenciador de placas"})," e procure por ",(0,n.jsx)(a.strong,{children:"ATTinyCore"}),". Ap\xf3s encontrar o pacote clique em instalar e aguarde a instala\xe7\xe3o:"]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Instala\xe7\xe3o do Pacote",src:i(4436).c+"",width:"884",height:"511"})}),"\n",(0,n.jsxs)(a.p,{children:["Pronto. agora vamos configurar a placa. Selecione a placa ",(0,n.jsx)(a.strong,{children:"ATTiny85 (Micronucleus/Digispark)"}),":"]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Selecionando a Placa",src:i(18128).c+"",width:"1279",height:"1051"})}),"\n",(0,n.jsx)(a.p,{children:"As demais configura\xe7\xf5es devem ficar da seguinte forma:"}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Configura\xe7\xf5es",src:i(89212).c+"",width:"1003",height:"773"})}),"\n",(0,n.jsx)(a.p,{children:"Agora vamos carregar um Sketch para verificarmos se est\xe1 tudo certo e entendermos o processo Upload para a placa."}),"\n",(0,n.jsx)(a.h2,{id:"upload-de-c\xf3digo",children:"Upload de c\xf3digo"}),"\n",(0,n.jsxs)(a.p,{children:["Abra o exemplo Blink. Acesse ",(0,n.jsx)(a.strong,{children:"Arquivo -> Exemplos -> 01.Basics -> Blink"}),":"]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Blink",src:i(14860).c+"",width:"1298",height:"1049"})}),"\n",(0,n.jsxs)(a.p,{children:["Agora vamos carregar o Sketch para a placa. Clique no bot\xe3o ",(0,n.jsx)(a.strong,{children:"Carregar"}),":"]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Bot\xe3o upload",src:i(82703).c+"",width:"614",height:"137"})}),"\n",(0,n.jsx)(a.p,{children:"Ap\xf3s a compila\xe7\xe3o ser\xe1 exibida a seguinte mensagem:"}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"MEnsagem",src:i(4248).c+"",width:"1278",height:"344"})}),"\n",(0,n.jsx)(a.p,{children:"Conecte a placa na porta USB. Caso a placa ja esteja conectada pressione o bot\xe3o de reset ao ver essa mensagem. O c\xf3digo ser\xe1 carregado para a placa:"}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Carregando o c\xf3digo",src:i(51448).c+"",width:"1288",height:"508"})}),"\n",(0,n.jsx)(a.p,{children:"Ap\xf3s o upload o LED amarelo da placa passar\xe1 a piscar."}),"\n",(0,n.jsx)(a.p,{children:"Se voc\xea chegou at\xe9 aqui e n\xe3o teve nenhum problema, parab\xe9ns! Voc\xea j\xe1 pode testar os exemplos aqui na documenta\xe7\xe3o ou fazer os seus pr\xf3prios projetos."}),"\n",(0,n.jsx)(a.p,{children:"Caso tenha algum problema verifique se consegue resolver com as solu\xe7\xf5es a seguir."}),"\n",(0,n.jsx)(a.h2,{id:"resolvendo-problemas-de-configura\xe7\xe3o-e-upload",children:"Resolvendo problemas de configura\xe7\xe3o e upload"}),"\n",(0,n.jsx)(a.admonition,{type:"warning",children:(0,n.jsx)(a.p,{children:"Em breve"})})]})}function p(e={}){const{wrapper:a}={...(0,o.MN)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},95788:(e,a,i)=>{i.d(a,{MN:()=>t});var n=i(11504);function o(e,a,i){return a in e?Object.defineProperty(e,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[a]=i,e}function r(e,a){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),i.push.apply(i,n)}return i}function c(e){for(var a=1;a=0||(o[i]=e[i]);return o}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(o[i]=e[i])}return o}var d=n.createContext({}),t=function(e){var a=n.useContext(d),i=a;return e&&(i="function"==typeof e?e(a):c(c({},a),e)),i},l={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},p=n.forwardRef((function(e,a){var i=e.components,o=e.mdxType,r=e.originalType,d=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),g=t(i),u=o,R=g["".concat(d,".").concat(u)]||g[u]||l[u]||r;return i?n.createElement(R,c(c({ref:a},p),{},{components:i})):n.createElement(R,c({ref:a},p))}));p.displayName="MDXCreateElement"},14860:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/blink-c2640cc259a421e9d06aa92307d788a5.png"},51448:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/carregando-c0711ebcf0c47f8fce010a68a84a1cd2.png"},89212:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/configuracoes-f556517325fcec046cac4c1f856f4d1d.png"},4436:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/instalacao-3eca2c3f3a57a5d014908f365c885b15.png"},4248:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/mensagem-ba029da44dd3c0bae107dfb4cbafefb5.png"},18128:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/placa-4f7ad0a641424b79a3582cf2da447822.png"},22324:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/preferencias-9f46ca3123e37b55ac190aa0e68c18ab.png"},82703:(e,a,i)=>{i.d(a,{c:()=>n});const n="data:image/png;base64,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"}}]); \ No newline at end of file diff --git a/en/assets/js/21c04bfb.61510ba7.js b/en/assets/js/21c04bfb.61510ba7.js deleted file mode 100755 index bed87e78c..000000000 --- a/en/assets/js/21c04bfb.61510ba7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5634],{3905:(e,a,i)=>{i.d(a,{Zo:()=>p,kt:()=>R});var o=i(7294);function n(e,a,i){return a in e?Object.defineProperty(e,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[a]=i,e}function r(e,a){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);a&&(o=o.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),i.push.apply(i,o)}return i}function t(e){for(var a=1;a=0||(n[i]=e[i]);return n}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var c=o.createContext({}),s=function(e){var a=o.useContext(c),i=a;return e&&(i="function"==typeof e?e(a):t(t({},a),e)),i},p=function(e){var a=s(e.components);return o.createElement(c.Provider,{value:a},e.children)},l="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return o.createElement(o.Fragment,{},a)}},g=o.forwardRef((function(e,a){var i=e.components,n=e.mdxType,r=e.originalType,c=e.parentName,p=d(e,["components","mdxType","originalType","parentName"]),l=s(i),g=n,R=l["".concat(c,".").concat(g)]||l[g]||u[g]||r;return i?o.createElement(R,t(t({ref:a},p),{},{components:i})):o.createElement(R,t({ref:a},p))}));function R(e,a){var i=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var r=i.length,t=new Array(r);t[0]=g;var d={};for(var c in a)hasOwnProperty.call(a,c)&&(d[c]=a[c]);d.originalType=e,d[l]="string"==typeof e?e:n,t[1]=d;for(var s=2;s{i.r(a),i.d(a,{assets:()=>c,contentTitle:()=>t,default:()=>u,frontMatter:()=>r,metadata:()=>d,toc:()=>s});var o=i(3117),n=(i(7294),i(3905));const r={id:"pacote",title:"Configura\xe7\xe3o da Arduino IDE",slug:"/franzininho-diy/pacote",description:"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho"},t=void 0,d={unversionedId:"FranzininhoDIY/exemplos-arduino/pacote",id:"FranzininhoDIY/exemplos-arduino/pacote",title:"Configura\xe7\xe3o da Arduino IDE",description:"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho",source:"@site/docs/FranzininhoDIY/exemplos-arduino/pacote.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/pacote",permalink:"/en/docs/franzininho-diy/pacote",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/pacote.md",tags:[],version:"current",frontMatter:{id:"pacote",title:"Configura\xe7\xe3o da Arduino IDE",slug:"/franzininho-diy/pacote",description:"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho"},sidebar:"docs",previous:{title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",permalink:"/en/docs/franzininho-diy/drivers-micronucleus"},next:{title:"Entradas e Sa\xeddas Digitais",permalink:"/en/docs/franzininho-diy/entradas-saidas-digitais"}},c={},s=[{value:"Configura\xe7\xe3o da Arduino IDE",id:"configura\xe7\xe3o-da-arduino-ide",level:2},{value:"Upload de c\xf3digo",id:"upload-de-c\xf3digo",level:2},{value:"Resolvendo problemas de configura\xe7\xe3o e upload",id:"resolvendo-problemas-de-configura\xe7\xe3o-e-upload",level:2}],p={toc:s},l="wrapper";function u(e){let{components:a,...r}=e;return(0,n.kt)(l,(0,o.Z)({},p,r,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Para programa\xe7\xe3o da Franzininho DIY recomendamos o uso do pacote ATtinyCore, mantido pelo Spence Konde, ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/SpenceKonde/ATTinyCore"},"aqui"),"."),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"Em breve teremos um pacote Franzininho que facilitar\xe1 o processo de configura\xe7\xe3o da IDE. Fique ligado(a) nas atualiza\xe7\xf5es.")),(0,n.kt)("h2",{id:"configura\xe7\xe3o-da-arduino-ide"},"Configura\xe7\xe3o da Arduino IDE"),(0,n.kt)("p",null,"Ap\xf3s instalar a Arduino IDE(",(0,n.kt)("a",{parentName:"p",href:"https://www.arduino.cc/en/software"},"baixe aqui"),"), acesse ",(0,n.kt)("strong",{parentName:"p"},"Arquivo -> Prefer\xeancias ")," e cole a URL a seguir em ",(0,n.kt)("strong",{parentName:"p"},"URL Adicionais Para Gerenciadores de Placas"),":"),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"http://drazzy.com/package_drazzy.com_index.json")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"URL ATTINY CORE",src:i(1239).Z,width:"924",height:"620"})),(0,n.kt)("p",null,"Agora, abra o Gerenciador de placas, acesse: ",(0,n.kt)("strong",{parentName:"p"},"Ferramentas -> Placa -> Gerenciador de placas")," e procure por ",(0,n.kt)("strong",{parentName:"p"},"ATTinyCore"),". Ap\xf3s encontrar o pacote clique em instalar e aguarde a instala\xe7\xe3o:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Instala\xe7\xe3o do Pacote",src:i(994).Z,width:"884",height:"511"})),(0,n.kt)("p",null,"Pronto. agora vamos configurar a placa. Selecione a placa ",(0,n.kt)("strong",{parentName:"p"},"ATTiny85 (Micronucleus/Digispark)"),":"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Selecionando a Placa",src:i(1776).Z,width:"1279",height:"1051"})),(0,n.kt)("p",null,"As demais configura\xe7\xf5es devem ficar da seguinte forma:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Configura\xe7\xf5es",src:i(7292).Z,width:"1003",height:"773"})),(0,n.kt)("p",null,"Agora vamos carregar um Sketch para verificarmos se est\xe1 tudo certo e entendermos o processo Upload para a placa."),(0,n.kt)("h2",{id:"upload-de-c\xf3digo"},"Upload de c\xf3digo"),(0,n.kt)("p",null,"Abra o exemplo Blink. Acesse ",(0,n.kt)("strong",{parentName:"p"},"Arquivo -> Exemplos -> 01.Basics -> Blink"),":"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Blink",src:i(5508).Z,width:"1298",height:"1049"})),(0,n.kt)("p",null,"Agora vamos carregar o Sketch para a placa. Clique no bot\xe3o ",(0,n.kt)("strong",{parentName:"p"},"Carregar"),":"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Bot\xe3o upload",src:i(8836).Z,width:"614",height:"137"})),(0,n.kt)("p",null,"Ap\xf3s a compila\xe7\xe3o ser\xe1 exibida a seguinte mensagem:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"MEnsagem",src:i(6957).Z,width:"1278",height:"344"})),(0,n.kt)("p",null,"Conecte a placa na porta USB. Caso a placa ja esteja conectada pressione o bot\xe3o de reset ao ver essa mensagem. O c\xf3digo ser\xe1 carregado para a placa:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Carregando o c\xf3digo",src:i(6849).Z,width:"1288",height:"508"})),(0,n.kt)("p",null,"Ap\xf3s o upload o LED amarelo da placa passar\xe1 a piscar. "),(0,n.kt)("p",null,"Se voc\xea chegou at\xe9 aqui e n\xe3o teve nenhum problema, parab\xe9ns! Voc\xea j\xe1 pode testar os exemplos aqui na documenta\xe7\xe3o ou fazer os seus pr\xf3prios projetos."),(0,n.kt)("p",null,"Caso tenha algum problema verifique se consegue resolver com as solu\xe7\xf5es a seguir."),(0,n.kt)("h2",{id:"resolvendo-problemas-de-configura\xe7\xe3o-e-upload"},"Resolvendo problemas de configura\xe7\xe3o e upload"),(0,n.kt)("admonition",{type:"warning"},(0,n.kt)("p",{parentName:"admonition"},"Em breve")))}u.isMDXComponent=!0},5508:(e,a,i)=>{i.d(a,{Z:()=>o});const o=i.p+"assets/images/blink-c2640cc259a421e9d06aa92307d788a5.png"},6849:(e,a,i)=>{i.d(a,{Z:()=>o});const o=i.p+"assets/images/carregando-c0711ebcf0c47f8fce010a68a84a1cd2.png"},7292:(e,a,i)=>{i.d(a,{Z:()=>o});const o=i.p+"assets/images/configuracoes-f556517325fcec046cac4c1f856f4d1d.png"},994:(e,a,i)=>{i.d(a,{Z:()=>o});const o=i.p+"assets/images/instalacao-3eca2c3f3a57a5d014908f365c885b15.png"},6957:(e,a,i)=>{i.d(a,{Z:()=>o});const o=i.p+"assets/images/mensagem-ba029da44dd3c0bae107dfb4cbafefb5.png"},1776:(e,a,i)=>{i.d(a,{Z:()=>o});const o=i.p+"assets/images/placa-4f7ad0a641424b79a3582cf2da447822.png"},1239:(e,a,i)=>{i.d(a,{Z:()=>o});const o=i.p+"assets/images/preferencias-9f46ca3123e37b55ac190aa0e68c18ab.png"},8836:(e,a,i)=>{i.d(a,{Z:()=>o});const o="data:image/png;base64,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"}}]); \ No newline at end of file diff --git a/en/assets/js/2220.7666931e.js b/en/assets/js/2220.7666931e.js new file mode 100755 index 000000000..52c664cba --- /dev/null +++ b/en/assets/js/2220.7666931e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2220],{9452:(e,t,s)=>{s.d(t,{c:()=>p});var a=s(11504),r=s(34064),n=s(99012),l=s(11432),i=s(10867),o=s(84357),c=s(55592),m=s(13376);function d(e){const{pathname:t}=(0,c.IT)();return(0,a.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,m.Sc)(e.permalink,t))}(e,t)))),[e,t])}const u={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};var h=s(17624);function g(e){let{sidebar:t}=e;const s=d(t.items);return(0,h.jsx)("aside",{className:"col col--3",children:(0,h.jsxs)("nav",{className:(0,r.c)(u.sidebar,"thin-scrollbar"),"aria-label":(0,o.G)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,h.jsx)("div",{className:(0,r.c)(u.sidebarItemTitle,"margin-bottom--md"),children:t.title}),(0,h.jsx)("ul",{className:(0,r.c)(u.sidebarItemList,"clean-list"),children:s.map((e=>(0,h.jsx)("li",{className:u.sidebarItem,children:(0,h.jsx)(i.c,{isNavLink:!0,to:e.permalink,className:u.sidebarItemLink,activeClassName:u.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var x=s(45168);function f(e){let{sidebar:t}=e;const s=d(t.items);return(0,h.jsx)("ul",{className:"menu__list",children:s.map((e=>(0,h.jsx)("li",{className:"menu__list-item",children:(0,h.jsx)(i.c,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function j(e){return(0,h.jsx)(x.Mx,{component:f,props:e})}function b(e){let{sidebar:t}=e;const s=(0,l.U)();return t?.items.length?"mobile"===s?(0,h.jsx)(j,{sidebar:t}):(0,h.jsx)(g,{sidebar:t}):null}function p(e){const{sidebar:t,toc:s,children:a,...l}=e,i=t&&t.items.length>0;return(0,h.jsx)(n.c,{...l,children:(0,h.jsx)("div",{className:"container margin-vert--lg",children:(0,h.jsxs)("div",{className:"row",children:[(0,h.jsx)(b,{sidebar:t}),(0,h.jsx)("main",{className:(0,r.c)("col",{"col--7":i,"col--9 col--offset-1":!i}),children:a}),s&&(0,h.jsx)("div",{className:"col col--2",children:s})]})})})}},47590:(e,t,s)=>{s.d(t,{c:()=>M});s(11504);var a=s(34064),r=s(83152),n=s(17624);function l(e){let{children:t,className:s}=e;return(0,n.jsx)("article",{className:s,children:t})}var i=s(10867);const o={title:"title_f1Hy"};function c(e){let{className:t}=e;const{metadata:s,isBlogPostPage:l}=(0,r.g)(),{permalink:c,title:m}=s,d=l?"h1":"h2";return(0,n.jsx)(d,{className:(0,a.c)(o.title,t),children:l?m:(0,n.jsx)(i.c,{to:c,children:m})})}var m=s(84357),d=s(95944),u=s(93852);const h={container:"container_mt6G"};function g(e){let{readingTime:t}=e;const s=function(){const{selectMessage:e}=(0,d.A)();return t=>{const s=Math.ceil(t);return e(s,(0,m.G)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:s}))}}();return(0,n.jsx)(n.Fragment,{children:s(t)})}function x(e){let{date:t,formattedDate:s}=e;return(0,n.jsx)("time",{dateTime:t,children:s})}function f(){return(0,n.jsx)(n.Fragment,{children:" \xb7 "})}function j(e){let{className:t}=e;const{metadata:s}=(0,r.g)(),{date:l,readingTime:i}=s,o=(0,u.y)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,n.jsxs)("div",{className:(0,a.c)(h.container,"margin-vert--md",t),children:[(0,n.jsx)(x,{date:l,formattedDate:(c=l,o.format(new Date(c)))}),void 0!==i&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(f,{}),(0,n.jsx)(g,{readingTime:i})]})]});var c}function b(e){return e.href?(0,n.jsx)(i.c,{...e}):(0,n.jsx)(n.Fragment,{children:e.children})}function p(e){let{author:t,className:s}=e;const{name:r,title:l,url:i,imageURL:o,email:c}=t,m=i||c&&`mailto:${c}`||void 0;return(0,n.jsxs)("div",{className:(0,a.c)("avatar margin-bottom--sm",s),children:[o&&(0,n.jsx)(b,{href:m,className:"avatar__photo-link",children:(0,n.jsx)("img",{className:"avatar__photo",src:o,alt:r})}),r&&(0,n.jsxs)("div",{className:"avatar__intro",children:[(0,n.jsx)("div",{className:"avatar__name",children:(0,n.jsx)(b,{href:m,children:(0,n.jsx)("span",{children:r})})}),l&&(0,n.jsx)("small",{className:"avatar__subtitle",children:l})]})]})}const v={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function N(e){let{className:t}=e;const{metadata:{authors:s},assets:l}=(0,r.g)();if(0===s.length)return null;const i=s.every((e=>{let{name:t}=e;return!t}));return(0,n.jsx)("div",{className:(0,a.c)("margin-top--md margin-bottom--sm",i?v.imageOnlyAuthorRow:"row",t),children:s.map(((e,t)=>(0,n.jsx)("div",{className:(0,a.c)(!i&&"col col--6",i?v.imageOnlyAuthorCol:v.authorCol),children:(0,n.jsx)(p,{author:{...e,imageURL:l.authorsImageUrls[t]??e.imageURL}})},t)))})}function _(){return(0,n.jsxs)("header",{children:[(0,n.jsx)(c,{}),(0,n.jsx)(j,{}),(0,n.jsx)(N,{})]})}var k=s(15684),P=s(15216);function w(e){let{children:t,className:s}=e;const{isBlogPostPage:l}=(0,r.g)();return(0,n.jsx)("div",{id:l?k.blogPostContainerID:void 0,className:(0,a.c)("markdown",s),children:(0,n.jsx)(P.c,{children:t})})}var I=s(45864),A=s(43092),T=s(1096);function y(){return(0,n.jsx)("b",{children:(0,n.jsx)(m.c,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read More"})})}function L(e){const{blogPostTitle:t,...s}=e;return(0,n.jsx)(i.c,{"aria-label":(0,m.G)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...s,children:(0,n.jsx)(y,{})})}function F(){const{metadata:e,isBlogPostPage:t}=(0,r.g)(),{tags:s,title:l,editUrl:i,hasTruncateMarker:o,lastUpdatedBy:c,lastUpdatedAt:m}=e,d=!t&&o,u=s.length>0;if(!(u||d||i))return null;if(t){const e=!!(i||m||c);return(0,n.jsxs)("footer",{className:"docusaurus-mt-lg",children:[u&&(0,n.jsx)("div",{className:(0,a.c)("row","margin-top--sm",I.W.blog.blogFooterEditMetaRow),children:(0,n.jsx)("div",{className:"col",children:(0,n.jsx)(T.c,{tags:s})})}),e&&(0,n.jsx)(A.c,{className:(0,a.c)("margin-top--sm",I.W.blog.blogFooterEditMetaRow),editUrl:i,lastUpdatedAt:m,lastUpdatedBy:c})]})}return(0,n.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[u&&(0,n.jsx)("div",{className:(0,a.c)("col",{"col--9":d}),children:(0,n.jsx)(T.c,{tags:s})}),d&&(0,n.jsx)("div",{className:(0,a.c)("col text--right",{"col--3":u}),children:(0,n.jsx)(L,{blogPostTitle:l,to:e.permalink})})]})}function M(e){let{children:t,className:s}=e;const i=function(){const{isBlogPostPage:e}=(0,r.g)();return e?void 0:"margin-bottom--xl"}();return(0,n.jsxs)(l,{className:(0,a.c)(i,s),children:[(0,n.jsx)(_,{}),(0,n.jsx)(w,{children:t}),(0,n.jsx)(F,{})]})}},83152:(e,t,s)=>{s.d(t,{E:()=>i,g:()=>o});var a=s(11504),r=s(91100),n=s(17624);const l=a.createContext(null);function i(e){let{children:t,content:s,isBlogPostPage:r=!1}=e;const i=function(e){let{content:t,isBlogPostPage:s}=e;return(0,a.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:s})),[t,s])}({content:s,isBlogPostPage:r});return(0,n.jsx)(l.Provider,{value:i,children:t})}function o(){const e=(0,a.useContext)(l);if(null===e)throw new r.AH("BlogPostProvider");return e}},95944:(e,t,s)=>{s.d(t,{A:()=>c});var a=s(11504),r=s(28264);const n=["zero","one","two","few","many","other"];function l(e){return n.filter((t=>e.includes(t)))}const i={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,r.c)();return(0,a.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:l(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),i}}),[e])}function c(){const e=o();return{selectMessage:(t,s)=>function(e,t,s){const a=e.split("|");if(1===a.length)return a[0];a.length>s.pluralForms.length&&console.error(`For locale=${s.locale}, a maximum of ${s.pluralForms.length} plural forms are expected (${s.pluralForms.join(",")}), but the message contains ${a.length}: ${e}`);const r=s.select(t),n=s.pluralForms.indexOf(r);return a[Math.min(n,a.length-1)]}(s,t,e)}}}}]); \ No newline at end of file diff --git a/en/assets/js/249d28c1.bcf55132.js b/en/assets/js/249d28c1.bcf55132.js new file mode 100755 index 000000000..3ae062909 --- /dev/null +++ b/en/assets/js/249d28c1.bcf55132.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6332],{58960:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var a=n(17624),i=n(95788);const r={id:"franzininho-wifi-espidf-04",title:"PWM com LEDC",slug:"/franzininho-wifi/exemplos-espidf/ledc",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},s=void 0,t={id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04",title:"PWM com LEDC",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x04-LEDC.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/ledc",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/ledc",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x04-LEDC.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-04",title:"PWM com LEDC",slug:"/franzininho-wifi/exemplos-espidf/ledc",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},sidebar:"docs",previous:{title:"Entrada Anal\xf3gica",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica"},next:{title:"Primeiros passos com a AWS",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/aws"}},d={},c=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function l(e){const o={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(o.p,{children:["Seguindo os estudos do ESP-IDF, vamos agora estudar um novo perif\xe9rico, o LED Control (LEDC), o qual tem a fun\xe7\xe3o de controlar a intensidade luminosa do LED e tamb\xe9m servir como fonte geradora de sinal pulsado, ",(0,a.jsx)(o.strong,{children:"Pulse Width Modulation"})," (PWM), para diferentes prop\xf3sitos como: controle de velocidade em motores de corrente cont\xednua (CC), angula\xe7\xe3o em servomotores, mudan\xe7a de cores em LED RGB e outras mais aplica\xe7\xf5es."]}),"\n",(0,a.jsx)(o.p,{children:"Com isso, ao final deste artigo estaremos familiarizados com os recursos oferecidos pelo perif\xe9rico al\xe9m de dominar as configura\xe7\xf5es b\xe1sicas para implementar em projetos."}),"\n",(0,a.jsx)(o.h2,{id:"recursos-necess\xe1rios",children:(0,a.jsx)(o.strong,{children:"Recursos Necess\xe1rios"})}),"\n",(0,a.jsx)(o.p,{children:"Os materiais necess\xe1rios para realizar esse exemplo s\xe3o:"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"Placa Franzininho WiFi;"}),"\n",(0,a.jsx)(o.li,{children:"Protoboard;"}),"\n",(0,a.jsx)(o.li,{children:"LED;"}),"\n",(0,a.jsx)(o.li,{children:"Resistor de 220 Ohm;"}),"\n",(0,a.jsx)(o.li,{children:"Cabos Jumpers;"}),"\n",(0,a.jsx)(o.li,{children:"Computador com ESP-IDF instalado e configurado."}),"\n"]}),"\n",(0,a.jsx)(o.h2,{id:"desenvolvimento",children:(0,a.jsx)(o.strong,{children:"Desenvolvimento"})}),"\n",(0,a.jsxs)(o.p,{children:["Na placa Franzininho WiFi o perif\xe9rico LEDC est\xe1 disposto em dois grupos de oito canais, sendo um grupo operando no ",(0,a.jsx)(o.strong,{children:"High Speed Mode (HSM)"})," e outro em ",(0,a.jsx)(o.strong,{children:"Low Speed Mode (LSM)"})," operando independente uns dos outros ",(0,a.jsx)(o.strong,{children:"."})," O modo High Speed \xe9 implementado em hardware oferecendo mudan\xe7as autom\xe1ticas sem interferir no duty cycle do PWM, ou seja, caso haja altera\xe7\xf5es na temporiza\xe7\xe3o ser\xe3o atualizadas no pr\xf3ximo estouro do timer. Em contraste isso o modo Low Speed deve ser explicitar o via software as configura\xe7\xf5es de temporiza\xe7\xe3o."]}),"\n",(0,a.jsx)(o.p,{children:"Para utilizarmos esse perif\xe9ricos precisamos seguir algumas etapas fundamentais para nossa aplica\xe7\xe3o de estudo que s\xe3o: Configura\xe7\xe3o do Temporizador , Configura\xe7\xe3o do Canal e Altera\xe7\xe3o do PWM."}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsxs)(o.li,{children:["\n",(0,a.jsxs)(o.p,{children:["Configura\xe7\xe3o do Temporizador : nessa primeira etapa vamos especificar a frequ\xeancia e a resolu\xe7\xe3o do sinal PWM preenchendo a estrutura de dados ",(0,a.jsx)(o.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/ledc.html#_CPPv419ledc_timer_config_t",children:(0,a.jsx)(o.strong,{children:"ledc_timer_config_t"})})," e apontando-a para a fun\xe7\xe3o ",(0,a.jsx)(o.strong,{children:"led_timer_config() ."})]}),"\n"]}),"\n",(0,a.jsxs)(o.li,{children:["\n",(0,a.jsx)(o.p,{children:"Configura\xe7\xe3o do Canal: nessa segunda etapa iremos direcionar o GPIO que ser\xe1 a sa\xedda do sinal PWM, o qual \xe9 selecionado dentro da estrutura de configura\xe7\xe3o do perif\xe9rico."}),"\n"]}),"\n",(0,a.jsxs)(o.li,{children:["\n",(0,a.jsxs)(o.p,{children:["Altera\xe7\xe3o do PWM: na \xfaltima etapa vamos realizar o aumento e a redu\xe7\xe3o do duty cycle na sa\xedda da geradora de sinal criando assim o ",(0,a.jsx)(o.strong,{children:"fade"})," no LED externo, o qual ser\xe1 habilitado via hardware pela fun\xe7\xe3o ",(0,a.jsx)(o.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/ledc.html#_CPPv422ledc_fade_func_installi",children:(0,a.jsx)(o.strong,{children:"ledc_fade_func_install()"})}),(0,a.jsx)(o.strong,{children:"."})]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(o.p,{children:"Com a finaliza\xe7\xe3o das tr\xeas etapas de configura\xe7\xe3o o acionamento do perif\xe9rico LED Control estar\xe1 em funcionamento, contudo devemos agora seguir para montagem do circuito para concluir o projeto."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Configura\xe7\xe3o do Perif\xe9rico LED Control",src:n(97980).c+"",width:"768",height:"384"})}),"\n",(0,a.jsx)(o.h3,{id:"esquem\xe1tico",children:(0,a.jsx)(o.strong,{children:"Esquem\xe1tico"})}),"\n",(0,a.jsxs)(o.p,{children:["Nesta parte daremos in\xedcio a montagem do circuito em protoboard, iremos conectar um dos terminais do resistor no ",(0,a.jsx)(o.strong,{children:"GPIO 2"})," e outro no LED externo."]}),"\n",(0,a.jsx)(o.p,{children:"Abaixo segue o esquem\xe1tico proposto :"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Imagem do Circuito",src:n(88492).c+"",width:"1024",height:"367"})}),"\n",(0,a.jsx)(o.h3,{id:"c\xf3digo",children:(0,a.jsx)(o.strong,{children:"C\xf3digo"})}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-c",children:'/*\n Autor: Halysson Junior\n Data : 10/04/21 \n\n Nesse exemplo foi configurado o periferico LEDC para controlar a intensidade do LED.\n \n*/\n\n// Inclus\xe3o de arqivos de cabe\xe7alho\n#include \n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "driver/ledc.h"\n#include "esp_err.h"\n\n// Defini\xe7\xe3o para configura\xe7\xe3o do perif\xe9rico\n#define LEDC_GPIO 2\n#define LEDC_FADE_TIME 500\n#define LEDC_RESOLUTION 1024\n#define LEDC_FREQ 5000\n\n\nvoid app_main(void) // Main\n{\n\n // Estrutura de dados para receber as v\xe1riaveis de configura\xe7\xe3o de frequ\xeancia (1Hz, 100 Hz e outros), modo (HIGH ou LOW) e selecionar o TIMER (0,1,2) \n \n ledc_timer_config_t timer = { // Configura\xe7\xe3o do timer \n\n .speed_mode = LEDC_LOW_SPEED_MODE, // Modo de Velocidade -> LOW\n .duty_resolution = LEDC_TIMER_10_BIT, // Resolu\xe7\xe3o do do ciclo de trabalho (2^10 = 1024 valores)\n .timer_num = LEDC_TIMER_0, // Utilizado o TIMER 0\n .freq_hz = LEDC_FREQ, // Frequ\xeancia de opera\xe7\xe3o do sinal PWM\n .clk_cfg = LEDC_AUTO_CLK // Sele\xe7\xe3o automatica da fonte geradora do clock (interna ou externa)\n \n };\n\n \n ledc_timer_config(&timer); // Envia o endere\xe7o da estrutura timer para a fun\xe7\xe3o de configura\xe7\xe3o do canal PWM \n \n /*\n NOTA:\n A frequencia e a resolu\xe7\xe3o do ciclo de trabalho s\xe3o independentes. Para uma elevada frequ\xeancia do PWM, \n ter\xe1 uma baixa resolu\xe7\xe3o do ciclo de trabalho disponivel e vice-versa \n */\n\n // Estrutura de dados para receber as v\xe1riaveis de configura\xe7\xe3o de frequencia (1Hz, 100 Hz e outros), modo (HIGH ou LOW), selecionar o TIMER (0,1,2) \n \n ledc_channel_config_t channel_LEDC = {\n .gpio_num = LEDC_GPIO, // Seleciona o pino para atuar o PWM\n .speed_mode = LEDC_LOW_SPEED_MODE, // Modo de Velocidade -> LOW\n .channel = LEDC_CHANNEL_0, \n .timer_sel = LEDC_TIMER_0,\n .duty = 0,\n .hpoint = 0\n \n };\n \n ledc_channel_config(&channel_LEDC);\n \n \n ledc_fade_func_install(0); // Inicializa o servi\xe7o do Fade\n \n for(;;){ // Loop\n\n // Define e inicia a fun\xe7\xe3o de fade no perif\xe9rico LEDC\n ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , 0 , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);\n ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , LEDC_RESOLUTION , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);\n \n \n }// endLoop\n\n}//endMain\n\n/*\n *** Paramentriza\xe7\xe3o da fun\xe7\xe3o " ledc_set_fade_time_and_start(); " ***\n\nledc_set_fade_time_and_start(ledc_mode_tspeed_mode, ledc_channel_tchannel, uint32_t target_duty, uint32_t max_fade_time_ms, ledc_fade_mode_tfade_mode)\n\n ledc_mode_tspeed_mode -> modo do timer utilizado\n ledc_channel_tchannel -> indice do canal LEDC (0-7)\n uint32_t target_duty -> (2 ** resolu\xe7\xe3o_ciclo_de_trabalho) - 1\n uint32_t max_fade_time_ms -> tempo m\xe1ximo (ms) para o fading \n ledc_fade_mode_tfade_mode -> \n*/\n'})}),"\n",(0,a.jsx)(o.p,{children:"O programa desenvolvido possui uma estrutura bem simples e n\xe3o \xe9 necess\xe1rio acrescentar nenhuma biblioteca, apenas a manuten\xe7\xe3o dos arquivos de cabe\xe7alho j\xe1 presentes no projeto."}),"\n",(0,a.jsxs)(o.p,{children:["Ao criar um novo projeto no IDF automaticamente j\xe1 temos arquivos configurados e prontos para programa\xe7\xe3o do dispositivo, desta forma digite e comente as linhas do seguinte c\xf3digo no arquivo ",(0,a.jsx)(o.strong,{children:"main.c :"})]}),"\n",(0,a.jsxs)(o.p,{children:["Voc\xea encontra o projeto completo na documenta\xe7\xe3o da Franzininho: ",(0,a.jsx)(o.a,{href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/PWM_LEDC",children:(0,a.jsx)(o.strong,{children:"PWM_LEDC"})})]}),"\n",(0,a.jsxs)(o.p,{children:["Caso ainda n\xe3o tenha instalado e configurado o IDF no seu computador ou tenha d\xfavidas sobre as ferramentas, acesse o tutorial de instala\xe7\xe3o (",(0,a.jsx)(o.a,{href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/exemplos-espidf/primeiros-passos",children:"Clique Aqui"}),")."]}),"\n",(0,a.jsx)(o.h3,{id:"compila\xe7\xe3o",children:(0,a.jsx)(o.strong,{children:"Compila\xe7\xe3o"})}),"\n",(0,a.jsxs)(o.p,{children:["Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o ",(0,a.jsx)(o.strong,{children:(0,a.jsx)(o.em,{children:"set-target"})})," para ESP32-S2. Caso n\xe3o possua a placa Franzininho WiFi altere o target para o modelo de ESP32 utilizando em seu projeto."]}),"\n",(0,a.jsx)(o.p,{children:"idf.py set-target esp32s2"}),"\n",(0,a.jsx)(o.p,{children:"Ao final da compila\xe7\xe3o o resultado final deve ser semelhante \xe0 imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu c\xf3digo."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Imagem do Terminal Visual Code",src:n(64928).c+"",width:"1024",height:"607"})}),"\n",(0,a.jsx)(o.p,{children:"Ap\xf3s a etapa de compila\xe7\xe3o vamos enviar o c\xf3digo fonte para nossa placa, no editor pressione o \xedcone abaixo e aguarde alguns segundos para assim dar in\xedcio ao upload do programa \u201cPWM\u201d (seta preta) ."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Barra inferior do Visual Code",src:n(39668).c+"",width:"528",height:"54"})}),"\n",(0,a.jsx)(o.h3,{id:"resultados",children:(0,a.jsx)(o.strong,{children:"Resultados"})}),"\n",(0,a.jsx)(o.p,{children:"Ap\xf3s enviar seu c\xf3digo e com o circuito devidamente montado o LED externo conectado come\xe7ar\xe1 a aumentar e diminuir sua intensidade luminosa gradualmente criando o fade desejado. Na figura 5 temos a imagem do oscilosc\xf3pio mostrando a forma de onda gerada e o duty cycle atuando no momento e na figura 6 o circuito em perfeito funcionamento."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Sa\xedda do sinal PWM",src:n(52172).c+"",width:"1024",height:"1024"})}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Imagem do circuito em funcionamento",src:n(71360).c+"",width:"1024",height:"768"})}),"\n",(0,a.jsx)(o.h2,{id:"conclus\xe3o",children:(0,a.jsx)(o.strong,{children:"Conclus\xe3o"})}),"\n",(0,a.jsx)(o.p,{children:"Neste exemplo apresentamos t\xf3picos intermedi\xe1rios sobre a manipula\xe7\xe3o do perif\xe9rico LED Control, utilizamos conceitos importantes da linguagem C estrutura de dados e ponteiros implementado na configura\xe7\xe3o do sinal pulsado."}),"\n",(0,a.jsx)(o.p,{children:"Deve-se deixar claro que o artigo aborda um conte\xfado para darmos os primeiros passo com este perif\xe9rico, encorajamos que o leitor reconfigure a sa\xedda do sinal PWM como tamb\xe9m acesse a documenta\xe7\xe3o oferecida pela Espressif para compreender como o hardware do chip comporta-se com cada configura\xe7\xe3o realizada al\xe9m das fun\xe7\xf5es implementadas em software."}),"\n",(0,a.jsxs)(o.table,{children:[(0,a.jsx)(o.thead,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.th,{children:"Autor"}),(0,a.jsx)(o.th,{children:(0,a.jsx)(o.a,{href:"https://github.com/halyssonJr",children:"Halysson Junior"})})]})}),(0,a.jsx)(o.tbody,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"Data:"}),(0,a.jsx)(o.td,{children:"22/07/2021"})]})})]})]})}function m(e={}){const{wrapper:o}={...(0,i.MN)(),...e.components};return o?(0,a.jsx)(o,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},95788:(e,o,n)=>{n.d(o,{MN:()=>c});var a=n(11504);function i(e,o,n){return o in e?Object.defineProperty(e,o,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[o]=n,e}function r(e,o){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);o&&(a=a.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var o=1;o=0||(i[n]=e[n]);return i}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var d=a.createContext({}),c=function(e){var o=a.useContext(d),n=o;return e&&(n="function"==typeof e?e(o):s(s({},o),e)),n},l={inlineCode:"code",wrapper:function(e){var o=e.children;return a.createElement(a.Fragment,{},o)}},m=a.forwardRef((function(e,o){var n=e.components,i=e.mdxType,r=e.originalType,d=e.parentName,m=t(e,["components","mdxType","originalType","parentName"]),p=c(n),u=i,h=p["".concat(d,".").concat(u)]||p[u]||l[u]||r;return n?a.createElement(h,s(s({ref:o},m),{},{components:n})):a.createElement(h,s({ref:o},m))}));m.displayName="MDXCreateElement"},97980:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/1-f7885fb7827c5c17fea371b5f8452645.png"},88492:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/2-0a531df80a496fe52ef1cd273f3306a5.png"},64928:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/3-413df3a4edbd9eeef3237bc8e6bd0894.png"},39668:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/4-e64a6a5ed6db5ad1206c547c1b106046.png"},52172:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/5-921eb8572a537a8d55e8dddc33727221.jpeg"},71360:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/6-7477a50ccfa225dc8f32e7ce6cf22339.jpeg"}}]); \ No newline at end of file diff --git a/en/assets/js/249d28c1.c51ed63f.js b/en/assets/js/249d28c1.c51ed63f.js deleted file mode 100755 index 5b9823d6d..000000000 --- a/en/assets/js/249d28c1.c51ed63f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5123],{3905:(e,a,o)=>{o.d(a,{Zo:()=>c,kt:()=>f});var n=o(7294);function t(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function r(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var a=1;a=0||(t[o]=e[o]);return t}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var d=n.createContext({}),l=function(e){var a=n.useContext(d),o=a;return e&&(o="function"==typeof e?e(a):i(i({},a),e)),o},c=function(e){var a=l(e.components);return n.createElement(d.Provider,{value:a},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var o=e.components,t=e.mdxType,r=e.originalType,d=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=l(o),u=t,f=p["".concat(d,".").concat(u)]||p[u]||m[u]||r;return o?n.createElement(f,i(i({ref:a},c),{},{components:o})):n.createElement(f,i({ref:a},c))}));function f(e,a){var o=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var r=o.length,i=new Array(r);i[0]=u;var s={};for(var d in a)hasOwnProperty.call(a,d)&&(s[d]=a[d]);s.originalType=e,s[p]="string"==typeof e?e:t,i[1]=s;for(var l=2;l{o.r(a),o.d(a,{assets:()=>d,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var n=o(3117),t=(o(7294),o(3905));const r={id:"franzininho-wifi-espidf-04",title:"PWM com LEDC",slug:"/franzininho-wifi/exemplos-espidf/ledc",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},i=void 0,s={unversionedId:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04",id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04",title:"PWM com LEDC",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x04-LEDC.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/ledc",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/ledc",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x04-LEDC.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-04",title:"PWM com LEDC",slug:"/franzininho-wifi/exemplos-espidf/ledc",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},sidebar:"docs",previous:{title:"Entrada Anal\xf3gica",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica"},next:{title:"Primeiros passos com a AWS",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/aws"}},d={},l=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],c={toc:l},p="wrapper";function m(e){let{components:a,...r}=e;return(0,t.kt)(p,(0,n.Z)({},c,r,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Seguindo os estudos do ESP-IDF, vamos agora estudar um novo perif\xe9rico, o LED Control (LEDC), o qual tem a fun\xe7\xe3o de controlar a intensidade luminosa do LED e tamb\xe9m servir como fonte geradora de sinal pulsado, ",(0,t.kt)("strong",{parentName:"p"},"Pulse Width Modulation")," (PWM), para diferentes prop\xf3sitos como: controle de velocidade em motores de corrente cont\xednua (CC), angula\xe7\xe3o em servomotores, mudan\xe7a de cores em LED RGB e outras mais aplica\xe7\xf5es."),(0,t.kt)("p",null,"Com isso, ao final deste artigo estaremos familiarizados com os recursos oferecidos pelo perif\xe9rico al\xe9m de dominar as configura\xe7\xf5es b\xe1sicas para implementar em projetos."),(0,t.kt)("h2",{id:"recursos-necess\xe1rios"},(0,t.kt)("strong",{parentName:"h2"},"Recursos Necess\xe1rios")),(0,t.kt)("p",null,"Os materiais necess\xe1rios para realizar esse exemplo s\xe3o:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Placa Franzininho WiFi;"),(0,t.kt)("li",{parentName:"ul"},"Protoboard;"),(0,t.kt)("li",{parentName:"ul"},"LED;"),(0,t.kt)("li",{parentName:"ul"},"Resistor de 220 Ohm;"),(0,t.kt)("li",{parentName:"ul"},"Cabos Jumpers;"),(0,t.kt)("li",{parentName:"ul"},"Computador com ESP-IDF instalado e configurado.")),(0,t.kt)("h2",{id:"desenvolvimento"},(0,t.kt)("strong",{parentName:"h2"},"Desenvolvimento")),(0,t.kt)("p",null,"Na placa Franzininho WiFi o perif\xe9rico LEDC est\xe1 disposto em dois grupos de oito canais, sendo um grupo operando no ",(0,t.kt)("strong",{parentName:"p"},"High Speed Mode (HSM)")," e outro em ",(0,t.kt)("strong",{parentName:"p"},"Low Speed Mode (LSM)")," operando independente uns dos outros ",(0,t.kt)("strong",{parentName:"p"},".")," O modo High Speed \xe9 implementado em hardware oferecendo mudan\xe7as autom\xe1ticas sem interferir no duty cycle do PWM, ou seja, caso haja altera\xe7\xf5es na temporiza\xe7\xe3o ser\xe3o atualizadas no pr\xf3ximo estouro do timer. Em contraste isso o modo Low Speed deve ser explicitar o via software as configura\xe7\xf5es de temporiza\xe7\xe3o."),(0,t.kt)("p",null,"Para utilizarmos esse perif\xe9ricos precisamos seguir algumas etapas fundamentais para nossa aplica\xe7\xe3o de estudo que s\xe3o: Configura\xe7\xe3o do Temporizador , Configura\xe7\xe3o do Canal e Altera\xe7\xe3o do PWM."),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("p",{parentName:"li"},"Configura\xe7\xe3o do Temporizador : nessa primeira etapa vamos especificar a frequ\xeancia e a resolu\xe7\xe3o do sinal PWM preenchendo a estrutura de dados ",(0,t.kt)("a",{parentName:"p",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/ledc.html#_CPPv419ledc_timer_config_t"},(0,t.kt)("strong",{parentName:"a"},"ledc_timer_config_t"))," e apontando-a para a fun\xe7\xe3o ",(0,t.kt)("strong",{parentName:"p"},"led_timer_config() ."))),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("p",{parentName:"li"},"Configura\xe7\xe3o do Canal: nessa segunda etapa iremos direcionar o GPIO que ser\xe1 a sa\xedda do sinal PWM, o qual \xe9 selecionado dentro da estrutura de configura\xe7\xe3o do perif\xe9rico.")),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("p",{parentName:"li"},"Altera\xe7\xe3o do PWM: na \xfaltima etapa vamos realizar o aumento e a redu\xe7\xe3o do duty cycle na sa\xedda da geradora de sinal criando assim o ",(0,t.kt)("strong",{parentName:"p"},"fade")," no LED externo, o qual ser\xe1 habilitado via hardware pela fun\xe7\xe3o ",(0,t.kt)("a",{parentName:"p",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/ledc.html#_CPPv422ledc_fade_func_installi"},(0,t.kt)("strong",{parentName:"a"},"ledc_fade_func_install()")),(0,t.kt)("strong",{parentName:"p"},".")))),(0,t.kt)("p",null,"Com a finaliza\xe7\xe3o das tr\xeas etapas de configura\xe7\xe3o o acionamento do perif\xe9rico LED Control estar\xe1 em funcionamento, contudo devemos agora seguir para montagem do circuito para concluir o projeto."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Configura\xe7\xe3o do Perif\xe9rico LED Control",src:o(5530).Z,width:"768",height:"384"})),(0,t.kt)("h3",{id:"esquem\xe1tico"},(0,t.kt)("strong",{parentName:"h3"},"Esquem\xe1tico")),(0,t.kt)("p",null,"Nesta parte daremos in\xedcio a montagem do circuito em protoboard, iremos conectar um dos terminais do resistor no ",(0,t.kt)("strong",{parentName:"p"},"GPIO 2")," e outro no LED externo."),(0,t.kt)("p",null,"Abaixo segue o esquem\xe1tico proposto :"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Imagem do Circuito",src:o(8223).Z,width:"1024",height:"367"})),(0,t.kt)("h3",{id:"c\xf3digo"},(0,t.kt)("strong",{parentName:"h3"},"C\xf3digo")),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},'/*\n Autor: Halysson Junior\n Data : 10/04/21 \n\n Nesse exemplo foi configurado o periferico LEDC para controlar a intensidade do LED.\n \n*/\n\n// Inclus\xe3o de arqivos de cabe\xe7alho\n#include \n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "driver/ledc.h"\n#include "esp_err.h"\n\n// Defini\xe7\xe3o para configura\xe7\xe3o do perif\xe9rico\n#define LEDC_GPIO 2\n#define LEDC_FADE_TIME 500\n#define LEDC_RESOLUTION 1024\n#define LEDC_FREQ 5000\n\n\nvoid app_main(void) // Main\n{\n\n // Estrutura de dados para receber as v\xe1riaveis de configura\xe7\xe3o de frequ\xeancia (1Hz, 100 Hz e outros), modo (HIGH ou LOW) e selecionar o TIMER (0,1,2) \n \n ledc_timer_config_t timer = { // Configura\xe7\xe3o do timer \n\n .speed_mode = LEDC_LOW_SPEED_MODE, // Modo de Velocidade -> LOW\n .duty_resolution = LEDC_TIMER_10_BIT, // Resolu\xe7\xe3o do do ciclo de trabalho (2^10 = 1024 valores)\n .timer_num = LEDC_TIMER_0, // Utilizado o TIMER 0\n .freq_hz = LEDC_FREQ, // Frequ\xeancia de opera\xe7\xe3o do sinal PWM\n .clk_cfg = LEDC_AUTO_CLK // Sele\xe7\xe3o automatica da fonte geradora do clock (interna ou externa)\n \n };\n\n \n ledc_timer_config(&timer); // Envia o endere\xe7o da estrutura timer para a fun\xe7\xe3o de configura\xe7\xe3o do canal PWM \n \n /*\n NOTA:\n A frequencia e a resolu\xe7\xe3o do ciclo de trabalho s\xe3o independentes. Para uma elevada frequ\xeancia do PWM, \n ter\xe1 uma baixa resolu\xe7\xe3o do ciclo de trabalho disponivel e vice-versa \n */\n\n // Estrutura de dados para receber as v\xe1riaveis de configura\xe7\xe3o de frequencia (1Hz, 100 Hz e outros), modo (HIGH ou LOW), selecionar o TIMER (0,1,2) \n \n ledc_channel_config_t channel_LEDC = {\n .gpio_num = LEDC_GPIO, // Seleciona o pino para atuar o PWM\n .speed_mode = LEDC_LOW_SPEED_MODE, // Modo de Velocidade -> LOW\n .channel = LEDC_CHANNEL_0, \n .timer_sel = LEDC_TIMER_0,\n .duty = 0,\n .hpoint = 0\n \n };\n \n ledc_channel_config(&channel_LEDC);\n \n \n ledc_fade_func_install(0); // Inicializa o servi\xe7o do Fade\n \n for(;;){ // Loop\n\n // Define e inicia a fun\xe7\xe3o de fade no perif\xe9rico LEDC\n ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , 0 , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);\n ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , LEDC_RESOLUTION , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);\n \n \n }// endLoop\n\n}//endMain\n\n/*\n *** Paramentriza\xe7\xe3o da fun\xe7\xe3o " ledc_set_fade_time_and_start(); " ***\n\nledc_set_fade_time_and_start(ledc_mode_tspeed_mode, ledc_channel_tchannel, uint32_t target_duty, uint32_t max_fade_time_ms, ledc_fade_mode_tfade_mode)\n\n ledc_mode_tspeed_mode -> modo do timer utilizado\n ledc_channel_tchannel -> indice do canal LEDC (0-7)\n uint32_t target_duty -> (2 ** resolu\xe7\xe3o_ciclo_de_trabalho) - 1\n uint32_t max_fade_time_ms -> tempo m\xe1ximo (ms) para o fading \n ledc_fade_mode_tfade_mode -> \n*/\n')),(0,t.kt)("p",null,"O programa desenvolvido possui uma estrutura bem simples e n\xe3o \xe9 necess\xe1rio acrescentar nenhuma biblioteca, apenas a manuten\xe7\xe3o dos arquivos de cabe\xe7alho j\xe1 presentes no projeto."),(0,t.kt)("p",null,"Ao criar um novo projeto no IDF automaticamente j\xe1 temos arquivos configurados e prontos para programa\xe7\xe3o do dispositivo, desta forma digite e comente as linhas do seguinte c\xf3digo no arquivo ",(0,t.kt)("strong",{parentName:"p"},"main.c :")),(0,t.kt)("p",null,"Voc\xea encontra o projeto completo na documenta\xe7\xe3o da Franzininho: ",(0,t.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/PWM_LEDC"},(0,t.kt)("strong",{parentName:"a"},"PWM_LEDC"))),(0,t.kt)("p",null,"Caso ainda n\xe3o tenha instalado e configurado o IDF no seu computador ou tenha d\xfavidas sobre as ferramentas, acesse o tutorial de instala\xe7\xe3o (",(0,t.kt)("a",{parentName:"p",href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/exemplos-espidf/primeiros-passos"},"Clique Aqui"),")."),(0,t.kt)("h3",{id:"compila\xe7\xe3o"},(0,t.kt)("strong",{parentName:"h3"},"Compila\xe7\xe3o")),(0,t.kt)("p",null,"Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o ",(0,t.kt)("strong",{parentName:"p"},(0,t.kt)("em",{parentName:"strong"},"set-target"))," para ESP32-S2. Caso n\xe3o possua a placa Franzininho WiFi altere o target para o modelo de ESP32 utilizando em seu projeto."),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"idf.py set-target esp32s2\n")),(0,t.kt)("p",null,"Ao final da compila\xe7\xe3o o resultado final deve ser semelhante \xe0 imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu c\xf3digo."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Imagem do Terminal Visual Code",src:o(3648).Z,width:"1024",height:"607"})),(0,t.kt)("p",null,"Ap\xf3s a etapa de compila\xe7\xe3o vamos enviar o c\xf3digo fonte para nossa placa, no editor pressione o \xedcone abaixo e aguarde alguns segundos para assim dar in\xedcio ao upload do programa \u201cPWM\u201d (seta preta) ."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Barra inferior do Visual Code",src:o(7899).Z,width:"528",height:"54"})),(0,t.kt)("h3",{id:"resultados"},(0,t.kt)("strong",{parentName:"h3"},"Resultados")),(0,t.kt)("p",null,"Ap\xf3s enviar seu c\xf3digo e com o circuito devidamente montado o LED externo conectado come\xe7ar\xe1 a aumentar e diminuir sua intensidade luminosa gradualmente criando o fade desejado. Na figura 5 temos a imagem do oscilosc\xf3pio mostrando a forma de onda gerada e o duty cycle atuando no momento e na figura 6 o circuito em perfeito funcionamento."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Sa\xedda do sinal PWM",src:o(683).Z,width:"1024",height:"1024"})),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Imagem do circuito em funcionamento",src:o(5099).Z,width:"1024",height:"768"})),(0,t.kt)("h2",{id:"conclus\xe3o"},(0,t.kt)("strong",{parentName:"h2"},"Conclus\xe3o")),(0,t.kt)("p",null,"Neste exemplo apresentamos t\xf3picos intermedi\xe1rios sobre a manipula\xe7\xe3o do perif\xe9rico LED Control, utilizamos conceitos importantes da linguagem C estrutura de dados e ponteiros implementado na configura\xe7\xe3o do sinal pulsado."),(0,t.kt)("p",null,"Deve-se deixar claro que o artigo aborda um conte\xfado para darmos os primeiros passo com este perif\xe9rico, encorajamos que o leitor reconfigure a sa\xedda do sinal PWM como tamb\xe9m acesse a documenta\xe7\xe3o oferecida pela Espressif para compreender como o hardware do chip comporta-se com cada configura\xe7\xe3o realizada al\xe9m das fun\xe7\xf5es implementadas em software."),(0,t.kt)("table",null,(0,t.kt)("thead",{parentName:"table"},(0,t.kt)("tr",{parentName:"thead"},(0,t.kt)("th",{parentName:"tr",align:null},"Autor"),(0,t.kt)("th",{parentName:"tr",align:null},(0,t.kt)("a",{parentName:"th",href:"https://github.com/halyssonJr"},"Halysson Junior")))),(0,t.kt)("tbody",{parentName:"table"},(0,t.kt)("tr",{parentName:"tbody"},(0,t.kt)("td",{parentName:"tr",align:null},"Data:"),(0,t.kt)("td",{parentName:"tr",align:null},"22/07/2021")))))}m.isMDXComponent=!0},5530:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/1-f7885fb7827c5c17fea371b5f8452645.png"},8223:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/2-0a531df80a496fe52ef1cd273f3306a5.png"},3648:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/3-413df3a4edbd9eeef3237bc8e6bd0894.png"},7899:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/4-e64a6a5ed6db5ad1206c547c1b106046.png"},683:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/5-921eb8572a537a8d55e8dddc33727221.jpeg"},5099:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/6-7477a50ccfa225dc8f32e7ce6cf22339.jpeg"}}]); \ No newline at end of file diff --git a/en/assets/js/27079279.45405723.js b/en/assets/js/27079279.45405723.js deleted file mode 100755 index ba1766128..000000000 --- a/en/assets/js/27079279.45405723.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4417],{3905:(e,a,o)=>{o.d(a,{Zo:()=>u,kt:()=>f});var n=o(7294);function t(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function r(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var a=1;a=0||(t[o]=e[o]);return t}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var c=n.createContext({}),l=function(e){var a=n.useContext(c),o=a;return e&&(o="function"==typeof e?e(a):i(i({},a),e)),o},u=function(e){var a=l(e.components);return n.createElement(c.Provider,{value:a},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},m=n.forwardRef((function(e,a){var o=e.components,t=e.mdxType,r=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),d=l(o),m=t,f=d["".concat(c,".").concat(m)]||d[m]||p[m]||r;return o?n.createElement(f,i(i({ref:a},u),{},{components:o})):n.createElement(f,i({ref:a},u))}));function f(e,a){var o=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var r=o.length,i=new Array(r);i[0]=m;var s={};for(var c in a)hasOwnProperty.call(a,c)&&(s[c]=a[c]);s.originalType=e,s[d]="string"==typeof e?e:t,i[1]=s;for(var l=2;l{o.r(a),o.d(a,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var n=o(3117),t=(o(7294),o(3905));const r={id:"franzino",title:"Placa Franzino",slug:"/Franzino/franzino",description:"Detalhes da placa Franzino"},i=void 0,s={unversionedId:"Franzino/franzino",id:"Franzino/franzino",title:"Placa Franzino",description:"Detalhes da placa Franzino",source:"@site/docs/Franzino/franzino.md",sourceDirName:"Franzino",slug:"/Franzino/franzino",permalink:"/en/docs/Franzino/franzino",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Franzino/franzino.md",tags:[],version:"current",frontMatter:{id:"franzino",title:"Placa Franzino",slug:"/Franzino/franzino",description:"Detalhes da placa Franzino"},sidebar:"docs",previous:{title:"Placa Franzininho Tiny",permalink:"/en/docs/franzininho-tiny/franzininho-tiny"},next:{title:"Upload via conversor USB/SERIAL",permalink:"/en/docs/Franzino/upload-conversor-serial"}},c={},l=[{value:"Caracter\xedsticas",id:"caracter\xedsticas",level:2},{value:"Limita\xe7\xf5es da Franzino",id:"limita\xe7\xf5es-da-franzino",level:2},{value:"Alimenta\xe7\xe3o",id:"alimenta\xe7\xe3o",level:2},{value:"Aten\xe7\xe3o",id:"aten\xe7\xe3o",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:2},{value:"Layout",id:"layout",level:2},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Refer\xeancias",id:"refer\xeancias",level:2}],u={toc:l},d="wrapper";function p(e){let{components:a,...r}=e;return(0,t.kt)(d,(0,n.Z)({},u,r,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Placa Franzino",src:o(1932).Z,width:"1999",height:"1125"})),(0,t.kt)("p",null,"A placa Franzino \xe9 um Arduino standalone de baixo custo. Como seu pr\xf3prio nome sugere, \xe9 uma placa enxuta que possui os componentes b\xe1sicos para que voc\xea possa usar o microcontrolador ATmega328, tanto para estudo quanto para a aplica\xe7\xf5es em projetos."),(0,t.kt)("p",null,"Diferente dos standalones dispon\xedveis no mercado, a placa Franzino possui pinagem Arduino UNO Rev 3 e conector para f\xe1cil liga\xe7\xe3o da interface serial. A facilidade de acesso aos pinos da interface serial, possibilita que voc\xea ligue m\xf3dulos de comunica\xe7\xe3o conforme a necessidade do projeto. Voc\xea conseguir\xe1 facilmente ligar conversores de n\xedveis seriais como: USB, RS232, RS485 e at\xe9 mesmo um m\xf3dulo Bluetooth, sem a necessidade do uso de shields."),(0,t.kt)("p",null,"A Franzino vem com o bootloader do Arduino UNO facilitando o processo de upload do seu scketch. Voc\xea poder\xe1 facilmente fazer o upload do seu sketch para placa usando um conversor USB/Serial, seguindo os mesmos passos que j\xe1 est\xe1 acostumado a fazer com a placa Arduino UNO."),(0,t.kt)("h2",{id:"caracter\xedsticas"},"Caracter\xedsticas"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Pinagem Padr\xe3o UNO R3;"),(0,t.kt)("li",{parentName:"ul"},"Microcontrolador ATmega328 pu ATmega328P;"),(0,t.kt)("li",{parentName:"ul"},"Alimenta\xe7\xe3o: 7,5 V \xe0 20 V DC;"),(0,t.kt)("li",{parentName:"ul"},"Prote\xe7\xe3o contra invers\xe3o de polaridade da fonte;"),(0,t.kt)("li",{parentName:"ul"},"Conector para liga\xe7\xe3o de interface serial;"),(0,t.kt)("li",{parentName:"ul"},"LED para indica\xe7\xe3o de alimenta\xe7\xe3o;"),(0,t.kt)("li",{parentName:"ul"},"LED conectado ao pino 13 para uso geral")),(0,t.kt)("p",null,"A seguir \xe9 apresentada a pinagem para interface serial:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"pinagem",src:o(4864).Z,width:"960",height:"720"})),(0,t.kt)("p",null,"Os pino D2 e D4 podem ser utilizados para uma comunica\xe7\xe3o soft serial, como pino de controle da comunica\xe7\xe3o RS485 ou outras aplica\xe7\xf5es de entrada ou sa\xedda."),(0,t.kt)("p",null,"Outra vantagem interessante \xe9 que as linhas de alimenta\xe7\xe3o(VCC e GND) tamb\xe9m est\xe3o dispon\xedveis nesse conector."),(0,t.kt)("p",null,"Assim, com esse conector voc\xea pode facilmente ligar um conversor USB/Serial para comunica\xe7\xe3o com um computador, seja para upload dos sketchs quanto para troca de informa\xe7\xf5es."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"ligacao_conversor USB Serial",src:o(3798).Z,width:"1133",height:"528"})),(0,t.kt)("p",null,"Se o seu projeto n\xe3o necessitar da comunica\xe7\xe3o USB/Serial durante o seu funcionamento, voc\xea poder\xe1 usar o mesmo conversor para fazer upload em outra Franzinos."),(0,t.kt)("p",null,"Algumas aplica\xe7\xf5es necessitam de comunica\xe7\xe3o serial no padr\xe3o RS232. Dessa forma voc\xea pode ligar facilmente um conversor TTL/RS232."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"conversor_ttl_rs232.png",src:o(1522).Z,width:"700",height:"525"})),(0,t.kt)("p",null,"Tamb\xe9m \xe9 comum aplica\xe7\xf5es que necessitem da comunica\xe7\xe3o RS485. Para isso voc\xea pode facilmente ligar um m\xf3dulo conversor TTL/RS485:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"HC-05",src:o(9351).Z,width:"800",height:"600"})),(0,t.kt)("p",null,"Outra aplica\xe7\xe3o interessante para comunica\xe7\xe3o e o uso de m\xf3dulos Bluetooth. Esse tipo de m\xf3dulo pode ser facilmente ligado a Franzino tanto para uso dos pinos padr\xf5es de comunica\xe7\xe3o TX e RX quanto para comunica\xe7\xe3o soft serial:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Conversor RS485",src:o(7851).Z,width:"800",height:"277"})),(0,t.kt)("p",null,"Como observado acima, h\xe1 muitas possibilidades de comunica\xe7\xf5es e voc\xea pode facilmente ligar outros m\xf3dulos para diversas aplica\xe7\xf5es conforme sua necessidade."),(0,t.kt)("h2",{id:"limita\xe7\xf5es-da-franzino"},"Limita\xe7\xf5es da Franzino"),(0,t.kt)("p",null,"A Franzino \xe9 uma placa standalone que possui diversas vantagens. Por\xe9m como foi desenvolvida em face simples e com o m\xednimo de componente necess\xe1rios para o uso do microcontrolador, possui algumas limita\xe7\xf5es em rela\xe7\xe3o ao Arduino UNO, que s\xe3o:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"N\xe3o h\xe1 regulador 3,3 V, dessa forma o pino 3.3V n\xe3o est\xe1 conectado;"),(0,t.kt)("li",{parentName:"ul"},"O pino Vin n\xe3o est\xe1 conectado a alimenta\xe7\xe3o;"),(0,t.kt)("li",{parentName:"ul"},"Os pinos SCL e SDA n\xe3o est\xe3o conectados as pinos A4 e A5;"),(0,t.kt)("li",{parentName:"ul"},"N\xe3o possui conversor USB/Serial"),(0,t.kt)("li",{parentName:"ul"},"Precisa de um conversor USB/Serial para upload dos sketchs")),(0,t.kt)("h2",{id:"alimenta\xe7\xe3o"},"Alimenta\xe7\xe3o"),(0,t.kt)("p",null,"A Franzino pode ser alimentada das seguintes formas:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Conector P4 com tens\xe3o de 7,5 V a 20 V como positivo no centro;"),(0,t.kt)("li",{parentName:"ul"},"Pino 5V e GND - tens\xe3o de alimenta\xe7\xe3o fixa em 5 VDC"),(0,t.kt)("li",{parentName:"ul"},"Atrav\xe9s nos pinos VCC e GND dispon\xedveis conector de expans\xe3o serial;")),(0,t.kt)("h2",{id:"aten\xe7\xe3o"},"Aten\xe7\xe3o"),(0,t.kt)("p",null,"N\xe3o LIGAR o VCC do conversor USB/SERIAL a placa se a fonte externa estiver ligada. Nesse caso ligar apenas os pinos DTR, RXI, TXO e GND."),(0,t.kt)("h2",{id:"esquem\xe1tico"},"Esquem\xe1tico"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Esquem\xe1tico",src:o(2020).Z,width:"1664",height:"1109"})),(0,t.kt)("h2",{id:"layout"},"Layout"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Layout",src:o(1247).Z,width:"430",height:"403"})),(0,t.kt)("h2",{id:"licen\xe7a"},"Licen\xe7a"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"CC SA 4.0",src:o(8797).Z,width:"88",height:"31"}),"\nEsta obra est\xe1 licenciada com uma Licen\xe7a Creative Commons Atribui\xe7\xe3o-CompartilhaIgual 4.0 Internacional."),(0,t.kt)("p",null,"Todos os arquivos de projeto est\xe3o dispon\xedveis no Github: ",(0,t.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/Franzino"},"https://github.com/Franzininho/Franzino")),(0,t.kt)("h2",{id:"refer\xeancias"},"Refer\xeancias"),(0,t.kt)("p",null,"Artigo no Embarcados: ",(0,t.kt)("a",{parentName:"p",href:"https://www.embarcados.com.br/franzino-open-hardware-de-baixo-custo/"},"https://www.embarcados.com.br/franzino-open-hardware-de-baixo-custo/")))}p.isMDXComponent=!0},8797:(e,a,o)=>{o.d(a,{Z:()=>n});const n="data:image/png;base64,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"},1522:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/conversor_ttl_rs232-5c8a9cecd3ae56c9e8cbf534d350bfba.png"},2020:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/esquematico-f80fb98cd1e79255d7cf909cdb8d636e.png"},1932:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/franzino-eb728ef66abfa87176f4bb5661f2a703.jpg"},9351:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/hc-05-15f3ef2c9539c2a12410dd16c727a007.png"},1247:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/layout-6c5a4766199ec41bc01e5717b83feb2b.png"},3798:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/ligacao_conversor-29c3b68ee0e2d48f071f37ed5149e5ef.jpg"},4864:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/pinout-c655298a464993df025640894e5bba5e.png"},7851:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/rs485-12a066d6983174f1cfbb1d931b2ef091.png"}}]); \ No newline at end of file diff --git a/en/assets/js/27079279.f2639374.js b/en/assets/js/27079279.f2639374.js new file mode 100755 index 000000000..f5e1a9171 --- /dev/null +++ b/en/assets/js/27079279.f2639374.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[468],{5372:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>t,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var o=a(17624),i=a(95788);const r={id:"franzino",title:"Placa Franzino",slug:"/Franzino/franzino",description:"Detalhes da placa Franzino"},s=void 0,c={id:"Franzino/franzino",title:"Placa Franzino",description:"Detalhes da placa Franzino",source:"@site/docs/Franzino/franzino.md",sourceDirName:"Franzino",slug:"/Franzino/franzino",permalink:"/en/docs/Franzino/franzino",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Franzino/franzino.md",tags:[],version:"current",frontMatter:{id:"franzino",title:"Placa Franzino",slug:"/Franzino/franzino",description:"Detalhes da placa Franzino"},sidebar:"docs",previous:{title:"Placa Franzininho Tiny",permalink:"/en/docs/franzininho-tiny/franzininho-tiny"},next:{title:"Upload via conversor USB/SERIAL",permalink:"/en/docs/Franzino/upload-conversor-serial"}},t={},d=[{value:"Caracter\xedsticas",id:"caracter\xedsticas",level:2},{value:"Limita\xe7\xf5es da Franzino",id:"limita\xe7\xf5es-da-franzino",level:2},{value:"Alimenta\xe7\xe3o",id:"alimenta\xe7\xe3o",level:2},{value:"Aten\xe7\xe3o",id:"aten\xe7\xe3o",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:2},{value:"Layout",id:"layout",level:2},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Refer\xeancias",id:"refer\xeancias",level:2}];function l(e){const n={a:"a",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,i.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Placa Franzino",src:a(66048).c+"",width:"1999",height:"1125"})}),"\n",(0,o.jsx)(n.p,{children:"A placa Franzino \xe9 um Arduino standalone de baixo custo. Como seu pr\xf3prio nome sugere, \xe9 uma placa enxuta que possui os componentes b\xe1sicos para que voc\xea possa usar o microcontrolador ATmega328, tanto para estudo quanto para a aplica\xe7\xf5es em projetos."}),"\n",(0,o.jsx)(n.p,{children:"Diferente dos standalones dispon\xedveis no mercado, a placa Franzino possui pinagem Arduino UNO Rev 3 e conector para f\xe1cil liga\xe7\xe3o da interface serial. A facilidade de acesso aos pinos da interface serial, possibilita que voc\xea ligue m\xf3dulos de comunica\xe7\xe3o conforme a necessidade do projeto. Voc\xea conseguir\xe1 facilmente ligar conversores de n\xedveis seriais como: USB, RS232, RS485 e at\xe9 mesmo um m\xf3dulo Bluetooth, sem a necessidade do uso de shields."}),"\n",(0,o.jsx)(n.p,{children:"A Franzino vem com o bootloader do Arduino UNO facilitando o processo de upload do seu scketch. Voc\xea poder\xe1 facilmente fazer o upload do seu sketch para placa usando um conversor USB/Serial, seguindo os mesmos passos que j\xe1 est\xe1 acostumado a fazer com a placa Arduino UNO."}),"\n",(0,o.jsx)(n.h2,{id:"caracter\xedsticas",children:"Caracter\xedsticas"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Pinagem Padr\xe3o UNO R3;"}),"\n",(0,o.jsx)(n.li,{children:"Microcontrolador ATmega328 pu ATmega328P;"}),"\n",(0,o.jsx)(n.li,{children:"Alimenta\xe7\xe3o: 7,5 V \xe0 20 V DC;"}),"\n",(0,o.jsx)(n.li,{children:"Prote\xe7\xe3o contra invers\xe3o de polaridade da fonte;"}),"\n",(0,o.jsx)(n.li,{children:"Conector para liga\xe7\xe3o de interface serial;"}),"\n",(0,o.jsx)(n.li,{children:"LED para indica\xe7\xe3o de alimenta\xe7\xe3o;"}),"\n",(0,o.jsx)(n.li,{children:"LED conectado ao pino 13 para uso geral"}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"A seguir \xe9 apresentada a pinagem para interface serial:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"pinagem",src:a(59212).c+"",width:"960",height:"720"})}),"\n",(0,o.jsx)(n.p,{children:"Os pino D2 e D4 podem ser utilizados para uma comunica\xe7\xe3o soft serial, como pino de controle da comunica\xe7\xe3o RS485 ou outras aplica\xe7\xf5es de entrada ou sa\xedda."}),"\n",(0,o.jsx)(n.p,{children:"Outra vantagem interessante \xe9 que as linhas de alimenta\xe7\xe3o(VCC e GND) tamb\xe9m est\xe3o dispon\xedveis nesse conector."}),"\n",(0,o.jsx)(n.p,{children:"Assim, com esse conector voc\xea pode facilmente ligar um conversor USB/Serial para comunica\xe7\xe3o com um computador, seja para upload dos sketchs quanto para troca de informa\xe7\xf5es."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"ligacao_conversor USB Serial",src:a(40624).c+"",width:"1133",height:"528"})}),"\n",(0,o.jsx)(n.p,{children:"Se o seu projeto n\xe3o necessitar da comunica\xe7\xe3o USB/Serial durante o seu funcionamento, voc\xea poder\xe1 usar o mesmo conversor para fazer upload em outra Franzinos."}),"\n",(0,o.jsx)(n.p,{children:"Algumas aplica\xe7\xf5es necessitam de comunica\xe7\xe3o serial no padr\xe3o RS232. Dessa forma voc\xea pode ligar facilmente um conversor TTL/RS232."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"conversor_ttl_rs232.png",src:a(79744).c+"",width:"700",height:"525"})}),"\n",(0,o.jsx)(n.p,{children:"Tamb\xe9m \xe9 comum aplica\xe7\xf5es que necessitem da comunica\xe7\xe3o RS485. Para isso voc\xea pode facilmente ligar um m\xf3dulo conversor TTL/RS485:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"HC-05",src:a(97108).c+"",width:"800",height:"600"})}),"\n",(0,o.jsx)(n.p,{children:"Outra aplica\xe7\xe3o interessante para comunica\xe7\xe3o e o uso de m\xf3dulos Bluetooth. Esse tipo de m\xf3dulo pode ser facilmente ligado a Franzino tanto para uso dos pinos padr\xf5es de comunica\xe7\xe3o TX e RX quanto para comunica\xe7\xe3o soft serial:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Conversor RS485",src:a(56596).c+"",width:"800",height:"277"})}),"\n",(0,o.jsx)(n.p,{children:"Como observado acima, h\xe1 muitas possibilidades de comunica\xe7\xf5es e voc\xea pode facilmente ligar outros m\xf3dulos para diversas aplica\xe7\xf5es conforme sua necessidade."}),"\n",(0,o.jsx)(n.h2,{id:"limita\xe7\xf5es-da-franzino",children:"Limita\xe7\xf5es da Franzino"}),"\n",(0,o.jsx)(n.p,{children:"A Franzino \xe9 uma placa standalone que possui diversas vantagens. Por\xe9m como foi desenvolvida em face simples e com o m\xednimo de componente necess\xe1rios para o uso do microcontrolador, possui algumas limita\xe7\xf5es em rela\xe7\xe3o ao Arduino UNO, que s\xe3o:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"N\xe3o h\xe1 regulador 3,3 V, dessa forma o pino 3.3V n\xe3o est\xe1 conectado;"}),"\n",(0,o.jsx)(n.li,{children:"O pino Vin n\xe3o est\xe1 conectado a alimenta\xe7\xe3o;"}),"\n",(0,o.jsx)(n.li,{children:"Os pinos SCL e SDA n\xe3o est\xe3o conectados as pinos A4 e A5;"}),"\n",(0,o.jsx)(n.li,{children:"N\xe3o possui conversor USB/Serial"}),"\n",(0,o.jsx)(n.li,{children:"Precisa de um conversor USB/Serial para upload dos sketchs"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"alimenta\xe7\xe3o",children:"Alimenta\xe7\xe3o"}),"\n",(0,o.jsx)(n.p,{children:"A Franzino pode ser alimentada das seguintes formas:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Conector P4 com tens\xe3o de 7,5 V a 20 V como positivo no centro;"}),"\n",(0,o.jsx)(n.li,{children:"Pino 5V e GND - tens\xe3o de alimenta\xe7\xe3o fixa em 5 VDC"}),"\n",(0,o.jsx)(n.li,{children:"Atrav\xe9s nos pinos VCC e GND dispon\xedveis conector de expans\xe3o serial;"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"aten\xe7\xe3o",children:"Aten\xe7\xe3o"}),"\n",(0,o.jsx)(n.p,{children:"N\xe3o LIGAR o VCC do conversor USB/SERIAL a placa se a fonte externa estiver ligada. Nesse caso ligar apenas os pinos DTR, RXI, TXO e GND."}),"\n",(0,o.jsx)(n.h2,{id:"esquem\xe1tico",children:"Esquem\xe1tico"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Esquem\xe1tico",src:a(13036).c+"",width:"1664",height:"1109"})}),"\n",(0,o.jsx)(n.h2,{id:"layout",children:"Layout"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Layout",src:a(94133).c+"",width:"430",height:"403"})}),"\n",(0,o.jsx)(n.h2,{id:"licen\xe7a",children:"Licen\xe7a"}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.img,{alt:"CC SA 4.0",src:a(3976).c+"",width:"88",height:"31"}),"\nEsta obra est\xe1 licenciada com uma Licen\xe7a Creative Commons Atribui\xe7\xe3o-CompartilhaIgual 4.0 Internacional."]}),"\n",(0,o.jsxs)(n.p,{children:["Todos os arquivos de projeto est\xe3o dispon\xedveis no Github: ",(0,o.jsx)(n.a,{href:"https://github.com/Franzininho/Franzino",children:"https://github.com/Franzininho/Franzino"})]}),"\n",(0,o.jsx)(n.h2,{id:"refer\xeancias",children:"Refer\xeancias"}),"\n",(0,o.jsxs)(n.p,{children:["Artigo no Embarcados: ",(0,o.jsx)(n.a,{href:"https://www.embarcados.com.br/franzino-open-hardware-de-baixo-custo",children:"https://www.embarcados.com.br/franzino-open-hardware-de-baixo-custo"})]})]})}function p(e={}){const{wrapper:n}={...(0,i.MN)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},95788:(e,n,a)=>{a.d(n,{MN:()=>d});var o=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,o)}return a}function s(e){for(var n=1;n=0||(i[a]=e[a]);return i}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var t=o.createContext({}),d=function(e){var n=o.useContext(t),a=n;return e&&(a="function"==typeof e?e(n):s(s({},n),e)),a},l={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},p=o.forwardRef((function(e,n){var a=e.components,i=e.mdxType,r=e.originalType,t=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=d(a),m=i,h=u["".concat(t,".").concat(m)]||u[m]||l[m]||r;return a?o.createElement(h,s(s({ref:n},p),{},{components:a})):o.createElement(h,s({ref:n},p))}));p.displayName="MDXCreateElement"},3976:(e,n,a)=>{a.d(n,{c:()=>o});const o="data:image/png;base64,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"},79744:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/conversor_ttl_rs232-5c8a9cecd3ae56c9e8cbf534d350bfba.png"},13036:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/esquematico-f80fb98cd1e79255d7cf909cdb8d636e.png"},66048:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/franzino-eb728ef66abfa87176f4bb5661f2a703.jpg"},97108:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/hc-05-15f3ef2c9539c2a12410dd16c727a007.png"},94133:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/layout-6c5a4766199ec41bc01e5717b83feb2b.png"},40624:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/ligacao_conversor-29c3b68ee0e2d48f071f37ed5149e5ef.jpg"},59212:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/pinout-c655298a464993df025640894e5bba5e.png"},56596:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/rs485-12a066d6983174f1cfbb1d931b2ef091.png"}}]); \ No newline at end of file diff --git a/en/assets/js/2868cdab.00dcc872.js b/en/assets/js/2868cdab.00dcc872.js new file mode 100755 index 000000000..2be38ac35 --- /dev/null +++ b/en/assets/js/2868cdab.00dcc872.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1784],{49116:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>u});var n=r(17624),o=r(95788);const a={slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},l=void 0,c={permalink:"/en/blog/welcome",source:"@site/blog/2019-05-30-welcome.md",title:"Welcome",description:"Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!",date:"2019-05-30T00:00:00.000Z",tags:[{label:"facebook",permalink:"/en/blog/tags/facebook"},{label:"hello",permalink:"/en/blog/tags/hello"},{label:"docusaurus",permalink:"/en/blog/tags/docusaurus"}],readingTime:.175,hasTruncateMarker:!1,authors:[{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4"}],frontMatter:{slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},unlisted:!1,nextItem:{title:"Hello",permalink:"/en/blog/hello-world"}},s={authorsImageUrls:[void 0]},u=[];function i(e){const t={code:"code",p:"p",...(0,o.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["Blog features are powered by the blog plugin. Simply add files to the ",(0,n.jsx)(t.code,{children:"blog"})," directory. It supports tags as well!"]}),"\n",(0,n.jsx)(t.p,{children:"Delete the whole directory if you don't want the blog features. As simple as that!"})]})}function p(e={}){const{wrapper:t}={...(0,o.MN)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(i,{...e})}):i(e)}},95788:(e,t,r)=>{r.d(t,{MN:()=>u});var n=r(11504);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},i={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),g=u(r),h=o,b=g["".concat(s,".").concat(h)]||g[h]||i[h]||a;return r?n.createElement(b,l(l({ref:t},p),{},{components:r})):n.createElement(b,l({ref:t},p))}));p.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/2868cdab.2ab9aefa.js b/en/assets/js/2868cdab.2ab9aefa.js deleted file mode 100755 index 77c5ad7cd..000000000 --- a/en/assets/js/2868cdab.2ab9aefa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4061],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),i=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=i(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=i(r),m=o,f=p["".concat(c,".").concat(m)]||p[m]||g[m]||a;return r?n.createElement(f,l(l({ref:t},s),{},{components:r})):n.createElement(f,l({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var u={};for(var c in t)hasOwnProperty.call(t,c)&&(u[c]=t[c]);u.originalType=e,u[p]="string"==typeof e?e:o,l[1]=u;for(var i=2;i{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>g,frontMatter:()=>a,metadata:()=>u,toc:()=>i});var n=r(3117),o=(r(7294),r(3905));const a={slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},l=void 0,u={permalink:"/en/blog/welcome",source:"@site/blog/2019-05-30-welcome.md",title:"Welcome",description:"Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!",date:"2019-05-30T00:00:00.000Z",formattedDate:"May 30, 2019",tags:[{label:"facebook",permalink:"/en/blog/tags/facebook"},{label:"hello",permalink:"/en/blog/tags/hello"},{label:"docusaurus",permalink:"/en/blog/tags/docusaurus"}],readingTime:.175,hasTruncateMarker:!1,authors:[{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4"}],frontMatter:{slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},nextItem:{title:"Hello",permalink:"/en/blog/hello-world"}},c={authorsImageUrls:[void 0]},i=[],s={toc:i},p="wrapper";function g(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Blog features are powered by the blog plugin. Simply add files to the ",(0,o.kt)("inlineCode",{parentName:"p"},"blog")," directory. It supports tags as well!"),(0,o.kt)("p",null,"Delete the whole directory if you don't want the blog features. As simple as that!"))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/2e8bb407.15c70e2f.js b/en/assets/js/2e8bb407.15c70e2f.js deleted file mode 100755 index 4661d0c06..000000000 --- a/en/assets/js/2e8bb407.15c70e2f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2687],{3905:(e,a,o)=>{o.d(a,{Zo:()=>m,kt:()=>f});var n=o(7294);function s(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function t(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var a=1;a=0||(s[o]=e[o]);return s}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(s[o]=e[o])}return s}var l=n.createContext({}),p=function(e){var a=n.useContext(l),o=a;return e&&(o="function"==typeof e?e(a):r(r({},a),e)),o},m=function(e){var a=p(e.components);return n.createElement(l.Provider,{value:a},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},c=n.forwardRef((function(e,a){var o=e.components,s=e.mdxType,t=e.originalType,l=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),d=p(o),c=s,f=d["".concat(l,".").concat(c)]||d[c]||u[c]||t;return o?n.createElement(f,r(r({ref:a},m),{},{components:o})):n.createElement(f,r({ref:a},m))}));function f(e,a){var o=arguments,s=a&&a.mdxType;if("string"==typeof e||s){var t=o.length,r=new Array(t);r[0]=c;var i={};for(var l in a)hasOwnProperty.call(a,l)&&(i[l]=a[l]);i.originalType=e,i[d]="string"==typeof e?e:s,r[1]=i;for(var p=2;p{o.r(a),o.d(a,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>t,metadata:()=>i,toc:()=>p});var n=o(3117),s=(o(7294),o(3905));const t={id:"franzininho-wifi-espidf-00",title:"Primeiros Passos com ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/primeiros-passos",description:"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF",author:"F\xe1bio Souza"},r=void 0,i={unversionedId:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00",id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00",title:"Primeiros Passos com ESP-IDF",description:"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x00-Primeiros-passos.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/primeiros-passos",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x00-Primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-00",title:"Primeiros Passos com ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/primeiros-passos",description:"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF",author:"F\xe1bio Souza"},sidebar:"docs",previous:{title:"Como simular a Franzininho WiFi no Wokwi",permalink:"/en/docs/franzininho-wifi/wokwi/primeiros-passos"},next:{title:"Hello World! ESP-IDF",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf"}},l={},p=[{value:"Introdu\xe7\xe3o",id:"introdu\xe7\xe3o",level:2},{value:"Passo 1 - Instala\xe7\xe3o dos pr\xe9-requisitos",id:"passo-1---instala\xe7\xe3o-dos-pr\xe9-requisitos",level:2},{value:"Passo 2 - Instala\xe7\xe3o do ESP-IDF",id:"passo-2---instala\xe7\xe3o-do-esp-idf",level:2},{value:"Linux e macOS",id:"linux-e-macos",level:3},{value:"Windows",id:"windows",level:3},{value:"Instalando O ESP-IDF e ferramentas",id:"instalando-o-esp-idf-e-ferramentas",level:3},{value:"Windows",id:"windows-1",level:4},{value:"Linux e macOS",id:"linux-e-macos-1",level:4},{value:"Configurando as vari\xe1veis de ambientes",id:"configurando-as-vari\xe1veis-de-ambientes",level:3},{value:"Windows",id:"windows-2",level:4},{value:"Linux e macOS",id:"linux-e-macos-2",level:4},{value:"Passo 3 - Criando um novo projeto",id:"passo-3---criando-um-novo-projeto",level:2},{value:"Copiando um projeto exemplo",id:"copiando-um-projeto-exemplo",level:3},{value:"Windows",id:"windows-3",level:4},{value:"Linux e macOS",id:"linux-e-macos-3",level:4},{value:"Configura\xe7\xe3o",id:"configura\xe7\xe3o",level:3},{value:"Windows",id:"windows-4",level:4},{value:"Linux e macOS",id:"linux-e-macos-4",level:4},{value:"Compilando o projeto em modo DFU",id:"compilando-o-projeto-em-modo-dfu",level:3},{value:"Compila\xe7\xe3o, grava\xe7\xe3o e monitor em modo normal",id:"compila\xe7\xe3o-grava\xe7\xe3o-e-monitor-em-modo-normal",level:3}],m={toc:p},d="wrapper";function u(e){let{components:a,...t}=e;return(0,s.kt)(d,(0,n.Z)({},m,t,{components:a,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF (Espressif IoT Development Framework) para trabalhar com a Franzininho WiFi que usa o ESP32-S2 da Espressif."),(0,s.kt)("p",null,"Ao final, faremos um exemplo simples para compilar, gravar e monitorar usando o ESP-IDF, assim, garantiremos que tudo estar\xe1 funcionando."),(0,s.kt)("h2",{id:"introdu\xe7\xe3o"},"Introdu\xe7\xe3o"),(0,s.kt)("p",null,"Para essa configura\xe7\xe3o, vamos instalar o ESP-IDF e us\xe1-lo atrav\xe9s de linha de comando. Caso voc\xea queira usar o IDF integrado a ambientes de desenvolvimento integrado (IDE) como VScode e Eclipse, confira os seguintes links:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"https://github.com/espressif/idf-eclipse-plugin"},"Eclipse Plugin")),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"https://github.com/espressif/vscode-esp-idf-extension"},"VS Code Extension"))),(0,s.kt)("p",null,"Voc\xea poder\xe1 instalar o ESP-IDF no seu sistema operacional preferido (Linux, Windows, macOS)."),(0,s.kt)("p",null,"Para a experi\xeancia completa, voc\xea precisar\xe1 de uma placa Franzininho WiFi, Computador: com Windows, Linux ou macOS"),(0,s.kt)("h2",{id:"passo-1---instala\xe7\xe3o-dos-pr\xe9-requisitos"},"Passo 1 - Instala\xe7\xe3o dos pr\xe9-requisitos"),(0,s.kt)("p",null,"Algumas ferramentas precisam ser instaladas no computador antes de prosseguir para as pr\xf3ximas etapas. Siga os links abaixo para obter as instru\xe7\xf5es para o seu sistema operacional:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/windows-setup.html"},"Windows")),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/linux-setup.html"},"Linux")),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/macos-setup.html"},"Mac OS"))),(0,s.kt)("p",null,"\xc9 muito importante a instala\xe7\xe3o de todos os pr\xe9-requisitos."),(0,s.kt)("h2",{id:"passo-2---instala\xe7\xe3o-do-esp-idf"},"Passo 2 - Instala\xe7\xe3o do ESP-IDF"),(0,s.kt)("p",null,"Nessa etapa vamos instalar o ESP-IDF e conjunto de ferramentas e bibliotecas. Vamos usar o c\xf3digo mantido pela Espressif no reposit\xf3rio do ",(0,s.kt)("a",{parentName:"p",href:"https://github.com/espressif/esp-idf"},"ESP-IDF")),(0,s.kt)("p",null,"O ESP-IDF \xe9 o framework oficial da Espressif para o desenvolvimento de aplica\xe7\xf5es parar toda a fam\xedlia ESP32. O procedimento apresentado aqui servir\xe1 para trabalhar com toda a fam\xedlia ESP32. Por\xe9m, vamos dar foco ao ESP32-S2 que \xe9 usado na Franzininho WiFi."),(0,s.kt)("h3",{id:"linux-e-macos"},"Linux e macOS"),(0,s.kt)("p",null,"Abra o terminal e execute:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir -p ~/esp\ncd ~/esp\ngit clone --recursive https://github.com/espressif/esp-idf.git\n")),(0,s.kt)("p",null,"O ESP-IDF ser\xe1 baixado no seguinte reposit\xf3rio ",(0,s.kt)("inlineCode",{parentName:"p"},"~/esp/esp-idf"),"."),(0,s.kt)("h3",{id:"windows"},"Windows"),(0,s.kt)("p",null,"Al\xe9m de instalar as ferramentas, o ",(0,s.kt)("a",{parentName:"p",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/windows-setup.html#get-started-windows-tools-installer"},"ESP-IDF Tools Installer para Windows")," apresentado no passo 1 ele tamb\xe9m baixa uma c\xf3pia do ESP-IDF. Dessa forma voc\xea n\xe3o precisar\xe1 baixar o ESP-IDF agora, se j\xe1 tiver baixado anteriormente junto aos pr\xe9-requisitos."),(0,s.kt)("p",null,"Se desejar fazer o download do ESP-IDF sem a ajuda do ESP-IDF Tools Installer, consulte ",(0,s.kt)("a",{parentName:"p",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/windows-setup-scratch.html#get-esp-idf-windows-command-line"},"estas instru\xe7\xf5es"),"."),(0,s.kt)("h3",{id:"instalando-o-esp-idf-e-ferramentas"},"Instalando O ESP-IDF e ferramentas"),(0,s.kt)("p",null,"Al\xe9m do ESP-IDF, voc\xea tamb\xe9m precisa instalar as ferramentas usadas pelo ESP-IDF, como compilador, depurador, pacotes Python, etc."),(0,s.kt)("h4",{id:"windows-1"},"Windows"),(0,s.kt)("p",null,"O ESP-IDF Tools Installer para Windows apresentado no passo 1 instala todas as ferramentas necess\xe1rias."),(0,s.kt)("p",null,"Se voc\xea deseja instalar as ferramentas sem a ajuda do ESP-IDF Tools Installer, abra o Prompt de Comando e siga estas etapas:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd %userprofile%\\esp\\esp-idf\ninstall.bat\n")),(0,s.kt)("p",null,"Ou no Windows PowerShell"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/esp/esp-idf\n./install.ps1\n")),(0,s.kt)("h4",{id:"linux-e-macos-1"},"Linux e macOS"),(0,s.kt)("p",null,"No Linux ou macOS h\xe1 um script para instala\xe7\xe3o.Abra o terminal e execute:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/esp/esp-idf\n./install.sh\n")),(0,s.kt)("p",null,"Ou se tiver usando o Fish:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/esp/esp-idf\n./install.fish\n")),(0,s.kt)("h3",{id:"configurando-as-vari\xe1veis-de-ambientes"},"Configurando as vari\xe1veis de ambientes"),(0,s.kt)("p",null,"As ferramentas instaladas ainda n\xe3o foram adicionadas \xe0 vari\xe1vel de ambiente PATH. Para tornar as ferramentas utiliz\xe1veis na linha de comando, algumas vari\xe1veis de ambiente devem ser definidas. ESP-IDF fornece alguns scripts que ajudam nesse processo."),(0,s.kt)("h4",{id:"windows-2"},"Windows"),(0,s.kt)("p",null,"O ESP-IDF Tools Installer para Windows cria um atalho \u201cESP-IDF Command Prompt\u201d no menu Iniciar. Este atalho abre o Prompt de Comando e configura todas as vari\xe1veis de ambiente necess\xe1rias. Voc\xea pode abrir este atalho e prosseguir para a pr\xf3xima etapa."),(0,s.kt)("p",null,"Caso n\xe3o funcione e voc\xea precise configurar manualmente, execute os seguintes comandos:"),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"Prompt de Comando"),":"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"%userprofile%\\esp\\esp-idf\\export.bat\n")),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"Windows PowerShell"),":"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},".$HOME/esp/esp-idf/export.ps1\n")),(0,s.kt)("h4",{id:"linux-e-macos-2"},"Linux e macOS"),(0,s.kt)("p",null,"No terminal execute:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},". $HOME/esp/esp-idf/export.sh\n")),(0,s.kt)("p",null,"Ou no Fish(suportado apenas em vers\xf5es a partir da 3.0.0):"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},". $HOME/esp/esp-idf/export.fish\n")),(0,s.kt)("admonition",{title:"Importante",type:"important"},(0,s.kt)("p",{parentName:"admonition"},"Voc\xea precisa fazer isso toda vez que iniciar o terminal para usar o ESP-IDF.")),(0,s.kt)("h2",{id:"passo-3---criando-um-novo-projeto"},"Passo 3 - Criando um novo projeto"),(0,s.kt)("p",null,"Agora que j\xe1 temos as ferramentas instaladas, vamos fazer um exemplo para validar o funcionamento das mesmas. Vamos executar o exemplo blink que j\xe1 vem no IDF."),(0,s.kt)("h3",{id:"copiando-um-projeto-exemplo"},"Copiando um projeto exemplo"),(0,s.kt)("p",null,"Vamos copiar o projeto blink para preservarmos o exemplo presente na pasta do IDF:"),(0,s.kt)("h4",{id:"windows-3"},"Windows"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd %userprofile%\\esp\nxcopy /e /i %IDF_PATH%\\examples\\get-started\\blink blink\n")),(0,s.kt)("h4",{id:"linux-e-macos-3"},"Linux e macOS"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/esp\ncp -r $IDF_PATH/examples/get-started/blink .\n")),(0,s.kt)("p",null,"Fique a vontade para testar os outros exemplos tamb\xe9m."),(0,s.kt)("p",null,"O sistema de compila\xe7\xe3o ESP-IDF n\xe3o oferece suporte a espa\xe7os nos caminhos para o ESP-IDF ou para projetos."),(0,s.kt)("h3",{id:"configura\xe7\xe3o"},"Configura\xe7\xe3o"),(0,s.kt)("p",null,"Agora vamos configurar o target para qual ser\xe1 compilado e j\xe1 fazer uma configura\xe7\xe3o no menuconfig. No nosso caso vamos trabalhar com o ESP32-S2:"),(0,s.kt)("h4",{id:"windows-4"},"Windows"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd %userprofile%\\esp\\blink\nidf.py set-target esp32s2\nidf.py menuconfig\n")),(0,s.kt)("h4",{id:"linux-e-macos-4"},"Linux e macOS"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/esp/blink\nidf.py set-target esp32s2\nidf.py menuconfig\n")),(0,s.kt)("p",null,"Ser\xe1 aberto o menuconfig:\n",(0,s.kt)("img",{alt:"menuconfig",src:o(2315).Z,width:"866",height:"562"})),(0,s.kt)("p",null,"Acesse a op\xe7\xe3o Component config ---\x3e\n",(0,s.kt)("img",{alt:"menuconfig",src:o(9165).Z,width:"866",height:"562"})),(0,s.kt)("p",null,"Em seguida ESP System Settings ---\x3e\n",(0,s.kt)("img",{alt:"menuconfig",src:o(9630).Z,width:"866",height:"562"})),(0,s.kt)("p",null,"Agora selecione Channel for console output (Default: UART0) ---\x3e\n",(0,s.kt)("img",{alt:"menuconfig",src:o(7666).Z,width:"866",height:"562"})),(0,s.kt)("p",null,"E por fim, selecione (X) USB CDC:\n",(0,s.kt)("img",{alt:"menuconfig",src:o(7642).Z,width:"866",height:"562"})),(0,s.kt)("p",null,"Salve(S), Enter, enter, Saia do menu(ESC)"),(0,s.kt)("p",null,"Essa configura\xe7\xe3o permitir\xe1 que usemos a USB no pr\xf3ximo upload."),(0,s.kt)("admonition",{title:"Importante",type:"important"},(0,s.kt)("p",{parentName:"admonition"},"Sempre que iniciar um projeto novo fa\xe7a essas configura\xe7\xe3o para que continue usando a USB como interface de programa\xe7\xe3o.")),(0,s.kt)("p",null,"Para mais detalhes acesse:"),(0,s.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/zg9IMDaoImA",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,s.kt)("h3",{id:"compilando-o-projeto-em-modo-dfu"},"Compilando o projeto em modo DFU"),(0,s.kt)("p",null,"A primeira compila\xe7\xe3o n\xf3s vamos fazer usando o modo DFU, que j\xe1 vem por padr\xe3o no ESP32-S2 permitindo o upload atrav\xe9s da USB:"),(0,s.kt)("p",null,"Para crie a imagem DFU:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"idf.py dfu\n")),(0,s.kt)("p",null,"A primeira compila\xe7\xe3o pode demorar um pouco. Da at\xe9 pra ir pegar um caf\xe9 ;)"),(0,s.kt)("p",null,"Ap\xf3s a compila\xe7\xe3o, conecte a Franzininho WiFi no computador. Antes de fazermos o upload \xe9 necess\xe1rio entrar no modo DFU. Para entrar no modo DFU pressione as teclas na seguinte sequencia:"),(0,s.kt)("ol",null,(0,s.kt)("li",{parentName:"ol"},"pressione e segure a tecla BOOT"),(0,s.kt)("li",{parentName:"ol"},"pressione rapidamente e solte a tecla RESET"),(0,s.kt)("li",{parentName:"ol"},"solte a tecla BOOT")),(0,s.kt)("p",null,"Dessa forma a placa entrar\xe1 no modo DFU e poder\xe1 receber o firmware atrav\xe9s da USB."),(0,s.kt)("p",null,"Para fazer a grava\xe7\xe3o, digite:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"idf.py dfu-flash\n")),(0,s.kt)("admonition",{title:"Dica",type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"Caso a grava\xe7\xe3o atrav\xe9s da USB n\xe3o funcione, veja esse ",(0,s.kt)("a",{parentName:"p",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-guides/dfu.html#udev-rule-linux-only"},"link com as instru\xe7\xf5es de configura\xe7\xf5es da USB"))),(0,s.kt)("p",null,"Ap\xf3s alguns segundos a placa estar\xe1 gravada."),(0,s.kt)("p",null,"Pressione novamente o bot\xe3o RESET."),(0,s.kt)("h3",{id:"compila\xe7\xe3o-grava\xe7\xe3o-e-monitor-em-modo-normal"},"Compila\xe7\xe3o, grava\xe7\xe3o e monitor em modo normal"),(0,s.kt)("p",null,"Agora voc\xea poder\xe1 compilar, gravar e monitorar usando a porta USB. Esse processo \xe9 id\xeantico ao que fazemos para desenvolver com o ESP32:"),(0,s.kt)("p",null,"Compilar:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"idf.py build\n")),(0,s.kt)("p",null,"Gravar:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"idf.py -p PORT [-b BAUD] flash\n")),(0,s.kt)("p",null,"Monitorar:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"idf.py -p /dev/ttyUSB0 monitor\n")),(0,s.kt)("p",null,"Maravilha, voc\xea configurou o ambiente para trabalhar com o ESP-IDF."),(0,s.kt)("p",null,"Caso queira trabalhar com a extens\xe3o para VSCODE, confira o video:"),(0,s.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/rxMg_zxO0q0",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}u.isMDXComponent=!0},2315:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/1-cf224b69c503620285cee56dc7457999.png"},9165:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/2-4806954a1b4006bb78b6e50a23eba7b5.png"},9630:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/3-c0afeaa310f4501913ccaf8190c00334.png"},7642:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/4-c250e820888c2d31288214e41376a1dd.png"},7666:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/5-0821b04d00bb4ccc716759540cf7954a.png"}}]); \ No newline at end of file diff --git a/en/assets/js/2e8bb407.435f7c2f.js b/en/assets/js/2e8bb407.435f7c2f.js new file mode 100755 index 000000000..dbc707954 --- /dev/null +++ b/en/assets/js/2e8bb407.435f7c2f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5240],{28388:(e,s,a)=>{a.r(s),a.d(s,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>t,toc:()=>l});var o=a(17624),n=a(95788);const i={id:"franzininho-wifi-espidf-00",title:"Primeiros Passos com ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/primeiros-passos",description:"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF",author:"F\xe1bio Souza"},r=void 0,t={id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00",title:"Primeiros Passos com ESP-IDF",description:"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x00-Primeiros-passos.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/primeiros-passos",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x00-Primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-00",title:"Primeiros Passos com ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/primeiros-passos",description:"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF",author:"F\xe1bio Souza"},sidebar:"docs",previous:{title:"Como simular a Franzininho WiFi no Wokwi",permalink:"/en/docs/franzininho-wifi/wokwi/primeiros-passos"},next:{title:"Hello World! ESP-IDF",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf"}},d={},l=[{value:"Introdu\xe7\xe3o",id:"introdu\xe7\xe3o",level:2},{value:"Passo 1 - Instala\xe7\xe3o dos pr\xe9-requisitos",id:"passo-1---instala\xe7\xe3o-dos-pr\xe9-requisitos",level:2},{value:"Passo 2 - Instala\xe7\xe3o do ESP-IDF",id:"passo-2---instala\xe7\xe3o-do-esp-idf",level:2},{value:"Linux e macOS",id:"linux-e-macos",level:3},{value:"Windows",id:"windows",level:3},{value:"Instalando O ESP-IDF e ferramentas",id:"instalando-o-esp-idf-e-ferramentas",level:3},{value:"Windows",id:"windows-1",level:4},{value:"Linux e macOS",id:"linux-e-macos-1",level:4},{value:"Configurando as vari\xe1veis de ambientes",id:"configurando-as-vari\xe1veis-de-ambientes",level:3},{value:"Windows",id:"windows-2",level:4},{value:"Linux e macOS",id:"linux-e-macos-2",level:4},{value:"Passo 3 - Criando um novo projeto",id:"passo-3---criando-um-novo-projeto",level:2},{value:"Copiando um projeto exemplo",id:"copiando-um-projeto-exemplo",level:3},{value:"Windows",id:"windows-3",level:4},{value:"Linux e macOS",id:"linux-e-macos-3",level:4},{value:"Configura\xe7\xe3o",id:"configura\xe7\xe3o",level:3},{value:"Windows",id:"windows-4",level:4},{value:"Linux e macOS",id:"linux-e-macos-4",level:4},{value:"Compilando o projeto em modo DFU",id:"compilando-o-projeto-em-modo-dfu",level:3},{value:"Compila\xe7\xe3o, grava\xe7\xe3o e monitor em modo normal",id:"compila\xe7\xe3o-grava\xe7\xe3o-e-monitor-em-modo-normal",level:3}];function c(e){const s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,n.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.p,{children:"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF (Espressif IoT Development Framework) para trabalhar com a Franzininho WiFi que usa o ESP32-S2 da Espressif."}),"\n",(0,o.jsx)(s.p,{children:"Ao final, faremos um exemplo simples para compilar, gravar e monitorar usando o ESP-IDF, assim, garantiremos que tudo estar\xe1 funcionando."}),"\n",(0,o.jsx)(s.h2,{id:"introdu\xe7\xe3o",children:"Introdu\xe7\xe3o"}),"\n",(0,o.jsx)(s.p,{children:"Para essa configura\xe7\xe3o, vamos instalar o ESP-IDF e us\xe1-lo atrav\xe9s de linha de comando. Caso voc\xea queira usar o IDF integrado a ambientes de desenvolvimento integrado (IDE) como VScode e Eclipse, confira os seguintes links:"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"https://github.com/espressif/idf-eclipse-plugin",children:"Eclipse Plugin"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"https://github.com/espressif/vscode-esp-idf-extension",children:"VS Code Extension"})}),"\n"]}),"\n",(0,o.jsx)(s.p,{children:"Voc\xea poder\xe1 instalar o ESP-IDF no seu sistema operacional preferido (Linux, Windows, macOS)."}),"\n",(0,o.jsx)(s.p,{children:"Para a experi\xeancia completa, voc\xea precisar\xe1 de uma placa Franzininho WiFi, Computador: com Windows, Linux ou macOS"}),"\n",(0,o.jsx)(s.h2,{id:"passo-1---instala\xe7\xe3o-dos-pr\xe9-requisitos",children:"Passo 1 - Instala\xe7\xe3o dos pr\xe9-requisitos"}),"\n",(0,o.jsx)(s.p,{children:"Algumas ferramentas precisam ser instaladas no computador antes de prosseguir para as pr\xf3ximas etapas. Siga os links abaixo para obter as instru\xe7\xf5es para o seu sistema operacional:"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/windows-setup.html",children:"Windows"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/linux-setup.html",children:"Linux"})}),"\n",(0,o.jsx)(s.li,{children:(0,o.jsx)(s.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/macos-setup.html",children:"Mac OS"})}),"\n"]}),"\n",(0,o.jsx)(s.p,{children:"\xc9 muito importante a instala\xe7\xe3o de todos os pr\xe9-requisitos."}),"\n",(0,o.jsx)(s.h2,{id:"passo-2---instala\xe7\xe3o-do-esp-idf",children:"Passo 2 - Instala\xe7\xe3o do ESP-IDF"}),"\n",(0,o.jsxs)(s.p,{children:["Nessa etapa vamos instalar o ESP-IDF e conjunto de ferramentas e bibliotecas. Vamos usar o c\xf3digo mantido pela Espressif no reposit\xf3rio do ",(0,o.jsx)(s.a,{href:"https://github.com/espressif/esp-idf",children:"ESP-IDF"})]}),"\n",(0,o.jsx)(s.p,{children:"O ESP-IDF \xe9 o framework oficial da Espressif para o desenvolvimento de aplica\xe7\xf5es parar toda a fam\xedlia ESP32. O procedimento apresentado aqui servir\xe1 para trabalhar com toda a fam\xedlia ESP32. Por\xe9m, vamos dar foco ao ESP32-S2 que \xe9 usado na Franzininho WiFi."}),"\n",(0,o.jsx)(s.h3,{id:"linux-e-macos",children:"Linux e macOS"}),"\n",(0,o.jsx)(s.p,{children:"Abra o terminal e execute:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"mkdir -p ~/esp\ncd ~/esp\ngit clone --recursive https://github.com/espressif/esp-idf.git\n"})}),"\n",(0,o.jsxs)(s.p,{children:["O ESP-IDF ser\xe1 baixado no seguinte reposit\xf3rio ",(0,o.jsx)(s.code,{children:"~/esp/esp-idf"}),"."]}),"\n",(0,o.jsx)(s.h3,{id:"windows",children:"Windows"}),"\n",(0,o.jsxs)(s.p,{children:["Al\xe9m de instalar as ferramentas, o ",(0,o.jsx)(s.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/windows-setup.html#get-started-windows-tools-installer",children:"ESP-IDF Tools Installer para Windows"})," apresentado no passo 1 ele tamb\xe9m baixa uma c\xf3pia do ESP-IDF. Dessa forma voc\xea n\xe3o precisar\xe1 baixar o ESP-IDF agora, se j\xe1 tiver baixado anteriormente junto aos pr\xe9-requisitos."]}),"\n",(0,o.jsxs)(s.p,{children:["Se desejar fazer o download do ESP-IDF sem a ajuda do ESP-IDF Tools Installer, consulte ",(0,o.jsx)(s.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/windows-setup-scratch.html#get-esp-idf-windows-command-line",children:"estas instru\xe7\xf5es"}),"."]}),"\n",(0,o.jsx)(s.h3,{id:"instalando-o-esp-idf-e-ferramentas",children:"Instalando O ESP-IDF e ferramentas"}),"\n",(0,o.jsx)(s.p,{children:"Al\xe9m do ESP-IDF, voc\xea tamb\xe9m precisa instalar as ferramentas usadas pelo ESP-IDF, como compilador, depurador, pacotes Python, etc."}),"\n",(0,o.jsx)(s.h4,{id:"windows-1",children:"Windows"}),"\n",(0,o.jsx)(s.p,{children:"O ESP-IDF Tools Installer para Windows apresentado no passo 1 instala todas as ferramentas necess\xe1rias."}),"\n",(0,o.jsx)(s.p,{children:"Se voc\xea deseja instalar as ferramentas sem a ajuda do ESP-IDF Tools Installer, abra o Prompt de Comando e siga estas etapas:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd %userprofile%\\esp\\esp-idf\ninstall.bat\n"})}),"\n",(0,o.jsx)(s.p,{children:"Ou no Windows PowerShell"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd ~/esp/esp-idf\n./install.ps1\n"})}),"\n",(0,o.jsx)(s.h4,{id:"linux-e-macos-1",children:"Linux e macOS"}),"\n",(0,o.jsx)(s.p,{children:"No Linux ou macOS h\xe1 um script para instala\xe7\xe3o.Abra o terminal e execute:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd ~/esp/esp-idf\n./install.sh\n"})}),"\n",(0,o.jsx)(s.p,{children:"Ou se tiver usando o Fish:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd ~/esp/esp-idf\n./install.fish\n"})}),"\n",(0,o.jsx)(s.h3,{id:"configurando-as-vari\xe1veis-de-ambientes",children:"Configurando as vari\xe1veis de ambientes"}),"\n",(0,o.jsx)(s.p,{children:"As ferramentas instaladas ainda n\xe3o foram adicionadas \xe0 vari\xe1vel de ambiente PATH. Para tornar as ferramentas utiliz\xe1veis na linha de comando, algumas vari\xe1veis de ambiente devem ser definidas. ESP-IDF fornece alguns scripts que ajudam nesse processo."}),"\n",(0,o.jsx)(s.h4,{id:"windows-2",children:"Windows"}),"\n",(0,o.jsx)(s.p,{children:"O ESP-IDF Tools Installer para Windows cria um atalho \u201cESP-IDF Command Prompt\u201d no menu Iniciar. Este atalho abre o Prompt de Comando e configura todas as vari\xe1veis de ambiente necess\xe1rias. Voc\xea pode abrir este atalho e prosseguir para a pr\xf3xima etapa."}),"\n",(0,o.jsx)(s.p,{children:"Caso n\xe3o funcione e voc\xea precise configurar manualmente, execute os seguintes comandos:"}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Prompt de Comando"}),":"]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"%userprofile%\\esp\\esp-idf\\export.bat\n"})}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Windows PowerShell"}),":"]}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:".$HOME/esp/esp-idf/export.ps1\n"})}),"\n",(0,o.jsx)(s.h4,{id:"linux-e-macos-2",children:"Linux e macOS"}),"\n",(0,o.jsx)(s.p,{children:"No terminal execute:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:". $HOME/esp/esp-idf/export.sh\n"})}),"\n",(0,o.jsx)(s.p,{children:"Ou no Fish(suportado apenas em vers\xf5es a partir da 3.0.0):"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:". $HOME/esp/esp-idf/export.fish\n"})}),"\n",(0,o.jsx)(s.admonition,{title:"Importante",type:"important",children:(0,o.jsx)(s.p,{children:"Voc\xea precisa fazer isso toda vez que iniciar o terminal para usar o ESP-IDF."})}),"\n",(0,o.jsx)(s.h2,{id:"passo-3---criando-um-novo-projeto",children:"Passo 3 - Criando um novo projeto"}),"\n",(0,o.jsx)(s.p,{children:"Agora que j\xe1 temos as ferramentas instaladas, vamos fazer um exemplo para validar o funcionamento das mesmas. Vamos executar o exemplo blink que j\xe1 vem no IDF."}),"\n",(0,o.jsx)(s.h3,{id:"copiando-um-projeto-exemplo",children:"Copiando um projeto exemplo"}),"\n",(0,o.jsx)(s.p,{children:"Vamos copiar o projeto blink para preservarmos o exemplo presente na pasta do IDF:"}),"\n",(0,o.jsx)(s.h4,{id:"windows-3",children:"Windows"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd %userprofile%\\esp\nxcopy /e /i %IDF_PATH%\\examples\\get-started\\blink blink\n"})}),"\n",(0,o.jsx)(s.h4,{id:"linux-e-macos-3",children:"Linux e macOS"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd ~/esp\ncp -r $IDF_PATH/examples/get-started/blink .\n"})}),"\n",(0,o.jsx)(s.p,{children:"Fique a vontade para testar os outros exemplos tamb\xe9m."}),"\n",(0,o.jsx)(s.p,{children:"O sistema de compila\xe7\xe3o ESP-IDF n\xe3o oferece suporte a espa\xe7os nos caminhos para o ESP-IDF ou para projetos."}),"\n",(0,o.jsx)(s.h3,{id:"configura\xe7\xe3o",children:"Configura\xe7\xe3o"}),"\n",(0,o.jsx)(s.p,{children:"Agora vamos configurar o target para qual ser\xe1 compilado e j\xe1 fazer uma configura\xe7\xe3o no menuconfig. No nosso caso vamos trabalhar com o ESP32-S2:"}),"\n",(0,o.jsx)(s.h4,{id:"windows-4",children:"Windows"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd %userprofile%\\esp\\blink\nidf.py set-target esp32s2\nidf.py menuconfig\n"})}),"\n",(0,o.jsx)(s.h4,{id:"linux-e-macos-4",children:"Linux e macOS"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"cd ~/esp/blink\nidf.py set-target esp32s2\nidf.py menuconfig\n"})}),"\n",(0,o.jsxs)(s.p,{children:["Ser\xe1 aberto o menuconfig:\n",(0,o.jsx)(s.img,{alt:"menuconfig",src:a(30872).c+"",width:"866",height:"562"})]}),"\n",(0,o.jsxs)(s.p,{children:["Acesse a op\xe7\xe3o Component config ---\x3e\n",(0,o.jsx)(s.img,{alt:"menuconfig",src:a(15548).c+"",width:"866",height:"562"})]}),"\n",(0,o.jsxs)(s.p,{children:["Em seguida ESP System Settings ---\x3e\n",(0,o.jsx)(s.img,{alt:"menuconfig",src:a(86856).c+"",width:"866",height:"562"})]}),"\n",(0,o.jsxs)(s.p,{children:["Agora selecione Channel for console output (Default: UART0) ---\x3e\n",(0,o.jsx)(s.img,{alt:"menuconfig",src:a(36076).c+"",width:"866",height:"562"})]}),"\n",(0,o.jsxs)(s.p,{children:["E por fim, selecione (X) USB CDC:\n",(0,o.jsx)(s.img,{alt:"menuconfig",src:a(93120).c+"",width:"866",height:"562"})]}),"\n",(0,o.jsx)(s.p,{children:"Salve(S), Enter, enter, Saia do menu(ESC)"}),"\n",(0,o.jsx)(s.p,{children:"Essa configura\xe7\xe3o permitir\xe1 que usemos a USB no pr\xf3ximo upload."}),"\n",(0,o.jsx)(s.admonition,{title:"Importante",type:"important",children:(0,o.jsx)(s.p,{children:"Sempre que iniciar um projeto novo fa\xe7a essas configura\xe7\xe3o para que continue usando a USB como interface de programa\xe7\xe3o."})}),"\n",(0,o.jsx)(s.p,{children:"Para mais detalhes acesse:"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/zg9IMDaoImA",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,o.jsx)(s.h3,{id:"compilando-o-projeto-em-modo-dfu",children:"Compilando o projeto em modo DFU"}),"\n",(0,o.jsx)(s.p,{children:"A primeira compila\xe7\xe3o n\xf3s vamos fazer usando o modo DFU, que j\xe1 vem por padr\xe3o no ESP32-S2 permitindo o upload atrav\xe9s da USB:"}),"\n",(0,o.jsx)(s.p,{children:"Para crie a imagem DFU:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"idf.py dfu\n"})}),"\n",(0,o.jsx)(s.p,{children:"A primeira compila\xe7\xe3o pode demorar um pouco. Da at\xe9 pra ir pegar um caf\xe9 ;)"}),"\n",(0,o.jsx)(s.p,{children:"Ap\xf3s a compila\xe7\xe3o, conecte a Franzininho WiFi no computador. Antes de fazermos o upload \xe9 necess\xe1rio entrar no modo DFU. Para entrar no modo DFU pressione as teclas na seguinte sequencia:"}),"\n",(0,o.jsxs)(s.ol,{children:["\n",(0,o.jsx)(s.li,{children:"pressione e segure a tecla BOOT"}),"\n",(0,o.jsx)(s.li,{children:"pressione rapidamente e solte a tecla RESET"}),"\n",(0,o.jsx)(s.li,{children:"solte a tecla BOOT"}),"\n"]}),"\n",(0,o.jsx)(s.p,{children:"Dessa forma a placa entrar\xe1 no modo DFU e poder\xe1 receber o firmware atrav\xe9s da USB."}),"\n",(0,o.jsx)(s.p,{children:"Para fazer a grava\xe7\xe3o, digite:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"idf.py dfu-flash\n"})}),"\n",(0,o.jsx)(s.admonition,{title:"Dica",type:"tip",children:(0,o.jsxs)(s.p,{children:["Caso a grava\xe7\xe3o atrav\xe9s da USB n\xe3o funcione, veja esse ",(0,o.jsx)(s.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-guides/dfu.html#udev-rule-linux-only",children:"link com as instru\xe7\xf5es de configura\xe7\xf5es da USB"})]})}),"\n",(0,o.jsx)(s.p,{children:"Ap\xf3s alguns segundos a placa estar\xe1 gravada."}),"\n",(0,o.jsx)(s.p,{children:"Pressione novamente o bot\xe3o RESET."}),"\n",(0,o.jsx)(s.h3,{id:"compila\xe7\xe3o-grava\xe7\xe3o-e-monitor-em-modo-normal",children:"Compila\xe7\xe3o, grava\xe7\xe3o e monitor em modo normal"}),"\n",(0,o.jsx)(s.p,{children:"Agora voc\xea poder\xe1 compilar, gravar e monitorar usando a porta USB. Esse processo \xe9 id\xeantico ao que fazemos para desenvolver com o ESP32:"}),"\n",(0,o.jsx)(s.p,{children:"Compilar:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"idf.py build\n"})}),"\n",(0,o.jsx)(s.p,{children:"Gravar:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"idf.py -p PORT [-b BAUD] flash\n"})}),"\n",(0,o.jsx)(s.p,{children:"Monitorar:"}),"\n",(0,o.jsx)(s.pre,{children:(0,o.jsx)(s.code,{className:"language-bash",children:"idf.py -p /dev/ttyUSB0 monitor\n"})}),"\n",(0,o.jsx)(s.p,{children:"Maravilha, voc\xea configurou o ambiente para trabalhar com o ESP-IDF."}),"\n",(0,o.jsx)(s.p,{children:"Caso queira trabalhar com a extens\xe3o para VSCODE, confira o video:"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/rxMg_zxO0q0",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function p(e={}){const{wrapper:s}={...(0,n.MN)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},95788:(e,s,a)=>{a.d(s,{MN:()=>l});var o=a(11504);function n(e,s,a){return s in e?Object.defineProperty(e,s,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[s]=a,e}function i(e,s){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);s&&(o=o.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),a.push.apply(a,o)}return a}function r(e){for(var s=1;s=0||(n[a]=e[a]);return n}(e,s);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var d=o.createContext({}),l=function(e){var s=o.useContext(d),a=s;return e&&(a="function"==typeof e?e(s):r(r({},s),e)),a},c={inlineCode:"code",wrapper:function(e){var s=e.children;return o.createElement(o.Fragment,{},s)}},p=o.forwardRef((function(e,s){var a=e.components,n=e.mdxType,i=e.originalType,d=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),m=l(a),u=n,h=m["".concat(d,".").concat(u)]||m[u]||c[u]||i;return a?o.createElement(h,r(r({ref:s},p),{},{components:a})):o.createElement(h,r({ref:s},p))}));p.displayName="MDXCreateElement"},30872:(e,s,a)=>{a.d(s,{c:()=>o});const o=a.p+"assets/images/1-cf224b69c503620285cee56dc7457999.png"},15548:(e,s,a)=>{a.d(s,{c:()=>o});const o=a.p+"assets/images/2-4806954a1b4006bb78b6e50a23eba7b5.png"},86856:(e,s,a)=>{a.d(s,{c:()=>o});const o=a.p+"assets/images/3-c0afeaa310f4501913ccaf8190c00334.png"},93120:(e,s,a)=>{a.d(s,{c:()=>o});const o=a.p+"assets/images/4-c250e820888c2d31288214e41376a1dd.png"},36076:(e,s,a)=>{a.d(s,{c:()=>o});const o=a.p+"assets/images/5-0821b04d00bb4ccc716759540cf7954a.png"}}]); \ No newline at end of file diff --git a/en/assets/js/3570154c.a88eb8e5.js b/en/assets/js/3570154c.a88eb8e5.js deleted file mode 100755 index 9e9b84d27..000000000 --- a/en/assets/js/3570154c.a88eb8e5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3707],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var u=n.createContext({}),c=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=c(e.components);return n.createElement(u.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,u=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),p=c(r),h=o,f=p["".concat(u,".").concat(h)]||p[h]||m[h]||a;return r?n.createElement(f,l(l({ref:t},s),{},{components:r})):n.createElement(f,l({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=h;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i[p]="string"==typeof e?e:o,l[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var n=r(3117),o=(r(7294),r(3905));const a={slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},l=void 0,i={permalink:"/en/blog/hello-world",source:"@site/blog/2019-05-29-hello-world.md",title:"Hello",description:"Welcome to this blog. This blog is created with Docusaurus 2 alpha.",date:"2019-05-29T00:00:00.000Z",formattedDate:"May 29, 2019",tags:[{label:"hello",permalink:"/en/blog/tags/hello"},{label:"docusaurus",permalink:"/en/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4"}],frontMatter:{slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},prevItem:{title:"Welcome",permalink:"/en/blog/welcome"},nextItem:{title:"Hola",permalink:"/en/blog/hola"}},u={authorsImageUrls:[void 0]},c=[],s={toc:c},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to this blog. This blog is created with ",(0,o.kt)("a",{parentName:"p",href:"https://v2.docusaurus.io/"},(0,o.kt)("strong",{parentName:"a"},"Docusaurus 2 alpha")),"."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/3570154c.ebbc3bcd.js b/en/assets/js/3570154c.ebbc3bcd.js new file mode 100755 index 000000000..db0074b8d --- /dev/null +++ b/en/assets/js/3570154c.ebbc3bcd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1052],{86444:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var o=r(17624),n=r(95788);const a={slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},l=void 0,i={permalink:"/en/blog/hello-world",source:"@site/blog/2019-05-29-hello-world.md",title:"Hello",description:"Welcome to this blog. This blog is created with Docusaurus 2 alpha.",date:"2019-05-29T00:00:00.000Z",tags:[{label:"hello",permalink:"/en/blog/tags/hello"},{label:"docusaurus",permalink:"/en/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4"}],frontMatter:{slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},unlisted:!1,prevItem:{title:"Welcome",permalink:"/en/blog/welcome"},nextItem:{title:"Hola",permalink:"/en/blog/hola"}},u={authorsImageUrls:[void 0]},c=[];function s(e){const t={a:"a",p:"p",strong:"strong",...(0,n.MN)(),...e.components};return(0,o.jsxs)(t.p,{children:["Welcome to this blog. This blog is created with ",(0,o.jsx)(t.a,{href:"https://v2.docusaurus.io/",children:(0,o.jsx)(t.strong,{children:"Docusaurus 2 alpha"})}),"."]})}function p(e={}){const{wrapper:t}={...(0,n.MN)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(s,{...e})}):s(e)}},95788:(e,t,r)=>{r.d(t,{MN:()=>c});var o=r(11504);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var u=o.createContext({}),c=function(e){var t=o.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},p=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,u=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),h=c(r),m=n,g=h["".concat(u,".").concat(m)]||h[m]||s[m]||a;return r?o.createElement(g,l(l({ref:t},p),{},{components:r})):o.createElement(g,l({ref:t},p))}));p.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/3ab35d9f.7ce95f0d.js b/en/assets/js/3ab35d9f.7ce95f0d.js deleted file mode 100755 index 1afa9c6d6..000000000 --- a/en/assets/js/3ab35d9f.7ce95f0d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2517],{3905:(e,a,o)=>{o.d(a,{Zo:()=>d,kt:()=>m});var i=o(7294);function t(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function r(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,i)}return o}function n(e){for(var a=1;a=0||(t[o]=e[o]);return t}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var A=i.createContext({}),l=function(e){var a=i.useContext(A),o=a;return e&&(o="function"==typeof e?e(a):n(n({},a),e)),o},d=function(e){var a=l(e.components);return i.createElement(A.Provider,{value:a},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return i.createElement(i.Fragment,{},a)}},p=i.forwardRef((function(e,a){var o=e.components,t=e.mdxType,r=e.originalType,A=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=l(o),p=t,m=c["".concat(A,".").concat(p)]||c[p]||u[p]||r;return o?i.createElement(m,n(n({ref:a},d),{},{components:o})):i.createElement(m,n({ref:a},d))}));function m(e,a){var o=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var r=o.length,n=new Array(r);n[0]=p;var s={};for(var A in a)hasOwnProperty.call(a,A)&&(s[A]=a[A]);s.originalType=e,s[c]="string"==typeof e?e:t,n[1]=s;for(var l=2;l{o.r(a),o.d(a,{assets:()=>A,contentTitle:()=>n,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var i=o(3117),t=(o(7294),o(3905));const r={id:"entrada-digital",title:"Entrada Digital",slug:"/franzininho-diy/exemplos-avr-libc/entrada-digital",description:"Vamos entender como trabalhar com as Entradas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},n=void 0,s={unversionedId:"FranzininhoDIY/exemplos-avr-libc/entrada-digital",id:"FranzininhoDIY/exemplos-avr-libc/entrada-digital",title:"Entrada Digital",description:"Vamos entender como trabalhar com as Entradas Digitais",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/entrada-digital.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/entrada-digital",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/entrada-digital.md",tags:[],version:"current",frontMatter:{id:"entrada-digital",title:"Entrada Digital",slug:"/franzininho-diy/exemplos-avr-libc/entrada-digital",description:"Vamos entender como trabalhar com as Entradas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Sa\xedda Digital",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital"},next:{title:"Timer 0",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0"}},A={},l=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Entrada Digital",id:"entrada-digital",level:2},{value:"Algumas Particularidades do circuito da Franzininho DIY",id:"algumas-particularidades-do-circuito-da-franzininho-diy",level:3},{value:"Registradores respons\xe1veis pelos pinos de I/O",id:"registradores-respons\xe1veis-pelos-pinos-de-io",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Desafio",id:"desafio",level:2}],d={toc:l},c="wrapper";function u(e){let{components:a,...r}=e;return(0,t.kt)(c,(0,i.Z)({},d,r,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"No exemplo anterior conhecemos os registradores respons\xe1veis pela configura\xe7\xe3o e manipula\xe7\xe3o dos pinos de I/O. Nesse exemplo vamos concentrar no uso dos pinos como entradas digitais."),(0,t.kt)("p",null,"Ao final, voc\xea saber\xe1 como ler sinais digitais externos a Franzininho DIY."),(0,t.kt)("h2",{id:"recursos-necess\xe1rios"},"Recursos Necess\xe1rios"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Placa Franzininho DIY(com Micronucleus)"),(0,t.kt)("li",{parentName:"ul"},"Chave Tactil"),(0,t.kt)("li",{parentName:"ul"},"Jumpers"),(0,t.kt)("li",{parentName:"ul"},"Computador com as ferramentas de software instaladas")),(0,t.kt)("h2",{id:"entrada-digital"},"Entrada Digital"),(0,t.kt)("p",null,"Uma entrada digital \xe9 capaz de ler n\xedvel alto (5V) e n\xedvel baixo(0V) em sua entrada. Essa funcionalidade \xe9 usada para ler estado de bot\xf5es, sensores, e dispositivos que em suas sa\xeddas apresentam 2 estados."),(0,t.kt)("p",null,"Quando o pino \xe9 configurado como entrada digital ele \xe9 colocado em um estado de alta imped\xe2ncia, equivalente a um resistor de 100 MegaOhms em s\xe9rie com o circuito a ser monitorado. Dessa forma, o pino absorve uma corrente muito baixa do circuito que est\xe1 monitorando. Devido a essa caracter\xedstica de alta imped\xe2ncia, quando um pino colocado como entrada digital ele fica flutuando (sem liga\xe7\xe3o definida), o n\xedvel de tens\xe3o presente nesse pino fica variando n\xe3o podendo ser determinado um valor est\xe1vel devido ao ru\xeddo el\xe9trico e at\xe9 mesmo capacit\xe2ncia de entrada do pino. Para resolver esse problema \xe9 necess\xe1rio colocar um resistor de pull up (ligado a +5V) ou um resistor de pull down (ligado a GND) conforme a necessidade. Esses resistores garantem n\xedvel l\xf3gico est\xe1vel quando, por exemplo uma tecla n\xe3o est\xe1 pressionada. Geralmente utiliza-se um resistor de 10K para esse prop\xf3sito. A seguir \xe9 exibida a liga\xe7\xe3o desses resistores no circuito para leitura de tecla:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"circuito",src:o(163).Z,width:"353",height:"210"})),(0,t.kt)("p",null,"\xc9 poss\xedvel habilitar o resistor de pull up interno, isso mesmo, o Attiny85 possui resistores de pull-up internos (20 Kilohms) que facilitam a liga\xe7\xe3o de teclas, sensores sem a necessidade de conectar externamente um resistor de pull-up. A habilita\xe7\xe3o desses resistores \xe9 feita de maneira simples via software. Vamos ver isso mais adiante."),(0,t.kt)("h3",{id:"algumas-particularidades-do-circuito-da-franzininho-diy"},"Algumas Particularidades do circuito da Franzininho DIY"),(0,t.kt)("p",null,"Os pinos de I/O s\xe3o marcados em Amarelo no Pinout da Franzininho DIY"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"pinout Franzininho DIY",src:o(8706).Z,width:"1630",height:"1122"})),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"O pino PB5 \xe9 configurado como RESET na Franzininho DIY, sendo assim n\xe3o poderemos us\xe1-lo como I/O."),(0,t.kt)("li",{parentName:"ul"},"Os pinos PB3 e PB4 s\xe3o usados para o circuito da USB, sendo assim temos que us\xe1-los com cautela. Geralmente esses pinos s\xe3o usados apenas como sa\xeddas digitais."),(0,t.kt)("li",{parentName:"ul"},"O LED amarelo da placa est\xe1 ligado ao pino PB1."),(0,t.kt)("li",{parentName:"ul"},"Os pinos PB0 E PB2 n\xe3o possuem circuito ligados a eles.")),(0,t.kt)("h2",{id:"registradores-respons\xe1veis-pelos-pinos-de-io"},"Registradores respons\xe1veis pelos pinos de I/O"),(0,t.kt)("p",null,"Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"PORTB: Registrador de dados. Respons\xe1vel pela escrita nos pinos;"),(0,t.kt)("li",{parentName:"ul"},"DDRB: Registrador de dire\xe7\xe3o do pino. Respons\xe1vel pela configura\xe7\xe3o dos pinos para definir se ser\xe1 entrada ou sa\xedda;"),(0,t.kt)("li",{parentName:"ul"},"PINB: Registrador de entrada da porta. Respons\xe1vel pela leitura do estado do pino.")),(0,t.kt)("p",null,"Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos ter\xedamos os finais A, B,C, etc. Cada porta s\xf3 possui no m\xe1ximo 8 pinos."),(0,t.kt)("p",null,"Na se\xe7\xe3o 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configura\xe7\xf5es poss\xedveis para os pinos:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"configura\xe7\xe3o GPIO",src:o(5368).Z,width:"1194",height:"339"})),(0,t.kt)("p",null,"A figura abaixo exibe os registradores respons\xe1veis pelos pino de I/O do PORTB:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"configura\xe7\xe3o GPIO",src:o(9192).Z,width:"1448",height:"696"})),(0,t.kt)("p",null,"Conforme exibido acima, para configurar um pino como entrada digital deve-se configurar o bit DDRBx correspondente ao pino em 0. Se quiser habilitar o pull up para esse deve-se escrever 1 no bit PORTBx correspondente ao pino. A leitura do estado do pino \xe9 feita atrav\xe9s do registrador PINBx."),(0,t.kt)("p",null,"Vamos verificar um exemplo para fazer a leitura de um bot\xe3o externo e ligar o LED da Franzininho DIY."),(0,t.kt)("h2",{id:"circuito"},"Circuito"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"circuito",src:o(8804).Z,width:"1737",height:"633"})),(0,t.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},"#include \n#include \n\n#define F_CPU 16500000L\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\nint main(void)\n{\n setBit(DDRB, PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n clearBit(DDRB, PB0); // Configura pino PB0 como entrada (pino do Bot\xe3o)\n setBit(PORTB, PB0); // Habilita pull up para a entrada PB0\n // L\xf3gico 1 quando bot\xe3o n\xe3o estiver pressionado\n while (1)\n {\n if (!testBit(PINB, PB0)) // Faz a leitura do bot\xe3o - Se pressionado\n {\n setBit(PORTB, PB1); // Liga o LED 1\n }\n else\n {\n clearBit(PORTB, PB1); // Desliga o LED 1\n }\n }\n\n return (0);\n}\n")),(0,t.kt)("p",null,"O exemplo exibiu como configurar os pinos, note que tivemos que configurar um pino como sa\xedda, para o LED e outro como entrada, para o bot\xe3o. Note que foi usado o pull up interno."),(0,t.kt)("p",null,"O uso de macros facilitou a manipula\xe7\xe3o dos bits nos registradores. Recomendo que se voc\xea leia esse artigo para entender sobre as macros e as opera\xe7\xf5es efetuadas: ",(0,t.kt)("a",{parentName:"p",href:"https://www.embarcados.com.br/bits-em-linguagem-c/"},"https://www.embarcados.com.br/bits-em-linguagem-c/")),(0,t.kt)("p",null,"Para leitura do estado do pino, ou seja, se o bot\xe3o est\xe1 solto ou pressionado, fazemos um teste a cada itera\xe7\xe3o no loop infinto. Quando o bot\xe3o \xe9 pressionado o n\xedvel logico no pino vai para 0 e quando solto permanece em 1. Conforme o teste 0 liga o LED e 1 apaga o LED."),(0,t.kt)("p",null,"Assim, o funcionamento ser\xe1:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Bot\xe3o Solto = LED apagado"),(0,t.kt)("li",{parentName:"ul"},"Bot\xe3o Pressionado = LED Aceso")),(0,t.kt)("p",null,"Bacana, n\xe3o?"),(0,t.kt)("h2",{id:"desafio"},"Desafio"),(0,t.kt)("p",null,"Fa\xe7a com com que o LED mude estado e permane\xe7a ao soltar o bot\xe3o, funcionando como uma tecla liga/desliga."),(0,t.kt)("table",null,(0,t.kt)("thead",{parentName:"table"},(0,t.kt)("tr",{parentName:"thead"},(0,t.kt)("th",{parentName:"tr",align:null},"Autor"),(0,t.kt)("th",{parentName:"tr",align:null},(0,t.kt)("a",{parentName:"th",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza")))),(0,t.kt)("tbody",{parentName:"table"},(0,t.kt)("tr",{parentName:"tbody"},(0,t.kt)("td",{parentName:"tr",align:null},"Data:"),(0,t.kt)("td",{parentName:"tr",align:null},"24/04/2021")))))}u.isMDXComponent=!0},8706:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/Pinagem-Franzininho-DIY-V2RV2-42a18903012c4dc223f9d4c774730625.png"},5368:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/config-gpio-5448c58ddfc3c042b28c64b3cedb300e.png"},9192:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/registradores-port-B-f8a36498e9dd1043ec81211a0fb7103c.png"},8804:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/circuito-e0bc37aa32b52d0c36041dc33c4e82ff.png"},163:(e,a,o)=>{o.d(a,{Z:()=>i});const i="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/en/assets/js/3ab35d9f.a0b074c3.js b/en/assets/js/3ab35d9f.a0b074c3.js new file mode 100755 index 000000000..eeb61bb56 --- /dev/null +++ b/en/assets/js/3ab35d9f.a0b074c3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6550],{57632:(e,i,o)=>{o.r(i),o.d(i,{assets:()=>A,contentTitle:()=>r,default:()=>l,frontMatter:()=>n,metadata:()=>t,toc:()=>d});var a=o(17624),s=o(95788);const n={id:"entrada-digital",title:"Entrada Digital",slug:"/franzininho-diy/exemplos-avr-libc/entrada-digital",description:"Vamos entender como trabalhar com as Entradas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},r=void 0,t={id:"FranzininhoDIY/exemplos-avr-libc/entrada-digital",title:"Entrada Digital",description:"Vamos entender como trabalhar com as Entradas Digitais",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/entrada-digital.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/entrada-digital",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/entrada-digital.md",tags:[],version:"current",frontMatter:{id:"entrada-digital",title:"Entrada Digital",slug:"/franzininho-diy/exemplos-avr-libc/entrada-digital",description:"Vamos entender como trabalhar com as Entradas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Sa\xedda Digital",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital"},next:{title:"Timer 0",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0"}},A={},d=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Entrada Digital",id:"entrada-digital",level:2},{value:"Algumas Particularidades do circuito da Franzininho DIY",id:"algumas-particularidades-do-circuito-da-franzininho-diy",level:3},{value:"Registradores respons\xe1veis pelos pinos de I/O",id:"registradores-respons\xe1veis-pelos-pinos-de-io",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Desafio",id:"desafio",level:2}];function c(e){const i={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.p,{children:"No exemplo anterior conhecemos os registradores respons\xe1veis pela configura\xe7\xe3o e manipula\xe7\xe3o dos pinos de I/O. Nesse exemplo vamos concentrar no uso dos pinos como entradas digitais."}),"\n",(0,a.jsx)(i.p,{children:"Ao final, voc\xea saber\xe1 como ler sinais digitais externos a Franzininho DIY."}),"\n",(0,a.jsx)(i.h2,{id:"recursos-necess\xe1rios",children:"Recursos Necess\xe1rios"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Placa Franzininho DIY(com Micronucleus)"}),"\n",(0,a.jsx)(i.li,{children:"Chave Tactil"}),"\n",(0,a.jsx)(i.li,{children:"Jumpers"}),"\n",(0,a.jsx)(i.li,{children:"Computador com as ferramentas de software instaladas"}),"\n"]}),"\n",(0,a.jsx)(i.h2,{id:"entrada-digital",children:"Entrada Digital"}),"\n",(0,a.jsx)(i.p,{children:"Uma entrada digital \xe9 capaz de ler n\xedvel alto (5V) e n\xedvel baixo(0V) em sua entrada. Essa funcionalidade \xe9 usada para ler estado de bot\xf5es, sensores, e dispositivos que em suas sa\xeddas apresentam 2 estados."}),"\n",(0,a.jsx)(i.p,{children:"Quando o pino \xe9 configurado como entrada digital ele \xe9 colocado em um estado de alta imped\xe2ncia, equivalente a um resistor de 100 MegaOhms em s\xe9rie com o circuito a ser monitorado. Dessa forma, o pino absorve uma corrente muito baixa do circuito que est\xe1 monitorando. Devido a essa caracter\xedstica de alta imped\xe2ncia, quando um pino colocado como entrada digital ele fica flutuando (sem liga\xe7\xe3o definida), o n\xedvel de tens\xe3o presente nesse pino fica variando n\xe3o podendo ser determinado um valor est\xe1vel devido ao ru\xeddo el\xe9trico e at\xe9 mesmo capacit\xe2ncia de entrada do pino. Para resolver esse problema \xe9 necess\xe1rio colocar um resistor de pull up (ligado a +5V) ou um resistor de pull down (ligado a GND) conforme a necessidade. Esses resistores garantem n\xedvel l\xf3gico est\xe1vel quando, por exemplo uma tecla n\xe3o est\xe1 pressionada. Geralmente utiliza-se um resistor de 10K para esse prop\xf3sito. A seguir \xe9 exibida a liga\xe7\xe3o desses resistores no circuito para leitura de tecla:"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"circuito",src:o(50496).c+"",width:"353",height:"210"})}),"\n",(0,a.jsx)(i.p,{children:"\xc9 poss\xedvel habilitar o resistor de pull up interno, isso mesmo, o Attiny85 possui resistores de pull-up internos (20 Kilohms) que facilitam a liga\xe7\xe3o de teclas, sensores sem a necessidade de conectar externamente um resistor de pull-up. A habilita\xe7\xe3o desses resistores \xe9 feita de maneira simples via software. Vamos ver isso mais adiante."}),"\n",(0,a.jsx)(i.h3,{id:"algumas-particularidades-do-circuito-da-franzininho-diy",children:"Algumas Particularidades do circuito da Franzininho DIY"}),"\n",(0,a.jsx)(i.p,{children:"Os pinos de I/O s\xe3o marcados em Amarelo no Pinout da Franzininho DIY"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"pinout Franzininho DIY",src:o(12296).c+"",width:"1630",height:"1122"})}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"O pino PB5 \xe9 configurado como RESET na Franzininho DIY, sendo assim n\xe3o poderemos us\xe1-lo como I/O."}),"\n",(0,a.jsx)(i.li,{children:"Os pinos PB3 e PB4 s\xe3o usados para o circuito da USB, sendo assim temos que us\xe1-los com cautela. Geralmente esses pinos s\xe3o usados apenas como sa\xeddas digitais."}),"\n",(0,a.jsx)(i.li,{children:"O LED amarelo da placa est\xe1 ligado ao pino PB1."}),"\n",(0,a.jsx)(i.li,{children:"Os pinos PB0 E PB2 n\xe3o possuem circuito ligados a eles."}),"\n"]}),"\n",(0,a.jsx)(i.h2,{id:"registradores-respons\xe1veis-pelos-pinos-de-io",children:"Registradores respons\xe1veis pelos pinos de I/O"}),"\n",(0,a.jsx)(i.p,{children:"Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"PORTB: Registrador de dados. Respons\xe1vel pela escrita nos pinos;"}),"\n",(0,a.jsx)(i.li,{children:"DDRB: Registrador de dire\xe7\xe3o do pino. Respons\xe1vel pela configura\xe7\xe3o dos pinos para definir se ser\xe1 entrada ou sa\xedda;"}),"\n",(0,a.jsx)(i.li,{children:"PINB: Registrador de entrada da porta. Respons\xe1vel pela leitura do estado do pino."}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:"Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos ter\xedamos os finais A, B,C, etc. Cada porta s\xf3 possui no m\xe1ximo 8 pinos."}),"\n",(0,a.jsx)(i.p,{children:"Na se\xe7\xe3o 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configura\xe7\xf5es poss\xedveis para os pinos:"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"configura\xe7\xe3o GPIO",src:o(64516).c+"",width:"1194",height:"339"})}),"\n",(0,a.jsx)(i.p,{children:"A figura abaixo exibe os registradores respons\xe1veis pelos pino de I/O do PORTB:"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"configura\xe7\xe3o GPIO",src:o(59336).c+"",width:"1448",height:"696"})}),"\n",(0,a.jsx)(i.p,{children:"Conforme exibido acima, para configurar um pino como entrada digital deve-se configurar o bit DDRBx correspondente ao pino em 0. Se quiser habilitar o pull up para esse deve-se escrever 1 no bit PORTBx correspondente ao pino. A leitura do estado do pino \xe9 feita atrav\xe9s do registrador PINBx."}),"\n",(0,a.jsx)(i.p,{children:"Vamos verificar um exemplo para fazer a leitura de um bot\xe3o externo e ligar o LED da Franzininho DIY."}),"\n",(0,a.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"circuito",src:o(36845).c+"",width:"1737",height:"633"})}),"\n",(0,a.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-c",children:"#include \n#include \n\n#define F_CPU 16500000L\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\nint main(void)\n{\n setBit(DDRB, PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n clearBit(DDRB, PB0); // Configura pino PB0 como entrada (pino do Bot\xe3o)\n setBit(PORTB, PB0); // Habilita pull up para a entrada PB0\n // L\xf3gico 1 quando bot\xe3o n\xe3o estiver pressionado\n while (1)\n {\n if (!testBit(PINB, PB0)) // Faz a leitura do bot\xe3o - Se pressionado\n {\n setBit(PORTB, PB1); // Liga o LED 1\n }\n else\n {\n clearBit(PORTB, PB1); // Desliga o LED 1\n }\n }\n\n return (0);\n}\n"})}),"\n",(0,a.jsx)(i.p,{children:"O exemplo exibiu como configurar os pinos, note que tivemos que configurar um pino como sa\xedda, para o LED e outro como entrada, para o bot\xe3o. Note que foi usado o pull up interno."}),"\n",(0,a.jsxs)(i.p,{children:["O uso de macros facilitou a manipula\xe7\xe3o dos bits nos registradores. Recomendo que se voc\xea leia esse artigo para entender sobre as macros e as opera\xe7\xf5es efetuadas: ",(0,a.jsx)(i.a,{href:"https://www.embarcados.com.br/bits-em-linguagem-c/",children:"https://www.embarcados.com.br/bits-em-linguagem-c/"})]}),"\n",(0,a.jsx)(i.p,{children:"Para leitura do estado do pino, ou seja, se o bot\xe3o est\xe1 solto ou pressionado, fazemos um teste a cada itera\xe7\xe3o no loop infinto. Quando o bot\xe3o \xe9 pressionado o n\xedvel logico no pino vai para 0 e quando solto permanece em 1. Conforme o teste 0 liga o LED e 1 apaga o LED."}),"\n",(0,a.jsx)(i.p,{children:"Assim, o funcionamento ser\xe1:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Bot\xe3o Solto = LED apagado"}),"\n",(0,a.jsx)(i.li,{children:"Bot\xe3o Pressionado = LED Aceso"}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:"Bacana, n\xe3o?"}),"\n",(0,a.jsx)(i.h2,{id:"desafio",children:"Desafio"}),"\n",(0,a.jsx)(i.p,{children:"Fa\xe7a com com que o LED mude estado e permane\xe7a ao soltar o bot\xe3o, funcionando como uma tecla liga/desliga."}),"\n",(0,a.jsxs)(i.table,{children:[(0,a.jsx)(i.thead,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.th,{children:"Autor"}),(0,a.jsx)(i.th,{children:(0,a.jsx)(i.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]})}),(0,a.jsx)(i.tbody,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:"Data:"}),(0,a.jsx)(i.td,{children:"24/04/2021"})]})})]})]})}function l(e={}){const{wrapper:i}={...(0,s.MN)(),...e.components};return i?(0,a.jsx)(i,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},95788:(e,i,o)=>{o.d(i,{MN:()=>d});var a=o(11504);function s(e,i,o){return i in e?Object.defineProperty(e,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[i]=o,e}function n(e,i){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);i&&(a=a.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),o.push.apply(o,a)}return o}function r(e){for(var i=1;i=0||(s[o]=e[o]);return s}(e,i);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(s[o]=e[o])}return s}var A=a.createContext({}),d=function(e){var i=a.useContext(A),o=i;return e&&(o="function"==typeof e?e(i):r(r({},i),e)),o},c={inlineCode:"code",wrapper:function(e){var i=e.children;return a.createElement(a.Fragment,{},i)}},l=a.forwardRef((function(e,i){var o=e.components,s=e.mdxType,n=e.originalType,A=e.parentName,l=t(e,["components","mdxType","originalType","parentName"]),p=d(o),u=s,m=p["".concat(A,".").concat(u)]||p[u]||c[u]||n;return o?a.createElement(m,r(r({ref:i},l),{},{components:o})):a.createElement(m,r({ref:i},l))}));l.displayName="MDXCreateElement"},12296:(e,i,o)=>{o.d(i,{c:()=>a});const a=o.p+"assets/images/Pinagem-Franzininho-DIY-V2RV2-42a18903012c4dc223f9d4c774730625.png"},64516:(e,i,o)=>{o.d(i,{c:()=>a});const a=o.p+"assets/images/config-gpio-5448c58ddfc3c042b28c64b3cedb300e.png"},59336:(e,i,o)=>{o.d(i,{c:()=>a});const a=o.p+"assets/images/registradores-port-B-f8a36498e9dd1043ec81211a0fb7103c.png"},36845:(e,i,o)=>{o.d(i,{c:()=>a});const a=o.p+"assets/images/circuito-e0bc37aa32b52d0c36041dc33c4e82ff.png"},50496:(e,i,o)=>{o.d(i,{c:()=>a});const a="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/en/assets/js/3ab9b561.2d990ffb.js b/en/assets/js/3ab9b561.2d990ffb.js new file mode 100755 index 000000000..2935a4791 --- /dev/null +++ b/en/assets/js/3ab9b561.2d990ffb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8817],{75080:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>c,contentTitle:()=>t,default:()=>p,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var r=o(17624),n=o(95788);const i={id:"bootloader",title:"Bootloader",slug:"/franzininho-diy/bootloader",description:"Grava\xe7\xe3o do Bootloader na Franzininho DIY"},t=void 0,s={id:"FranzininhoDIY/bootloader/bootloader",title:"Bootloader",description:"Grava\xe7\xe3o do Bootloader na Franzininho DIY",source:"@site/docs/FranzininhoDIY/bootloader/bootloader.md",sourceDirName:"FranzininhoDIY/bootloader",slug:"/franzininho-diy/bootloader",permalink:"/en/docs/franzininho-diy/bootloader",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/bootloader/bootloader.md",tags:[],version:"current",frontMatter:{id:"bootloader",title:"Bootloader",slug:"/franzininho-diy/bootloader",description:"Grava\xe7\xe3o do Bootloader na Franzininho DIY"},sidebar:"docs",previous:{title:"Montagem da Franzininho DIY",permalink:"/en/docs/franzininho-diy/montagem"},next:{title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",permalink:"/en/docs/franzininho-diy/drivers-micronucleus"}},c={},d=[{value:"Materiais Necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Gravando o FranzBoot no Arduino UNO",id:"gravando-o-franzboot-no-arduino-uno",level:2},{value:"Pr\xf3ximos passos",id:"pr\xf3ximos-passos",level:2},{value:"Gravar muitos chips",id:"gravar-muitos-chips",level:2}];function l(e){const a={a:"a",admonition:"admonition",h2:"h2",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",ul:"ul",...(0,n.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.p,{children:"Para que a placa Franzininho possa ser gravada atrav\xe9s da USB \xe9 necess\xe1rio gravar o bootloader. O bootloader \xe9 um pequeno programa que roda toda vez que a placa \xe9 iniciada e verifica se tem um comando de atualiza\xe7\xe3o de firmware. Caso tenha esse comando, ele recebe o bin\xe1rio atrav\xe9s da USB (no caso da Franzininho DIY) e grava na mem\xf3ria flash."}),"\n",(0,r.jsxs)(a.p,{children:["Na Franzininho DIY usamos o ",(0,r.jsx)(a.a,{href:"https://github.com/micronucleus/micronucleus/blob/master/Devices_with_Micronucleus.md",children:"Micronucleus"})," que \xe9 um bootloader pequeno e bem flex\xedvel desenvolvido para a fam\xedlia ATtiny usando o projeto ",(0,r.jsx)(a.a,{href:"https://www.obdev.at/products/vusb/index.html",children:"VUSB"})," como base."]}),"\n",(0,r.jsx)(a.p,{children:"A seguir vamos exibir como voc\xea pode gravar o ATtiny85 para usar o Micronucleus."}),"\n",(0,r.jsx)(a.h2,{id:"materiais-necess\xe1rios",children:"Materiais Necess\xe1rios"}),"\n",(0,r.jsxs)(a.ul,{children:["\n",(0,r.jsx)(a.li,{children:"Arduino UNO ou similar"}),"\n",(0,r.jsx)(a.li,{children:"Fios (Jumpers)"}),"\n",(0,r.jsx)(a.li,{children:"Protoboard"}),"\n"]}),"\n",(0,r.jsx)(a.h2,{id:"circuito",children:"Circuito"}),"\n",(0,r.jsx)(a.p,{children:"Voc\xea precisar\xe1 montar o seguinte circuito:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{alt:"Circuito para Grava\xe7\xe3o",src:o(13788).c+"",width:"431",height:"408"})}),"\n",(0,r.jsx)(a.admonition,{title:"Fa\xe7a uma dupla checagem antes de ligar o Arduino Uno no computador.",type:"warning"}),"\n",(0,r.jsx)(a.p,{children:"Com o circuito Montado, vamos para a grava\xe7\xe3o do bootloader."}),"\n",(0,r.jsx)(a.h2,{id:"gravando-o-franzboot-no-arduino-uno",children:"Gravando o FranzBoot no Arduino UNO"}),"\n",(0,r.jsxs)(a.p,{children:["Para facilitar a grava\xe7\xe3o do bootloader vamos usar o ",(0,r.jsx)(a.a,{href:"https://github.com/Franzininho/FranzBoot",children:"FranzBoot"}),", um programa para grava\xe7\xe3o do bootloader micronucleus para Franzininho DIY usando Arduino UNO."]}),"\n",(0,r.jsxs)(a.p,{children:["Baixe o projeto no seu computador: ",(0,r.jsx)(a.a,{href:"https://github.com/Franzininho/FranzBoot/archive/refs/heads/main.zip",children:"Download"}),"."]}),"\n",(0,r.jsx)(a.p,{children:"Descompacte a pasta e abra o arquivo FranzBoot.ino"}),"\n",(0,r.jsx)(a.admonition,{type:"tip",children:(0,r.jsxs)(a.mdxAdmonitionTitle,{children:["Se ainda n\xe3o tem a IDE Arduino no seu computador, baixe-a no site do ",(0,r.jsx)(a.a,{href:"https://www.arduino.cc/en/software",children:"Arduino"})]})}),"\n",(0,r.jsx)(a.p,{children:"Ser\xe1 aberta a IDE do Arduino:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{alt:"Circuito para Grava\xe7\xe3o",src:o(93364).c+"",width:"1300",height:"1071"})}),"\n",(0,r.jsx)(a.p,{children:"Antes de gravar na placa precisamos configurar a IDE para a placa Arduino UNO. Em Placa selecione Arduino UNO e em porta a porta Serial criada para o seu Arduino UNO:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{alt:"Circuito para Grava\xe7\xe3o",src:o(93580).c+"",width:"879",height:"706"})}),"\n",(0,r.jsx)(a.p,{children:"Pronto, agora pressione Upload(Carregar) e aguarde a grava\xe7\xe3o no Arduino UNO:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{alt:"Circuito para Grava\xe7\xe3o",src:o(38316).c+"",width:"1300",height:"1071"})}),"\n",(0,r.jsx)(a.p,{children:"Agora abra o terminal serial:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{alt:"Circuito para Grava\xe7\xe3o",src:o(75184).c+"",width:"1185",height:"569"})}),"\n",(0,r.jsx)(a.admonition,{title:"Verifique se a velocidade est\xe1 configurada em 9600.",type:"tip"}),"\n",(0,r.jsx)(a.p,{children:"Agora digite G e pressione enviar. Ap\xf3s a grava\xe7\xe3o deve ser apresentada a seguinte mensagem no terminal:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{alt:"Circuito para Grava\xe7\xe3o",src:o(64272).c+"",width:"1185",height:"569"})}),"\n",(0,r.jsx)(a.admonition,{title:"ERRO",type:"warning",children:(0,r.jsx)(a.p,{children:"Se receber uma mensagem de erro, verifique as conex\xf5es el\xe9tricas e envie novamente o comando G."})}),"\n",(0,r.jsx)(a.p,{children:"Pronto, o ATtiny85 est\xe1 pronto para ser encaixado na sua Franzininho DIY. Retire-o com cuidado da matriz de contatos e encaixe-o corretamente na Franzininho DIY, conforme imagem abaixo"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{alt:"Placa Franzininho DIY",src:o(53144).c+"",width:"500",height:"233"})}),"\n",(0,r.jsx)(a.h2,{id:"pr\xf3ximos-passos",children:"Pr\xf3ximos passos"}),"\n",(0,r.jsx)(a.p,{children:"Agora que j\xe1 tem a sua placa Franzininho DIY preparada voc\xea pode partir para a programa\xe7\xe3o."}),"\n",(0,r.jsx)(a.h2,{id:"gravar-muitos-chips",children:"Gravar muitos chips"}),"\n",(0,r.jsxs)(a.p,{children:["Caso voc\xea necessite gravar muitos chips voc\xea pode gravar sem usar o PC. Verifique a ",(0,r.jsx)(a.a,{href:"https://github.com/Franzininho/FranzBoot#readme",children:"documenta\xe7\xe3o do FranzBoot"})," para mais detalhes."]})]})}function p(e={}){const{wrapper:a}={...(0,n.MN)(),...e.components};return a?(0,r.jsx)(a,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},95788:(e,a,o)=>{o.d(a,{MN:()=>d});var r=o(11504);function n(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function i(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,r)}return o}function t(e){for(var a=1;a=0||(n[o]=e[o]);return n}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var c=r.createContext({}),d=function(e){var a=r.useContext(c),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},l={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},p=r.forwardRef((function(e,a){var o=e.components,n=e.mdxType,i=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=d(o),h=n,m=u["".concat(c,".").concat(h)]||u[h]||l[h]||i;return o?r.createElement(m,t(t({ref:a},p),{},{components:o})):r.createElement(m,t({ref:a},p))}));p.displayName="MDXCreateElement"},93580:(e,a,o)=>{o.d(a,{c:()=>r});const r=o.p+"assets/images/IDE-Arduino-Configuracao-dde65494e76bfd5fe726b61692f4707c.png"},64272:(e,a,o)=>{o.d(a,{c:()=>r});const r=o.p+"assets/images/IDE-Arduino-Gravando-a69ad020e2520590375ce6a7c601429f.png"},75184:(e,a,o)=>{o.d(a,{c:()=>r});const r=o.p+"assets/images/IDE-Arduino-Terminal-serial-248aa58aa3f811c7df29648366143242.png"},38316:(e,a,o)=>{o.d(a,{c:()=>r});const r=o.p+"assets/images/IDE-Arduino-Upload-802877937fd66a36829d4c86bf1097c3.png"},93364:(e,a,o)=>{o.d(a,{c:()=>r});const r=o.p+"assets/images/IDE-Arduino-cabe65705eb2af6ca4940b4dada79e45.png"},13788:(e,a,o)=>{o.d(a,{c:()=>r});const r=o.p+"assets/images/circuito-58c7cff2dc28fe98b6f923e076cdb2d4.png"},53144:(e,a,o)=>{o.d(a,{c:()=>r});const r=o.p+"assets/images/placa-franzininho-diy-d8459c4e0e0d4c724d1c4d619ffc0350.png"}}]); \ No newline at end of file diff --git a/en/assets/js/3ab9b561.eced0918.js b/en/assets/js/3ab9b561.eced0918.js deleted file mode 100755 index c3f99ddf3..000000000 --- a/en/assets/js/3ab9b561.eced0918.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1013],{3905:(a,e,o)=>{o.d(e,{Zo:()=>c,kt:()=>h});var r=o(7294);function n(a,e,o){return e in a?Object.defineProperty(a,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):a[e]=o,a}function t(a,e){var o=Object.keys(a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(a);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable}))),o.push.apply(o,r)}return o}function i(a){for(var e=1;e=0||(n[o]=a[o]);return n}(a,e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(a);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(a,o)&&(n[o]=a[o])}return n}var d=r.createContext({}),l=function(a){var e=r.useContext(d),o=e;return a&&(o="function"==typeof a?a(e):i(i({},e),a)),o},c=function(a){var e=l(a.components);return r.createElement(d.Provider,{value:e},a.children)},p="mdxType",u={inlineCode:"code",wrapper:function(a){var e=a.children;return r.createElement(r.Fragment,{},e)}},m=r.forwardRef((function(a,e){var o=a.components,n=a.mdxType,t=a.originalType,d=a.parentName,c=s(a,["components","mdxType","originalType","parentName"]),p=l(o),m=n,h=p["".concat(d,".").concat(m)]||p[m]||u[m]||t;return o?r.createElement(h,i(i({ref:e},c),{},{components:o})):r.createElement(h,i({ref:e},c))}));function h(a,e){var o=arguments,n=e&&e.mdxType;if("string"==typeof a||n){var t=o.length,i=new Array(t);i[0]=m;var s={};for(var d in e)hasOwnProperty.call(e,d)&&(s[d]=e[d]);s.originalType=a,s[p]="string"==typeof a?a:n,i[1]=s;for(var l=2;l{o.r(e),o.d(e,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>t,metadata:()=>s,toc:()=>l});var r=o(3117),n=(o(7294),o(3905));const t={id:"bootloader",title:"Bootloader",slug:"/franzininho-diy/bootloader",description:"Grava\xe7\xe3o do Bootloader na Franzininho DIY"},i=void 0,s={unversionedId:"FranzininhoDIY/bootloader/bootloader",id:"FranzininhoDIY/bootloader/bootloader",title:"Bootloader",description:"Grava\xe7\xe3o do Bootloader na Franzininho DIY",source:"@site/docs/FranzininhoDIY/bootloader/bootloader.md",sourceDirName:"FranzininhoDIY/bootloader",slug:"/franzininho-diy/bootloader",permalink:"/en/docs/franzininho-diy/bootloader",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/bootloader/bootloader.md",tags:[],version:"current",frontMatter:{id:"bootloader",title:"Bootloader",slug:"/franzininho-diy/bootloader",description:"Grava\xe7\xe3o do Bootloader na Franzininho DIY"},sidebar:"docs",previous:{title:"Montagem da Franzininho DIY",permalink:"/en/docs/franzininho-diy/montagem"},next:{title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",permalink:"/en/docs/franzininho-diy/drivers-micronucleus"}},d={},l=[{value:"Materiais Necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Gravando o FranzBoot no Arduino UNO",id:"gravando-o-franzboot-no-arduino-uno",level:2},{value:"Pr\xf3ximos passos",id:"pr\xf3ximos-passos",level:2},{value:"Gravar muitos chips",id:"gravar-muitos-chips",level:2}],c={toc:l},p="wrapper";function u(a){let{components:e,...t}=a;return(0,n.kt)(p,(0,r.Z)({},c,t,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Para que a placa Franzininho possa ser gravada atrav\xe9s da USB \xe9 necess\xe1rio gravar o bootloader. O bootloader \xe9 um pequeno programa que roda toda vez que a placa \xe9 iniciada e verifica se tem um comando de atualiza\xe7\xe3o de firmware. Caso tenha esse comando, ele recebe o bin\xe1rio atrav\xe9s da USB (no caso da Franzininho DIY) e grava na mem\xf3ria flash."),(0,n.kt)("p",null,"Na Franzininho DIY usamos o ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/micronucleus/micronucleus/blob/master/Devices_with_Micronucleus.md"},"Micronucleus")," que \xe9 um bootloader pequeno e bem flex\xedvel desenvolvido para a fam\xedlia ATtiny usando o projeto ",(0,n.kt)("a",{parentName:"p",href:"https://www.obdev.at/products/vusb/index.html"},"VUSB")," como base."),(0,n.kt)("p",null,"A seguir vamos exibir como voc\xea pode gravar o ATtiny85 para usar o Micronucleus."),(0,n.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais Necess\xe1rios"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Arduino UNO ou similar"),(0,n.kt)("li",{parentName:"ul"},"Fios ","(","Jumpers",")"),(0,n.kt)("li",{parentName:"ul"},"Protoboard")),(0,n.kt)("h2",{id:"circuito"},"Circuito"),(0,n.kt)("p",null,"Voc\xea precisar\xe1 montar o seguinte circuito:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito para Grava\xe7\xe3o",src:o(5487).Z,width:"431",height:"408"})),(0,n.kt)("admonition",{title:"Fa\xe7a uma dupla checagem antes de ligar o Arduino Uno no computador.",type:"warning"}),(0,n.kt)("p",null,"Com o circuito Montado, vamos para a grava\xe7\xe3o do bootloader."),(0,n.kt)("h2",{id:"gravando-o-franzboot-no-arduino-uno"},"Gravando o FranzBoot no Arduino UNO"),(0,n.kt)("p",null,"Para facilitar a grava\xe7\xe3o do bootloader vamos usar o ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/FranzBoot"},"FranzBoot"),", um programa para grava\xe7\xe3o do bootloader micronucleus para Franzininho DIY usando Arduino UNO."),(0,n.kt)("p",null,"Baixe o projeto no seu computador: ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/FranzBoot/archive/refs/heads/main.zip"},"Download"),"."),(0,n.kt)("p",null,"Descompacte a pasta e abra o arquivo FranzBoot.ino"),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"Se ainda n\xe3o tem a IDE Arduino no seu computador, baixe-a no site do ",(0,n.kt)("a",{parentName:"mdxAdmonitionTitle",href:"https://www.arduino.cc/en/software"},"Arduino")," ")),(0,n.kt)("p",null,"Ser\xe1 aberta a IDE do Arduino:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito para Grava\xe7\xe3o",src:o(6861).Z,width:"1300",height:"1071"})),(0,n.kt)("p",null,"Antes de gravar na placa precisamos configurar a IDE para a placa Arduino UNO. Em Placa selecione Arduino UNO e em porta a porta Serial criada para o seu Arduino UNO:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito para Grava\xe7\xe3o",src:o(8525).Z,width:"879",height:"706"})),(0,n.kt)("p",null,"Pronto, agora pressione Upload(Carregar) e aguarde a grava\xe7\xe3o no Arduino UNO:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito para Grava\xe7\xe3o",src:o(446).Z,width:"1300",height:"1071"})),(0,n.kt)("p",null,"Agora abra o terminal serial:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito para Grava\xe7\xe3o",src:o(6164).Z,width:"1185",height:"569"})),(0,n.kt)("admonition",{title:"Verifique se a velocidade est\xe1 configurada em 9600. ",type:"tip"}),(0,n.kt)("p",null,"Agora digite G e pressione enviar. Ap\xf3s a grava\xe7\xe3o deve ser apresentada a seguinte mensagem no terminal:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito para Grava\xe7\xe3o",src:o(7287).Z,width:"1185",height:"569"})),(0,n.kt)("admonition",{title:"ERRO",type:"warning"},(0,n.kt)("p",{parentName:"admonition"},"Se receber uma mensagem de erro, verifique as conex\xf5es el\xe9tricas e envie novamente o comando G.")),(0,n.kt)("p",null,"Pronto, o ATtiny85 est\xe1 pronto para ser encaixado na sua Franzininho DIY. Retire-o com cuidado da matriz de contatos e encaixe-o corretamente na Franzininho DIY, conforme imagem abaixo"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Placa Franzininho DIY",src:o(4936).Z,width:"500",height:"233"})),(0,n.kt)("h2",{id:"pr\xf3ximos-passos"},"Pr\xf3ximos passos"),(0,n.kt)("p",null,"Agora que j\xe1 tem a sua placa Franzininho DIY preparada voc\xea pode partir para a programa\xe7\xe3o."),(0,n.kt)("h2",{id:"gravar-muitos-chips"},"Gravar muitos chips"),(0,n.kt)("p",null,"Caso voc\xea necessite gravar muitos chips voc\xea pode gravar sem usar o PC. Verifique a ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/FranzBoot#readme"},"documenta\xe7\xe3o do FranzBoot")," para mais detalhes."))}u.isMDXComponent=!0},8525:(a,e,o)=>{o.d(e,{Z:()=>r});const r=o.p+"assets/images/IDE-Arduino-Configuracao-dde65494e76bfd5fe726b61692f4707c.png"},7287:(a,e,o)=>{o.d(e,{Z:()=>r});const r=o.p+"assets/images/IDE-Arduino-Gravando-a69ad020e2520590375ce6a7c601429f.png"},6164:(a,e,o)=>{o.d(e,{Z:()=>r});const r=o.p+"assets/images/IDE-Arduino-Terminal-serial-248aa58aa3f811c7df29648366143242.png"},446:(a,e,o)=>{o.d(e,{Z:()=>r});const r=o.p+"assets/images/IDE-Arduino-Upload-802877937fd66a36829d4c86bf1097c3.png"},6861:(a,e,o)=>{o.d(e,{Z:()=>r});const r=o.p+"assets/images/IDE-Arduino-cabe65705eb2af6ca4940b4dada79e45.png"},5487:(a,e,o)=>{o.d(e,{Z:()=>r});const r=o.p+"assets/images/circuito-58c7cff2dc28fe98b6f923e076cdb2d4.png"},4936:(a,e,o)=>{o.d(e,{Z:()=>r});const r=o.p+"assets/images/placa-franzininho-diy-d8459c4e0e0d4c724d1c4d619ffc0350.png"}}]); \ No newline at end of file diff --git a/en/assets/js/3bf4969f.a612f332.js b/en/assets/js/3bf4969f.a612f332.js new file mode 100755 index 000000000..ba9af1527 --- /dev/null +++ b/en/assets/js/3bf4969f.a612f332.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8384],{35066:e=>{e.exports=JSON.parse('{"permalink":"/en/blog/tags/docusaurus","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/en/assets/js/3bf4969f.d73ac778.js b/en/assets/js/3bf4969f.d73ac778.js deleted file mode 100755 index e6566f919..000000000 --- a/en/assets/js/3bf4969f.d73ac778.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2389],{9161:e=>{e.exports=JSON.parse('{"permalink":"/en/blog/tags/docusaurus","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/en/assets/js/3cf26f2f.28ae5908.js b/en/assets/js/3cf26f2f.28ae5908.js new file mode 100755 index 000000000..e80dbb637 --- /dev/null +++ b/en/assets/js/3cf26f2f.28ae5908.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1680],{38988:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>t,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var o=n(17624),r=n(95788);const a={id:"circuitpython-serial-console",title:"Serial Console",slug:"/franzininho-wifi/exemplos-circuitpython/serial-console",description:"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.",author:"Ewerton Leandro"},t=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console",title:"Serial Console",description:"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/serial-console.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/serial-console",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/serial-console.md",tags:[],version:"current",frontMatter:{id:"circuitpython-serial-console",title:"Serial Console",slug:"/franzininho-wifi/exemplos-circuitpython/serial-console",description:"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.",author:"Ewerton Leandro"},sidebar:"docs",previous:{title:"Hello World!",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world"},next:{title:"Entradas e Sa\xeddas Digitais",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais"}},c={},l=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Execu\xe7\xe3o",id:"execu\xe7\xe3o",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function d(e){const i={admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.p,{children:"Neste exemplo iremos utilizar o console serial para controlar a cor do LED da Franzininho WiFi com CircuitPython."}),"\n",(0,o.jsx)(i.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsx)(i.li,{children:"1 Placa Franzininho Wifi com CircuitPython;"}),"\n"]}),"\n",(0,o.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,o.jsx)(i.p,{children:"Para este exemplo n\xe3o ser\xe1 necess\xe1rio nenhum componente extra, apenas a placa Franzininho WiFi:"}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"franzininho-wifi-serial-console",src:n(11823).c+"",width:"758",height:"419"})}),"\n",(0,o.jsx)(i.p,{children:"Obs. Neste exemplo vamos utilizar o Mu Editor, mas qualquer editor com suporte a comunica\xe7\xe3o serial pode ser utilizado."}),"\n",(0,o.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,o.jsx)(i.p,{children:"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 no diret\xf3rio CIRCUITPY e salve o arquivo:"}),"\n",(0,o.jsx)(i.admonition,{title:"Observa\xe7\xe3o",type:"note",children:(0,o.jsx)(i.p,{children:"Provavelmente voc\xea encontrar\xe1 outro c\xf3digo no arquivo code.py.\nApague-o e insira o c\xf3digo novo."})}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:'# code.py\n\n""" Controle da cor do LED RGB atrav\xe9s da serial console """\nimport board\nimport digitalio\nimport neopixel_write\n\npin = digitalio.DigitalInOut(board.NEOPIXEL)\npin.direction = digitalio.Direction.OUTPUT\n\nwhile True:\n print("Digite a intesidade da cor vermelho:")\n r = int(input())\n print("Digite a intesidade da cor verde:")\n g = int(input())\n print("Digite a intesidade da cor azul:")\n b = int(input())\n cor = bytearray([r, g, b])\n neopixel_write.neopixel_write(pin, cor)\n print("Cor: {} {} {}".format(r,g,b) )\n print("[ENTER] - para mudar a cor.")\n input()\n'})}),"\n",(0,o.jsx)(i.p,{children:"Finalizando a edi\xe7\xe3o do arquivo, salve-o.\nAp\xf3s salvar o arquivo, abra o console serial do Mu Editor."}),"\n",(0,o.jsx)(i.h2,{id:"an\xe1lise-do-c\xf3digo",children:"An\xe1lise do c\xf3digo"}),"\n",(0,o.jsx)(i.p,{children:"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"import board\n"})}),"\n",(0,o.jsx)(i.p,{children:"Utilizaremos o LED Neopixel existente na pr\xf3pria placa da Franzininho WiFi, este LED est\xe1 conectado a GPIO 18 do ESP32-S2 da Franzininho WiFi."}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"franzininho-wifi-serial-console",src:n(89480).c+"",width:"760",height:"466"})}),"\n",(0,o.jsx)(i.p,{children:"Como o LED \xe9 um atuador, precisamos configurar o pino como uma sa\xedda digital. Para isso, precisamos importar o m\xf3dulo:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{children:"import digitalio\n"})}),"\n",(0,o.jsx)(i.p,{children:"O LED RGB Neopixel utiliza um protocolo de comunica\xe7\xe3o espec\xedfico j\xe1 que dentro do LED existe um chip de controle integrado que controla os tr\xeas LED dentro do encapsulamento.\nPara facilitar a implementa\xe7\xe3o de nosso programa, optamos por utilizar um biblioteca dispon\xedvel dentro do pr\xf3prio circuitpython que \xe9 a neopixel_write:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"import neopixel_write\n"})}),"\n",(0,o.jsx)(i.p,{children:"Com todos os m\xf3dulos importados, podemos acessar as fun\xe7\xf5es de configura\xe7\xe3o do pino digital:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"pin = digitalio.DigitalInOut(board.NEOPIXEL)\npin.direction = digitalio.Direction.OUTPUT\n"})}),"\n",(0,o.jsx)(i.p,{children:"Note que primeiro mapeamos o pino e depois configuramos a dire\xe7\xe3o."}),"\n",(0,o.jsx)(i.p,{children:"Diferentemente de outros framework como Arduino, ESP-IDF e a maioria dos framework escrito em C/C++, o interpretador do Python j\xe1 habilitar UART para a comunica\xe7\xe3o serial por padr\xe3o, dispensado a inicializa\xe7\xe3o da serial como seria no Arduino por exemplo."}),"\n",(0,o.jsx)(i.p,{children:"Fragmento de c\xf3digo necess\xe1rio para configurar a comunica\xe7\xe3o serial no Arduino:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-c++",children:"Serial.begin(115200);\n"})}),"\n",(0,o.jsx)(i.admonition,{title:"Dica",type:"note",children:(0,o.jsxs)(i.p,{children:["Nunca mais voc\xea vai esquecer de habilitar a serial antes de tentar imprimir. ","\ud83d\ude09"]})}),"\n",(0,o.jsx)(i.p,{children:"Neste exemplo duas fun\xe7\xf5es s\xe3o importante destacar. S\xe3o as fun\xe7\xf5es que permite escrever e ler dados do console."}),"\n",(0,o.jsx)(i.p,{children:'A fun\xe7\xe3o "print" para imprimir mensagem no console serial.'}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:'print("Algum coisa para ser impresso na serial")\n'})}),"\n",(0,o.jsx)(i.p,{children:'E a fun\xe7\xe3o "input" para ler valores do console serial.'}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"uma_variavel = input()\n"})}),"\n",(0,o.jsx)(i.p,{children:"Agora vamos criar nosso loop principal:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"while True:\n print('Digite a intensidade da cor vermelho:')\n r = int(input())\n print('Digite a intensidade da cor verde:')\n g = int(input())\n print('Digite a intensidade da cor azul:')\n b = int(input())\n cor = bytearray([r, g, b])\n neopixel_write.neopixel_write(pin, cor)\n print('Cor: {} {} {}'.format(r,g,b) )\n print('[ENTER] - para mudar a cor.')\n input()\n"})}),"\n",(0,o.jsx)(i.p,{children:"No loop principal iremos utilizar as fun\xe7\xf5es print/input para ler o valor das cores dos tr\xeas LED."}),"\n",(0,o.jsx)(i.p,{children:"Iremos montar um bytearray e chamar a fun\xe7\xe3o neopixel_write para atualizar a cor do LED Neopixel."}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"cor = bytearray([r, g, b])\n"})}),"\n",(0,o.jsx)(i.p,{children:"A fun\xe7\xe3o neopixel_write precisa apenas de dois par\xe2metros, o pino onde est\xe1 conectado o LED e um bytearray contendo um byte para cada uma das cores do LED."}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"neopixel_write.neopixel_write(pin, cor)\n"})}),"\n",(0,o.jsx)(i.p,{children:"O bytearray segue o seguinte formato: primeiro byte representa a intensidade do LED vermelho (Red), o segundo byte representa a intensidade do LED verde (Green) e o terceiro byte representa a intensidade do LED azul (Blue)."}),"\n",(0,o.jsx)(i.h2,{id:"execu\xe7\xe3o",children:"Execu\xe7\xe3o"}),"\n",(0,o.jsx)(i.p,{children:'Para abrir o console serial no Mu Editor, click no bot\xe3o "Serial" e depois pressione "Ctrl + D" para reiniciar a execu\xe7\xe3o do script na placa. Logo em seguida voc\xea poder\xe1 ver a primeira mensagem do script, solicitado o valor da primeira cor no console, a cor vermelha.'}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"franzininho-wifi-serial-console",src:n(42440).c+"",width:"1360",height:"726"})}),"\n",(0,o.jsx)(i.p,{children:"Aqui temos um exemplo de execu\xe7\xe3o no console serial do Mu Editor."}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"franzininho-wifi-serial-console",src:n(33572).c+"",width:"1030",height:"325"})}),"\n",(0,o.jsx)(i.p,{children:"Resultado da execu\xe7\xe3o na placa Franzininho WiFi."}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"franzininho-wifi-serial-console",src:n(17556).c+"",width:"1600",height:"1166"})}),"\n",(0,o.jsx)(i.p,{children:"Outro exemplo de execu\xe7\xe3o."}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"franzininho-wifi-serial-console",src:n(70596).c+"",width:"1280",height:"891"})}),"\n",(0,o.jsx)(i.admonition,{title:"Sugest\xe3o de experimento",type:"tip",children:(0,o.jsx)(i.p,{children:"Execute uma informando os valores [10,10,10], execute novamente agora informando os valores [100,100,100] e observe a diferen\xe7a entre as duas execu\xe7\xf5es."})}),"\n",(0,o.jsx)(i.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,o.jsx)(i.p,{children:"Neste exemplo exploramos duas importante ferramentas no desenvolvimento de qualquer projeto, a comunica\xe7\xe3o serial do console e o LED Builtin da placa Franzininho WiFi que tamb\xe9m \xe9 um LED Neopixel que pode dar um charme a mais a seus projetos!!!"}),"\n",(0,o.jsxs)(i.table,{children:[(0,o.jsx)(i.thead,{children:(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.th,{children:"Autor"}),(0,o.jsx)(i.th,{children:"Ewerton Leandro de Sousa"})]})}),(0,o.jsx)(i.tbody,{children:(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.td,{children:"Data:"}),(0,o.jsx)(i.td,{children:"07/10/2021"})]})})]})]})}function p(e={}){const{wrapper:i}={...(0,r.MN)(),...e.components};return i?(0,o.jsx)(i,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},95788:(e,i,n)=>{n.d(i,{MN:()=>l});var o=n(11504);function r(e,i,n){return i in e?Object.defineProperty(e,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[i]=n,e}function a(e,i){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);i&&(o=o.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),n.push.apply(n,o)}return n}function t(e){for(var i=1;i=0||(r[n]=e[n]);return r}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=o.createContext({}),l=function(e){var i=o.useContext(c),n=i;return e&&(n="function"==typeof e?e(i):t(t({},i),e)),n},d={inlineCode:"code",wrapper:function(e){var i=e.children;return o.createElement(o.Fragment,{},i)}},p=o.forwardRef((function(e,i){var n=e.components,r=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(n),m=r,h=u["".concat(c,".").concat(m)]||u[m]||d[m]||a;return n?o.createElement(h,t(t({ref:i},p),{},{components:n})):o.createElement(h,t({ref:i},p))}));p.displayName="MDXCreateElement"},17556:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/exemplo2-21fdde314416eddf012a6910081a7e2e.jpeg"},70596:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/exemplo3-be8b96c2fcf53cdaa581d2996e897d4d.jpeg"},11823:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/franzininho-wifi-3b55bb6358735fdb9708737760477e5b.png"},42440:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/mu1-d9e439fb33fd6469d96b580d0c518400.png"},33572:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/mu2-22111a44455aac8485e7acee915aa990.png"},89480:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/neopixel-6aba6a8ee3594d17ac2240dff080b576.png"}}]); \ No newline at end of file diff --git a/en/assets/js/3cf26f2f.b7a23e24.js b/en/assets/js/3cf26f2f.b7a23e24.js deleted file mode 100755 index 697566077..000000000 --- a/en/assets/js/3cf26f2f.b7a23e24.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6803],{3905:(e,o,i)=>{i.d(o,{Zo:()=>c,kt:()=>g});var n=i(7294);function a(e,o,i){return o in e?Object.defineProperty(e,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[o]=i,e}function r(e,o){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),i.push.apply(i,n)}return i}function t(e){for(var o=1;o=0||(a[i]=e[i]);return a}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}var s=n.createContext({}),p=function(e){var o=n.useContext(s),i=o;return e&&(i="function"==typeof e?e(o):t(t({},o),e)),i},c=function(e){var o=p(e.components);return n.createElement(s.Provider,{value:o},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var o=e.children;return n.createElement(n.Fragment,{},o)}},m=n.forwardRef((function(e,o){var i=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(i),m=a,g=d["".concat(s,".").concat(m)]||d[m]||u[m]||r;return i?n.createElement(g,t(t({ref:o},c),{},{components:i})):n.createElement(g,t({ref:o},c))}));function g(e,o){var i=arguments,a=o&&o.mdxType;if("string"==typeof e||a){var r=i.length,t=new Array(r);t[0]=m;var l={};for(var s in o)hasOwnProperty.call(o,s)&&(l[s]=o[s]);l.originalType=e,l[d]="string"==typeof e?e:a,t[1]=l;for(var p=2;p{i.r(o),i.d(o,{assets:()=>s,contentTitle:()=>t,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var n=i(3117),a=(i(7294),i(3905));const r={id:"circuitpython-serial-console",title:"Serial Console",slug:"/franzininho-wifi/exemplos-circuitpython/serial-console",description:"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.",author:"Ewerton Leandro"},t=void 0,l={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console",title:"Serial Console",description:"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/serial-console.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/serial-console",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/serial-console.md",tags:[],version:"current",frontMatter:{id:"circuitpython-serial-console",title:"Serial Console",slug:"/franzininho-wifi/exemplos-circuitpython/serial-console",description:"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.",author:"Ewerton Leandro"},sidebar:"docs",previous:{title:"Hello World!",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world"},next:{title:"Entradas e Sa\xeddas Digitais",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais"}},s={},p=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Execu\xe7\xe3o",id:"execu\xe7\xe3o",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],c={toc:p},d="wrapper";function u(e){let{components:o,...r}=e;return(0,a.kt)(d,(0,n.Z)({},c,r,{components:o,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Neste exemplo iremos utilizar o console serial para controlar a cor do LED da Franzininho WiFi com CircuitPython. "),(0,a.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"1 Placa Franzininho Wifi com CircuitPython;")),(0,a.kt)("h2",{id:"circuito"},"Circuito"),(0,a.kt)("p",null,"Para este exemplo n\xe3o ser\xe1 necess\xe1rio nenhum componente extra, apenas a placa Franzininho WiFi:"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"franzininho-wifi-serial-console",src:i(2217).Z,width:"758",height:"419"})),(0,a.kt)("p",null,"Obs. Neste exemplo vamos utilizar o Mu Editor, mas qualquer editor com suporte a comunica\xe7\xe3o serial pode ser utilizado."),(0,a.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,a.kt)("p",null,"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 no diret\xf3rio CIRCUITPY e salve o arquivo:"),(0,a.kt)("admonition",{title:"Observa\xe7\xe3o",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Provavelmente voc\xea encontrar\xe1 outro c\xf3digo no arquivo code.py.\nApague-o e insira o c\xf3digo novo.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},'# code.py\n\n""" Controle da cor do LED RGB atrav\xe9s da serial console """\nimport board\nimport digitalio\nimport neopixel_write\n\npin = digitalio.DigitalInOut(board.NEOPIXEL)\npin.direction = digitalio.Direction.OUTPUT\n\nwhile True:\n print("Digite a intesidade da cor vermelho:")\n r = int(input())\n print("Digite a intesidade da cor verde:")\n g = int(input())\n print("Digite a intesidade da cor azul:")\n b = int(input())\n cor = bytearray([r, g, b])\n neopixel_write.neopixel_write(pin, cor)\n print("Cor: {} {} {}".format(r,g,b) )\n print("[ENTER] - para mudar a cor.")\n input()\n')),(0,a.kt)("p",null,"Finalizando a edi\xe7\xe3o do arquivo, salve-o.\nAp\xf3s salvar o arquivo, abra o console serial do Mu Editor."),(0,a.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},"An\xe1lise do c\xf3digo"),(0,a.kt)("p",null,"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,a.kt)("p",null,"Utilizaremos o LED Neopixel existente na pr\xf3pria placa da Franzininho WiFi, este LED est\xe1 conectado a GPIO 18 do ESP32-S2 da Franzininho WiFi."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"franzininho-wifi-serial-console",src:i(7352).Z,width:"760",height:"466"})),(0,a.kt)("p",null,"Como o LED \xe9 um atuador, precisamos configurar o pino como uma sa\xedda digital. Para isso, precisamos importar o m\xf3dulo:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"import digitalio\n")),(0,a.kt)("p",null,"O LED RGB Neopixel utiliza um protocolo de comunica\xe7\xe3o espec\xedfico j\xe1 que dentro do LED existe um chip de controle integrado que controla os tr\xeas LED dentro do encapsulamento.\nPara facilitar a implementa\xe7\xe3o de nosso programa, optamos por utilizar um biblioteca dispon\xedvel dentro do pr\xf3prio circuitpython que \xe9 a neopixel_write:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"import neopixel_write\n")),(0,a.kt)("p",null,"Com todos os m\xf3dulos importados, podemos acessar as fun\xe7\xf5es de configura\xe7\xe3o do pino digital:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"pin = digitalio.DigitalInOut(board.NEOPIXEL)\npin.direction = digitalio.Direction.OUTPUT\n")),(0,a.kt)("p",null,"Note que primeiro mapeamos o pino e depois configuramos a dire\xe7\xe3o."),(0,a.kt)("p",null,"Diferentemente de outros framework como Arduino, ESP-IDF e a maioria dos framework escrito em C/C++, o interpretador do Python j\xe1 habilitar UART para a comunica\xe7\xe3o serial por padr\xe3o, dispensado a inicializa\xe7\xe3o da serial como seria no Arduino por exemplo."),(0,a.kt)("p",null,"Fragmento de c\xf3digo necess\xe1rio para configurar a comunica\xe7\xe3o serial no Arduino:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-c++"},"Serial.begin(115200);\n")),(0,a.kt)("admonition",{title:"Dica",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Nunca mais voc\xea vai esquecer de habilitar a serial antes de tentar imprimir. \ud83d\ude09")),(0,a.kt)("p",null,"Neste exemplo duas fun\xe7\xf5es s\xe3o importante destacar. S\xe3o as fun\xe7\xf5es que permite escrever e ler dados do console."),(0,a.kt)("p",null,'A fun\xe7\xe3o "print" para imprimir mensagem no console serial.'),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},'print("Algum coisa para ser impresso na serial")\n')),(0,a.kt)("p",null,'E a fun\xe7\xe3o "input" para ler valores do console serial.'),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"uma_variavel = input()\n")),(0,a.kt)("p",null,"Agora vamos criar nosso loop principal:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"while True:\n print('Digite a intensidade da cor vermelho:')\n r = int(input())\n print('Digite a intensidade da cor verde:')\n g = int(input())\n print('Digite a intensidade da cor azul:')\n b = int(input())\n cor = bytearray([r, g, b])\n neopixel_write.neopixel_write(pin, cor)\n print('Cor: {} {} {}'.format(r,g,b) )\n print('[ENTER] - para mudar a cor.')\n input()\n")),(0,a.kt)("p",null,"No loop principal iremos utilizar as fun\xe7\xf5es print/input para ler o valor das cores dos tr\xeas LED."),(0,a.kt)("p",null,"Iremos montar um bytearray e chamar a fun\xe7\xe3o neopixel_write para atualizar a cor do LED Neopixel."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"cor = bytearray([r, g, b])\n")),(0,a.kt)("p",null,"A fun\xe7\xe3o neopixel_write precisa apenas de dois par\xe2metros, o pino onde est\xe1 conectado o LED e um bytearray contendo um byte para cada uma das cores do LED."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"neopixel_write.neopixel_write(pin, cor)\n")),(0,a.kt)("p",null,"O bytearray segue o seguinte formato: primeiro byte representa a intensidade do LED vermelho (Red), o segundo byte representa a intensidade do LED verde (Green) e o terceiro byte representa a intensidade do LED azul (Blue)."),(0,a.kt)("h2",{id:"execu\xe7\xe3o"},"Execu\xe7\xe3o"),(0,a.kt)("p",null,'Para abrir o console serial no Mu Editor, click no bot\xe3o "Serial" e depois pressione "Ctrl + D" para reiniciar a execu\xe7\xe3o do script na placa. Logo em seguida voc\xea poder\xe1 ver a primeira mensagem do script, solicitado o valor da primeira cor no console, a cor vermelha.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"franzininho-wifi-serial-console",src:i(3630).Z,width:"1360",height:"726"})),(0,a.kt)("p",null,"Aqui temos um exemplo de execu\xe7\xe3o no console serial do Mu Editor."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"franzininho-wifi-serial-console",src:i(1848).Z,width:"1030",height:"325"})),(0,a.kt)("p",null,"Resultado da execu\xe7\xe3o na placa Franzininho WiFi."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"franzininho-wifi-serial-console",src:i(3644).Z,width:"1600",height:"1166"})),(0,a.kt)("p",null,"Outro exemplo de execu\xe7\xe3o."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"franzininho-wifi-serial-console",src:i(4281).Z,width:"1280",height:"891"})),(0,a.kt)("admonition",{title:"Sugest\xe3o de experimento",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"Execute uma informando os valores ","[10,10,10]",", execute novamente agora informando os valores ","[100,100,100]"," e observe a diferen\xe7a entre as duas execu\xe7\xf5es.")),(0,a.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,a.kt)("p",null,"Neste exemplo exploramos duas importante ferramentas no desenvolvimento de qualquer projeto, a comunica\xe7\xe3o serial do console e o LED Builtin da placa Franzininho WiFi que tamb\xe9m \xe9 um LED Neopixel que pode dar um charme a mais a seus projetos!!!"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Autor"),(0,a.kt)("th",{parentName:"tr",align:null},"Ewerton Leandro de Sousa"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Data:"),(0,a.kt)("td",{parentName:"tr",align:null},"07/10/2021")))))}u.isMDXComponent=!0},3644:(e,o,i)=>{i.d(o,{Z:()=>n});const n=i.p+"assets/images/exemplo2-21fdde314416eddf012a6910081a7e2e.jpeg"},4281:(e,o,i)=>{i.d(o,{Z:()=>n});const n=i.p+"assets/images/exemplo3-be8b96c2fcf53cdaa581d2996e897d4d.jpeg"},2217:(e,o,i)=>{i.d(o,{Z:()=>n});const n=i.p+"assets/images/franzininho-wifi-3b55bb6358735fdb9708737760477e5b.png"},3630:(e,o,i)=>{i.d(o,{Z:()=>n});const n=i.p+"assets/images/mu1-d9e439fb33fd6469d96b580d0c518400.png"},1848:(e,o,i)=>{i.d(o,{Z:()=>n});const n=i.p+"assets/images/mu2-22111a44455aac8485e7acee915aa990.png"},7352:(e,o,i)=>{i.d(o,{Z:()=>n});const n=i.p+"assets/images/neopixel-6aba6a8ee3594d17ac2240dff080b576.png"}}]); \ No newline at end of file diff --git a/en/assets/js/43004a8a.51ba281e.js b/en/assets/js/43004a8a.28060fa5.js similarity index 65% rename from en/assets/js/43004a8a.51ba281e.js rename to en/assets/js/43004a8a.28060fa5.js index 5971b1e1f..061f7a0e8 100755 --- a/en/assets/js/43004a8a.51ba281e.js +++ b/en/assets/js/43004a8a.28060fa5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[270],{3769:n=>{n.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[400],{2080:n=>{n.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/en/assets/js/445992cb.4e36762d.js b/en/assets/js/445992cb.4e36762d.js new file mode 100755 index 000000000..d30e6be6e --- /dev/null +++ b/en/assets/js/445992cb.4e36762d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6980],{87004:(a,o,e)=>{e.r(o),e.d(o,{assets:()=>s,contentTitle:()=>n,default:()=>l,frontMatter:()=>i,metadata:()=>d,toc:()=>c});var r=e(17624),t=e(95788);const i={id:"adaptador-arduino",title:"Adaptador Arduino Uno",slug:"arduino-uno",description:"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},n=void 0,d={id:"LaboratorioSistemasIot/adaptadores/adaptador-arduino",title:"Adaptador Arduino Uno",description:"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT",source:"@site/docs/LaboratorioSistemasIot/adaptadores/adaptador-arduino.md",sourceDirName:"LaboratorioSistemasIot/adaptadores",slug:"/LaboratorioSistemasIot/adaptadores/arduino-uno",permalink:"/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/adaptadores/adaptador-arduino.md",tags:[],version:"current",frontMatter:{id:"adaptador-arduino",title:"Adaptador Arduino Uno",slug:"arduino-uno",description:"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},sidebar:"docs",previous:{title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",permalink:"/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot"},next:{title:"laboratorioFW",permalink:"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW"}},s={},c=[{value:"Pinos de ativa\xe7\xe3o",id:"pinos-de-ativa\xe7\xe3o",level:2}];function p(a){const o={a:"a",admonition:"admonition",em:"em",h2:"h2",img:"img",p:"p",...(0,t.MN)(),...a.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.p,{children:(0,r.jsx)(o.img,{src:e(44912).c+"",width:"776",height:"829"})}),"\n",(0,r.jsxs)(o.p,{children:["Este adaptador permite a utiliza\xe7\xe3o da placa Arduino Uno em conjunto com a placa ",(0,r.jsx)(o.em,{children:"Laborat\xf3rio de Sistemas Embarcados e IoT"})," atrav\xe9s de um remapeamento da pinagem do Arduino Uno e para a pinagem da Franzininho Wifi (utilizada no projeto da placa de laborat\xf3rio). Para utilizar o adaptador basta conect\xe1-lo ao Arduino como um shield e ent\xe3o conectar o adaptador na placa."]}),"\n",(0,r.jsxs)(o.p,{children:[(0,r.jsx)(o.a,{href:"https://github.com/Franzininho/laboratorio-SEIoT-adaptador-arduino",children:"Clique aqui"})," para acessar o projeto da placa de circuito impresso no Github."]}),"\n",(0,r.jsx)(o.h2,{id:"pinos-de-ativa\xe7\xe3o",children:"Pinos de ativa\xe7\xe3o"}),"\n",(0,r.jsxs)(o.p,{children:["Este adaptador utiliza o mesmo sistema de codifica\xe7\xe3o de pinos de ativa\xe7\xe3o definido para a placa ",(0,r.jsx)(o.em,{children:"Laborat\xf3rio de Sistemas Embarcados e IoT"})," sendo que a correspond\xeancia entre o pino do Arduino e o pino de ativa\xe7\xe3o na placa laborat\xf3rio foi impresso no adaptdor e tamb\xe9m pode ser verificada no reposit\xf3rio do projeto no Github."]}),"\n",(0,r.jsx)(o.p,{children:"Para facilitar o uso deste adaptador foi desenvolvida a biblioteca laboratorioFW_ARDUNO para uso em conjunto com o placa que permite o uso dos c\xf3digos dos pinos de ativa\xe7\xe3o dentro da programa\xe7\xe3o."}),"\n",(0,r.jsx)(o.admonition,{title:"Obs.",type:"info",children:(0,r.jsxs)(o.p,{children:["Este projeto foi desenvolvido como parte do Trabalho de Conclus\xe3o de Curso de ",(0,r.jsx)(o.a,{href:"https://github.com/LelePG",children:"Let\xedcia Pegoraro Garcez"}),"."]})})]})}function l(a={}){const{wrapper:o}={...(0,t.MN)(),...a.components};return o?(0,r.jsx)(o,{...a,children:(0,r.jsx)(p,{...a})}):p(a)}},95788:(a,o,e)=>{e.d(o,{MN:()=>c});var r=e(11504);function t(a,o,e){return o in a?Object.defineProperty(a,o,{value:e,enumerable:!0,configurable:!0,writable:!0}):a[o]=e,a}function i(a,o){var e=Object.keys(a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(a);o&&(r=r.filter((function(o){return Object.getOwnPropertyDescriptor(a,o).enumerable}))),e.push.apply(e,r)}return e}function n(a){for(var o=1;o=0||(t[e]=a[e]);return t}(a,o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(a);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(a,e)&&(t[e]=a[e])}return t}var s=r.createContext({}),c=function(a){var o=r.useContext(s),e=o;return a&&(e="function"==typeof a?a(o):n(n({},o),a)),e},p={inlineCode:"code",wrapper:function(a){var o=a.children;return r.createElement(r.Fragment,{},o)}},l=r.forwardRef((function(a,o){var e=a.components,t=a.mdxType,i=a.originalType,s=a.parentName,l=d(a,["components","mdxType","originalType","parentName"]),u=c(e),m=t,b=u["".concat(s,".").concat(m)]||u[m]||p[m]||i;return e?r.createElement(b,n(n({ref:o},l),{},{components:e})):r.createElement(b,n({ref:o},l))}));l.displayName="MDXCreateElement"},44912:(a,o,e)=>{e.d(o,{c:()=>r});const r=e.p+"assets/images/3d-adaptador-6193045400d2b1d24b3917bd2763c20b.png"}}]); \ No newline at end of file diff --git a/en/assets/js/445992cb.97d84cd9.js b/en/assets/js/445992cb.97d84cd9.js deleted file mode 100755 index 440b008e0..000000000 --- a/en/assets/js/445992cb.97d84cd9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8407],{3905:(a,o,e)=>{e.d(o,{Zo:()=>c,kt:()=>b});var t=e(7294);function r(a,o,e){return o in a?Object.defineProperty(a,o,{value:e,enumerable:!0,configurable:!0,writable:!0}):a[o]=e,a}function n(a,o){var e=Object.keys(a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(a);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(a,o).enumerable}))),e.push.apply(e,t)}return e}function i(a){for(var o=1;o=0||(r[e]=a[e]);return r}(a,o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(a);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(a,e)&&(r[e]=a[e])}return r}var p=t.createContext({}),s=function(a){var o=t.useContext(p),e=o;return a&&(e="function"==typeof a?a(o):i(i({},o),a)),e},c=function(a){var o=s(a.components);return t.createElement(p.Provider,{value:o},a.children)},l="mdxType",u={inlineCode:"code",wrapper:function(a){var o=a.children;return t.createElement(t.Fragment,{},o)}},m=t.forwardRef((function(a,o){var e=a.components,r=a.mdxType,n=a.originalType,p=a.parentName,c=d(a,["components","mdxType","originalType","parentName"]),l=s(e),m=r,b=l["".concat(p,".").concat(m)]||l[m]||u[m]||n;return e?t.createElement(b,i(i({ref:o},c),{},{components:e})):t.createElement(b,i({ref:o},c))}));function b(a,o){var e=arguments,r=o&&o.mdxType;if("string"==typeof a||r){var n=e.length,i=new Array(n);i[0]=m;var d={};for(var p in o)hasOwnProperty.call(o,p)&&(d[p]=o[p]);d.originalType=a,d[l]="string"==typeof a?a:r,i[1]=d;for(var s=2;s{e.r(o),e.d(o,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>n,metadata:()=>d,toc:()=>s});var t=e(3117),r=(e(7294),e(3905));const n={id:"adaptador-arduino",title:"Adaptador Arduino Uno",slug:"arduino-uno",description:"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},i=void 0,d={unversionedId:"LaboratorioSistemasIot/adaptadores/adaptador-arduino",id:"LaboratorioSistemasIot/adaptadores/adaptador-arduino",title:"Adaptador Arduino Uno",description:"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT",source:"@site/docs/LaboratorioSistemasIot/adaptadores/adaptador-arduino.md",sourceDirName:"LaboratorioSistemasIot/adaptadores",slug:"/LaboratorioSistemasIot/adaptadores/arduino-uno",permalink:"/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/adaptadores/adaptador-arduino.md",tags:[],version:"current",frontMatter:{id:"adaptador-arduino",title:"Adaptador Arduino Uno",slug:"arduino-uno",description:"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},sidebar:"docs",previous:{title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",permalink:"/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot"},next:{title:"laboratorioFW",permalink:"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW"}},p={},s=[{value:"Pinos de ativa\xe7\xe3o",id:"pinos-de-ativa\xe7\xe3o",level:2}],c={toc:s},l="wrapper";function u(a){let{components:o,...n}=a;return(0,r.kt)(l,(0,t.Z)({},c,n,{components:o,mdxType:"MDXLayout"}),(0,r.kt)("p",null,(0,r.kt)("img",{src:e(9419).Z,width:"776",height:"829"})),(0,r.kt)("p",null,"Este adaptador permite a utiliza\xe7\xe3o da placa Arduino Uno em conjunto com a placa ",(0,r.kt)("em",{parentName:"p"},"Laborat\xf3rio de Sistemas Embarcados e IoT")," atrav\xe9s de um remapeamento da pinagem do Arduino Uno e para a pinagem da Franzininho Wifi (utilizada no projeto da placa de laborat\xf3rio). Para utilizar o adaptador basta conect\xe1-lo ao Arduino como um shield e ent\xe3o conectar o adaptador na placa."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/laboratorio-SEIoT-adaptador-arduino"},"Clique aqui")," para acessar o projeto da placa de circuito impresso no Github."),(0,r.kt)("h2",{id:"pinos-de-ativa\xe7\xe3o"},"Pinos de ativa\xe7\xe3o"),(0,r.kt)("p",null,"Este adaptador utiliza o mesmo sistema de codifica\xe7\xe3o de pinos de ativa\xe7\xe3o definido para a placa ",(0,r.kt)("em",{parentName:"p"},"Laborat\xf3rio de Sistemas Embarcados e IoT")," sendo que a correspond\xeancia entre o pino do Arduino e o pino de ativa\xe7\xe3o na placa laborat\xf3rio foi impresso no adaptdor e tamb\xe9m pode ser verificada no reposit\xf3rio do projeto no Github."),(0,r.kt)("p",null,"Para facilitar o uso deste adaptador foi desenvolvida a biblioteca laboratorioFW_ARDUNO para uso em conjunto com o placa que permite o uso dos c\xf3digos dos pinos de ativa\xe7\xe3o dentro da programa\xe7\xe3o."),(0,r.kt)("admonition",{title:"Obs.",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Este projeto foi desenvolvido como parte do Trabalho de Conclus\xe3o de Curso de ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/LelePG"},"Let\xedcia Pegoraro Garcez"),".")))}u.isMDXComponent=!0},9419:(a,o,e)=>{e.d(o,{Z:()=>t});const t=e.p+"assets/images/3d-adaptador-6193045400d2b1d24b3917bd2763c20b.png"}}]); \ No newline at end of file diff --git a/en/assets/js/449acc1f.bfa213db.js b/en/assets/js/449acc1f.bfa213db.js deleted file mode 100755 index a2b38d09f..000000000 --- a/en/assets/js/449acc1f.bfa213db.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9019],{3905:(A,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>u});var t=a(7294);function r(A,e,a){return e in A?Object.defineProperty(A,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):A[e]=a,A}function n(A,e){var a=Object.keys(A);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(A);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(A,e).enumerable}))),a.push.apply(a,t)}return a}function o(A){for(var e=1;e=0||(r[a]=A[a]);return r}(A,e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(A);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(A,a)&&(r[a]=A[a])}return r}var s=t.createContext({}),l=function(A){var e=t.useContext(s),a=e;return A&&(a="function"==typeof A?A(e):o(o({},e),A)),a},p=function(A){var e=l(A.components);return t.createElement(s.Provider,{value:e},A.children)},d="mdxType",c={inlineCode:"code",wrapper:function(A){var e=A.children;return t.createElement(t.Fragment,{},e)}},m=t.forwardRef((function(A,e){var a=A.components,r=A.mdxType,n=A.originalType,s=A.parentName,p=i(A,["components","mdxType","originalType","parentName"]),d=l(a),m=r,u=d["".concat(s,".").concat(m)]||d[m]||c[m]||n;return a?t.createElement(u,o(o({ref:e},p),{},{components:a})):t.createElement(u,o({ref:e},p))}));function u(A,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof A||r){var n=a.length,o=new Array(n);o[0]=m;var i={};for(var s in e)hasOwnProperty.call(e,s)&&(i[s]=e[s]);i.originalType=A,i[d]="string"==typeof A?A:r,o[1]=i;for(var l=2;l{a.r(e),a.d(e,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var t=a(3117),r=(a(7294),a(3905));const n={id:"franzininhoc0-arduino-primeiros-passos",title:"Primeiros passos com Arduino",slug:"/franzininho-c0/arduino-primeiros-passos",description:"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0"},o=void 0,i={unversionedId:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos",id:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos",title:"Primeiros passos com Arduino",description:"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0",source:"@site/docs/franzininhoSTM32C0/exemplos-arduino/primeiros-passos.md",sourceDirName:"franzininhoSTM32C0/exemplos-arduino",slug:"/franzininho-c0/arduino-primeiros-passos",permalink:"/en/docs/franzininho-c0/arduino-primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-arduino/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"franzininhoc0-arduino-primeiros-passos",title:"Primeiros passos com Arduino",slug:"/franzininho-c0/arduino-primeiros-passos",description:"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0"},sidebar:"docs",previous:{title:"Arduino IDE TODO List",permalink:"/en/docs/franzininho-c0/arduino-todolist"},next:{title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",permalink:"/en/docs/franzininho-c0/arduino-identificacao-pinos"}},s={},l=[{value:"Grava\xe7\xe3o de Programas pela USB",id:"grava\xe7\xe3o-de-programas-pela-usb",level:2},{value:"Identifica\xe7\xe3o da Porta Serial",id:"identifica\xe7\xe3o-da-porta-serial",level:2},{value:"Windows",id:"windows",level:3},{value:"Linux",id:"linux",level:3}],p={toc:l},d="wrapper";function c(A){let{components:e,...n}=A;return(0,r.kt)(d,(0,t.Z)({},p,n,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("p",null,'Os passos a seguir mostram a instala\xe7\xe3o e configura\xe7\xe3o da IDE Arduino para usar a op\xe7\xe3o de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma op\xe7\xe3o de placa espec\xedfica para a Franzininho C0, eliminando a necessidade de algumas configura\xe7\xf5es e usando op\xe7\xf5es default mais adequadas para os pinos. '),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Instale a ",(0,r.kt)("strong",{parentName:"p"},"IDE do Arduino")," (se voc\xea n\xe3o tiver instalada) de ",(0,r.kt)("a",{parentName:"p",href:"https://www.arduino.cc/en/software"},"https://www.arduino.cc/en/software"),". As telas apresentadas foram capturadas com a vers\xe3o 2.2.1 para Windows.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Instale o ",(0,r.kt)("strong",{parentName:"p"},"STM32CubeProgrammer")," de ",(0,r.kt)("a",{parentName:"p",href:"https://www.st.com/en/development-tools/stm32cubeprog.html"},"https://www.st.com/en/development-tools/stm32cubeprog.html"),". Pode ser necess\xe1ro fazer um pequeno cadastro para baixar o instalador.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Execute a IDE do Arduino. Entre em ",(0,r.kt)("strong",{parentName:"p"},"File"),", ",(0,r.kt)("strong",{parentName:"p"},"Preferences"),", Additional Boards Manager URLs e acrescente ",(0,r.kt)("inlineCode",{parentName:"p"},"https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json"),":"))),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Aditional Boards Manager URLs",src:a(3435).Z,width:"797",height:"531"})),(0,r.kt)("ol",{start:4},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Conecte a Franzininho C0 ao micro atrav\xe9s de um cabo USB. A placa ser\xe1 reconhecida como uma serial pelo sistema operacional.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},'Selecione "Select other board and port..." no ',(0,r.kt)("em",{parentName:"p"},"dropbox")," na tarja superior da IDE."))),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Sele\xe7\xe3o da placa, parte 1",src:a(1434).Z,width:"364",height:"246"})),(0,r.kt)("ol",{start:6},(0,r.kt)("li",{parentName:"ol"},"Selecione a placa ",(0,r.kt)("strong",{parentName:"li"},'"Generic STM32C0 series"')," e a porta correspondente \xe0 placa (se tiver d\xfavida, veja adiante como identificar a serial).")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Sele\xe7\xe3o da placa, parte 2",src:a(8351).Z,width:"696",height:"499"})),(0,r.kt)("ol",{start:7},(0,r.kt)("li",{parentName:"ol"},"Use o menu ",(0,r.kt)("strong",{parentName:"li"},"Tools")," para acertar a configura\xe7\xe3o da placa:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},'Board part number: "Generic C011F6Px"'),(0,r.kt)("li",{parentName:"ul"},'Upload method: "STM32CubeProgrammer (Serial)"'),(0,r.kt)("li",{parentName:"ul"},"U(S)ART support: \"Enabled (generic 'Serial')\"")))),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Configura\xe7\xe3o da placa",src:a(8678).Z,width:"532",height:"521"})),(0,r.kt)("h2",{id:"grava\xe7\xe3o-de-programas-pela-usb"},"Grava\xe7\xe3o de Programas pela USB"),(0,r.kt)("p",null,"A configura\xe7\xe3o acima far\xe1 a carga de programas atrav\xe9s da USB. Para isto a placa precisa estar com o bootloader em execu\xe7\xe3o, o que \xe9 feito atrav\xe9s destes passos:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Aperte o bot\xe3o ",(0,r.kt)("strong",{parentName:"li"},"BOOT")," e o mantenha apertado"),(0,r.kt)("li",{parentName:"ol"},"Aperte e solte o bot\xe3o ",(0,r.kt)("strong",{parentName:"li"},"RST")),(0,r.kt)("li",{parentName:"ol"},"Solte o bot\xe3o ",(0,r.kt)("strong",{parentName:"li"},"BOOT"))),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"A placa precisa estar executando o bootloader antes da IDE tentar carregar o programa, caso contr\xe1rio ser\xe1 apresentado um erro. O ideal \xe9 fazer o procedimento acima ",(0,r.kt)("strong",{parentName:"em"},"antes")," de apertar o bot\xe3o da IDE para compilar e carregar o programa.")),(0,r.kt)("h2",{id:"identifica\xe7\xe3o-da-porta-serial"},"Identifica\xe7\xe3o da Porta Serial"),(0,r.kt)("p",null,"A Franzininho C0 utiliza um integrado CH340E para emular uma porta serial atrav\xe9s de uma conex\xe3o USB. As vers\xf5es mais recentes de Windows e Linux reconhecem esta serial sem a necessidade de instala\xe7\xe3o de um driver espec\xedfico."),(0,r.kt)("h3",{id:"windows"},"Windows"),(0,r.kt)("p",null,"O Windows associa um nome do tipo COMnn para os dispositivos seriais. De um modo geral, o Windows tenta usar sempre o mesmo nome para cada dispositivo (identificando o dispositivo pelo VendorID, ProductID e Serial Number informados pela USB)."),(0,r.kt)("p",null,'O Gerenciador de Dispositivos mostra os dispositivos seriais embaixo de "Portas (COM e LPT)"'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Portas Seriais no Windows",src:a(8806).Z,width:"311",height:"114"})),(0,r.kt)("p",null,'A Franzininho C0 se apresenta como "USB-SERIAL CH340". Na d\xfavida, desconecte a placa e verifique quem sai da lista. Na figura acima, a Franzininho C0 est\xe1 em COM24.'),(0,r.kt)("h3",{id:"linux"},"Linux"),(0,r.kt)("p",null,"TBD"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Autor"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Daniel Quadros"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Data:"),(0,r.kt)("td",{parentName:"tr",align:"left"},"15/10/2023")))))}c.isMDXComponent=!0},3435:(A,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/Arduino_BoardsManagerURLs-e9c0daf50910d122497173992f15453d.png"},8678:(A,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/Arduino_ConfigBoard-1f6098e22f84dc7e7e951ca126cbf3f2.png"},1434:(A,e,a)=>{a.d(e,{Z:()=>t});const t="data:image/png;base64,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"},8351:(A,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/Arduino_SelectBoard_2-f9e271acb320f31ea713adf8a70205ca.png"},8806:(A,e,a)=>{a.d(e,{Z:()=>t});const t="data:image/png;base64,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"}}]); \ No newline at end of file diff --git a/en/assets/js/449acc1f.eed11d03.js b/en/assets/js/449acc1f.eed11d03.js new file mode 100755 index 000000000..a3ea97999 --- /dev/null +++ b/en/assets/js/449acc1f.eed11d03.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1208],{90752:(A,e,r)=>{r.r(e),r.d(e,{assets:()=>t,contentTitle:()=>i,default:()=>l,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var n=r(17624),a=r(95788);const s={id:"franzininhoc0-arduino-primeiros-passos",title:"Primeiros passos com Arduino",slug:"/franzininho-c0/arduino-primeiros-passos",description:"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0"},i=void 0,o={id:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos",title:"Primeiros passos com Arduino",description:"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0",source:"@site/docs/franzininhoSTM32C0/exemplos-arduino/primeiros-passos.md",sourceDirName:"franzininhoSTM32C0/exemplos-arduino",slug:"/franzininho-c0/arduino-primeiros-passos",permalink:"/en/docs/franzininho-c0/arduino-primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-arduino/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"franzininhoc0-arduino-primeiros-passos",title:"Primeiros passos com Arduino",slug:"/franzininho-c0/arduino-primeiros-passos",description:"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0"},sidebar:"docs",previous:{title:"Arduino IDE TODO List",permalink:"/en/docs/franzininho-c0/arduino-todolist"},next:{title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",permalink:"/en/docs/franzininho-c0/arduino-identificacao-pinos"}},t={},d=[{value:"Grava\xe7\xe3o de Programas pela USB",id:"grava\xe7\xe3o-de-programas-pela-usb",level:2},{value:"Identifica\xe7\xe3o da Porta Serial",id:"identifica\xe7\xe3o-da-porta-serial",level:2},{value:"Windows",id:"windows",level:3},{value:"Linux",id:"linux",level:3}];function c(A){const e={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.MN)(),...A.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.p,{children:'Os passos a seguir mostram a instala\xe7\xe3o e configura\xe7\xe3o da IDE Arduino para usar a op\xe7\xe3o de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma op\xe7\xe3o de placa espec\xedfica para a Franzininho C0, eliminando a necessidade de algumas configura\xe7\xf5es e usando op\xe7\xf5es default mais adequadas para os pinos.'}),"\n",(0,n.jsxs)(e.ol,{children:["\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Instale a ",(0,n.jsx)(e.strong,{children:"IDE do Arduino"})," (se voc\xea n\xe3o tiver instalada) de ",(0,n.jsx)(e.a,{href:"https://www.arduino.cc/en/software",children:"https://www.arduino.cc/en/software"}),". As telas apresentadas foram capturadas com a vers\xe3o 2.2.1 para Windows."]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Instale o ",(0,n.jsx)(e.strong,{children:"STM32CubeProgrammer"})," de ",(0,n.jsx)(e.a,{href:"https://www.st.com/en/development-tools/stm32cubeprog.html",children:"https://www.st.com/en/development-tools/stm32cubeprog.html"}),". Pode ser necess\xe1ro fazer um pequeno cadastro para baixar o instalador."]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:["Execute a IDE do Arduino. Entre em ",(0,n.jsx)(e.strong,{children:"File"}),", ",(0,n.jsx)(e.strong,{children:"Preferences"}),", Additional Boards Manager URLs e acrescente ",(0,n.jsx)(e.code,{children:"https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json"}),":"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{alt:"Aditional Boards Manager URLs",src:r(12528).c+"",width:"797",height:"531"})}),"\n",(0,n.jsxs)(e.ol,{start:"4",children:["\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsx)(e.p,{children:"Conecte a Franzininho C0 ao micro atrav\xe9s de um cabo USB. A placa ser\xe1 reconhecida como uma serial pelo sistema operacional."}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:['Selecione "Select other board and port..." no ',(0,n.jsx)(e.em,{children:"dropbox"})," na tarja superior da IDE."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{alt:"Sele\xe7\xe3o da placa, parte 1",src:r(70876).c+"",width:"364",height:"246"})}),"\n",(0,n.jsxs)(e.ol,{start:"6",children:["\n",(0,n.jsxs)(e.li,{children:["Selecione a placa ",(0,n.jsx)(e.strong,{children:'"Generic STM32C0 series"'})," e a porta correspondente \xe0 placa (se tiver d\xfavida, veja adiante como identificar a serial)."]}),"\n"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{alt:"Sele\xe7\xe3o da placa, parte 2",src:r(80512).c+"",width:"696",height:"499"})}),"\n",(0,n.jsxs)(e.ol,{start:"7",children:["\n",(0,n.jsxs)(e.li,{children:["Use o menu ",(0,n.jsx)(e.strong,{children:"Tools"})," para acertar a configura\xe7\xe3o da placa:","\n",(0,n.jsxs)(e.ul,{children:["\n",(0,n.jsx)(e.li,{children:'Board part number: "Generic C011F6Px"'}),"\n",(0,n.jsx)(e.li,{children:'Upload method: "STM32CubeProgrammer (Serial)"'}),"\n",(0,n.jsx)(e.li,{children:"U(S)ART support: \"Enabled (generic 'Serial')\""}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{alt:"Configura\xe7\xe3o da placa",src:r(77568).c+"",width:"532",height:"521"})}),"\n",(0,n.jsx)(e.h2,{id:"grava\xe7\xe3o-de-programas-pela-usb",children:"Grava\xe7\xe3o de Programas pela USB"}),"\n",(0,n.jsx)(e.p,{children:"A configura\xe7\xe3o acima far\xe1 a carga de programas atrav\xe9s da USB. Para isto a placa precisa estar com o bootloader em execu\xe7\xe3o, o que \xe9 feito atrav\xe9s destes passos:"}),"\n",(0,n.jsxs)(e.ol,{children:["\n",(0,n.jsxs)(e.li,{children:["Aperte o bot\xe3o ",(0,n.jsx)(e.strong,{children:"BOOT"})," e o mantenha apertado"]}),"\n",(0,n.jsxs)(e.li,{children:["Aperte e solte o bot\xe3o ",(0,n.jsx)(e.strong,{children:"RST"})]}),"\n",(0,n.jsxs)(e.li,{children:["Solte o bot\xe3o ",(0,n.jsx)(e.strong,{children:"BOOT"})]}),"\n"]}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsxs)(e.em,{children:["A placa precisa estar executando o bootloader antes da IDE tentar carregar o programa, caso contr\xe1rio ser\xe1 apresentado um erro. O ideal \xe9 fazer o procedimento acima ",(0,n.jsx)(e.strong,{children:"antes"})," de apertar o bot\xe3o da IDE para compilar e carregar o programa."]})}),"\n",(0,n.jsx)(e.h2,{id:"identifica\xe7\xe3o-da-porta-serial",children:"Identifica\xe7\xe3o da Porta Serial"}),"\n",(0,n.jsx)(e.p,{children:"A Franzininho C0 utiliza um integrado CH340E para emular uma porta serial atrav\xe9s de uma conex\xe3o USB. As vers\xf5es mais recentes de Windows e Linux reconhecem esta serial sem a necessidade de instala\xe7\xe3o de um driver espec\xedfico."}),"\n",(0,n.jsx)(e.h3,{id:"windows",children:"Windows"}),"\n",(0,n.jsx)(e.p,{children:"O Windows associa um nome do tipo COMnn para os dispositivos seriais. De um modo geral, o Windows tenta usar sempre o mesmo nome para cada dispositivo (identificando o dispositivo pelo VendorID, ProductID e Serial Number informados pela USB)."}),"\n",(0,n.jsx)(e.p,{children:'O Gerenciador de Dispositivos mostra os dispositivos seriais embaixo de "Portas (COM e LPT)"'}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{alt:"Portas Seriais no Windows",src:r(8736).c+"",width:"311",height:"114"})}),"\n",(0,n.jsx)(e.p,{children:'A Franzininho C0 se apresenta como "USB-SERIAL CH340". Na d\xfavida, desconecte a placa e verifique quem sai da lista. Na figura acima, a Franzininho C0 est\xe1 em COM24.'}),"\n",(0,n.jsx)(e.h3,{id:"linux",children:"Linux"}),"\n",(0,n.jsx)(e.p,{children:"TBD"}),"\n",(0,n.jsxs)(e.table,{children:[(0,n.jsx)(e.thead,{children:(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.th,{style:{textAlign:"left"},children:"Autor"}),(0,n.jsx)(e.th,{style:{textAlign:"left"},children:"Daniel Quadros"})]})}),(0,n.jsx)(e.tbody,{children:(0,n.jsxs)(e.tr,{children:[(0,n.jsx)(e.td,{style:{textAlign:"left"},children:"Data:"}),(0,n.jsx)(e.td,{style:{textAlign:"left"},children:"15/10/2023"})]})})]})]})}function l(A={}){const{wrapper:e}={...(0,a.MN)(),...A.components};return e?(0,n.jsx)(e,{...A,children:(0,n.jsx)(c,{...A})}):c(A)}},95788:(A,e,r)=>{r.d(e,{MN:()=>d});var n=r(11504);function a(A,e,r){return e in A?Object.defineProperty(A,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):A[e]=r,A}function s(A,e){var r=Object.keys(A);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(A);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(A,e).enumerable}))),r.push.apply(r,n)}return r}function i(A){for(var e=1;e=0||(a[r]=A[r]);return a}(A,e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(A);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(A,r)&&(a[r]=A[r])}return a}var t=n.createContext({}),d=function(A){var e=n.useContext(t),r=e;return A&&(r="function"==typeof A?A(e):i(i({},e),A)),r},c={inlineCode:"code",wrapper:function(A){var e=A.children;return n.createElement(n.Fragment,{},e)}},l=n.forwardRef((function(A,e){var r=A.components,a=A.mdxType,s=A.originalType,t=A.parentName,l=o(A,["components","mdxType","originalType","parentName"]),p=d(r),u=a,m=p["".concat(t,".").concat(u)]||p[u]||c[u]||s;return r?n.createElement(m,i(i({ref:e},l),{},{components:r})):n.createElement(m,i({ref:e},l))}));l.displayName="MDXCreateElement"},12528:(A,e,r)=>{r.d(e,{c:()=>n});const n=r.p+"assets/images/Arduino_BoardsManagerURLs-e9c0daf50910d122497173992f15453d.png"},77568:(A,e,r)=>{r.d(e,{c:()=>n});const n=r.p+"assets/images/Arduino_ConfigBoard-1f6098e22f84dc7e7e951ca126cbf3f2.png"},70876:(A,e,r)=>{r.d(e,{c:()=>n});const n="data:image/png;base64,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"},80512:(A,e,r)=>{r.d(e,{c:()=>n});const n=r.p+"assets/images/Arduino_SelectBoard_2-f9e271acb320f31ea713adf8a70205ca.png"},8736:(A,e,r)=>{r.d(e,{c:()=>n});const n="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATcAAAByCAMAAAABHmZrAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAAAOTkAADkAOTk5ACsrKy0tLTAwMDExMTY2Njk5OTs7OwAAZgA5ZjkAZjk5ZixSPgBmZjdqUDdsUThtUjhuUjhvUzhwVDlxVTlyVTlyVmYAAGYAOWY5OWYAZmZmAGZmOUBAQEFBQUVFRUpKSkxMTE1NTU5OTk9PT1RUVFlZWVpaWl5eXl9fX2BgYGNjY2ZmZmdnZ2hoaGpqanFxcXJycnZ2dnd3d3t7ewA5jzk5jwBmtjlmtmY5j2ZmtjmPjzmP22aPj2a2tma2/485AI85OY85ZrZmAI+PZtuPOdCmVdu2Zv+2Zp6enp+fn4+2j6CgoKGhoY+2/7a2/4/btrb/to/b24/b/7b//9uPj/+2j/+2ttv/tv/bj///ttv/////2+bm5vLy8vT09Pb29vr6+vv7+/z8/P7+/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA9ydwAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAsKSURBVHhe7V0NYxtHEVVc0o/UQMI3OJSEr9BSSPlysF1A4BShIiiEFhuoZBdoiv7/H+C9mdm9vdPdSaPTuZK9z9be7tzs6vZpdm/3+aIM5hnrIPO2Hlp4+1OAlTMStPF2+JH8ZN5q0MbbR4rMWw1cvM0OBoNbZ1ZoxPhkPr98OhgcXcznk8FgMGRF2HiqXHt2n0VrdQRX9d4FNPP2k7cev/nG6z/47ncevmoW6eeYdERoz0uYHl/Mp3unyDybT8DH5dMh3O4oQ7W8hVaZuXxnocGtROTtf0kqeOsw4BWzSMfKTJVLgvEQVIE2QI/Tz53P7j9gHE3uld21dmxVkolG5rYj8PbnJ8+RPn/yFy0Cjw/tdnr4slliD6d7g8Epcg84sE44wk5kZJIlBgyYEn89wjK7//5r58i8T2Zg3xvs84wQFVvVhOG6AzDePnnyEMQ9R/qJGubzNy3aDg9fNIt0DCNqdnA6n75wNjvgABQicAhxMgNBoe96RNTh/Ah1jj8Ud1aaMP60NtM4TqX+DiDE28eg7L9CXsAbId5+ftssMoMjUCSMRiRDu4rJ/9bZdE9ndOFtMd7OwKFWkXBjhBpRoVUr7sgEF+c3xNr3Utrmr//Mwu1HBW/SzypvKEpnxzJOyVvN/HZ2+c57xxfaQKA18KatWmbH4k2IS2mb//L7j396ePiLxz986cdmCT2UcSpkiGVydIFRCzvuCBYvE1LI+yniKAznCZYY2gAtAitKGjK7Nb8Rz//6seUE//n2w1dfefnF27df+rdZYg8x0LCgkNJocII7wme/eYbBKoNN2eNQDOs3UEjXy9+DQ22AZ2WcYoQOhqFVPbtj99Ma3Lkzf/ToEQ8udAuYHZneeuBN9gtrY7Qb4dbGG0DeMuqQeVsP7bxlNCHzth58vNkOIkvAXt6yBGxw8rYgZd5UdOVtBQk47gdWhm7bqpjunf6zZF8mLHOXN7It3abh4m09CdjPWz3+cT7SnZyBG5MWYfny6T1KDD3tP1y8rScBb4q3KpYKyyKt9LTfdfHmlIAJ2H+jpzVWVBYO3u/tDU7HHGDWzOz+H0JJHbWdNK9V2RIiKShSeoSlJCwLbz3pKy7enBIwU9gx17AgCi/HklrF++iC6hLmITrgxelJS+pI33LeqrIAVgIpeqwKy8JbT3qeizenBIzT7BAMDBIJQA2MijdeCweLJJWSq3lQY7zpmTTeEmFZKOtpgnPx5paAI2/WP+tgxRuvhUN0RDsL+chbu7C8NfHml4DDOA0KbzJOC2+82HHcE60kBjpqO2neqrIpfjCtwrJQFobyhuHizSkB047BZfcFvVFwXKPn0Tu84Id7oJXkQEdrJ81rVWKpsCy8bcP9dG0psyvCH8tKWCmSepredoS3+ezXlkmxirDcl37s4w34VKTMkS7Ztgi7wdv2wc1bhiDzth58vNl2Ieu9Xt6y3mtw8ragW95UdOXNqfd23C2OT7Qxe1d9JFgEld6E3Qa4eOuu93bjDTsE4y28KzP9CrsNcPHWXe/txht2pNpYfFcr9rgRbYCLt+56L3pYUnmR5eHB/rl4iLCr6m5scP88NMaQMqLsXUORvPUkfDTAxVt3vZe8JSovskmtyVBiRpKkQZa0MdBjOaRxnOoJTa4MLt66673kzXzwEletpR6ie2hSNBgbS3jTd0VGi6Tsaic4F2/d9d5F3vSPAqZFYgrjDh5J0mBsLOFN0pgR3iS5Mrh46673VniDOdQKHqJGjodJg7Gx8vwmsCIp2+L5rbveW+GNtxFO/nAVD3jvn0uSNFg0xvspRmj1kWDlbYvvp5vWLWP3V0RbSF3t9LZbvLUpvFf8YLCPN2CTuqWbt+3Bp8rbDsPNW4Yg87YefLzZdiHrvV7est5rcPK2oFveVHTmTVf3EbojAmwlX5WDw9Jj4WHdGsA3NlesWWTHYJuMpUi9VnkcmLudW2craMcu3mr0Xu6/p8+skEKvmGlJDg4dqT6sW4cSNbHAjO1cU1TLakms3GwsfRxY5fYV9h4u3mr0Xmy6LVeBXnHl2uu614z6itZktaFqOTpaiZvbmsflKo8Dz34l3Vm+13XxVqf3qo6BXTgfL32w/wGuQPRZveJw7fHZXGzyEw2Xm3npiim/ZhAPqSy/4ZlfHVVsDv3Sk1Lim3+A0XsS2pMDx/NJaFdjiIOD0CMsC48DT+4dcBwv11ZcvNXovZwxdLKZDMkhc6HHmrFxSlNJVDJD0JuKpwJTlVec7Jnfv2u0mGapJ8MBb85CqK4HsRxd6LxFVgIdelTlr/w4MAcwhqoILK1w8Vaj9wKYNPgB88PVzx+TrkrjsZNq4uXCLGfUoOIk/WgbpWqlGs1dDp8RMsVVWbEzxZtb9aSV8FJWNM5K8VZ5HJgDFK/lE5yLtxq9lxif6IXYRaKgl2QmQE0Jb2bQDpofPn8zWC31ZYGHgzs66bCsoWJnpJKYrXrSSnjhPFipmd8qjwMbbxuOtxq9F4sJ3Jh0YNlF2oO4erWSJs/mhj/SFMNSe40G2A81WC0c9NdyujxgWdtn9/lQcPHmVr1oJbwkuhjlIKztcWBk2GoY0M1w8Van98p8LDNxGKeqz8ql2DWDWpFsMTjlvhA1XFTT1Z0pv2awWjjor+Uun3Km5DuaD9rjnVDenDJzaM8OsFhltrba48Bw0JBbAhdvm9YtC1jf+sTyGIpYPr3dIN5WehxYsYJ27OMN6Ee3vAreNoot4W3n4OYtQ5B5Ww8+3my7kPVeL29Z7zU4eVvULW8oOvOGlbfoDQbsgDSjKwtb3BcIC44t1XvHsA/2vyUbula4eLsBei8wHm56v3D99V4gyCLtcPF2/fVegM/TblgPuf56r/IbKGyBi7frr/fi3Nt6in4tcPF2/fVedEYuZ7Pxdv31Xou0MKCb4eLtBui9GmlZ7y2wPIYiNOhacXN4y3rvNmBLeNs5uHnLEGTe1oOPN9suZL3Xy1vWew1O3hZ1yxuKrrzpShsJVuD8B8y6DhckFrPrYlxWR8nCQzVYNSBlUZqgjoI2dDe/TK0dmSMqrfB0bne4eGv4Pgcm3GZOn7HEHFFY1ItaEHmbfp7/KFLthGmw0XH2N22CEhAqmCNX+y1qLaziyEorrPa7w8Vbw/c5MFHdlyXrqCnBWjK78DYecqcYvECAxmfhiFT8fnt8wX2i7CuXq7W6OWKlFXaX3eHireH7HISSKEqEqy4sZpfwYfdMTxKvGJ6Fo26rp2/DjZxJeyQlDWSxlP8XODYulTw70bXh4q3h+xwkwdyDCQzzmKirRGJhiu5L145lIBW8WSdlChSlY0xXpTfyZjXFU4+IOrRRqLV8LDd8JnDuGy7e6r7PIfCG/uyJVDh9gQqssGcWcWCUsEOkAnO82ulTF2+3zuC2wNtivBVqLec7tk3e+Ln0DRdvNXqvXKP1SL+9KExDRPw+I6ToFHqvYcU/F1jf6ua3+eh34nb0R3BG7oS3mvktqrVyGdq2Tgd9w8Vbjd47H2H6x8rCdF90G/EmJwqL0oEXOiR3Cx1j4oV44qojuZ/+y2REho6Sg7zw0qLWhklV4o2vvuHirUbvBQeyptIZjCmVVqKw2PcvjI8+fO1cF1eIQ7GLo2qwyg9SFiWw2H2s1DTIJOqa1Vr5O7u4sFIgsUe4eOtPt1wKRwxdxfS2M7zJfmE1XMk3O/h4A7JuKci8rQc3bxmCzNt6aObt3dJPRhlNvL17twSzZgQ0xtvdbxBf/9pXv/LlL33xbg64CprjLaHtCxZv6XZgNegu4NphPv8/X2WIwphh6doAAAAASUVORK5CYII="}}]); \ No newline at end of file diff --git a/en/assets/js/4552.cc3bd259.js b/en/assets/js/4552.cc3bd259.js new file mode 100755 index 000000000..a86b9d1ab --- /dev/null +++ b/en/assets/js/4552.cc3bd259.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4552],{96592:(e,t,n)=>{n.d(t,{c:()=>a});n(11504);var i=n(34064),o=n(84357),s=n(56448),r=n(17624);function a(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,i.c)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(s.c,{as:"h1",className:"hero__title",children:(0,r.jsx)(o.c,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.c,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.c,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},54552:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});n(11504);var i=n(84357),o=n(68900),s=n(99012),r=n(96592),a=n(17624);function c(){const e=(0,i.G)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.U7,{title:e}),(0,a.jsx)(s.c,{children:(0,a.jsx)(r.c,{})})]})}}}]); \ No newline at end of file diff --git a/en/assets/js/45a448cc.2e5497ed.js b/en/assets/js/45a448cc.2e5497ed.js new file mode 100755 index 000000000..e1a069c57 --- /dev/null +++ b/en/assets/js/45a448cc.2e5497ed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1456],{48832:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>t,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var a=n(17624),r=n(95788);const o={id:"arduino-dht11",title:"Leitura DHT11",slug:"/franzininho-wifi/exemplos-arduino/dht11",description:"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;",author:"Fabio Souza"},t=void 0,s={id:"FranzininhoWifi/exemplos-arduino/arduino-dht11",title:"Leitura DHT11",description:"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;",source:"@site/docs/FranzininhoWifi/exemplos-arduino/dht11.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/dht11",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/dht11",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/dht11.md",tags:[],version:"current",frontMatter:{id:"arduino-dht11",title:"Leitura DHT11",slug:"/franzininho-wifi/exemplos-arduino/dht11",description:"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;",author:"Fabio Souza"},sidebar:"docs",previous:{title:"Neopixel RGB LED Onboard",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard"},next:{title:"Primeiros Passos com MicroPython",permalink:"/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos"}},d={},l=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Resultado",id:"resultado",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function c(e){const i={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.p,{children:"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores no terminal serial."}),"\n",(0,a.jsx)(i.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,a.jsx)(i.p,{children:"Identifique os seguintes materiais necess\xe1rios para este projeto:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"1 Franzininho WiFi."}),"\n",(0,a.jsx)(i.li,{children:"1 Sensor DHT11"}),"\n",(0,a.jsx)(i.li,{children:"1 Resistor de 10k"}),"\n",(0,a.jsx)(i.li,{children:"1 Protoboard."}),"\n",(0,a.jsx)(i.li,{children:"Cabos de liga\xe7\xe3o."}),"\n"]}),"\n",(0,a.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,a.jsx)(i.p,{children:"Realize a montagem do circuito da maneira indicada pela figura a seguir:"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"Circuito DHT11",src:n(31748).c+"",width:"876",height:"1041"})}),"\n",(0,a.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,a.jsx)(i.p,{children:"Para usar o sensor DHT com a Franzininho WiFi no Arduino, precisamos instalar uma bibloteca. Vamos usar a biblioteca mantida pela Adafruit."}),"\n",(0,a.jsx)(i.p,{children:"Vamos instalar a biblioteca usando o gerenciador de biblitecas do Arduino. Acesso Ferramentas -> Gerenciar Bibliotecas. Procure por DHT e instale a bibloteca DHT sensor library da Adafruit:"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"Instala\xe7\xe3o da Biblioteca",src:n(27976).c+"",width:"894",height:"514"})}),"\n",(0,a.jsx)(i.p,{children:"Agora vamos fazer a leitura do sensor e imprimir os valores de temperatura e umidade no terminal serial."}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-cpp",children:'/*************************************************************************************\n * Exemplo para leitura de sensor DHT11\n * \n * \n * Bibliotecas necessarias\n * DHT da Adafruit - Instalar pelo gerenciador de bibliotecas\n * \n * por: F\xe1bio Souza\n *************************************************************************************/\n\n#include "DHT.h"\n \n#define DHTPIN 2 \n#define DHTTYPE DHT11\n \nDHT dht(DHTPIN, DHTTYPE);\n\n\n/*********************************************************************************\n * Fun\xe7\xe3o Setup\n * Configura\xe7\xf5es iniciais da aplica\xe7\xe3o\n *********************************************************************************/\nvoid setup() \n{\nSerial.begin(19200);\nSerial.println("Teste de leitura do sensor DHT11");\ndht.begin();\n}\n\n/*********************************************************************************\n * Fun\xe7\xe3o loop\n *********************************************************************************/\nvoid loop() \n{\n\n float umidade = dht.readHumidity();\n float temperatura = dht.readTemperature();\n\n delay(500);\n \n\n // Se as vari\xe1veis temperatura e umidade n\xe3o forem valores v\xe1lidos, acusar\xe1 falha de leitura.\n if (isnan(temperatura) || isnan(umidade)) \n {\n Serial.println("Falha na leitura do dht11...");\n } \n else //se n\xe3o, exibir\xe1 os valores lidos \n {\n //Imprime os dados no monitor serial\n Serial.print("Umidade: ");\n Serial.print(umidade);\n Serial.print(" %\\t"); //tab\n Serial.print("Temperatura: ");\n Serial.print(temperatura);\n Serial.println(" \xb0C");\n }\n}\n'})}),"\n",(0,a.jsx)(i.h2,{id:"an\xe1lise-do-c\xf3digo",children:"An\xe1lise do c\xf3digo"}),"\n",(0,a.jsx)(i.p,{children:"Na primeira parte do c\xf3digo adicionamo as bibliotecas a serem usadas na aplica\xe7\xe3o e a instancia do DHT11:"}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-cpp",children:"#define DHTPIN 2 \n#define DHTTYPE DHT11\n \nDHT dht(DHTPIN, DHTTYPE);\n"})}),"\n",(0,a.jsxs)(i.p,{children:["Na fun\xe7\xe3o ",(0,a.jsx)(i.code,{children:"setup()"})," fizemos a inicializa\xe7\xe3o do DHT11 e da comunica\xe7\xe3o Serial:"]}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-cpp",children:'void setup() \n{\nSerial.begin(19200);\nSerial.println("Teste de leitura do sensor DHT11");\ndht.begin();\n}\n'})}),"\n",(0,a.jsxs)(i.p,{children:["No ",(0,a.jsx)(i.code,{children:"loop()"})," infinito fazemos a leitura da temperatura e umidade a cada 500 ms e imprimimos na serial. Caso ocorra falha na leitura do DHT11 \xe9 exibido uma mensagem de erro:"]}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-cpp",children:'void loop() \n{\n\n float umidade = dht.readHumidity();\n float temperatura = dht.readTemperature();\n\n delay(500);\n \n\n // Se as vari\xe1veis temperatura e umidade n\xe3o forem valores v\xe1lidos, acusar\xe1 falha de leitura.\n if (isnan(temperatura) || isnan(umidade)) \n {\n Serial.println("Falha na leitura do dht11...");\n } \n else //se n\xe3o, exibir\xe1 os valores lidos \n {\n //Imprime os dados no monitor serial\n Serial.print("Umidade: ");\n Serial.print(umidade);\n Serial.print(" %\\t"); //tab\n Serial.print("Temperatura: ");\n Serial.print(temperatura);\n Serial.println(" \xb0C");\n }\n}\n'})}),"\n",(0,a.jsx)(i.h2,{id:"resultado",children:"Resultado"}),"\n",(0,a.jsx)(i.p,{children:"A figura a seguir exibe os valores lidos no monitor serial:"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"Terminal Serial",src:n(47077).c+"",width:"1065",height:"536"})}),"\n",(0,a.jsx)(i.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,a.jsx)(i.p,{children:"O sensor DHT11( e similares) possibilita que fa\xe7amos leitura de temperatura e umidade de uma forma simples e eficiente. Atrav\xe9s de 1 fio de comunica\xe7\xe3o conseguimos fazer a leitura das duas grandezas. Como a comunica\xe7\xe3o \xe9 um pouco complexa, o uso de uma biblioteca facilita a comunica\xe7\xe3o com o dispositivo. A biblioteca mantida pela Adafruit \xe9 muito eficiente e est\xe1vel."}),"\n",(0,a.jsx)(i.admonition,{type:"info",children:(0,a.jsxs)(i.p,{children:["Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,a.jsx)(i.a,{href:"https://discord.gg/H5kENmWGaz",children:"Discord"})]})}),"\n",(0,a.jsxs)(i.table,{children:[(0,a.jsx)(i.thead,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.th,{children:"Autor"}),(0,a.jsx)(i.th,{children:"F\xe1bio Souza"})]})}),(0,a.jsx)(i.tbody,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:"Data:"}),(0,a.jsx)(i.td,{children:"23/10/2021"})]})})]})]})}function u(e={}){const{wrapper:i}={...(0,r.MN)(),...e.components};return i?(0,a.jsx)(i,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},95788:(e,i,n)=>{n.d(i,{MN:()=>l});var a=n(11504);function r(e,i,n){return i in e?Object.defineProperty(e,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[i]=n,e}function o(e,i){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);i&&(a=a.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),n.push.apply(n,a)}return n}function t(e){for(var i=1;i=0||(r[n]=e[n]);return r}(e,i);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var d=a.createContext({}),l=function(e){var i=a.useContext(d),n=i;return e&&(n="function"==typeof e?e(i):t(t({},i),e)),n},c={inlineCode:"code",wrapper:function(e){var i=e.children;return a.createElement(a.Fragment,{},i)}},u=a.forwardRef((function(e,i){var n=e.components,r=e.mdxType,o=e.originalType,d=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(n),m=r,h=p["".concat(d,".").concat(m)]||p[m]||c[m]||o;return n?a.createElement(h,t(t({ref:i},u),{},{components:n})):a.createElement(h,t({ref:i},u))}));u.displayName="MDXCreateElement"},31748:(e,i,n)=>{n.d(i,{c:()=>a});const a=n.p+"assets/images/circuito-43a970745d9aaeec4fad97f720fd8811.png"},27976:(e,i,n)=>{n.d(i,{c:()=>a});const a=n.p+"assets/images/dht-lib-09d2b21ecd6956960598384892b76762.png"},47077:(e,i,n)=>{n.d(i,{c:()=>a});const a=n.p+"assets/images/valores-lidos-3a3d40d3f6f2a3488305949443f884a9.png"}}]); \ No newline at end of file diff --git a/en/assets/js/45a448cc.6bb566a2.js b/en/assets/js/45a448cc.6bb566a2.js deleted file mode 100755 index 39df47178..000000000 --- a/en/assets/js/45a448cc.6bb566a2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8442],{3905:(e,a,i)=>{i.d(a,{Zo:()=>u,kt:()=>f});var n=i(7294);function r(e,a,i){return a in e?Object.defineProperty(e,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[a]=i,e}function t(e,a){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),i.push.apply(i,n)}return i}function o(e){for(var a=1;a=0||(r[i]=e[i]);return r}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var s=n.createContext({}),d=function(e){var a=n.useContext(s),i=a;return e&&(i="function"==typeof e?e(a):o(o({},a),e)),i},u=function(e){var a=d(e.components);return n.createElement(s.Provider,{value:a},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},c=n.forwardRef((function(e,a){var i=e.components,r=e.mdxType,t=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=d(i),c=r,f=p["".concat(s,".").concat(c)]||p[c]||m[c]||t;return i?n.createElement(f,o(o({ref:a},u),{},{components:i})):n.createElement(f,o({ref:a},u))}));function f(e,a){var i=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var t=i.length,o=new Array(t);o[0]=c;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[p]="string"==typeof e?e:r,o[1]=l;for(var d=2;d{i.r(a),i.d(a,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var n=i(3117),r=(i(7294),i(3905));const t={id:"arduino-dht11",title:"Leitura DHT11",slug:"/franzininho-wifi/exemplos-arduino/dht11",description:"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;",author:"Fabio Souza"},o=void 0,l={unversionedId:"FranzininhoWifi/exemplos-arduino/arduino-dht11",id:"FranzininhoWifi/exemplos-arduino/arduino-dht11",title:"Leitura DHT11",description:"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;",source:"@site/docs/FranzininhoWifi/exemplos-arduino/dht11.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/dht11",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/dht11",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/dht11.md",tags:[],version:"current",frontMatter:{id:"arduino-dht11",title:"Leitura DHT11",slug:"/franzininho-wifi/exemplos-arduino/dht11",description:"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;",author:"Fabio Souza"},sidebar:"docs",previous:{title:"Neopixel RGB LED Onboard",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard"},next:{title:"Primeiros Passos com MicroPython",permalink:"/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos"}},s={},d=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Resultado",id:"resultado",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],u={toc:d},p="wrapper";function m(e){let{components:a,...t}=e;return(0,r.kt)(p,(0,n.Z)({},u,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores no terminal serial."),(0,r.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,r.kt)("p",null,"Identifique os seguintes materiais necess\xe1rios para este projeto:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"1 Franzininho WiFi."),(0,r.kt)("li",{parentName:"ul"},"1 Sensor DHT11"),(0,r.kt)("li",{parentName:"ul"},"1 Resistor de 10k"),(0,r.kt)("li",{parentName:"ul"},"1 Protoboard."),(0,r.kt)("li",{parentName:"ul"},"Cabos de liga\xe7\xe3o.")),(0,r.kt)("h2",{id:"circuito"},"Circuito"),(0,r.kt)("p",null,"Realize a montagem do circuito da maneira indicada pela figura a seguir:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Circuito DHT11",src:i(6189).Z,width:"876",height:"1041"})),(0,r.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,r.kt)("p",null,"Para usar o sensor DHT com a Franzininho WiFi no Arduino, precisamos instalar uma bibloteca. Vamos usar a biblioteca mantida pela Adafruit."),(0,r.kt)("p",null,"Vamos instalar a biblioteca usando o gerenciador de biblitecas do Arduino. Acesso Ferramentas -> Gerenciar Bibliotecas. Procure por DHT e instale a bibloteca DHT sensor library da Adafruit:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Instala\xe7\xe3o da Biblioteca",src:i(3877).Z,width:"894",height:"514"})),(0,r.kt)("p",null,"Agora vamos fazer a leitura do sensor e imprimir os valores de temperatura e umidade no terminal serial."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},'/*************************************************************************************\n * Exemplo para leitura de sensor DHT11\n * \n * \n * Bibliotecas necessarias\n * DHT da Adafruit - Instalar pelo gerenciador de bibliotecas\n * \n * por: F\xe1bio Souza\n *************************************************************************************/\n\n#include "DHT.h"\n \n#define DHTPIN 2 \n#define DHTTYPE DHT11\n \nDHT dht(DHTPIN, DHTTYPE);\n\n\n/*********************************************************************************\n * Fun\xe7\xe3o Setup\n * Configura\xe7\xf5es iniciais da aplica\xe7\xe3o\n *********************************************************************************/\nvoid setup() \n{\nSerial.begin(19200);\nSerial.println("Teste de leitura do sensor DHT11");\ndht.begin();\n}\n\n/*********************************************************************************\n * Fun\xe7\xe3o loop\n *********************************************************************************/\nvoid loop() \n{\n\n float umidade = dht.readHumidity();\n float temperatura = dht.readTemperature();\n\n delay(500);\n \n\n // Se as vari\xe1veis temperatura e umidade n\xe3o forem valores v\xe1lidos, acusar\xe1 falha de leitura.\n if (isnan(temperatura) || isnan(umidade)) \n {\n Serial.println("Falha na leitura do dht11...");\n } \n else //se n\xe3o, exibir\xe1 os valores lidos \n {\n //Imprime os dados no monitor serial\n Serial.print("Umidade: ");\n Serial.print(umidade);\n Serial.print(" %\\t"); //tab\n Serial.print("Temperatura: ");\n Serial.print(temperatura);\n Serial.println(" \xb0C");\n }\n}\n')),(0,r.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},"An\xe1lise do c\xf3digo"),(0,r.kt)("p",null,"Na primeira parte do c\xf3digo adicionamo as bibliotecas a serem usadas na aplica\xe7\xe3o e a instancia do DHT11:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"#define DHTPIN 2 \n#define DHTTYPE DHT11\n \nDHT dht(DHTPIN, DHTTYPE);\n")),(0,r.kt)("p",null,"Na fun\xe7\xe3o ",(0,r.kt)("inlineCode",{parentName:"p"},"setup()")," fizemos a inicializa\xe7\xe3o do DHT11 e da comunica\xe7\xe3o Serial:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},'void setup() \n{\nSerial.begin(19200);\nSerial.println("Teste de leitura do sensor DHT11");\ndht.begin();\n}\n')),(0,r.kt)("p",null,"No ",(0,r.kt)("inlineCode",{parentName:"p"},"loop()")," infinito fazemos a leitura da temperatura e umidade a cada 500 ms e imprimimos na serial. Caso ocorra falha na leitura do DHT11 \xe9 exibido uma mensagem de erro:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},'void loop() \n{\n\n float umidade = dht.readHumidity();\n float temperatura = dht.readTemperature();\n\n delay(500);\n \n\n // Se as vari\xe1veis temperatura e umidade n\xe3o forem valores v\xe1lidos, acusar\xe1 falha de leitura.\n if (isnan(temperatura) || isnan(umidade)) \n {\n Serial.println("Falha na leitura do dht11...");\n } \n else //se n\xe3o, exibir\xe1 os valores lidos \n {\n //Imprime os dados no monitor serial\n Serial.print("Umidade: ");\n Serial.print(umidade);\n Serial.print(" %\\t"); //tab\n Serial.print("Temperatura: ");\n Serial.print(temperatura);\n Serial.println(" \xb0C");\n }\n}\n')),(0,r.kt)("h2",{id:"resultado"},"Resultado"),(0,r.kt)("p",null,"A figura a seguir exibe os valores lidos no monitor serial:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Terminal Serial",src:i(8586).Z,width:"1065",height:"536"})),(0,r.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,r.kt)("p",null,"O sensor DHT11( e similares) possibilita que fa\xe7amos leitura de temperatura e umidade de uma forma simples e eficiente. Atrav\xe9s de 1 fio de comunica\xe7\xe3o conseguimos fazer a leitura das duas grandezas. Como a comunica\xe7\xe3o \xe9 um pouco complexa, o uso de uma biblioteca facilita a comunica\xe7\xe3o com o dispositivo. A biblioteca mantida pela Adafruit \xe9 muito eficiente e est\xe1vel."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,r.kt)("a",{parentName:"p",href:"https://discord.gg/H5kENmWGaz"},"Discord"))),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Autor"),(0,r.kt)("th",{parentName:"tr",align:null},"F\xe1bio Souza"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data:"),(0,r.kt)("td",{parentName:"tr",align:null},"23/10/2021")))))}m.isMDXComponent=!0},6189:(e,a,i)=>{i.d(a,{Z:()=>n});const n=i.p+"assets/images/circuito-43a970745d9aaeec4fad97f720fd8811.png"},3877:(e,a,i)=>{i.d(a,{Z:()=>n});const n=i.p+"assets/images/dht-lib-09d2b21ecd6956960598384892b76762.png"},8586:(e,a,i)=>{i.d(a,{Z:()=>n});const n=i.p+"assets/images/valores-lidos-3a3d40d3f6f2a3488305949443f884a9.png"}}]); \ No newline at end of file diff --git a/en/assets/js/4972.54ab1ffc.js b/en/assets/js/4972.54ab1ffc.js deleted file mode 100755 index d79d53ea2..000000000 --- a/en/assets/js/4972.54ab1ffc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4972],{4972:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(7294),l=n(5999),o=n(1944),r=n(7961);function i(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/en/assets/js/4c503f6c.419f731e.js b/en/assets/js/4c503f6c.419f731e.js new file mode 100755 index 000000000..3de3b2f10 --- /dev/null +++ b/en/assets/js/4c503f6c.419f731e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6472],{20188:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>t,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>d,toc:()=>l});var a=i(17624),o=i(95788);const r={id:"entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-diy/entradas-saidas-digitais",description:"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY"},s=void 0,d={id:"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",description:"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/entradas-saidas-digitais",permalink:"/en/docs/franzininho-diy/entradas-saidas-digitais",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais.md",tags:[],version:"current",frontMatter:{id:"entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-diy/entradas-saidas-digitais",description:"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY"},sidebar:"docs",previous:{title:"Configura\xe7\xe3o da Arduino IDE",permalink:"/en/docs/franzininho-diy/pacote"},next:{title:"Entradas Anal\xf3gicas",permalink:"/en/docs/franzininho-diy/entradas-analogicas"}},t={},l=[{value:"Configura\xe7\xe3o do modo de funcionamento do pino",id:"configura\xe7\xe3o-do-modo-de-funcionamento-do-pino",level:2},{value:"Sintaxe:",id:"sintaxe",level:3},{value:"Par\xe2metros:",id:"par\xe2metros",level:3},{value:"Exemplo de uso",id:"exemplo-de-uso",level:3},{value:"Escrita em um pino digital",id:"escrita-em-um-pino-digital",level:2},{value:"Sintaxe",id:"sintaxe-1",level:3},{value:"Par\xe2metros",id:"par\xe2metros-1",level:3},{value:"Exemplo de uso",id:"exemplo-de-uso-1",level:3},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:3},{value:"Leitura de um pino digital",id:"leitura-de-um-pino-digital",level:2},{value:"Sintaxe",id:"sintaxe-2",level:3},{value:"Par\xe2metros:",id:"par\xe2metros-2",level:3},{value:"Retorno",id:"retorno",level:3},{value:"Exemplo de uso",id:"exemplo-de-uso-2",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o-1",level:3}];function c(e){const n={admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(n.p,{children:["Na Franzininho DIY temos ",(0,a.jsx)(n.strong,{children:"6 pinos"})," que podem ser usados como entradas ou sa\xeddas digitais( P0 a P5), conforme pinout:"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Pinagem Franzininho DIY",src:i(4428).c+"",width:"1209",height:"869"})}),"\n",(0,a.jsx)(n.admonition,{type:"warning",children:(0,a.jsx)(n.p,{children:"Verificar limita\xe7\xf5es de uso dos pinos"})}),"\n",(0,a.jsx)(n.h2,{id:"configura\xe7\xe3o-do-modo-de-funcionamento-do-pino",children:"Configura\xe7\xe3o do modo de funcionamento do pino"}),"\n",(0,a.jsx)(n.p,{children:"Os pinos do ATtiny85 podem ser configurados como entradas ou sa\xeddas, al\xe9m de outras fun\xe7\xf5es. Para configura\xe7\xe3o como entrada ou sa\xedda digital vamos usar a seguinte fun\xe7\xe3o:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"pinMode()"})}),"\n",(0,a.jsx)(n.p,{children:"Configura um pino espec\xedfico para ser entrada ou sa\xedda digital."}),"\n",(0,a.jsx)(n.h3,{id:"sintaxe",children:"Sintaxe:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"pinMode(pino, modo);"})}),"\n",(0,a.jsx)(n.h3,{id:"par\xe2metros",children:"Par\xe2metros:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"pino:"})," corresponde ao pino que voc\xea ir\xe1 usar, no caso da Franzininho podemos usar pinos de 0 a 5."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"modo:"})," deve-se colocar o modo no qual se deseja configurar o pino:","\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"INPUT = Entrada: Esse pino receber\xe1 sinais vindos de um circuito externo"}),"\n",(0,a.jsx)(n.li,{children:"OUTPUT = Sa\xedda: Esse pino enviar\xe1 sinais para ativar um circuito externo"}),"\n",(0,a.jsx)(n.li,{children:"INPUT_PULLUP = Entrada digital com resistor de pull-up (ligado ao VCC) interno habilitado"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"exemplo-de-uso",children:"Exemplo de uso"}),"\n",(0,a.jsx)(n.p,{children:"Vamos configurar o pino P0 para leitura de uma tecla, portanto ser\xe1 uma entrada digital. Tamb\xe9m vamos configurar o pino P1 para acionamento do LED, ou seja, uma sa\xedda digital:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cpp",children:"int tecla = 0; //pino da tecla\nint LED = 1; //pino do LED\n\nvoid setup() {\n pinMode(tecla, INPUT); //configura pino da tecla como entrada\n pinMode(LED, OUTPUT); //configura pino do LED como sa\xedda\n}\n\nvoid loop() {\n\n\n}\n"})}),"\n",(0,a.jsxs)(n.p,{children:["Geralmente as configura\xe7\xf5es s\xe3o realizadas dentro da fun\xe7\xe3o ",(0,a.jsx)(n.code,{children:"setup()"}),". Na fun\xe7\xe3o ",(0,a.jsx)(n.code,{children:"loop()"})," s\xe3o realizadas as tarefas durante o funcionamento da placa, como veremos mais \xe0 frente."]}),"\n",(0,a.jsx)(n.h2,{id:"escrita-em-um-pino-digital",children:"Escrita em um pino digital"}),"\n",(0,a.jsx)(n.p,{children:"Os pinos digitais configurados como sa\xeddas digitais podem assumir dois valores, conforme a escrita no c\xf3digo. Os valores podem ser HIGH ou LOW, que se traduzem em 5V ou 0V no pino da Franzininho. Para escrita digital vamos usar a seguinte fun\xe7\xe3o:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"digitalWrite()"})}),"\n",(0,a.jsx)(n.p,{children:"Coloca um n\xedvel l\xf3gico alto (HIGH, 5V) ou baixo (LOW, 0V) em um pino configurado como sa\xedda digital."}),"\n",(0,a.jsx)(n.h3,{id:"sintaxe-1",children:"Sintaxe"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"digitalWrite(pino, valor)"})}),"\n",(0,a.jsx)(n.h3,{id:"par\xe2metros-1",children:"Par\xe2metros"}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.strong,{children:"pino:"})," N\xfamero correspondente ao pino."]}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.strong,{children:"valor:"})," HIGH ou LOW."]}),"\n",(0,a.jsx)(n.h3,{id:"exemplo-de-uso-1",children:"Exemplo de uso"}),"\n",(0,a.jsx)(n.p,{children:"Inverte o estado do LED (P1) em intervalos de 1 segundo:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cpp",children:"const int LED = 1; //pino digital conectado ao LED\n\nvoid setup(){\n pinMode(LED,OUTPUT); //pino digital de sa\xedda\n}\n\nvoid loop(){\n digitalWrite(LED,HIGH); //acende o led da placa\n delay(1000); //aguarda um segundo\n digitalWrite(LED,LOW); //apaga o led da placa\n delay(1000); //aguarda um segundo\n}\n"})}),"\n",(0,a.jsx)(n.h3,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,a.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310738934055305794?view=diagram"}),"\n",(0,a.jsxs)(n.p,{children:["A fun\xe7\xe3o ",(0,a.jsx)(n.code,{children:"delay(ms)"})," espera um tempo em milissegundos. No caso do exemplo acima, 1000 ms = 1 segundo;"]}),"\n",(0,a.jsx)(n.h2,{id:"leitura-de-um-pino-digital",children:"Leitura de um pino digital"}),"\n",(0,a.jsx)(n.p,{children:"Um pino digital pode assumir dois valores, HIGH e LOW, conforme o n\xedvel de tens\xe3o presente no mesmo: 5V ou 0V. Podemos usar o pino configurado como entrada digital para ler estados de sensores, que por sua vez representam estados de situa\xe7\xf5es, por exemplo:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"bot\xe3o solto ou pressionado;"}),"\n",(0,a.jsx)(n.li,{children:"porta aberta ou fechada"}),"\n",(0,a.jsx)(n.li,{children:"presen\xe7a de objeto ou n\xe3o presen\xe7a de objeto"}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"Para leitura de uma entrada digital usamos a seguinte fun\xe7\xe3o:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"digitalRead()"})}),"\n",(0,a.jsx)(n.p,{children:"L\xea o valor presente em um pino digital. Este valor pode ser HIGH ou LOW."}),"\n",(0,a.jsx)(n.h3,{id:"sintaxe-2",children:"Sintaxe"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.code,{children:"digitalRead(pino);"})}),"\n",(0,a.jsx)(n.h3,{id:"par\xe2metros-2",children:"Par\xe2metros:"}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.strong,{children:"pino:"})," n\xfamero do pino que se deseja ler."]}),"\n",(0,a.jsx)(n.h3,{id:"retorno",children:"Retorno"}),"\n",(0,a.jsx)(n.p,{children:"HIGH ou LOW."}),"\n",(0,a.jsx)(n.h3,{id:"exemplo-de-uso-2",children:"Exemplo de uso"}),"\n",(0,a.jsx)(n.p,{children:"Vamos ler o estado da tecla ligada ao pino P2 e acionar o LED ligado a pino P1 conforme o seu estado:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Circuito",src:i(41664).c+"",width:"1563",height:"702"})}),"\n",(0,a.jsx)(n.h3,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-cpp",children:"const int LED = 1; //pino para o LED\nconst int BOTAO = 2; //pino para o bot\xe3o\n\nint val = 0; // val ser\xe1 utilizado para armazenar o estado do pino\n\nvoid setup(){\n pinMode(LED,OUTPUT); //o LED \xe9 uma sa\xedda\n pinMode(BOTAO,INPUT); //o BOTAO \xe9 uma entrada\n}\n\nvoid loop (){\n val = digitalRead(BOTAO); // l\xea e armazena o valor de entrada\n digitalWrite(LED, val); //aciona LED conforme valor lido do bot\xe3o\n}\n"})}),"\n",(0,a.jsx)(n.h3,{id:"simula\xe7\xe3o-1",children:"Simula\xe7\xe3o"}),"\n",(0,a.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310739108383162946?view=diagram"})]})}function p(e={}){const{wrapper:n}={...(0,o.MN)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},95788:(e,n,i)=>{i.d(n,{MN:()=>l});var a=i(11504);function o(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function r(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,a)}return i}function s(e){for(var n=1;n=0||(o[i]=e[i]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(o[i]=e[i])}return o}var t=a.createContext({}),l=function(e){var n=a.useContext(t),i=n;return e&&(i="function"==typeof e?e(n):s(s({},n),e)),i},c={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},p=a.forwardRef((function(e,n){var i=e.components,o=e.mdxType,r=e.originalType,t=e.parentName,p=d(e,["components","mdxType","originalType","parentName"]),u=l(i),m=o,h=u["".concat(t,".").concat(m)]||u[m]||c[m]||r;return i?a.createElement(h,s(s({ref:n},p),{},{components:i})):a.createElement(h,s({ref:n},p))}));p.displayName="MDXCreateElement"},41664:(e,n,i)=>{i.d(n,{c:()=>a});const a=i.p+"assets/images/circuito-13e542231a501db4a7e2f774eee017e5.png"},4428:(e,n,i)=>{i.d(n,{c:()=>a});const a=i.p+"assets/images/pinagem-V2-7047a8d5930175670acc131497791fcc.png"}}]); \ No newline at end of file diff --git a/en/assets/js/4c503f6c.94233b9f.js b/en/assets/js/4c503f6c.94233b9f.js deleted file mode 100755 index ffde83475..000000000 --- a/en/assets/js/4c503f6c.94233b9f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2536],{3905:(e,a,o)=>{o.d(a,{Zo:()=>p,kt:()=>g});var n=o(7294);function i(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function t(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var a=1;a=0||(i[o]=e[o]);return i}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var s=n.createContext({}),l=function(e){var a=n.useContext(s),o=a;return e&&(o="function"==typeof e?e(a):r(r({},a),e)),o},p=function(e){var a=l(e.components);return n.createElement(s.Provider,{value:a},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},c=n.forwardRef((function(e,a){var o=e.components,i=e.mdxType,t=e.originalType,s=e.parentName,p=d(e,["components","mdxType","originalType","parentName"]),u=l(o),c=i,g=u["".concat(s,".").concat(c)]||u[c]||m[c]||t;return o?n.createElement(g,r(r({ref:a},p),{},{components:o})):n.createElement(g,r({ref:a},p))}));function g(e,a){var o=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var t=o.length,r=new Array(t);r[0]=c;var d={};for(var s in a)hasOwnProperty.call(a,s)&&(d[s]=a[s]);d.originalType=e,d[u]="string"==typeof e?e:i,r[1]=d;for(var l=2;l{o.r(a),o.d(a,{assets:()=>s,contentTitle:()=>r,default:()=>m,frontMatter:()=>t,metadata:()=>d,toc:()=>l});var n=o(3117),i=(o(7294),o(3905));const t={id:"entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-diy/entradas-saidas-digitais",description:"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY"},r=void 0,d={unversionedId:"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais",id:"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",description:"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/entradas-saidas-digitais",permalink:"/en/docs/franzininho-diy/entradas-saidas-digitais",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais.md",tags:[],version:"current",frontMatter:{id:"entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-diy/entradas-saidas-digitais",description:"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY"},sidebar:"docs",previous:{title:"Configura\xe7\xe3o da Arduino IDE",permalink:"/en/docs/franzininho-diy/pacote"},next:{title:"Entradas Anal\xf3gicas",permalink:"/en/docs/franzininho-diy/entradas-analogicas"}},s={},l=[{value:"Configura\xe7\xe3o do modo de funcionamento do pino",id:"configura\xe7\xe3o-do-modo-de-funcionamento-do-pino",level:2},{value:"Sintaxe:",id:"sintaxe",level:3},{value:"Par\xe2metros:",id:"par\xe2metros",level:3},{value:"Exemplo de uso",id:"exemplo-de-uso",level:3},{value:"Escrita em um pino digital",id:"escrita-em-um-pino-digital",level:2},{value:"Sintaxe",id:"sintaxe-1",level:3},{value:"Par\xe2metros",id:"par\xe2metros-1",level:3},{value:"Exemplo de uso",id:"exemplo-de-uso-1",level:3},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:3},{value:"Leitura de um pino digital",id:"leitura-de-um-pino-digital",level:2},{value:"Sintaxe",id:"sintaxe-2",level:3},{value:"Par\xe2metros:",id:"par\xe2metros-2",level:3},{value:"Retorno",id:"retorno",level:3},{value:"Exemplo de uso",id:"exemplo-de-uso-2",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o-1",level:3}],p={toc:l},u="wrapper";function m(e){let{components:a,...t}=e;return(0,i.kt)(u,(0,n.Z)({},p,t,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Na Franzininho DIY temos ",(0,i.kt)("strong",{parentName:"p"},"6 pinos")," que podem ser usados como entradas ou sa\xeddas digitais","("," P0 a P5",")",", conforme pinout:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Pinagem Franzininho DIY",src:o(4648).Z,width:"1209",height:"869"})),(0,i.kt)("admonition",{type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"Verificar limita\xe7\xf5es de uso dos pinos")),(0,i.kt)("h2",{id:"configura\xe7\xe3o-do-modo-de-funcionamento-do-pino"},"Configura\xe7\xe3o do modo de funcionamento do pino"),(0,i.kt)("p",null,"Os pinos do ATtiny85 podem ser configurados como entradas ou sa\xeddas, al\xe9m de outras fun\xe7\xf5es. Para configura\xe7\xe3o como entrada ou sa\xedda digital vamos usar a seguinte fun\xe7\xe3o:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"pinMode()")),(0,i.kt)("p",null,"Configura um pino espec\xedfico para ser entrada ou sa\xedda digital."),(0,i.kt)("h3",{id:"sintaxe"},"Sintaxe:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"pinMode(pino, modo);")),(0,i.kt)("h3",{id:"par\xe2metros"},"Par\xe2metros:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"pino:")," corresponde ao pino que voc\xea ir\xe1 usar, no caso da Franzininho podemos usar pinos de 0 a 5."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"modo:")," deve-se colocar o modo no qual se deseja configurar o pino:",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"INPUT = Entrada: Esse pino receber\xe1 sinais vindos de um circuito externo"),(0,i.kt)("li",{parentName:"ul"},"OUTPUT = Sa\xedda: Esse pino enviar\xe1 sinais para ativar um circuito externo"),(0,i.kt)("li",{parentName:"ul"},"INPUT","_","PULLUP = Entrada digital com resistor de pull-up ","(","ligado ao VCC",")"," interno habilitado")))),(0,i.kt)("h3",{id:"exemplo-de-uso"},"Exemplo de uso"),(0,i.kt)("p",null,"Vamos configurar o pino P0 para leitura de uma tecla, portanto ser\xe1 uma entrada digital. Tamb\xe9m vamos configurar o pino P1 para acionamento do LED, ou seja, uma sa\xedda digital:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"int tecla = 0; //pino da tecla\nint LED = 1; //pino do LED\n\nvoid setup() {\n pinMode(tecla, INPUT); //configura pino da tecla como entrada\n pinMode(LED, OUTPUT); //configura pino do LED como sa\xedda\n}\n\nvoid loop() {\n\n\n}\n")),(0,i.kt)("p",null,"Geralmente as configura\xe7\xf5es s\xe3o realizadas dentro da fun\xe7\xe3o ",(0,i.kt)("inlineCode",{parentName:"p"},"setup()"),". Na fun\xe7\xe3o ",(0,i.kt)("inlineCode",{parentName:"p"},"loop()")," s\xe3o realizadas as tarefas durante o funcionamento da placa, como veremos mais \xe0 frente."),(0,i.kt)("h2",{id:"escrita-em-um-pino-digital"},"Escrita em um pino digital"),(0,i.kt)("p",null,"Os pinos digitais configurados como sa\xeddas digitais podem assumir dois valores, conforme a escrita no c\xf3digo. Os valores podem ser HIGH ou LOW, que se traduzem em 5V ou 0V no pino da Franzininho. Para escrita digital vamos usar a seguinte fun\xe7\xe3o:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"digitalWrite()")),(0,i.kt)("p",null,"Coloca um n\xedvel l\xf3gico alto ","(","HIGH, 5V",")"," ou baixo ","(","LOW, 0V",")"," em um pino configurado como sa\xedda digital."),(0,i.kt)("h3",{id:"sintaxe-1"},"Sintaxe"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"digitalWrite(pino, valor)")),(0,i.kt)("h3",{id:"par\xe2metros-1"},"Par\xe2metros"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"pino:")," N\xfamero correspondente ao pino."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"valor:")," HIGH ou LOW."),(0,i.kt)("h3",{id:"exemplo-de-uso-1"},"Exemplo de uso"),(0,i.kt)("p",null,"Inverte o estado do LED ","(","P1",")"," em intervalos de 1 segundo:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"const int LED = 1; //pino digital conectado ao LED\n\nvoid setup(){\n pinMode(LED,OUTPUT); //pino digital de sa\xedda\n}\n\nvoid loop(){\n digitalWrite(LED,HIGH); //acende o led da placa\n delay(1000); //aguarda um segundo\n digitalWrite(LED,LOW); //apaga o led da placa\n delay(1000); //aguarda um segundo\n}\n")),(0,i.kt)("h3",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,i.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310738934055305794?view=diagram"}),(0,i.kt)("p",null,"A fun\xe7\xe3o ",(0,i.kt)("inlineCode",{parentName:"p"},"delay(ms)")," espera um tempo em milissegundos. No caso do exemplo acima, 1000 ms = 1 segundo;"),(0,i.kt)("h2",{id:"leitura-de-um-pino-digital"},"Leitura de um pino digital"),(0,i.kt)("p",null,"Um pino digital pode assumir dois valores, HIGH e LOW, conforme o n\xedvel de tens\xe3o presente no mesmo: 5V ou 0V. Podemos usar o pino configurado como entrada digital para ler estados de sensores, que por sua vez representam estados de situa\xe7\xf5es, por exemplo:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"bot\xe3o solto ou pressionado;"),(0,i.kt)("li",{parentName:"ul"},"porta aberta ou fechada"),(0,i.kt)("li",{parentName:"ul"},"presen\xe7a de objeto ou n\xe3o presen\xe7a de objeto")),(0,i.kt)("p",null,"Para leitura de uma entrada digital usamos a seguinte fun\xe7\xe3o:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"digitalRead()")),(0,i.kt)("p",null,"L\xea o valor presente em um pino digital. Este valor pode ser HIGH ou LOW."),(0,i.kt)("h3",{id:"sintaxe-2"},"Sintaxe"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"digitalRead(pino);")),(0,i.kt)("h3",{id:"par\xe2metros-2"},"Par\xe2metros:"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"pino:")," n\xfamero do pino que se deseja ler."),(0,i.kt)("h3",{id:"retorno"},"Retorno"),(0,i.kt)("p",null,"HIGH ou LOW."),(0,i.kt)("h3",{id:"exemplo-de-uso-2"},"Exemplo de uso"),(0,i.kt)("p",null,"Vamos ler o estado da tecla ligada ao pino P2 e acionar o LED ligado a pino P1 conforme o seu estado:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Circuito",src:o(7750).Z,width:"1563",height:"702"})),(0,i.kt)("h3",{id:"c\xf3digo"},"C\xf3digo"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"const int LED = 1; //pino para o LED\nconst int BOTAO = 2; //pino para o bot\xe3o\n\nint val = 0; // val ser\xe1 utilizado para armazenar o estado do pino\n\nvoid setup(){\n pinMode(LED,OUTPUT); //o LED \xe9 uma sa\xedda\n pinMode(BOTAO,INPUT); //o BOTAO \xe9 uma entrada\n}\n\nvoid loop (){\n val = digitalRead(BOTAO); // l\xea e armazena o valor de entrada\n digitalWrite(LED, val); //aciona LED conforme valor lido do bot\xe3o\n}\n")),(0,i.kt)("h3",{id:"simula\xe7\xe3o-1"},"Simula\xe7\xe3o"),(0,i.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310739108383162946?view=diagram"}))}m.isMDXComponent=!0},7750:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/circuito-13e542231a501db4a7e2f774eee017e5.png"},4648:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/pinagem-V2-7047a8d5930175670acc131497791fcc.png"}}]); \ No newline at end of file diff --git a/en/assets/js/4cb2f106.6b173e50.js b/en/assets/js/4cb2f106.6b173e50.js deleted file mode 100755 index 95787994a..000000000 --- a/en/assets/js/4cb2f106.6b173e50.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1829],{3905:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>f});var o=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var c=o.createContext({}),p=function(e){var n=o.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},l=function(e){var n=p(e.components);return o.createElement(c.Provider,{value:n},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},d=o.forwardRef((function(e,n){var t=e.components,a=e.mdxType,r=e.originalType,c=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=p(t),d=a,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||r;return t?o.createElement(f,i(i({ref:n},l),{},{components:t})):o.createElement(f,i({ref:n},l))}));function f(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var r=t.length,i=new Array(r);i[0]=d;var s={};for(var c in n)hasOwnProperty.call(n,c)&&(s[c]=n[c]);s.originalType=e,s[u]="string"==typeof e?e:a,i[1]=s;for(var p=2;p{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var o=t(3117),a=(t(7294),t(3905));const r={id:"config-franzininho-c0-stm32cubeide",title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",slug:"/franzininho-c0/config-franzininho-c0-stm32cubeide",description:"7 passos para voc\xea configurar um novo projeto para a Franzininho C0"},i=void 0,s={unversionedId:"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide",id:"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide",title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",description:"7 passos para voc\xea configurar um novo projeto para a Franzininho C0",source:"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/configurando-projeto-stmcubeide.md",sourceDirName:"franzininhoSTM32C0/exemplos-stm32cube-IDE",slug:"/franzininho-c0/config-franzininho-c0-stm32cubeide",permalink:"/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/configurando-projeto-stmcubeide.md",tags:[],version:"current",frontMatter:{id:"config-franzininho-c0-stm32cubeide",title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",slug:"/franzininho-c0/config-franzininho-c0-stm32cubeide",description:"7 passos para voc\xea configurar um novo projeto para a Franzininho C0"},sidebar:"docs",previous:{title:"STM32Cube IDE TODO List",permalink:"/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist"},next:{title:"Arduino IDE TODO List",permalink:"/en/docs/franzininho-c0/arduino-todolist"}},c={},p=[],l={toc:p},u="wrapper";function m(e){let{components:n,...r}=e;return(0,a.kt)(u,(0,o.Z)({},l,r,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Confira abaixo os passos para voc\xea configurar um novo projeto para a Franzininho C0 para o STM32CubeIDE:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Clonar o reposit\xf3rio (",(0,a.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide.git"},"https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide.git"),") em uma pasta local e chegar at\xe9 o caminho que cont\xe9m os exemplos:")),(0,a.kt)("p",null,(0,a.kt)("img",{src:t(77).Z,width:"1004",height:"892"})),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},'Iniciar o STM32CubeIDE e selecionar a pasta do passo 1. como local do workspace, ent\xe3o selecionar "Launch":')),(0,a.kt)("p",null,(0,a.kt)("img",{src:t(6790).Z,width:"988",height:"738"})),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},'Note que ser\xe1 criada a pasta "/.metadata/" no local, que cont\xe9m as configura\xe7\xf5es do workspace:')),(0,a.kt)("p",null,(0,a.kt)("img",{src:t(7345).Z,width:"1004",height:"892"})),(0,a.kt)("ol",{start:4},(0,a.kt)("li",{parentName:"ol"},'Ap\xf3s inicializa\xe7\xe3o do CubeIDE, selecionar "Import project":')),(0,a.kt)("p",null,(0,a.kt)("img",{src:t(7894).Z,width:"1288",height:"1024"})),(0,a.kt)("ol",{start:5},(0,a.kt)("li",{parentName:"ol"},"Selecionar o mesmo caminho do passo 1.:")),(0,a.kt)("p",null,(0,a.kt)("img",{src:t(3812).Z,width:"1004",height:"712"})),(0,a.kt)("ol",{start:6},(0,a.kt)("li",{parentName:"ol"},'Note que os exemplos ser\xe3o listados e pode-se selecionar quais ser\xe3o importados. Para avan\xe7ar, selecionar "Finish"')),(0,a.kt)("p",null,(0,a.kt)("img",{src:t(2075).Z,width:"885",height:"628"})),(0,a.kt)("ol",{start:7},(0,a.kt)("li",{parentName:"ol"},"Finalmente, todos os exemplos est\xe3o carregados na IDE e prontos para compila\xe7\xe3o/execu\xe7\xe3o:")),(0,a.kt)("p",null,(0,a.kt)("img",{src:t(4308).Z,width:"1288",height:"1024"})),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Autor"),(0,a.kt)("th",{parentName:"tr",align:null},"Andr\xe9 Ara\xfajo"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Data:"),(0,a.kt)("td",{parentName:"tr",align:null},"17/07/2023")))))}m.isMDXComponent=!0},77:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/1-7a1711f7f55ff4c1dffc3027c811cb8d.png"},6790:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/2-e11b0ce60129cd7d555ff062a3bef316.png"},7345:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/3-a772861f9136fad70481c5ab562e092e.png"},7894:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/4-607c08e55514887cd67354e3082c9122.png"},3812:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/5-17f3e548f0574af83239aa5df691063f.png"},2075:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/6-b10718ca63f45f7d982b8953131fe825.png"},4308:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/7-16441995800196ee5e9696d7af91d098.png"}}]); \ No newline at end of file diff --git a/en/assets/js/4cb2f106.8d340869.js b/en/assets/js/4cb2f106.8d340869.js new file mode 100755 index 000000000..5169b0463 --- /dev/null +++ b/en/assets/js/4cb2f106.8d340869.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3280],{28020:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>t,metadata:()=>a,toc:()=>d});var i=o(17624),r=o(95788);const t={id:"config-franzininho-c0-stm32cubeide",title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",slug:"/franzininho-c0/config-franzininho-c0-stm32cubeide",description:"7 passos para voc\xea configurar um novo projeto para a Franzininho C0"},s=void 0,a={id:"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide",title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",description:"7 passos para voc\xea configurar um novo projeto para a Franzininho C0",source:"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/configurando-projeto-stmcubeide.md",sourceDirName:"franzininhoSTM32C0/exemplos-stm32cube-IDE",slug:"/franzininho-c0/config-franzininho-c0-stm32cubeide",permalink:"/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/configurando-projeto-stmcubeide.md",tags:[],version:"current",frontMatter:{id:"config-franzininho-c0-stm32cubeide",title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",slug:"/franzininho-c0/config-franzininho-c0-stm32cubeide",description:"7 passos para voc\xea configurar um novo projeto para a Franzininho C0"},sidebar:"docs",previous:{title:"STM32Cube IDE TODO List",permalink:"/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist"},next:{title:"Arduino IDE TODO List",permalink:"/en/docs/franzininho-c0/arduino-todolist"}},c={},d=[];function l(e){const n={a:"a",img:"img",li:"li",ol:"ol",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"Confira abaixo os passos para voc\xea configurar um novo projeto para a Franzininho C0 para o STM32CubeIDE:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Clonar o reposit\xf3rio (",(0,i.jsx)(n.a,{href:"https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide.git",children:"https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide.git"}),") em uma pasta local e chegar at\xe9 o caminho que cont\xe9m os exemplos:"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:o(7584).c+"",width:"1004",height:"892"})}),"\n",(0,i.jsxs)(n.ol,{start:"2",children:["\n",(0,i.jsx)(n.li,{children:'Iniciar o STM32CubeIDE e selecionar a pasta do passo 1. como local do workspace, ent\xe3o selecionar "Launch":'}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:o(53916).c+"",width:"988",height:"738"})}),"\n",(0,i.jsxs)(n.ol,{start:"3",children:["\n",(0,i.jsx)(n.li,{children:'Note que ser\xe1 criada a pasta "/.metadata/" no local, que cont\xe9m as configura\xe7\xf5es do workspace:'}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:o(74544).c+"",width:"1004",height:"892"})}),"\n",(0,i.jsxs)(n.ol,{start:"4",children:["\n",(0,i.jsx)(n.li,{children:'Ap\xf3s inicializa\xe7\xe3o do CubeIDE, selecionar "Import project":'}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:o(94328).c+"",width:"1288",height:"1024"})}),"\n",(0,i.jsxs)(n.ol,{start:"5",children:["\n",(0,i.jsx)(n.li,{children:"Selecionar o mesmo caminho do passo 1.:"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:o(42852).c+"",width:"1004",height:"712"})}),"\n",(0,i.jsxs)(n.ol,{start:"6",children:["\n",(0,i.jsx)(n.li,{children:'Note que os exemplos ser\xe3o listados e pode-se selecionar quais ser\xe3o importados. Para avan\xe7ar, selecionar "Finish"'}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:o(66728).c+"",width:"885",height:"628"})}),"\n",(0,i.jsxs)(n.ol,{start:"7",children:["\n",(0,i.jsx)(n.li,{children:"Finalmente, todos os exemplos est\xe3o carregados na IDE e prontos para compila\xe7\xe3o/execu\xe7\xe3o:"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:o(80388).c+"",width:"1288",height:"1024"})}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Autor"}),(0,i.jsx)(n.th,{children:"Andr\xe9 Ara\xfajo"})]})}),(0,i.jsx)(n.tbody,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Data:"}),(0,i.jsx)(n.td,{children:"17/07/2023"})]})})]})]})}function p(e={}){const{wrapper:n}={...(0,r.MN)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},95788:(e,n,o)=>{o.d(n,{MN:()=>d});var i=o(11504);function r(e,n,o){return n in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o,e}function t(e,n){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),o.push.apply(o,i)}return o}function s(e){for(var n=1;n=0||(r[o]=e[o]);return r}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var c=i.createContext({}),d=function(e){var n=i.useContext(c),o=n;return e&&(o="function"==typeof e?e(n):s(s({},n),e)),o},l={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},p=i.forwardRef((function(e,n){var o=e.components,r=e.mdxType,t=e.originalType,c=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),h=d(o),f=r,u=h["".concat(c,".").concat(f)]||h[f]||l[f]||t;return o?i.createElement(u,s(s({ref:n},p),{},{components:o})):i.createElement(u,s({ref:n},p))}));p.displayName="MDXCreateElement"},7584:(e,n,o)=>{o.d(n,{c:()=>i});const i=o.p+"assets/images/1-7a1711f7f55ff4c1dffc3027c811cb8d.png"},53916:(e,n,o)=>{o.d(n,{c:()=>i});const i=o.p+"assets/images/2-e11b0ce60129cd7d555ff062a3bef316.png"},74544:(e,n,o)=>{o.d(n,{c:()=>i});const i=o.p+"assets/images/3-a772861f9136fad70481c5ab562e092e.png"},94328:(e,n,o)=>{o.d(n,{c:()=>i});const i=o.p+"assets/images/4-607c08e55514887cd67354e3082c9122.png"},42852:(e,n,o)=>{o.d(n,{c:()=>i});const i=o.p+"assets/images/5-17f3e548f0574af83239aa5df691063f.png"},66728:(e,n,o)=>{o.d(n,{c:()=>i});const i=o.p+"assets/images/6-b10718ca63f45f7d982b8953131fe825.png"},80388:(e,n,o)=>{o.d(n,{c:()=>i});const i=o.p+"assets/images/7-16441995800196ee5e9696d7af91d098.png"}}]); \ No newline at end of file diff --git a/en/assets/js/4e4cd8a0.69d8774c.js b/en/assets/js/4e4cd8a0.69d8774c.js deleted file mode 100755 index 53e6379e9..000000000 --- a/en/assets/js/4e4cd8a0.69d8774c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6657],{3905:(e,o,a)=>{a.d(o,{Zo:()=>m,kt:()=>g});var r=a(7294);function n(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function t(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);o&&(r=r.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var o=1;o=0||(n[a]=e[a]);return n}(e,o);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=r.createContext({}),p=function(e){var o=r.useContext(l),a=o;return e&&(a="function"==typeof e?e(o):i(i({},o),e)),a},m=function(e){var o=p(e.components);return r.createElement(l.Provider,{value:o},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var o=e.children;return r.createElement(r.Fragment,{},o)}},d=r.forwardRef((function(e,o){var a=e.components,n=e.mdxType,t=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=p(a),d=n,g=u["".concat(l,".").concat(d)]||u[d]||c[d]||t;return a?r.createElement(g,i(i({ref:o},m),{},{components:a})):r.createElement(g,i({ref:o},m))}));function g(e,o){var a=arguments,n=o&&o.mdxType;if("string"==typeof e||n){var t=a.length,i=new Array(t);i[0]=d;var s={};for(var l in o)hasOwnProperty.call(o,l)&&(s[l]=o[l]);s.originalType=e,s[u]="string"==typeof e?e:n,i[1]=s;for(var p=2;p{a.r(o),a.d(o,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>t,metadata:()=>s,toc:()=>p});var r=a(3117),n=(a(7294),a(3905));const t={id:"circuitpython-servo-motor",title:"Servo motor",slug:"/franzininho-wifi/exemplos-circuitpython/servo-motor",description:"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!",author:"Mateus Adriano Ventura Vieira"},i=void 0,s={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor",title:"Servo motor",description:"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/servo-motor.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/servo-motor",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/servo-motor.md",tags:[],version:"current",frontMatter:{id:"circuitpython-servo-motor",title:"Servo motor",slug:"/franzininho-wifi/exemplos-circuitpython/servo-motor",description:"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!",author:"Mateus Adriano Ventura Vieira"},sidebar:"docs",previous:{title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04"},next:{title:"Sistema de irriga\xe7\xe3o autom\xe1tico",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao"}},l={},p=[{value:"Materiais Necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digos",id:"c\xf3digos",level:2},{value:"Exemplo 1",id:"exemplo-1",level:3},{value:"Exemplo 2",id:"exemplo-2",level:3},{value:"An\xe1lise dos C\xf3digos",id:"an\xe1lise-dos-c\xf3digos",level:2},{value:"Exemplo 1",id:"exemplo-1-1",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],m={toc:p},u="wrapper";function c(e){let{components:o,...t}=e;return(0,n.kt)(u,(0,r.Z)({},m,t,{components:o,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Um servo motor \xe9 um pequeno motor de corrente cont\xednua. Diferentemente dos demais motores DC, onde apenas controlamos a velocidade de giro, conseguimos controlar a posi\xe7\xe3o de um servo, atrav\xe9s do PWM."),(0,n.kt)("p",null,"O servo que vamos utilizar nesse exemplo, tem a resolu\xe7\xe3o de meia volta, ou seja, de 0\xb0 a 180\xb0."),(0,n.kt)("h2",{id:"materiais-necess\xe1rios"},(0,n.kt)("strong",{parentName:"h2"},"Materiais Necess\xe1rios")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"1 Placa Franzininho WiFi com CircuitPython;"),(0,n.kt)("li",{parentName:"ul"},"1 Micro servo 9g;"),(0,n.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,n.kt)("li",{parentName:"ul"},"1 potenci\xf4metro de 10 k\u03a9;"),(0,n.kt)("li",{parentName:"ul"},"Jumpers.")),(0,n.kt)("h2",{id:"circuito"},(0,n.kt)("strong",{parentName:"h2"},"Circuito")),(0,n.kt)("p",null,"Para os exemplos que vamos ver a seguir, realize a seguinte montagem:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito Servo Motor",src:a(8230).Z,width:"1755",height:"681"})),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Observa\xe7\xe3o:")," o servo deve ser conectado ao 5V da placa. E, caso deseje usar mais de dois servos, uma fonte externa deve ser usada."),(0,n.kt)("h2",{id:"c\xf3digos"},(0,n.kt)("strong",{parentName:"h2"},"C\xf3digos")),(0,n.kt)("p",null,"Assim como quando aprendemos a usar PWM, vamos importar o m\xf3dulo simpleio. Tamb\xe9m, vamos importar um novo m\xf3dulo para trabalharmos com o servo motor."),(0,n.kt)("p",null,"Para ter acesso a esses m\xf3dulos, acesse o endere\xe7o: ",(0,n.kt)("a",{parentName:"p",href:"https://circuitpython.org/libraries"},"https://circuitpython.org/libraries"),". Fa\xe7a o download, de acordo com a vers\xe3o do CircuitPython instalada na sua Franzininho WiFi."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito Servo Motor",src:a(3058).Z,width:"1543",height:"328"})),(0,n.kt)("p",null,"Ap\xf3s finalizar o download, importe os dois m\xf3dulos para a pasta de arquivos da Franzininho WiFi:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"simpleio.mpy"),";"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"adafruit_motor"),".")),(0,n.kt)("h3",{id:"exemplo-1"},(0,n.kt)("strong",{parentName:"h3"},"Exemplo 1")),(0,n.kt)("p",null,"No primeiro exemplo, vamos aprender a como programar um servo motor usando CircuitPython. Para isso, copie o c\xf3digo abaixo:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"import board\nimport pwmio\nfrom adafruit_motor import servo \nfrom time import sleep\n\npin = board.IO1\npwm = pwmio.PWMOut(pin, frequency = 50)\n\nmy_servo = servo.Servo(pwm)\n\nwhile True:\n for angle in range(0, 180, 10): \n my_servo.angle = angle\n sleep(0.1)\n for angle in range(180, 0, -10): \n my_servo.angle = angle\n sleep(0.1)\n")),(0,n.kt)("p",null,"Salve e execute o c\xf3digo."),(0,n.kt)("h3",{id:"exemplo-2"},(0,n.kt)("strong",{parentName:"h3"},"Exemplo 2")),(0,n.kt)("p",null,"J\xe1 nesse exemplo, vamos controlar o posicionamento do servo atrav\xe9s de um potenci\xf4metro. E para isso, vamos usar alguns recursos que aprendemos anteriormente. Escreva o c\xf3digo abaixo:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"import board\nimport pwmio\nfrom adafruit_motor import servo\nimport simpleio\nimport math\nfrom analogio import AnalogIn\nfrom time import sleep\n\npin = board.IO1\npwm = pwmio.PWMOut(pin, frequency = 50)\nmy_servo = servo.Servo(pwm)\n\npotPin = board.IO2\npot = AnalogIn(potPin)\n\ndef converter(pin):\n pinValue = pin.value\n mapValue = math.trunc(simpleio.map_range\n (pinValue, 536, 51355, 0, 180))\n return mapValue\n\nwhile True:\n angle = converter(pot)\n my_servo.angle = angle\n sleep(0.1)\n")),(0,n.kt)("p",null,"Ap\xf3s terminar de escrever, salve o c\xf3digo e teste-o."),(0,n.kt)("h2",{id:"an\xe1lise-dos-c\xf3digos"},(0,n.kt)("strong",{parentName:"h2"},"An\xe1lise dos C\xf3digos")),(0,n.kt)("h3",{id:"exemplo-1-1"},(0,n.kt)("strong",{parentName:"h3"},"Exemplo 1")),(0,n.kt)("p",null,"O primeiro m\xf3dulo que vamos importar, \xe9 o ",(0,n.kt)("strong",{parentName:"p"},"board"),". Ele possibilita o acesso aos pinos da placa:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,n.kt)("p",null,"Para conseguirmos usar os pinos PWM, precisamos do m\xf3dulo ",(0,n.kt)("strong",{parentName:"p"},"pwmio"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"import pwmio\n")),(0,n.kt)("p",null,"Tamb\xe9m, ser\xe1 necess\xe1rio a biblioteca auxiliar ",(0,n.kt)("strong",{parentName:"p"},"adafruit_motor.servo"),". Ela ser\xe1 \xfatil para controlar o servo com base na sa\xedda PWM:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"from adafruit_motor import servo\n")),(0,n.kt)("p",null,"E, por \xfaltimo, precisaremos da fun\xe7\xe3o ",(0,n.kt)("strong",{parentName:"p"},"sleep")," do m\xf3dulo ",(0,n.kt)("strong",{parentName:"p"},"time"),", para intervalos de temporiza\xe7\xe3o:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"from time import sleep\n")),(0,n.kt)("p",null,"Agora, vamos atribuir o GPIO1 da placa a vari\xe1vel pin:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"pin = board.IO1\n")),(0,n.kt)("p",null,"Tamb\xe9m, configuraremos esse pino como uma sa\xedda PWM. Repare, que diferente do LED, precisamos informar a frequ\xeancia, pois, por padr\xe3o ela est\xe1 configurada com 500Hz e o padr\xe3o do servo motor \xe9 50Hz:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"pwm = pwmio.PWMOut(pin, frequency = 50)\n")),(0,n.kt)("p",null,"Al\xe9m disso, vamos criar o objeto ",(0,n.kt)("strong",{parentName:"p"},"my_servo")," e atribuir o pino ",(0,n.kt)("strong",{parentName:"p"},"pwm")," a ele:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"my_servo = servo.Servo(pwm)\n")),(0,n.kt)("p",null,"Por fim, dentro do ",(0,n.kt)("strong",{parentName:"p"},"while True"),", o nosso loop, faremos com que o servo se mova continuamente. Para isso, usaremos a estrutura de repeti\xe7\xe3o ",(0,n.kt)("strong",{parentName:"p"},"for")," e o comando ",(0,n.kt)("strong",{parentName:"p"},"range( )"),", que gera uma lista."),(0,n.kt)("p",null,"Como par\xe2metros do primeiro la\xe7o, vamos informar o valor inicial (0), valor final(180) e o intervalo de contagem, ou seja, de 10 em 10. Dentro do la\xe7o, esse valor ser\xe1 enviado para o servo a cada 0.1 segundos:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"while True:\n for angle in range(0, 180, 10): \n my_servo.angle = angle\n sleep(0.1)\n")),(0,n.kt)("p",null,"J\xe1 no segundo la\xe7o, faremos o mesmo. Por\xe9m, inv\xe9s de incrementar de 10 em 10, a contagem ser\xe1 decrescente:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"for angle in range(180, 0, -10): \n my_servo.angle = angle\n sleep(0.1)\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Exemplo 2")),(0,n.kt)("p",null,"Al\xe9m dos m\xf3dulos que j\xe1 usamos no primeiro exemplo, precisaremos importar ",(0,n.kt)("strong",{parentName:"p"},"simpleio"),", para usarmos a fun\xe7\xe3o de mapeamento:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"import simpleio\n")),(0,n.kt)("p",null,"Vamos precisar tamb\xe9m da biblioteca ",(0,n.kt)("strong",{parentName:"p"},"math"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"import math\n")),(0,n.kt)("p",null,"E, da fun\xe7\xe3o ",(0,n.kt)("strong",{parentName:"p"},"AnalogIn")," da biblioteca ",(0,n.kt)("strong",{parentName:"p"},"analogio"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"from analogio import AnalogIn\n")),(0,n.kt)("p",null,"Al\xe9m de configurarmos o servo, tamb\xe9m vamos configurar o potenci\xf4metro. Para isso, primeiro vamos atribuir o GPIO2 a vari\xe1vel potPin:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"potPin = board.IO2\n")),(0,n.kt)("p",null,"Por fim, vamos atribuir esse pino ao objeto ",(0,n.kt)("strong",{parentName:"p"},"pot")," como uma entrada anal\xf3gica:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"pot = AnalogIn(potPin)\n")),(0,n.kt)("p",null,"Agora, vamos criar uma fun\xe7\xe3o chamada ",(0,n.kt)("strong",{parentName:"p"},"converte"),". Essa fun\xe7\xe3o receber\xe1 como par\xe2metro o pino que estamos lendo:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"def converter(pin):\n")),(0,n.kt)("p",null,"Dentro da fun\xe7\xe3o, faremos a leitura do valor enviado pelo potenci\xf4metro e armazen\xe1-la na vari\xe1vel ",(0,n.kt)("strong",{parentName:"p"},"pinValue"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"pinValue = pin.value\n")),(0,n.kt)("p",null,"Ademais, converteremos o valor da leitura para graus. Para tal, usaremos a fun\xe7\xe3o ",(0,n.kt)("strong",{parentName:"p"},"simpleio.map_range"),". Os par\xe2metros dessa fun\xe7\xe3o s\xe3o: valor bruto (valor da leitura naquele instante), valor m\xednimo de entrada, valor m\xe1ximo de entrada, valor m\xednimo de sa\xedda e valor m\xe1ximo de sa\xedda. Tamb\xe9m, precisaremos da fun\xe7\xe3o ",(0,n.kt)("strong",{parentName:"p"},"math.trunc"),", que eliminar\xe1 as casas decimais. Todas essas informa\xe7\xf5es ficar\xe3o armazenadas na vari\xe1vel ",(0,n.kt)("strong",{parentName:"p"},"mapValue"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"mapValue = math.trunc(simpleio.map_range(pinValue, 536, 51355, 0, 180))\n")),(0,n.kt)("p",null,"E, a fun\xe7\xe3o nos retornar\xe1 o valor de ",(0,n.kt)("strong",{parentName:"p"},"mapValue"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"return mapValue\n")),(0,n.kt)("p",null,"No la\xe7o de repeti\xe7\xe3o infinita, ",(0,n.kt)("strong",{parentName:"p"},"while True"),", atribuiremos o valor retornado pela fun\xe7\xe3o ",(0,n.kt)("strong",{parentName:"p"},"converte")," a vari\xe1vel ",(0,n.kt)("strong",{parentName:"p"},"angle"),". Esse valor ser\xe1 enviado para o servo motor a cada 0.1 segundos:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"while True:\n angle = converter(pot)\n my_servo.angle = angle\n sleep(0.1)\n")),(0,n.kt)("h2",{id:"conclus\xe3o"},(0,n.kt)("strong",{parentName:"h2"},"Conclus\xe3o")),(0,n.kt)("p",null,"No decorrer da explica\xe7\xe3o, aprendemos a como usar um servo motor de uma maneira simples utilizando CircuitPython. Tamb\xe9m, pudemos ver como usar um potenci\xf4metro para controlar a movimenta\xe7\xe3o dos nossos servos."),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Autor"),(0,n.kt)("th",{parentName:"tr",align:null},"Mateus Adriano Ventura Vieira"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Data:"),(0,n.kt)("td",{parentName:"tr",align:null},"17/05/2022")))))}c.isMDXComponent=!0},3058:(e,o,a)=>{a.d(o,{Z:()=>r});const r=a.p+"assets/images/biblioteca-servo-58357a122b96bde035495e9835cb75e7.png"},8230:(e,o,a)=>{a.d(o,{Z:()=>r});const r=a.p+"assets/images/circuito-servo-cdd775c22e65131a61c0d1db61c05fe1.webp"}}]); \ No newline at end of file diff --git a/en/assets/js/4e4cd8a0.6e680884.js b/en/assets/js/4e4cd8a0.6e680884.js new file mode 100755 index 000000000..b93f9cdec --- /dev/null +++ b/en/assets/js/4e4cd8a0.6e680884.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2160],{24888:(e,o,r)=>{r.r(o),r.d(o,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>s,metadata:()=>t,toc:()=>c});var n=r(17624),i=r(95788);const s={id:"circuitpython-servo-motor",title:"Servo motor",slug:"/franzininho-wifi/exemplos-circuitpython/servo-motor",description:"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!",author:"Mateus Adriano Ventura Vieira"},a=void 0,t={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor",title:"Servo motor",description:"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/servo-motor.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/servo-motor",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/servo-motor.md",tags:[],version:"current",frontMatter:{id:"circuitpython-servo-motor",title:"Servo motor",slug:"/franzininho-wifi/exemplos-circuitpython/servo-motor",description:"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!",author:"Mateus Adriano Ventura Vieira"},sidebar:"docs",previous:{title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04"},next:{title:"Sistema de irriga\xe7\xe3o autom\xe1tico",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao"}},l={},c=[{value:"Materiais Necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digos",id:"c\xf3digos",level:2},{value:"Exemplo 1",id:"exemplo-1",level:3},{value:"Exemplo 2",id:"exemplo-2",level:3},{value:"An\xe1lise dos C\xf3digos",id:"an\xe1lise-dos-c\xf3digos",level:2},{value:"Exemplo 1",id:"exemplo-1-1",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function d(e){const o={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.p,{children:"Um servo motor \xe9 um pequeno motor de corrente cont\xednua. Diferentemente dos demais motores DC, onde apenas controlamos a velocidade de giro, conseguimos controlar a posi\xe7\xe3o de um servo, atrav\xe9s do PWM."}),"\n",(0,n.jsx)(o.p,{children:"O servo que vamos utilizar nesse exemplo, tem a resolu\xe7\xe3o de meia volta, ou seja, de 0\xb0 a 180\xb0."}),"\n",(0,n.jsx)(o.h2,{id:"materiais-necess\xe1rios",children:(0,n.jsx)(o.strong,{children:"Materiais Necess\xe1rios"})}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:"1 Placa Franzininho WiFi com CircuitPython;"}),"\n",(0,n.jsx)(o.li,{children:"1 Micro servo 9g;"}),"\n",(0,n.jsx)(o.li,{children:"1 Protoboard;"}),"\n",(0,n.jsx)(o.li,{children:"1 potenci\xf4metro de 10 k\u03a9;"}),"\n",(0,n.jsx)(o.li,{children:"Jumpers."}),"\n"]}),"\n",(0,n.jsx)(o.h2,{id:"circuito",children:(0,n.jsx)(o.strong,{children:"Circuito"})}),"\n",(0,n.jsx)(o.p,{children:"Para os exemplos que vamos ver a seguir, realize a seguinte montagem:"}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"Circuito Servo Motor",src:r(40960).c+"",width:"1755",height:"681"})}),"\n",(0,n.jsxs)(o.p,{children:[(0,n.jsx)(o.strong,{children:"Observa\xe7\xe3o:"})," o servo deve ser conectado ao 5V da placa. E, caso deseje usar mais de dois servos, uma fonte externa deve ser usada."]}),"\n",(0,n.jsx)(o.h2,{id:"c\xf3digos",children:(0,n.jsx)(o.strong,{children:"C\xf3digos"})}),"\n",(0,n.jsx)(o.p,{children:"Assim como quando aprendemos a usar PWM, vamos importar o m\xf3dulo simpleio. Tamb\xe9m, vamos importar um novo m\xf3dulo para trabalharmos com o servo motor."}),"\n",(0,n.jsxs)(o.p,{children:["Para ter acesso a esses m\xf3dulos, acesse o endere\xe7o: ",(0,n.jsx)(o.a,{href:"https://circuitpython.org/libraries",children:"https://circuitpython.org/libraries"}),". Fa\xe7a o download, de acordo com a vers\xe3o do CircuitPython instalada na sua Franzininho WiFi."]}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"Circuito Servo Motor",src:r(69932).c+"",width:"1543",height:"328"})}),"\n",(0,n.jsx)(o.p,{children:"Ap\xf3s finalizar o download, importe os dois m\xf3dulos para a pasta de arquivos da Franzininho WiFi:"}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsxs)(o.li,{children:[(0,n.jsx)(o.strong,{children:"simpleio.mpy"}),";"]}),"\n",(0,n.jsxs)(o.li,{children:[(0,n.jsx)(o.strong,{children:"adafruit_motor"}),"."]}),"\n"]}),"\n",(0,n.jsx)(o.h3,{id:"exemplo-1",children:(0,n.jsx)(o.strong,{children:"Exemplo 1"})}),"\n",(0,n.jsx)(o.p,{children:"No primeiro exemplo, vamos aprender a como programar um servo motor usando CircuitPython. Para isso, copie o c\xf3digo abaixo:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import board\nimport pwmio\nfrom adafruit_motor import servo \nfrom time import sleep\n\npin = board.IO1\npwm = pwmio.PWMOut(pin, frequency = 50)\n\nmy_servo = servo.Servo(pwm)\n\nwhile True:\n for angle in range(0, 180, 10): \n my_servo.angle = angle\n sleep(0.1)\n for angle in range(180, 0, -10): \n my_servo.angle = angle\n sleep(0.1)\n"})}),"\n",(0,n.jsx)(o.p,{children:"Salve e execute o c\xf3digo."}),"\n",(0,n.jsx)(o.h3,{id:"exemplo-2",children:(0,n.jsx)(o.strong,{children:"Exemplo 2"})}),"\n",(0,n.jsx)(o.p,{children:"J\xe1 nesse exemplo, vamos controlar o posicionamento do servo atrav\xe9s de um potenci\xf4metro. E para isso, vamos usar alguns recursos que aprendemos anteriormente. Escreva o c\xf3digo abaixo:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import board\nimport pwmio\nfrom adafruit_motor import servo\nimport simpleio\nimport math\nfrom analogio import AnalogIn\nfrom time import sleep\n\npin = board.IO1\npwm = pwmio.PWMOut(pin, frequency = 50)\nmy_servo = servo.Servo(pwm)\n\npotPin = board.IO2\npot = AnalogIn(potPin)\n\ndef converter(pin):\n pinValue = pin.value\n mapValue = math.trunc(simpleio.map_range\n (pinValue, 536, 51355, 0, 180))\n return mapValue\n\nwhile True:\n angle = converter(pot)\n my_servo.angle = angle\n sleep(0.1)\n"})}),"\n",(0,n.jsx)(o.p,{children:"Ap\xf3s terminar de escrever, salve o c\xf3digo e teste-o."}),"\n",(0,n.jsx)(o.h2,{id:"an\xe1lise-dos-c\xf3digos",children:(0,n.jsx)(o.strong,{children:"An\xe1lise dos C\xf3digos"})}),"\n",(0,n.jsx)(o.h3,{id:"exemplo-1-1",children:(0,n.jsx)(o.strong,{children:"Exemplo 1"})}),"\n",(0,n.jsxs)(o.p,{children:["O primeiro m\xf3dulo que vamos importar, \xe9 o ",(0,n.jsx)(o.strong,{children:"board"}),". Ele possibilita o acesso aos pinos da placa:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import board\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Para conseguirmos usar os pinos PWM, precisamos do m\xf3dulo ",(0,n.jsx)(o.strong,{children:"pwmio"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import pwmio\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Tamb\xe9m, ser\xe1 necess\xe1rio a biblioteca auxiliar ",(0,n.jsx)(o.strong,{children:"adafruit_motor.servo"}),". Ela ser\xe1 \xfatil para controlar o servo com base na sa\xedda PWM:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"from adafruit_motor import servo\n"})}),"\n",(0,n.jsxs)(o.p,{children:["E, por \xfaltimo, precisaremos da fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"sleep"})," do m\xf3dulo ",(0,n.jsx)(o.strong,{children:"time"}),", para intervalos de temporiza\xe7\xe3o:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"from time import sleep\n"})}),"\n",(0,n.jsx)(o.p,{children:"Agora, vamos atribuir o GPIO1 da placa a vari\xe1vel pin:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"pin = board.IO1\n"})}),"\n",(0,n.jsx)(o.p,{children:"Tamb\xe9m, configuraremos esse pino como uma sa\xedda PWM. Repare, que diferente do LED, precisamos informar a frequ\xeancia, pois, por padr\xe3o ela est\xe1 configurada com 500Hz e o padr\xe3o do servo motor \xe9 50Hz:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"pwm = pwmio.PWMOut(pin, frequency = 50)\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Al\xe9m disso, vamos criar o objeto ",(0,n.jsx)(o.strong,{children:"my_servo"})," e atribuir o pino ",(0,n.jsx)(o.strong,{children:"pwm"})," a ele:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"my_servo = servo.Servo(pwm)\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Por fim, dentro do ",(0,n.jsx)(o.strong,{children:"while True"}),", o nosso loop, faremos com que o servo se mova continuamente. Para isso, usaremos a estrutura de repeti\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"for"})," e o comando ",(0,n.jsx)(o.strong,{children:"range( )"}),", que gera uma lista."]}),"\n",(0,n.jsx)(o.p,{children:"Como par\xe2metros do primeiro la\xe7o, vamos informar o valor inicial (0), valor final(180) e o intervalo de contagem, ou seja, de 10 em 10. Dentro do la\xe7o, esse valor ser\xe1 enviado para o servo a cada 0.1 segundos:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"while True:\n for angle in range(0, 180, 10): \n my_servo.angle = angle\n sleep(0.1)\n"})}),"\n",(0,n.jsx)(o.p,{children:"J\xe1 no segundo la\xe7o, faremos o mesmo. Por\xe9m, inv\xe9s de incrementar de 10 em 10, a contagem ser\xe1 decrescente:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"for angle in range(180, 0, -10): \n my_servo.angle = angle\n sleep(0.1)\n"})}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.strong,{children:"Exemplo 2"})}),"\n",(0,n.jsxs)(o.p,{children:["Al\xe9m dos m\xf3dulos que j\xe1 usamos no primeiro exemplo, precisaremos importar ",(0,n.jsx)(o.strong,{children:"simpleio"}),", para usarmos a fun\xe7\xe3o de mapeamento:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import simpleio\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Vamos precisar tamb\xe9m da biblioteca ",(0,n.jsx)(o.strong,{children:"math"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import math\n"})}),"\n",(0,n.jsxs)(o.p,{children:["E, da fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"AnalogIn"})," da biblioteca ",(0,n.jsx)(o.strong,{children:"analogio"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"from analogio import AnalogIn\n"})}),"\n",(0,n.jsx)(o.p,{children:"Al\xe9m de configurarmos o servo, tamb\xe9m vamos configurar o potenci\xf4metro. Para isso, primeiro vamos atribuir o GPIO2 a vari\xe1vel potPin:"}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"potPin = board.IO2\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Por fim, vamos atribuir esse pino ao objeto ",(0,n.jsx)(o.strong,{children:"pot"})," como uma entrada anal\xf3gica:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"pot = AnalogIn(potPin)\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Agora, vamos criar uma fun\xe7\xe3o chamada ",(0,n.jsx)(o.strong,{children:"converte"}),". Essa fun\xe7\xe3o receber\xe1 como par\xe2metro o pino que estamos lendo:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"def converter(pin):\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Dentro da fun\xe7\xe3o, faremos a leitura do valor enviado pelo potenci\xf4metro e armazen\xe1-la na vari\xe1vel ",(0,n.jsx)(o.strong,{children:"pinValue"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"pinValue = pin.value\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Ademais, converteremos o valor da leitura para graus. Para tal, usaremos a fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"simpleio.map_range"}),". Os par\xe2metros dessa fun\xe7\xe3o s\xe3o: valor bruto (valor da leitura naquele instante), valor m\xednimo de entrada, valor m\xe1ximo de entrada, valor m\xednimo de sa\xedda e valor m\xe1ximo de sa\xedda. Tamb\xe9m, precisaremos da fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"math.trunc"}),", que eliminar\xe1 as casas decimais. Todas essas informa\xe7\xf5es ficar\xe3o armazenadas na vari\xe1vel ",(0,n.jsx)(o.strong,{children:"mapValue"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"mapValue = math.trunc(simpleio.map_range(pinValue, 536, 51355, 0, 180))\n"})}),"\n",(0,n.jsxs)(o.p,{children:["E, a fun\xe7\xe3o nos retornar\xe1 o valor de ",(0,n.jsx)(o.strong,{children:"mapValue"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"return mapValue\n"})}),"\n",(0,n.jsxs)(o.p,{children:["No la\xe7o de repeti\xe7\xe3o infinita, ",(0,n.jsx)(o.strong,{children:"while True"}),", atribuiremos o valor retornado pela fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"converte"})," a vari\xe1vel ",(0,n.jsx)(o.strong,{children:"angle"}),". Esse valor ser\xe1 enviado para o servo motor a cada 0.1 segundos:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"while True:\n angle = converter(pot)\n my_servo.angle = angle\n sleep(0.1)\n"})}),"\n",(0,n.jsx)(o.h2,{id:"conclus\xe3o",children:(0,n.jsx)(o.strong,{children:"Conclus\xe3o"})}),"\n",(0,n.jsx)(o.p,{children:"No decorrer da explica\xe7\xe3o, aprendemos a como usar um servo motor de uma maneira simples utilizando CircuitPython. Tamb\xe9m, pudemos ver como usar um potenci\xf4metro para controlar a movimenta\xe7\xe3o dos nossos servos."}),"\n",(0,n.jsxs)(o.table,{children:[(0,n.jsx)(o.thead,{children:(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.th,{children:"Autor"}),(0,n.jsx)(o.th,{children:"Mateus Adriano Ventura Vieira"})]})}),(0,n.jsx)(o.tbody,{children:(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.td,{children:"Data:"}),(0,n.jsx)(o.td,{children:"17/05/2022"})]})})]})]})}function m(e={}){const{wrapper:o}={...(0,i.MN)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},95788:(e,o,r)=>{r.d(o,{MN:()=>c});var n=r(11504);function i(e,o,r){return o in e?Object.defineProperty(e,o,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[o]=r,e}function s(e,o){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var o=1;o=0||(i[r]=e[r]);return i}(e,o);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=n.createContext({}),c=function(e){var o=n.useContext(l),r=o;return e&&(r="function"==typeof e?e(o):a(a({},o),e)),r},d={inlineCode:"code",wrapper:function(e){var o=e.children;return n.createElement(n.Fragment,{},o)}},m=n.forwardRef((function(e,o){var r=e.components,i=e.mdxType,s=e.originalType,l=e.parentName,m=t(e,["components","mdxType","originalType","parentName"]),p=c(r),h=i,u=p["".concat(l,".").concat(h)]||p[h]||d[h]||s;return r?n.createElement(u,a(a({ref:o},m),{},{components:r})):n.createElement(u,a({ref:o},m))}));m.displayName="MDXCreateElement"},69932:(e,o,r)=>{r.d(o,{c:()=>n});const n=r.p+"assets/images/biblioteca-servo-58357a122b96bde035495e9835cb75e7.png"},40960:(e,o,r)=>{r.d(o,{c:()=>n});const n=r.p+"assets/images/circuito-servo-cdd775c22e65131a61c0d1db61c05fe1.webp"}}]); \ No newline at end of file diff --git a/en/assets/js/4f3ccf13.1f3face7.js b/en/assets/js/4f3ccf13.1f3face7.js new file mode 100755 index 000000000..56d27fc21 --- /dev/null +++ b/en/assets/js/4f3ccf13.1f3face7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9508],{50590:n=>{n.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/en/assets/js/4f3ccf13.339cdbe4.js b/en/assets/js/4f3ccf13.339cdbe4.js deleted file mode 100755 index baecd4a96..000000000 --- a/en/assets/js/4f3ccf13.339cdbe4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7269],{5745:n=>{n.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/en/assets/js/5115f6b0.62980fbf.js b/en/assets/js/5115f6b0.62980fbf.js deleted file mode 100755 index 5f3619fad..000000000 --- a/en/assets/js/5115f6b0.62980fbf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1777],{3905:(e,a,o)=>{o.d(a,{Zo:()=>c,kt:()=>f});var r=o(7294);function i(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function n(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,r)}return o}function t(e){for(var a=1;a=0||(i[o]=e[o]);return i}(e,a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var p=r.createContext({}),l=function(e){var a=r.useContext(p),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},c=function(e){var a=l(e.components);return r.createElement(p.Provider,{value:a},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},m=r.forwardRef((function(e,a){var o=e.components,i=e.mdxType,n=e.originalType,p=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=l(o),m=i,f=d["".concat(p,".").concat(m)]||d[m]||u[m]||n;return o?r.createElement(f,t(t({ref:a},c),{},{components:o})):r.createElement(f,t({ref:a},c))}));function f(e,a){var o=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var n=o.length,t=new Array(n);t[0]=m;var s={};for(var p in a)hasOwnProperty.call(a,p)&&(s[p]=a[p]);s.originalType=e,s[d]="string"==typeof e?e:i,t[1]=s;for(var l=2;l{o.r(a),o.d(a,{assets:()=>p,contentTitle:()=>t,default:()=>u,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var r=o(3117),i=(o(7294),o(3905));const n={id:"arduino",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-arduino/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi",author:"F\xe1bio Souza"},t=void 0,s={unversionedId:"FranzininhoWifi/exemplos-arduino/arduino",id:"FranzininhoWifi/exemplos-arduino/arduino",title:"Primeiros Passos",description:"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-arduino/arduino.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/primeiros-passos",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/arduino.md",tags:[],version:"current",frontMatter:{id:"arduino",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-arduino/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi",author:"F\xe1bio Souza"},sidebar:"docs",previous:{title:"Sistema de irriga\xe7\xe3o autom\xe1tico",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao"},next:{title:"Blink",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/blink"}},p={},l=[{value:"Video com a configura\xe7\xe3o",id:"video-com-a-configura\xe7\xe3o",level:2},{value:"Arduino IDE",id:"arduino-ide",level:2},{value:"Instala\xe7\xe3o do pacote ESP32 para Arduino",id:"instala\xe7\xe3o-do-pacote-esp32-para-arduino",level:2}],c={toc:l},d="wrapper";function u(e){let{components:a,...n}=e;return(0,i.kt)(d,(0,r.Z)({},c,n,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"A Franzininho WiFi foi adicionada recentemente a plataforma Arduino atrav\xe9s do pacote para ESP32 da Espressif. Essa foi uma contribui\xe7\xe3o do Pedro Minatel para o projeto Franzininho. Pedro enviou um PR com a adi\xe7\xe3o da Franzininho WiFi no modo CDC e tamb\xe9m como MSC. "),(0,i.kt)("p",null,"Nesse tutorial aprenderemos configurar a Arduino IDE e fazer o upload de c\xf3digo para a placa Franzininho WiFi. "),(0,i.kt)("p",null,"Usamos como base para esse tutorial a documenta\xe7\xe3o da Espressif para Arduino: ",(0,i.kt)("a",{parentName:"p",href:"https://docs.espressif.com/projects/arduino-esp32/en/latest/"},"https://docs.espressif.com/projects/arduino-esp32/en/latest/")," "),(0,i.kt)("h2",{id:"video-com-a-configura\xe7\xe3o"},"Video com a configura\xe7\xe3o"),(0,i.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/Ka6nfYmEaXI",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,i.kt)("h2",{id:"arduino-ide"},"Arduino IDE"),(0,i.kt)("p",null,"Arduino \xe9 uma plataforma de prototipa\xe7\xe3o de projetos eletr\xf4nicos composta por placas e uma interface de programa\xe7\xe3o chamada Arduino. "),(0,i.kt)("p",null,"Antes de come\xe7armos as configura\xe7\xf5es \xe9 importante que voc\xea instale a Arduino IDE em seu sistema operacional. Acesse: ",(0,i.kt)("a",{parentName:"p",href:"https://www.arduino.cc/en/software"},"https://www.arduino.cc/en/software")," e baixe a vers\xe3o adequada para o seu sistema operacional. "),(0,i.kt)("p",null,"Estamos usando para esse tutorial a Arduino IDE 1.8.15, recomendamos essa vers\xe3o ou superior. "),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Download IDE",src:o(2107).Z,width:"843",height:"396"})),(0,i.kt)("h2",{id:"instala\xe7\xe3o-do-pacote-esp32-para-arduino"},"Instala\xe7\xe3o do pacote ESP32 para Arduino"),(0,i.kt)("p",null,"Para instala\xe7\xe3o do pacote ESP32 para Arduino usaremos a ferramenta Gerenciador de placas na pr\xf3pria IDE. "),(0,i.kt)("p",null,"Siga os seguintes passos:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Abra a Arduino IDe e acesse Arquivos -> Prefer\xeancias;"),(0,i.kt)("li",{parentName:"ol"},"Cole em \u201cURLs adicionais para Gerenciadores de Placas\u201d a seguinte URL:\n",(0,i.kt)("inlineCode",{parentName:"li"},"https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json")),(0,i.kt)("li",{parentName:"ol"},"Clique em OK;"),(0,i.kt)("li",{parentName:"ol"},"V\xe1 em Ferramentas > Placa > Gerenciador de Placas;"),(0,i.kt)("li",{parentName:"ol"},"Ao abrir, procure por ESP32-S2, e clique em instalar;")),(0,i.kt)("p",null,"Veja como o passo a passo na imagem abaixo:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"pacote passo a passo",src:o(5755).Z,width:"1083",height:"781"})),(0,i.kt)("p",null,"Pronto, agora \xe9 s\xf3 ir em placa e procurar pela Franzininho WiFi:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Selecionando a placa",src:o(2879).Z,width:"1083",height:"781"})),(0,i.kt)("p",null,"Fa\xe7a a seguinte configura\xe7\xe3o:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Configura\xe7\xe3o",src:o(3567).Z,width:"1365",height:"740"})),(0,i.kt)("p",null,"Agora faremos um exemplo para verificar o processo de upload."),(0,i.kt)("p",null,"Abra o exemplo GetChipID:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Exemplo",src:o(8544).Z,width:"1365",height:"739"})),(0,i.kt)("p",null,"Agora faremos o upload para a placa. Se for a primeira vez que voc\xea usar\xe1 a Arduino IDE para programar a Franzininho WiFi voc\xea dever\xe1 colocar a placa em modo DFU para carregar o c\xf3digo. Ap\xf3s isso n\xe3o precisar\xe1 mais fazer esse procedimento."),(0,i.kt)("admonition",{title:"Dica",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Isso dever\xe1 sempre ser feito se voc\xea programar a placa com outras plataformas como ESP-IDF, CircuitPython, etc. Apos esse procedimento \xe9 s\xf3 programar a placa pressionando upload, como estamos acostumado a fazer com outras placas.")),(0,i.kt)("p",null,"Colocando a placa em modo DFU"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Plugue a placa na USB;")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Pressione o bot\xe3o Boot e segure;")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Pressione o bot\xe3o Reset e solte em seguida;")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Solte o bot\xe3o Boot."))),(0,i.kt)("p",null,"Para fazer carregar o c\xf3digo na placa clique em Upload:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Uoload",src:o(2199).Z,width:"520",height:"618"})),(0,i.kt)("p",null,"Abra o monitor serial e configure a velocidade para 115200 bps:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Monitor Serial",src:o(9639).Z,width:"1321",height:"509"})),(0,i.kt)("p",null,"Ser\xe1 exibido o modelo e chip ID."),(0,i.kt)("p",null,"Agora voc\xea pode carregar qualquer c\xf3digo para a placa sem precisar coloc\xe1-la em modo DFU."),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"A Franzininho WiFi MSC funciona da mesma forma para upload via Arduino IDE. A diferen\xe7a \xe9 que nesse modo podemos carregar bin\xe1rios sem uso da IDE, apenas carregando o bin\xe1rio para o dispositivo de armazenamento criado no computador.")))}u.isMDXComponent=!0},2107:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/00-download-428b272c195061c55de27a5770c95e1e.png"},5755:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/01-pacote-275e24ec407da429f03fe456dd16253a.gif"},2879:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/02-placa-d724ea164399f9f31002b8b205ea7e35.gif"},3567:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/03-configura-b2256d3303f3ebd6303f795543ec6332.png"},8544:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/04-exemplo-55dcd031bd5489559f4b7f790e734ac6.png"},2199:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/05-upload-2c7649aa9e74e252995b995d3f4a4fce.png"},9639:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/06-terminal-serial-d76f0eb9610be895efec7943b91c1e11.png"}}]); \ No newline at end of file diff --git a/en/assets/js/5115f6b0.6f2ad0af.js b/en/assets/js/5115f6b0.6f2ad0af.js new file mode 100755 index 000000000..e1c843083 --- /dev/null +++ b/en/assets/js/5115f6b0.6f2ad0af.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5336],{63816:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>n,metadata:()=>t,toc:()=>d});var i=a(17624),r=a(95788);const n={id:"arduino",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-arduino/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi",author:"F\xe1bio Souza"},s=void 0,t={id:"FranzininhoWifi/exemplos-arduino/arduino",title:"Primeiros Passos",description:"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-arduino/arduino.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/primeiros-passos",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/arduino.md",tags:[],version:"current",frontMatter:{id:"arduino",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-arduino/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi",author:"F\xe1bio Souza"},sidebar:"docs",previous:{title:"Sistema de irriga\xe7\xe3o autom\xe1tico",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao"},next:{title:"Blink",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/blink"}},c={},d=[{value:"Video com a configura\xe7\xe3o",id:"video-com-a-configura\xe7\xe3o",level:2},{value:"Arduino IDE",id:"arduino-ide",level:2},{value:"Instala\xe7\xe3o do pacote ESP32 para Arduino",id:"instala\xe7\xe3o-do-pacote-esp32-para-arduino",level:2}];function p(e){const o={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",ol:"ol",p:"p",...(0,r.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.p,{children:"A Franzininho WiFi foi adicionada recentemente a plataforma Arduino atrav\xe9s do pacote para ESP32 da Espressif. Essa foi uma contribui\xe7\xe3o do Pedro Minatel para o projeto Franzininho. Pedro enviou um PR com a adi\xe7\xe3o da Franzininho WiFi no modo CDC e tamb\xe9m como MSC."}),"\n",(0,i.jsx)(o.p,{children:"Nesse tutorial aprenderemos configurar a Arduino IDE e fazer o upload de c\xf3digo para a placa Franzininho WiFi."}),"\n",(0,i.jsxs)(o.p,{children:["Usamos como base para esse tutorial a documenta\xe7\xe3o da Espressif para Arduino: ",(0,i.jsx)(o.a,{href:"https://docs.espressif.com/projects/arduino-esp32/en/latest/",children:"https://docs.espressif.com/projects/arduino-esp32/en/latest/"})]}),"\n",(0,i.jsx)(o.h2,{id:"video-com-a-configura\xe7\xe3o",children:"Video com a configura\xe7\xe3o"}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/Ka6nfYmEaXI",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,i.jsx)(o.h2,{id:"arduino-ide",children:"Arduino IDE"}),"\n",(0,i.jsx)(o.p,{children:"Arduino \xe9 uma plataforma de prototipa\xe7\xe3o de projetos eletr\xf4nicos composta por placas e uma interface de programa\xe7\xe3o chamada Arduino."}),"\n",(0,i.jsxs)(o.p,{children:["Antes de come\xe7armos as configura\xe7\xf5es \xe9 importante que voc\xea instale a Arduino IDE em seu sistema operacional. Acesse: ",(0,i.jsx)(o.a,{href:"https://www.arduino.cc/en/software",children:"https://www.arduino.cc/en/software"})," e baixe a vers\xe3o adequada para o seu sistema operacional."]}),"\n",(0,i.jsx)(o.p,{children:"Estamos usando para esse tutorial a Arduino IDE 1.8.15, recomendamos essa vers\xe3o ou superior."}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{alt:"Download IDE",src:a(39916).c+"",width:"843",height:"396"})}),"\n",(0,i.jsx)(o.h2,{id:"instala\xe7\xe3o-do-pacote-esp32-para-arduino",children:"Instala\xe7\xe3o do pacote ESP32 para Arduino"}),"\n",(0,i.jsx)(o.p,{children:"Para instala\xe7\xe3o do pacote ESP32 para Arduino usaremos a ferramenta Gerenciador de placas na pr\xf3pria IDE."}),"\n",(0,i.jsx)(o.p,{children:"Siga os seguintes passos:"}),"\n",(0,i.jsxs)(o.ol,{children:["\n",(0,i.jsx)(o.li,{children:"Abra a Arduino IDe e acesse Arquivos -> Prefer\xeancias;"}),"\n",(0,i.jsxs)(o.li,{children:["Cole em \u201cURLs adicionais para Gerenciadores de Placas\u201d a seguinte URL:\n",(0,i.jsx)(o.code,{children:"https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json"})]}),"\n",(0,i.jsx)(o.li,{children:"Clique em OK;"}),"\n",(0,i.jsx)(o.li,{children:"V\xe1 em Ferramentas > Placa > Gerenciador de Placas;"}),"\n",(0,i.jsx)(o.li,{children:"Ao abrir, procure por ESP32-S2, e clique em instalar;"}),"\n"]}),"\n",(0,i.jsx)(o.p,{children:"Veja como o passo a passo na imagem abaixo:"}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{alt:"pacote passo a passo",src:a(83374).c+"",width:"1083",height:"781"})}),"\n",(0,i.jsx)(o.p,{children:"Pronto, agora \xe9 s\xf3 ir em placa e procurar pela Franzininho WiFi:"}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{alt:"Selecionando a placa",src:a(4536).c+"",width:"1083",height:"781"})}),"\n",(0,i.jsx)(o.p,{children:"Fa\xe7a a seguinte configura\xe7\xe3o:"}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{alt:"Configura\xe7\xe3o",src:a(4540).c+"",width:"1365",height:"740"})}),"\n",(0,i.jsx)(o.p,{children:"Agora faremos um exemplo para verificar o processo de upload."}),"\n",(0,i.jsx)(o.p,{children:"Abra o exemplo GetChipID:"}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{alt:"Exemplo",src:a(63572).c+"",width:"1365",height:"739"})}),"\n",(0,i.jsx)(o.p,{children:"Agora faremos o upload para a placa. Se for a primeira vez que voc\xea usar\xe1 a Arduino IDE para programar a Franzininho WiFi voc\xea dever\xe1 colocar a placa em modo DFU para carregar o c\xf3digo. Ap\xf3s isso n\xe3o precisar\xe1 mais fazer esse procedimento."}),"\n",(0,i.jsx)(o.admonition,{title:"Dica",type:"tip",children:(0,i.jsx)(o.p,{children:"Isso dever\xe1 sempre ser feito se voc\xea programar a placa com outras plataformas como ESP-IDF, CircuitPython, etc. Apos esse procedimento \xe9 s\xf3 programar a placa pressionando upload, como estamos acostumado a fazer com outras placas."})}),"\n",(0,i.jsx)(o.p,{children:"Colocando a placa em modo DFU"}),"\n",(0,i.jsxs)(o.ol,{children:["\n",(0,i.jsxs)(o.li,{children:["\n",(0,i.jsx)(o.p,{children:"Plugue a placa na USB;"}),"\n"]}),"\n",(0,i.jsxs)(o.li,{children:["\n",(0,i.jsx)(o.p,{children:"Pressione o bot\xe3o Boot e segure;"}),"\n"]}),"\n",(0,i.jsxs)(o.li,{children:["\n",(0,i.jsx)(o.p,{children:"Pressione o bot\xe3o Reset e solte em seguida;"}),"\n"]}),"\n",(0,i.jsxs)(o.li,{children:["\n",(0,i.jsx)(o.p,{children:"Solte o bot\xe3o Boot."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(o.p,{children:"Para fazer carregar o c\xf3digo na placa clique em Upload:"}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{alt:"Uoload",src:a(39176).c+"",width:"520",height:"618"})}),"\n",(0,i.jsx)(o.p,{children:"Abra o monitor serial e configure a velocidade para 115200 bps:"}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{alt:"Monitor Serial",src:a(10080).c+"",width:"1321",height:"509"})}),"\n",(0,i.jsx)(o.p,{children:"Ser\xe1 exibido o modelo e chip ID."}),"\n",(0,i.jsx)(o.p,{children:"Agora voc\xea pode carregar qualquer c\xf3digo para a placa sem precisar coloc\xe1-la em modo DFU."}),"\n",(0,i.jsxs)(o.admonition,{type:"tip",children:[(0,i.jsx)(o.mdxAdmonitionTitle,{}),(0,i.jsx)(o.p,{children:"A Franzininho WiFi MSC funciona da mesma forma para upload via Arduino IDE. A diferen\xe7a \xe9 que nesse modo podemos carregar bin\xe1rios sem uso da IDE, apenas carregando o bin\xe1rio para o dispositivo de armazenamento criado no computador."})]})]})}function l(e={}){const{wrapper:o}={...(0,r.MN)(),...e.components};return o?(0,i.jsx)(o,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},95788:(e,o,a)=>{a.d(o,{MN:()=>d});var i=a(11504);function r(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function n(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);o&&(i=i.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,i)}return a}function s(e){for(var o=1;o=0||(r[a]=e[a]);return r}(e,o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var c=i.createContext({}),d=function(e){var o=i.useContext(c),a=o;return e&&(a="function"==typeof e?e(o):s(s({},o),e)),a},p={inlineCode:"code",wrapper:function(e){var o=e.children;return i.createElement(i.Fragment,{},o)}},l=i.forwardRef((function(e,o){var a=e.components,r=e.mdxType,n=e.originalType,c=e.parentName,l=t(e,["components","mdxType","originalType","parentName"]),m=d(a),u=r,h=m["".concat(c,".").concat(u)]||m[u]||p[u]||n;return a?i.createElement(h,s(s({ref:o},l),{},{components:a})):i.createElement(h,s({ref:o},l))}));l.displayName="MDXCreateElement"},39916:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/00-download-428b272c195061c55de27a5770c95e1e.png"},83374:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/01-pacote-275e24ec407da429f03fe456dd16253a.gif"},4536:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/02-placa-d724ea164399f9f31002b8b205ea7e35.gif"},4540:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/03-configura-b2256d3303f3ebd6303f795543ec6332.png"},63572:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/04-exemplo-55dcd031bd5489559f4b7f790e734ac6.png"},39176:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/05-upload-2c7649aa9e74e252995b995d3f4a4fce.png"},10080:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/06-terminal-serial-d76f0eb9610be895efec7943b91c1e11.png"}}]); \ No newline at end of file diff --git a/en/assets/js/52090148.4834c2eb.js b/en/assets/js/52090148.4834c2eb.js new file mode 100755 index 000000000..b5dc1c6a3 --- /dev/null +++ b/en/assets/js/52090148.4834c2eb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8324],{26936:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var i=r(17624),o=r(95788);const t={id:"led-rgb",title:"LED RGB",slug:"/franzininho-diy/led-rgb",description:"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores"},a=void 0,c={id:"FranzininhoDIY/exemplos-arduino/led-rgb",title:"LED RGB",description:"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores",source:"@site/docs/FranzininhoDIY/exemplos-arduino/led-rgb.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/led-rgb",permalink:"/en/docs/franzininho-diy/led-rgb",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/led-rgb.md",tags:[],version:"current",frontMatter:{id:"led-rgb",title:"LED RGB",slug:"/franzininho-diy/led-rgb",description:"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores"},sidebar:"docs",previous:{title:"Tecla Liga/Desliga",permalink:"/en/docs/franzininho-diy/tecla-liga-desliga"},next:{title:"Elefante Colorido! Que cor?",permalink:"/en/docs/franzininho-diy/elefante-colorido"}},l={},d=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function s(e){const n={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores."}),"\n",(0,i.jsx)(n.p,{children:"Voc\xea pode controlar da forma que voc\xea quiser, confira o c\xf3digo simples que est\xe1 na documenta\xe7\xe3o."}),"\n",(0,i.jsx)(n.p,{children:"Modifique, crie e compartilhe!"}),"\n",(0,i.jsx)(n.h2,{id:"materiais",children:"Materiais"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"1 Placa Franzininho DIY;"}),"\n",(0,i.jsx)(n.li,{children:"1 Protoboard;"}),"\n",(0,i.jsx)(n.li,{children:"1 LED RGB catodo comum;"}),"\n",(0,i.jsx)(n.li,{children:"3 Resistor 1k"}),"\n",(0,i.jsx)(n.li,{children:"3 Jumpers macho/f\xeamea;"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,i.jsx)(n.p,{children:"Na protoboard voc\xea pode montar da seguinte forma:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Circuito",src:r(85276).c+"",width:"1858",height:"755"})}),"\n",(0,i.jsx)(n.h2,{id:"sketch",children:"Sketch"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-cpp",children:"//RGB com a Franzininho DIY\n\nconst int red = 0; \nconst int green = 1; \nconst int blue = 2; \n\nvoid setup() {\n // configura os pinos de cada cor como sa\xedda:\n pinMode(red, OUTPUT);\n pinMode(green, OUTPUT);\n pinMode(blue, OUTPUT);\n}\n\nvoid loop() {\n // aciona o LED na cor vermelha:\n digitalWrite(red, HIGH);\n digitalWrite(green, LOW);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n \n // aciona o LED na cor verde:\n digitalWrite(red, LOW);\n digitalWrite(green, HIGH);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n\n // aciona o LED na cor azul:\n digitalWrite(red, LOW);\n digitalWrite(green, LOW);\n digitalWrite(blue, HIGH);\n delay(5000); // aguarda 5000ms \n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311375002746225216?view=diagram"}),"\n",(0,i.jsx)(n.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/qdJ21Qu36S0",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function u(e={}){const{wrapper:n}={...(0,o.MN)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(s,{...e})}):s(e)}},95788:(e,n,r)=>{r.d(n,{MN:()=>d});var i=r(11504);function o(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function t(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,i)}return r}function a(e){for(var n=1;n=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=i.createContext({}),d=function(e){var n=i.useContext(l),r=n;return e&&(r="function"==typeof e?e(n):a(a({},n),e)),r},s={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},u=i.forwardRef((function(e,n){var r=e.components,o=e.mdxType,t=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),p=d(r),m=o,h=p["".concat(l,".").concat(m)]||p[m]||s[m]||t;return r?i.createElement(h,a(a({ref:n},u),{},{components:r})):i.createElement(h,a({ref:n},u))}));u.displayName="MDXCreateElement"},85276:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/rbg-485967653c4d59e1df2b2fe622001ab6.png"}}]); \ No newline at end of file diff --git a/en/assets/js/52090148.f79b530c.js b/en/assets/js/52090148.f79b530c.js deleted file mode 100755 index 8c276e2be..000000000 --- a/en/assets/js/52090148.f79b530c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9948],{3905:(e,n,r)=>{r.d(n,{Zo:()=>s,kt:()=>g});var t=r(7294);function i(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function o(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function a(e){for(var n=1;n=0||(i[r]=e[r]);return i}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var c=t.createContext({}),d=function(e){var n=t.useContext(c),r=n;return e&&(r="function"==typeof e?e(n):a(a({},n),e)),r},s=function(e){var n=d(e.components);return t.createElement(c.Provider,{value:n},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},m=t.forwardRef((function(e,n){var r=e.components,i=e.mdxType,o=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=d(r),m=i,g=u["".concat(c,".").concat(m)]||u[m]||p[m]||o;return r?t.createElement(g,a(a({ref:n},s),{},{components:r})):t.createElement(g,a({ref:n},s))}));function g(e,n){var r=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=m;var l={};for(var c in n)hasOwnProperty.call(n,c)&&(l[c]=n[c]);l.originalType=e,l[u]="string"==typeof e?e:i,a[1]=l;for(var d=2;d{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var t=r(3117),i=(r(7294),r(3905));const o={id:"led-rgb",title:"LED RGB",slug:"/franzininho-diy/led-rgb",description:"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores"},a=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/led-rgb",id:"FranzininhoDIY/exemplos-arduino/led-rgb",title:"LED RGB",description:"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores",source:"@site/docs/FranzininhoDIY/exemplos-arduino/led-rgb.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/led-rgb",permalink:"/en/docs/franzininho-diy/led-rgb",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/led-rgb.md",tags:[],version:"current",frontMatter:{id:"led-rgb",title:"LED RGB",slug:"/franzininho-diy/led-rgb",description:"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores"},sidebar:"docs",previous:{title:"Tecla Liga/Desliga",permalink:"/en/docs/franzininho-diy/tecla-liga-desliga"},next:{title:"Elefante Colorido! Que cor?",permalink:"/en/docs/franzininho-diy/elefante-colorido"}},c={},d=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],s={toc:d},u="wrapper";function p(e){let{components:n,...o}=e;return(0,i.kt)(u,(0,t.Z)({},s,o,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores."),(0,i.kt)("p",null,"Voc\xea pode controlar da forma que voc\xea quiser, confira o c\xf3digo simples que est\xe1 na documenta\xe7\xe3o."),(0,i.kt)("p",null,"Modifique, crie e compartilhe!"),(0,i.kt)("h2",{id:"materiais"},"Materiais"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"1 Placa Franzininho DIY;"),(0,i.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,i.kt)("li",{parentName:"ul"},"1 LED RGB catodo comum;"),(0,i.kt)("li",{parentName:"ul"},"3 Resistor 1k"),(0,i.kt)("li",{parentName:"ul"},"3 Jumpers macho/f\xeamea;")),(0,i.kt)("h2",{id:"circuito"},"Circuito"),(0,i.kt)("p",null,"Na protoboard voc\xea pode montar da seguinte forma:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Circuito",src:r(9198).Z,width:"1858",height:"755"})),(0,i.kt)("h2",{id:"sketch"},"Sketch"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"//RGB com a Franzininho DIY\n\nconst int red = 0; \nconst int green = 1; \nconst int blue = 2; \n\nvoid setup() {\n // configura os pinos de cada cor como sa\xedda:\n pinMode(red, OUTPUT);\n pinMode(green, OUTPUT);\n pinMode(blue, OUTPUT);\n}\n\nvoid loop() {\n // aciona o LED na cor vermelha:\n digitalWrite(red, HIGH);\n digitalWrite(green, LOW);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n \n // aciona o LED na cor verde:\n digitalWrite(red, LOW);\n digitalWrite(green, HIGH);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n\n // aciona o LED na cor azul:\n digitalWrite(red, LOW);\n digitalWrite(green, LOW);\n digitalWrite(blue, HIGH);\n delay(5000); // aguarda 5000ms \n}\n")),(0,i.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,i.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311375002746225216?view=diagram"}),(0,i.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,i.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/qdJ21Qu36S0",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}p.isMDXComponent=!0},9198:(e,n,r)=>{r.d(n,{Z:()=>t});const t=r.p+"assets/images/rbg-485967653c4d59e1df2b2fe622001ab6.png"}}]); \ No newline at end of file diff --git a/en/assets/js/52fc124a.2d63fddd.js b/en/assets/js/52fc124a.2d63fddd.js new file mode 100755 index 000000000..3cabaec1c --- /dev/null +++ b/en/assets/js/52fc124a.2d63fddd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3744],{4060:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var r=i(17624),o=i(95788);const a={id:"franzininho-tiny",title:"Placa Franzininho Tiny",slug:"/franzininho-tiny/franzininho-tiny",description:"Detalhes da Franzininho Tiny"},t=void 0,s={id:"FranzininhoTiny/franzininho-tiny",title:"Placa Franzininho Tiny",description:"Detalhes da Franzininho Tiny",source:"@site/docs/FranzininhoTiny/franzininho-tiny.md",sourceDirName:"FranzininhoTiny",slug:"/franzininho-tiny/franzininho-tiny",permalink:"/en/docs/franzininho-tiny/franzininho-tiny",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoTiny/franzininho-tiny.md",tags:[],version:"current",frontMatter:{id:"franzininho-tiny",title:"Placa Franzininho Tiny",slug:"/franzininho-tiny/franzininho-tiny",description:"Detalhes da Franzininho Tiny"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/en/docs/FranzMakey/primeiros-passos"},next:{title:"Placa Franzino",permalink:"/en/docs/Franzino/franzino"}},c={},l=[{value:"Resumo de recursos",id:"resumo-de-recursos",level:2},{value:"Documenta\xe7\xe3o",id:"documenta\xe7\xe3o",level:2},{value:"Projeto Open Hardware",id:"projeto-open-hardware",level:2},{value:"Onde comprar",id:"onde-comprar",level:2}];function d(n){const e={a:"a",admonition:"admonition",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,o.MN)(),...n.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.p,{children:"A Franzininho Tiny veio para dar squencia ao excelente trabalho feito pela Franzininho DIY. Em muitas aplica\xe7\xf5es a soldagem n\xe3o \xe9 vi\xe1vel, assim, muitas vezes foram solicitadas placas Franzininho DIY soldadas, o que n\xe3o era a proposta da placa no formato DIY."}),"\n",(0,r.jsx)(e.p,{children:"Para facilitar, escolhemos um microcontrolador que mantenha a compatibilidade com a Franzininho DIY, por\xe9m com mais op\xe7\xf5es de pinos e no formato SMD."}),"\n",(0,r.jsx)(e.p,{children:"A Franzininho Tiny tem um form factor compat\xedvel com protoboard e j\xe1 vem montada e pronta para programar:"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Franzininho Tiny",src:i(10592).c+"",width:"557",height:"418"})}),"\n",(0,r.jsx)(e.h2,{id:"resumo-de-recursos",children:"Resumo de recursos"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"Microcontrolador: ATtiny841"}),"\n",(0,r.jsx)(e.li,{children:"Pinos de I/O: at\xe9 11 (alguns est\xe3o ligados a USB)"}),"\n",(0,r.jsx)(e.li,{children:"Entradas Anal\xf3gicas: at\xe9 9"}),"\n",(0,r.jsx)(e.li,{children:"PWM: 4"}),"\n",(0,r.jsx)(e.li,{children:"I2C: 1"}),"\n",(0,r.jsx)(e.li,{children:"SPI: 1"}),"\n",(0,r.jsx)(e.li,{children:"UART: 1"}),"\n",(0,r.jsx)(e.li,{children:"Tens\xe3o de funcionamento: 5V"}),"\n",(0,r.jsx)(e.li,{children:"Alimenta\xe7\xe3o: USB(5V) ou externa (de 7,5V \xe0 9V)"}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"documenta\xe7\xe3o",children:"Documenta\xe7\xe3o"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://github.com/Franzininho/Franzininho-Tiny",children:"Reposit\xf3rio do Hardware"})}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"projeto-open-hardware",children:"Projeto Open Hardware"}),"\n",(0,r.jsx)(e.p,{children:"Assim como a Franzininho DIY, a placa Franzininho tiny tamb\xe9m foi publicada como projeto de hardware aberto. Para essa placa foi escolhida a CERN Open Hardware Licence, uma licen\xe7as mais adequada para projetos de hardware."}),"\n",(0,r.jsx)(e.p,{children:"Conforme definido no \u201chow to\u201d da licen\xe7a, no reposit\xf3rio do projeto est\xe3o inclu\xeddos os seguintes arquivos:"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"LICENSE.TXT"}),"\n",(0,r.jsx)(e.li,{children:"cern_ohl_v_1_2_howto.pdf"}),"\n",(0,r.jsx)(e.li,{children:"CHANGES.TXT"}),"\n",(0,r.jsx)(e.li,{children:"COPYRIGHT.TXT"}),"\n",(0,r.jsx)(e.li,{children:"PRODUCT.TXT"}),"\n"]}),"\n",(0,r.jsx)(e.admonition,{title:"Importante",type:"important",children:(0,r.jsx)(e.p,{children:"Para reprodu\xe7\xe3o do projeto ou deriva\xe7\xf5es, \xe9 importante verificar os requisitos da licen\xe7a , copyright e boas pr\xe1ticas."})}),"\n",(0,r.jsx)(e.h2,{id:"onde-comprar",children:"Onde comprar"}),"\n",(0,r.jsxs)(e.p,{children:["Entrar em contato: ",(0,r.jsx)(e.a,{href:"mailto:contato@franzininho.com.br",children:"contato@franzininho.com.br"})]})]})}function h(n={}){const{wrapper:e}={...(0,o.MN)(),...n.components};return e?(0,r.jsx)(e,{...n,children:(0,r.jsx)(d,{...n})}):d(n)}},95788:(n,e,i)=>{i.d(e,{MN:()=>l});var r=i(11504);function o(n,e,i){return e in n?Object.defineProperty(n,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):n[e]=i,n}function a(n,e){var i=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),i.push.apply(i,r)}return i}function t(n){for(var e=1;e=0||(o[i]=n[i]);return o}(n,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(n,i)&&(o[i]=n[i])}return o}var c=r.createContext({}),l=function(n){var e=r.useContext(c),i=e;return n&&(i="function"==typeof n?n(e):t(t({},e),n)),i},d={inlineCode:"code",wrapper:function(n){var e=n.children;return r.createElement(r.Fragment,{},e)}},h=r.forwardRef((function(n,e){var i=n.components,o=n.mdxType,a=n.originalType,c=n.parentName,h=s(n,["components","mdxType","originalType","parentName"]),p=l(i),m=o,u=p["".concat(c,".").concat(m)]||p[m]||d[m]||a;return i?r.createElement(u,t(t({ref:e},h),{},{components:i})):r.createElement(u,t({ref:e},h))}));h.displayName="MDXCreateElement"},10592:(n,e,i)=>{i.d(e,{c:()=>r});const r=i.p+"assets/images/placa-franzininho-tiny-proto-6ac3251dc92b81414d14e47a1d8d8433.jpg"}}]); \ No newline at end of file diff --git a/en/assets/js/52fc124a.bc7a1a58.js b/en/assets/js/52fc124a.bc7a1a58.js deleted file mode 100755 index ab672b720..000000000 --- a/en/assets/js/52fc124a.bc7a1a58.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2749],{3905:(n,e,a)=>{a.d(e,{Zo:()=>s,kt:()=>h});var r=a(7294);function t(n,e,a){return e in n?Object.defineProperty(n,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[e]=a,n}function o(n,e){var a=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),a.push.apply(a,r)}return a}function i(n){for(var e=1;e=0||(t[a]=n[a]);return t}(n,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(n,a)&&(t[a]=n[a])}return t}var c=r.createContext({}),p=function(n){var e=r.useContext(c),a=e;return n&&(a="function"==typeof n?n(e):i(i({},e),n)),a},s=function(n){var e=p(n.components);return r.createElement(c.Provider,{value:e},n.children)},u="mdxType",m={inlineCode:"code",wrapper:function(n){var e=n.children;return r.createElement(r.Fragment,{},e)}},d=r.forwardRef((function(n,e){var a=n.components,t=n.mdxType,o=n.originalType,c=n.parentName,s=l(n,["components","mdxType","originalType","parentName"]),u=p(a),d=t,h=u["".concat(c,".").concat(d)]||u[d]||m[d]||o;return a?r.createElement(h,i(i({ref:e},s),{},{components:a})):r.createElement(h,i({ref:e},s))}));function h(n,e){var a=arguments,t=e&&e.mdxType;if("string"==typeof n||t){var o=a.length,i=new Array(o);i[0]=d;var l={};for(var c in e)hasOwnProperty.call(e,c)&&(l[c]=e[c]);l.originalType=n,l[u]="string"==typeof n?n:t,i[1]=l;for(var p=2;p{a.r(e),a.d(e,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var r=a(3117),t=(a(7294),a(3905));const o={id:"franzininho-tiny",title:"Placa Franzininho Tiny",slug:"/franzininho-tiny/franzininho-tiny",description:"Detalhes da Franzininho Tiny"},i=void 0,l={unversionedId:"FranzininhoTiny/franzininho-tiny",id:"FranzininhoTiny/franzininho-tiny",title:"Placa Franzininho Tiny",description:"Detalhes da Franzininho Tiny",source:"@site/docs/FranzininhoTiny/franzininho-tiny.md",sourceDirName:"FranzininhoTiny",slug:"/franzininho-tiny/franzininho-tiny",permalink:"/en/docs/franzininho-tiny/franzininho-tiny",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoTiny/franzininho-tiny.md",tags:[],version:"current",frontMatter:{id:"franzininho-tiny",title:"Placa Franzininho Tiny",slug:"/franzininho-tiny/franzininho-tiny",description:"Detalhes da Franzininho Tiny"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/en/docs/FranzMakey/primeiros-passos"},next:{title:"Placa Franzino",permalink:"/en/docs/Franzino/franzino"}},c={},p=[{value:"Resumo de recursos",id:"resumo-de-recursos",level:2},{value:"Documenta\xe7\xe3o",id:"documenta\xe7\xe3o",level:2},{value:"Projeto Open Hardware",id:"projeto-open-hardware",level:2},{value:"Onde comprar",id:"onde-comprar",level:2}],s={toc:p},u="wrapper";function m(n){let{components:e,...o}=n;return(0,t.kt)(u,(0,r.Z)({},s,o,{components:e,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"A Franzininho Tiny veio para dar squencia ao excelente trabalho feito pela Franzininho DIY. Em muitas aplica\xe7\xf5es a soldagem n\xe3o \xe9 vi\xe1vel, assim, muitas vezes foram solicitadas placas Franzininho DIY soldadas, o que n\xe3o era a proposta da placa no formato DIY."),(0,t.kt)("p",null,"Para facilitar, escolhemos um microcontrolador que mantenha a compatibilidade com a Franzininho DIY, por\xe9m com mais op\xe7\xf5es de pinos e no formato SMD."),(0,t.kt)("p",null,"A Franzininho Tiny tem um form factor compat\xedvel com protoboard e j\xe1 vem montada e pronta para programar:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzininho Tiny",src:a(7109).Z,width:"557",height:"418"})),(0,t.kt)("h2",{id:"resumo-de-recursos"},"Resumo de recursos"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Microcontrolador: ATtiny841"),(0,t.kt)("li",{parentName:"ul"},"Pinos de I/O: at\xe9 11 (alguns est\xe3o ligados a USB)"),(0,t.kt)("li",{parentName:"ul"},"Entradas Anal\xf3gicas: at\xe9 9"),(0,t.kt)("li",{parentName:"ul"},"PWM: 4"),(0,t.kt)("li",{parentName:"ul"},"I2C: 1"),(0,t.kt)("li",{parentName:"ul"},"SPI: 1"),(0,t.kt)("li",{parentName:"ul"},"UART: 1"),(0,t.kt)("li",{parentName:"ul"},"Tens\xe3o de funcionamento: 5V"),(0,t.kt)("li",{parentName:"ul"},"Alimenta\xe7\xe3o: USB(5V) ou externa (de 7,5V \xe0 9V)")),(0,t.kt)("h2",{id:"documenta\xe7\xe3o"},"Documenta\xe7\xe3o"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/Franzininho-Tiny"},"Reposit\xf3rio do Hardware"))),(0,t.kt)("h2",{id:"projeto-open-hardware"},"Projeto Open Hardware"),(0,t.kt)("p",null,"Assim como a Franzininho DIY, a placa Franzininho tiny tamb\xe9m foi publicada como projeto de hardware aberto. Para essa placa foi escolhida a CERN Open Hardware Licence, uma licen\xe7as mais adequada para projetos de hardware."),(0,t.kt)("p",null,"Conforme definido no \u201chow to\u201d da licen\xe7a, no reposit\xf3rio do projeto est\xe3o inclu\xeddos os seguintes arquivos:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"LICENSE.TXT"),(0,t.kt)("li",{parentName:"ul"},"cern_ohl_v_1_2_howto.pdf"),(0,t.kt)("li",{parentName:"ul"},"CHANGES.TXT"),(0,t.kt)("li",{parentName:"ul"},"COPYRIGHT.TXT"),(0,t.kt)("li",{parentName:"ul"},"PRODUCT.TXT")),(0,t.kt)("admonition",{title:"Importante",type:"important"},(0,t.kt)("p",{parentName:"admonition"},"Para reprodu\xe7\xe3o do projeto ou deriva\xe7\xf5es, \xe9 importante verificar os requisitos da licen\xe7a , copyright e boas pr\xe1ticas.")),(0,t.kt)("h2",{id:"onde-comprar"},"Onde comprar"),(0,t.kt)("p",null,"Entrar em contato: ",(0,t.kt)("a",{parentName:"p",href:"mailto:contato@franzininho.com.br"},"contato@franzininho.com.br")))}m.isMDXComponent=!0},7109:(n,e,a)=>{a.d(e,{Z:()=>r});const r=a.p+"assets/images/placa-franzininho-tiny-proto-6ac3251dc92b81414d14e47a1d8d8433.jpg"}}]); \ No newline at end of file diff --git a/en/assets/js/558e6545.34aad7f1.js b/en/assets/js/558e6545.34aad7f1.js deleted file mode 100755 index 94aeac160..000000000 --- a/en/assets/js/558e6545.34aad7f1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5755],{3905:(e,r,n)=>{n.d(r,{Zo:()=>u,kt:()=>f});var o=n(7294);function t(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function i(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var r=1;r=0||(t[n]=e[n]);return t}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(t[n]=e[n])}return t}var s=o.createContext({}),p=function(e){var r=o.useContext(s),n=r;return e&&(n="function"==typeof e?e(r):a(a({},r),e)),n},u=function(e){var r=p(e.components);return o.createElement(s.Provider,{value:r},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},l=o.forwardRef((function(e,r){var n=e.components,t=e.mdxType,i=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),m=p(n),l=t,f=m["".concat(s,".").concat(l)]||m[l]||d[l]||i;return n?o.createElement(f,a(a({ref:r},u),{},{components:n})):o.createElement(f,a({ref:r},u))}));function f(e,r){var n=arguments,t=r&&r.mdxType;if("string"==typeof e||t){var i=n.length,a=new Array(i);a[0]=l;var c={};for(var s in r)hasOwnProperty.call(r,s)&&(c[s]=r[s]);c.originalType=e,c[m]="string"==typeof e?e:t,a[1]=c;for(var p=2;p{n.r(r),n.d(r,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>c,toc:()=>p});var o=n(3117),t=(n(7294),n(3905));const i={id:"tutoriais-i2c",title:"I2C",slug:"/franzininho-diy/tutoriais-i2c",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},a=void 0,c={unversionedId:"FranzininhoDIY/exemplos-arduino/tutoriais-i2c",id:"FranzininhoDIY/exemplos-arduino/tutoriais-i2c",title:"I2C",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/i2c.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/tutoriais-i2c",permalink:"/en/docs/franzininho-diy/tutoriais-i2c",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/i2c.md",tags:[],version:"current",frontMatter:{id:"tutoriais-i2c",title:"I2C",slug:"/franzininho-diy/tutoriais-i2c",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."}},s={},p=[{value:"Placa de Circuito impresso",id:"placa-de-circuito-impresso",level:2}],u={toc:p},m="wrapper";function d(e){let{components:r,...n}=e;return(0,t.kt)(m,(0,o.Z)({},u,n,{components:r,mdxType:"MDXLayout"}),(0,t.kt)("h2",{id:"placa-de-circuito-impresso"},"Placa de Circuito impresso"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/558e6545.8b18bfb2.js b/en/assets/js/558e6545.8b18bfb2.js new file mode 100755 index 000000000..0b965e989 --- /dev/null +++ b/en/assets/js/558e6545.8b18bfb2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1020],{70760:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>c,toc:()=>p});var n=o(17624),t=o(95788);const i={id:"tutoriais-i2c",title:"I2C",slug:"/franzininho-diy/tutoriais-i2c",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},a=void 0,c={id:"FranzininhoDIY/exemplos-arduino/tutoriais-i2c",title:"I2C",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/i2c.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/tutoriais-i2c",permalink:"/en/docs/franzininho-diy/tutoriais-i2c",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/i2c.md",tags:[],version:"current",frontMatter:{id:"tutoriais-i2c",title:"I2C",slug:"/franzininho-diy/tutoriais-i2c",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."}},s={},p=[{value:"Placa de Circuito impresso",id:"placa-de-circuito-impresso",level:2}];function u(e){const r={h2:"h2",...(0,t.MN)(),...e.components};return(0,n.jsx)(r.h2,{id:"placa-de-circuito-impresso",children:"Placa de Circuito impresso"})}function d(e={}){const{wrapper:r}={...(0,t.MN)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},95788:(e,r,o)=>{o.d(r,{MN:()=>p});var n=o(11504);function t(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}function i(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,n)}return o}function a(e){for(var r=1;r=0||(t[o]=e[o]);return t}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var s=n.createContext({}),p=function(e){var r=n.useContext(s),o=r;return e&&(o="function"==typeof e?e(r):a(a({},r),e)),o},u={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},d=n.forwardRef((function(e,r){var o=e.components,t=e.mdxType,i=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),m=p(o),l=t,f=m["".concat(s,".").concat(l)]||m[l]||u[l]||i;return o?n.createElement(f,a(a({ref:r},d),{},{components:o})):n.createElement(f,a({ref:r},d))}));d.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/55a63e59.a03b36a5.js b/en/assets/js/55a63e59.a03b36a5.js deleted file mode 100755 index 4360a67da..000000000 --- a/en/assets/js/55a63e59.a03b36a5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4334],{3905:(e,a,t)=>{t.d(a,{Zo:()=>d,kt:()=>h});var n=t(7294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function i(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function r(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=n.createContext({}),p=function(e){var a=n.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):r(r({},a),e)),t},d=function(e){var a=p(e.components);return n.createElement(l.Provider,{value:a},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var t=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=p(t),u=o,h=c["".concat(l,".").concat(u)]||c[u]||m[u]||i;return t?n.createElement(h,r(r({ref:a},d),{},{components:t})):n.createElement(h,r({ref:a},d))}));function h(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var i=t.length,r=new Array(i);r[0]=u;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[c]="string"==typeof e?e:o,r[1]=s;for(var p=2;p{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var n=t(3117),o=(t(7294),t(3905));const i={id:"circuitpython-display-oled-i2c",title:"Display OLED I2C",slug:"/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",description:"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},r=void 0,s={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c",title:"Display OLED I2C",description:"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/display-oled-i2c.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/display-oled-i2c.md",tags:[],version:"current",frontMatter:{id:"circuitpython-display-oled-i2c",title:"Display OLED I2C",slug:"/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",description:"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},sidebar:"docs",previous:{title:"Pinos de Toque Capacitivo",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo"},next:{title:"Sensor de temperatura e umidade DHT11",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/dht11"}},l={},p=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2}],d={toc:p},c="wrapper";function m(e){let{components:a,...i}=e;return(0,o.kt)(c,(0,n.Z)({},d,i,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython."),(0,o.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,o.kt)("p",null,"Identifique os seguintes materiais necess\xe1rios para este projeto:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"1 Franzininho WiFi."),(0,o.kt)("li",{parentName:"ul"},"1 Display OLED 128x64 I2C."),(0,o.kt)("li",{parentName:"ul"},"1 Protoboard."),(0,o.kt)("li",{parentName:"ul"},"Cabos de liga\xe7\xe3o.")),(0,o.kt)("h2",{id:"circuito"},"Circuito"),(0,o.kt)("p",null,"A pr\xf3xima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Circuito Display OLED I2C",src:t(1348).Z,width:"463",height:"512"})),(0,o.kt)("p",null,"Resumindo o que \xe9 mostrado nas Figuras 4.2 at\xe9 4.5, a conex\xe3o dos terminais do OLED aos terminais das respectivas placas de desenvolvimento deve ser realizada conforme a tabela a seguir."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"center"},"OLED I2C"),(0,o.kt)("th",{parentName:"tr",align:"center"},"Franzininho WiFi"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"SDA (DATA)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"GPIO8")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"SCK (CLK)"),(0,o.kt)("td",{parentName:"tr",align:"center"},"GPIO9")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"VDD"),(0,o.kt)("td",{parentName:"tr",align:"center"},"3V3")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"center"},"GND"),(0,o.kt)("td",{parentName:"tr",align:"center"},"GND")))),(0,o.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,o.kt)("p",null,"Como o display OLED \xe9 um componente com funcionamento bastante complexo, vamos fazer uso de uma biblioteca que implementa todas as funcionalidades, permitindo que nossos programas possam ser implementados de maneira bastante simples e produtiva."),(0,o.kt)("p",null,"As bibliotecas para o CircuitPython podem ser obtidas atrav\xe9s do endere\xe7o ",(0,o.kt)("a",{parentName:"p",href:"https://circuitpython.org/libraries"},"https://circuitpython.org/libraries"),". Escolha e baixe o arquivo de acordo com a vers\xe3o do CircuitPyhthon que voc\xea tem instalado na Franzininho WiFi."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Bibliotecas",src:t(609).Z,width:"1295",height:"465"})),(0,o.kt)("p",null,"Em seguida, copie os seguintes arquivos diretamente para a posta lib do sistema de arquivos da Franzininho WiFi:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"adafruit_ssd1306.mpy"),(0,o.kt)("li",{parentName:"ul"},"adafruit_framebuf.mpy")),(0,o.kt)("p",null,"Copie tamb\xe9m o arquivo ",(0,o.kt)("strong",{parentName:"p"},"font5x8.bin"),", mas neste caso, para a pasta raiz da Franzininho WiFi. Por fim, implemente o programa abaixo no arquivo ",(0,o.kt)("strong",{parentName:"p"},"code.py")," que est\xe1 localizado na pasta raiz da Franzininho WiFi."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"import board\nimport busio\nimport adafruit_ssd1306\nimport time\n\ni2c = busio.I2C(scl=board.IO9, sda=board.IO8)\noled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)\n\ntry:\n inverter = False\n while True:\n oled.invert(inverter)\n oled.fill(0)\n oled.rect(0, 0, 128, 64, 1)\n oled.rect(2, 2, 124, 60, 1)\n oled.text('Franzininho', 4, 4, 1)\n oled.text('WiFi', 4, 14, 1)\n oled.show()\n inverter = not inverter\n time.sleep(2)\nfinally:\n oled.invert(False)\n oled.fill(0)\n oled.show()\n")),(0,o.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},"An\xe1lise do c\xf3digo"),(0,o.kt)("p",null,"Devemos importar as bibliotecas busio e adafruit_ssd1306, que ser\xe3o respons\xe1veis pelas classes que ir\xe3o possibilitar a comunica\xe7\xe3o I2C e o uso do display OLED, respectivamente. "),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"import busio\nimport adafruit_ssd1306\n")),(0,o.kt)("p",null,"A comunica\xe7\xe3o I2C ser\xe1 realizada atrav\xe9s do terminais ",(0,o.kt)("strong",{parentName:"p"},"IO9")," e ",(0,o.kt)("strong",{parentName:"p"},"IO8")," da Franzininho WiFi, conforme podemos observar na pinagem, dispon\xedvel em ",(0,o.kt)("a",{parentName:"p",href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi"},"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi")," "),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"i2c = busio.I2C(scl=board.IO9, sda=board.IO8)\n")),(0,o.kt)("p",null,"A configura\xe7\xe3o do display OLED deve levar em conta as suas dimens\xf5es e o seu endere\xe7o no barramento I2C."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)\n")),(0,o.kt)("p",null,"Neste programa o objetivo e realizar a invers\xe3o da exibi\xe7\xe3o do conte\xfado no display a cada 2 segundos. Desta forma, ser\xe1 usado o m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"invert")," que receber\xe1 uma vari\xe1vel booleana como par\xe2metro, sendo seu valor alternado entre ",(0,o.kt)("inlineCode",{parentName:"p"},"True")," e ",(0,o.kt)("inlineCode",{parentName:"p"},"False"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"oled.invert(inverter)\n")),(0,o.kt)("p",null,"O m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"fill")," \xe9 usado para preencher toda \xe1rea do display e atuar\xe1 em conjunto com o m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"invert"),". Como se trata de um display monocrom\xe1tico temos duas cores dispon\xedveis, 0 (zero) que representa o preto (pixel desligado) e 1 (um) para especificar o branco (pixel ligado), caso o m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"invert")," tenha recebido como par\xe2metro o valor False. Por outro lado, caso ",(0,o.kt)("inlineCode",{parentName:"p"},"invert")," receber True como par\xe2metro, 1 (um) vai representar o preto (pixel desligado) e 0 (zero) vai especificar o branco (pixel ligado)."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"oled.invert(inverter)\noled.fill(0)\n")),(0,o.kt)("p",null,"Na sequ\xeancia foi usado o m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"rect")," para desenhar um ret\xe2ngulo come\xe7ando nas coordenadas ",(0,o.kt)("strong",{parentName:"p"},"x = 0")," e ",(0,o.kt)("strong",{parentName:"p"},"y = 0")," e com ",(0,o.kt)("strong",{parentName:"p"},"128 pixels de largura")," e ",(0,o.kt)("strong",{parentName:"p"},"64 pixels de altura")," e, logo em seguida, um outro ret\xe2ngulo levemente inferior. O \xfaltimo par\xe2metro do m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"rect")," consiste na cor que, neste exemplo, ser\xe1 branco. Desta forma, acabamos desenhando uma borda dupla que envolve toda a \xe1rea do display. "),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"oled.rect(0, 0, 128, 64, 1)\noled.rect(2, 2, 124, 60, 1)\n")),(0,o.kt)("p",null,"O m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"text")," possibilita exibir um texto nas coordenadas e na cor especificadas."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"oled.text('Franzininho', 4, 4, 1)\noled.text('WiFi', 4, 14, 1)\n")),(0,o.kt)("p",null,"O m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"show"),", ir\xe1 executar os m\xe9todos usados anteriormente, ou seja, ",(0,o.kt)("inlineCode",{parentName:"p"},"fill"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"rect")," e ",(0,o.kt)("inlineCode",{parentName:"p"},"text")," no display. Ou seja, qualquer conte\xfado s\xf3 \xe9 exibido no display quando o m\xe9todo ",(0,o.kt)("inlineCode",{parentName:"p"},"show")," \xe9 executado."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"oled.show()\n")),(0,o.kt)("p",null,"Tente exibir outros textos e imagens. Compartilhe seus resultados com a comunidade. "),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,o.kt)("a",{parentName:"p",href:"https://discord.gg/H5kENmWGaz"},"Discord"))),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Autor"),(0,o.kt)("th",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"th",href:"mailto:claudio.oliveira@fatec.sp.gov.br"},"Cl\xe1udio Lu\xeds Vieira Oliveira")))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Data:"),(0,o.kt)("td",{parentName:"tr",align:null},"07/10/2021")))))}m.isMDXComponent=!0},1348:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/circuito-display-oled-i2c-ff5b68392bb5d09ccc0c91e16b875d4c.png"},609:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/libraries-43f696d429c655da2cf36dc63cfc72e0.png"}}]); \ No newline at end of file diff --git a/en/assets/js/55a63e59.eca878b1.js b/en/assets/js/55a63e59.eca878b1.js new file mode 100755 index 000000000..e1dcabdcc --- /dev/null +++ b/en/assets/js/55a63e59.eca878b1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6312],{22796:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>s,metadata:()=>t,toc:()=>c});var o=n(17624),r=n(95788);const s={id:"circuitpython-display-oled-i2c",title:"Display OLED I2C",slug:"/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",description:"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},a=void 0,t={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c",title:"Display OLED I2C",description:"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/display-oled-i2c.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/display-oled-i2c.md",tags:[],version:"current",frontMatter:{id:"circuitpython-display-oled-i2c",title:"Display OLED I2C",slug:"/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",description:"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},sidebar:"docs",previous:{title:"Pinos de Toque Capacitivo",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo"},next:{title:"Sensor de temperatura e umidade DHT11",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/dht11"}},d={},c=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2}];function l(e){const i={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.p,{children:"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython."}),"\n",(0,o.jsx)(i.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,o.jsx)(i.p,{children:"Identifique os seguintes materiais necess\xe1rios para este projeto:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsx)(i.li,{children:"1 Franzininho WiFi."}),"\n",(0,o.jsx)(i.li,{children:"1 Display OLED 128x64 I2C."}),"\n",(0,o.jsx)(i.li,{children:"1 Protoboard."}),"\n",(0,o.jsx)(i.li,{children:"Cabos de liga\xe7\xe3o."}),"\n"]}),"\n",(0,o.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,o.jsx)(i.p,{children:"A pr\xf3xima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:"}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"Circuito Display OLED I2C",src:n(41761).c+"",width:"463",height:"512"})}),"\n",(0,o.jsx)(i.p,{children:"Resumindo o que \xe9 mostrado nas Figuras 4.2 at\xe9 4.5, a conex\xe3o dos terminais do OLED aos terminais das respectivas placas de desenvolvimento deve ser realizada conforme a tabela a seguir."}),"\n",(0,o.jsxs)(i.table,{children:[(0,o.jsx)(i.thead,{children:(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.th,{style:{textAlign:"center"},children:"OLED I2C"}),(0,o.jsx)(i.th,{style:{textAlign:"center"},children:"Franzininho WiFi"})]})}),(0,o.jsxs)(i.tbody,{children:[(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"SDA (DATA)"}),(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"GPIO8"})]}),(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"SCK (CLK)"}),(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"GPIO9"})]}),(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"VDD"}),(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"3V3"})]}),(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"GND"}),(0,o.jsx)(i.td,{style:{textAlign:"center"},children:"GND"})]})]})]}),"\n",(0,o.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,o.jsx)(i.p,{children:"Como o display OLED \xe9 um componente com funcionamento bastante complexo, vamos fazer uso de uma biblioteca que implementa todas as funcionalidades, permitindo que nossos programas possam ser implementados de maneira bastante simples e produtiva."}),"\n",(0,o.jsxs)(i.p,{children:["As bibliotecas para o CircuitPython podem ser obtidas atrav\xe9s do endere\xe7o ",(0,o.jsx)(i.a,{href:"https://circuitpython.org/libraries",children:"https://circuitpython.org/libraries"}),". Escolha e baixe o arquivo de acordo com a vers\xe3o do CircuitPyhthon que voc\xea tem instalado na Franzininho WiFi."]}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"Bibliotecas",src:n(73508).c+"",width:"1295",height:"465"})}),"\n",(0,o.jsx)(i.p,{children:"Em seguida, copie os seguintes arquivos diretamente para a posta lib do sistema de arquivos da Franzininho WiFi:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsx)(i.li,{children:"adafruit_ssd1306.mpy"}),"\n",(0,o.jsx)(i.li,{children:"adafruit_framebuf.mpy"}),"\n"]}),"\n",(0,o.jsxs)(i.p,{children:["Copie tamb\xe9m o arquivo ",(0,o.jsx)(i.strong,{children:"font5x8.bin"}),", mas neste caso, para a pasta raiz da Franzininho WiFi. Por fim, implemente o programa abaixo no arquivo ",(0,o.jsx)(i.strong,{children:"code.py"})," que est\xe1 localizado na pasta raiz da Franzininho WiFi."]}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"import board\nimport busio\nimport adafruit_ssd1306\nimport time\n\ni2c = busio.I2C(scl=board.IO9, sda=board.IO8)\noled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)\n\ntry:\n inverter = False\n while True:\n oled.invert(inverter)\n oled.fill(0)\n oled.rect(0, 0, 128, 64, 1)\n oled.rect(2, 2, 124, 60, 1)\n oled.text('Franzininho', 4, 4, 1)\n oled.text('WiFi', 4, 14, 1)\n oled.show()\n inverter = not inverter\n time.sleep(2)\nfinally:\n oled.invert(False)\n oled.fill(0)\n oled.show()\n"})}),"\n",(0,o.jsx)(i.h2,{id:"an\xe1lise-do-c\xf3digo",children:"An\xe1lise do c\xf3digo"}),"\n",(0,o.jsx)(i.p,{children:"Devemos importar as bibliotecas busio e adafruit_ssd1306, que ser\xe3o respons\xe1veis pelas classes que ir\xe3o possibilitar a comunica\xe7\xe3o I2C e o uso do display OLED, respectivamente."}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"import busio\nimport adafruit_ssd1306\n"})}),"\n",(0,o.jsxs)(i.p,{children:["A comunica\xe7\xe3o I2C ser\xe1 realizada atrav\xe9s do terminais ",(0,o.jsx)(i.strong,{children:"IO9"})," e ",(0,o.jsx)(i.strong,{children:"IO8"})," da Franzininho WiFi, conforme podemos observar na pinagem, dispon\xedvel em ",(0,o.jsx)(i.a,{href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi",children:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi"})]}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"i2c = busio.I2C(scl=board.IO9, sda=board.IO8)\n"})}),"\n",(0,o.jsx)(i.p,{children:"A configura\xe7\xe3o do display OLED deve levar em conta as suas dimens\xf5es e o seu endere\xe7o no barramento I2C."}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)\n"})}),"\n",(0,o.jsxs)(i.p,{children:["Neste programa o objetivo e realizar a invers\xe3o da exibi\xe7\xe3o do conte\xfado no display a cada 2 segundos. Desta forma, ser\xe1 usado o m\xe9todo ",(0,o.jsx)(i.code,{children:"invert"})," que receber\xe1 uma vari\xe1vel booleana como par\xe2metro, sendo seu valor alternado entre ",(0,o.jsx)(i.code,{children:"True"})," e ",(0,o.jsx)(i.code,{children:"False"}),"."]}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"oled.invert(inverter)\n"})}),"\n",(0,o.jsxs)(i.p,{children:["O m\xe9todo ",(0,o.jsx)(i.code,{children:"fill"})," \xe9 usado para preencher toda \xe1rea do display e atuar\xe1 em conjunto com o m\xe9todo ",(0,o.jsx)(i.code,{children:"invert"}),". Como se trata de um display monocrom\xe1tico temos duas cores dispon\xedveis, 0 (zero) que representa o preto (pixel desligado) e 1 (um) para especificar o branco (pixel ligado), caso o m\xe9todo ",(0,o.jsx)(i.code,{children:"invert"})," tenha recebido como par\xe2metro o valor False. Por outro lado, caso ",(0,o.jsx)(i.code,{children:"invert"})," receber True como par\xe2metro, 1 (um) vai representar o preto (pixel desligado) e 0 (zero) vai especificar o branco (pixel ligado)."]}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"oled.invert(inverter)\noled.fill(0)\n"})}),"\n",(0,o.jsxs)(i.p,{children:["Na sequ\xeancia foi usado o m\xe9todo ",(0,o.jsx)(i.code,{children:"rect"})," para desenhar um ret\xe2ngulo come\xe7ando nas coordenadas ",(0,o.jsx)(i.strong,{children:"x = 0"})," e ",(0,o.jsx)(i.strong,{children:"y = 0"})," e com ",(0,o.jsx)(i.strong,{children:"128 pixels de largura"})," e ",(0,o.jsx)(i.strong,{children:"64 pixels de altura"})," e, logo em seguida, um outro ret\xe2ngulo levemente inferior. O \xfaltimo par\xe2metro do m\xe9todo ",(0,o.jsx)(i.code,{children:"rect"})," consiste na cor que, neste exemplo, ser\xe1 branco. Desta forma, acabamos desenhando uma borda dupla que envolve toda a \xe1rea do display."]}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"oled.rect(0, 0, 128, 64, 1)\noled.rect(2, 2, 124, 60, 1)\n"})}),"\n",(0,o.jsxs)(i.p,{children:["O m\xe9todo ",(0,o.jsx)(i.code,{children:"text"})," possibilita exibir um texto nas coordenadas e na cor especificadas."]}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"oled.text('Franzininho', 4, 4, 1)\noled.text('WiFi', 4, 14, 1)\n"})}),"\n",(0,o.jsxs)(i.p,{children:["O m\xe9todo ",(0,o.jsx)(i.code,{children:"show"}),", ir\xe1 executar os m\xe9todos usados anteriormente, ou seja, ",(0,o.jsx)(i.code,{children:"fill"}),", ",(0,o.jsx)(i.code,{children:"rect"})," e ",(0,o.jsx)(i.code,{children:"text"})," no display. Ou seja, qualquer conte\xfado s\xf3 \xe9 exibido no display quando o m\xe9todo ",(0,o.jsx)(i.code,{children:"show"})," \xe9 executado."]}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"oled.show()\n"})}),"\n",(0,o.jsx)(i.p,{children:"Tente exibir outros textos e imagens. Compartilhe seus resultados com a comunidade."}),"\n",(0,o.jsx)(i.admonition,{type:"info",children:(0,o.jsxs)(i.p,{children:["Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,o.jsx)(i.a,{href:"https://discord.gg/H5kENmWGaz",children:"Discord"})]})}),"\n",(0,o.jsxs)(i.table,{children:[(0,o.jsx)(i.thead,{children:(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.th,{children:"Autor"}),(0,o.jsx)(i.th,{children:(0,o.jsx)(i.a,{href:"mailto:claudio.oliveira@fatec.sp.gov.br",children:"Cl\xe1udio Lu\xeds Vieira Oliveira"})})]})}),(0,o.jsx)(i.tbody,{children:(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.td,{children:"Data:"}),(0,o.jsx)(i.td,{children:"07/10/2021"})]})})]})]})}function p(e={}){const{wrapper:i}={...(0,r.MN)(),...e.components};return i?(0,o.jsx)(i,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},95788:(e,i,n)=>{n.d(i,{MN:()=>c});var o=n(11504);function r(e,i,n){return i in e?Object.defineProperty(e,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[i]=n,e}function s(e,i){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);i&&(o=o.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var i=1;i=0||(r[n]=e[n]);return r}(e,i);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var d=o.createContext({}),c=function(e){var i=o.useContext(d),n=i;return e&&(n="function"==typeof e?e(i):a(a({},i),e)),n},l={inlineCode:"code",wrapper:function(e){var i=e.children;return o.createElement(o.Fragment,{},i)}},p=o.forwardRef((function(e,i){var n=e.components,r=e.mdxType,s=e.originalType,d=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),h=c(n),u=r,m=h["".concat(d,".").concat(u)]||h[u]||l[u]||s;return n?o.createElement(m,a(a({ref:i},p),{},{components:n})):o.createElement(m,a({ref:i},p))}));p.displayName="MDXCreateElement"},41761:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/circuito-display-oled-i2c-ff5b68392bb5d09ccc0c91e16b875d4c.png"},73508:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/libraries-43f696d429c655da2cf36dc63cfc72e0.png"}}]); \ No newline at end of file diff --git a/en/assets/js/55ee410e.c39933a8.js b/en/assets/js/55ee410e.c39933a8.js deleted file mode 100755 index 0e4989d95..000000000 --- a/en/assets/js/55ee410e.c39933a8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2496],{3905:(e,a,t)=>{t.d(a,{Zo:()=>c,kt:()=>g});var i=t(7294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,i)}return t}function r(e){for(var a=1;a=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var s=i.createContext({}),d=function(e){var a=i.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):r(r({},a),e)),t},c=function(e){var a=d(e.components);return i.createElement(s.Provider,{value:a},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return i.createElement(i.Fragment,{},a)}},m=i.forwardRef((function(e,a){var t=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=d(t),m=n,g=u["".concat(s,".").concat(m)]||u[m]||p[m]||o;return t?i.createElement(g,r(r({ref:a},c),{},{components:t})):i.createElement(g,r({ref:a},c))}));function g(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var o=t.length,r=new Array(o);r[0]=m;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[u]="string"==typeof e?e:n,r[1]=l;for(var d=2;d{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>r,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var i=t(3117),n=(t(7294),t(3905));const o={id:"tecla-liga-desliga",title:"Tecla Liga/Desliga",slug:"/franzininho-diy/tecla-liga-desliga",description:"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos."},r=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga",id:"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga",title:"Tecla Liga/Desliga",description:"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/tecla-liga-desliga.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/tecla-liga-desliga",permalink:"/en/docs/franzininho-diy/tecla-liga-desliga",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/tecla-liga-desliga.md",tags:[],version:"current",frontMatter:{id:"tecla-liga-desliga",title:"Tecla Liga/Desliga",slug:"/franzininho-diy/tecla-liga-desliga",description:"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos."},sidebar:"docs",previous:{title:"Leitura de Tecla",permalink:"/en/docs/franzininho-diy/leitura-tecla"},next:{title:"LED RGB",permalink:"/en/docs/franzininho-diy/led-rgb"}},s={},d=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],c={toc:d},u="wrapper";function p(e){let{components:a,...o}=e;return(0,n.kt)(u,(0,i.Z)({},c,o,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos."),(0,n.kt)("h2",{id:"materiais"},"Materiais"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Placa Franzininho;"),(0,n.kt)("li",{parentName:"ul"},"Protoboard;"),(0,n.kt)("li",{parentName:"ul"},"LED 3mm; "),(0,n.kt)("li",{parentName:"ul"},"1 Resistor 3300; "),(0,n.kt)("li",{parentName:"ul"},"1 Resistor de 1K; "),(0,n.kt)("li",{parentName:"ul"},"1 Bot\xe3o; "),(0,n.kt)("li",{parentName:"ul"},"Jumpers;")),(0,n.kt)("h2",{id:"circuito"},"Circuito"),(0,n.kt)("p",null,"No protoboard voc\xea deve inserir o LED, resistores e o bot\xe3o, conforme a imagem abaixo:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito ",src:t(643).Z,width:"1755",height:"702"})),(0,n.kt)("h2",{id:"sketch"},"Sketch"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},"/*\n Franzininho\n Exemplo: Tecla liga/desliga\n Esse exemplo exibe como fazer ligar e desligar uma sa\xedda atrav\xe9s de uma tecla\n*/\nconst int LED = 1; //pino para o LED\nconst int BOTAO = 2; //pino para o bot\xe3o\nint estadoAnteriorBotao = 0; // armazena o estado anterior do bot\xe3o\n\nvoid setup(){\n pinMode(LED,OUTPUT); //o LED \xe9 uma sa\xedda\n pinMode(BOTAO,INPUT); //o BOTAO \xe9 uma entrada\n}\n\nvoid loop (){\n int estadoAtualBT= digitalRead(BOTAO); // L\xea estado do bot\xe3o\n delay(10);\n\nif ((estadoAtualBT != estadoAnteriorBotao)&& (estadoAtualBT == LOW)){ //Se o bot\xe3o foi pressionado e o seu estado mudou\n digitalWrite(LED,!digitalRead(LED)); //inverte estado do LED\n}\n estadoAnteriorBotao = estadoAtualBT; //salva o estado do bot\xe3o para comparar na pr\xf3xima leitura\n}\n")),(0,n.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,n.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311373968060711489?view=diagram"}),(0,n.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,n.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/Aht0fUuGIjQ",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}p.isMDXComponent=!0},643:(e,a,t)=>{t.d(a,{Z:()=>i});const i=t.p+"assets/images/circuito-tecla-liga-desliga-0133088e4f085079b1a5dc507efc2d45.png"}}]); \ No newline at end of file diff --git a/en/assets/js/55ee410e.dd63a08d.js b/en/assets/js/55ee410e.dd63a08d.js new file mode 100755 index 000000000..52ec9d42c --- /dev/null +++ b/en/assets/js/55ee410e.dd63a08d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1196],{85452:(e,i,a)=>{a.r(i),a.d(i,{assets:()=>s,contentTitle:()=>r,default:()=>u,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var n=a(17624),o=a(95788);const t={id:"tecla-liga-desliga",title:"Tecla Liga/Desliga",slug:"/franzininho-diy/tecla-liga-desliga",description:"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos."},r=void 0,l={id:"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga",title:"Tecla Liga/Desliga",description:"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/tecla-liga-desliga.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/tecla-liga-desliga",permalink:"/en/docs/franzininho-diy/tecla-liga-desliga",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/tecla-liga-desliga.md",tags:[],version:"current",frontMatter:{id:"tecla-liga-desliga",title:"Tecla Liga/Desliga",slug:"/franzininho-diy/tecla-liga-desliga",description:"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos."},sidebar:"docs",previous:{title:"Leitura de Tecla",permalink:"/en/docs/franzininho-diy/leitura-tecla"},next:{title:"LED RGB",permalink:"/en/docs/franzininho-diy/led-rgb"}},s={},c=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function d(e){const i={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.p,{children:"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos."}),"\n",(0,n.jsx)(i.h2,{id:"materiais",children:"Materiais"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"Placa Franzininho;"}),"\n",(0,n.jsx)(i.li,{children:"Protoboard;"}),"\n",(0,n.jsx)(i.li,{children:"LED 3mm;"}),"\n",(0,n.jsx)(i.li,{children:"1 Resistor 3300;"}),"\n",(0,n.jsx)(i.li,{children:"1 Resistor de 1K;"}),"\n",(0,n.jsx)(i.li,{children:"1 Bot\xe3o;"}),"\n",(0,n.jsx)(i.li,{children:"Jumpers;"}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,n.jsx)(i.p,{children:"No protoboard voc\xea deve inserir o LED, resistores e o bot\xe3o, conforme a imagem abaixo:"}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"Circuito ",src:a(73676).c+"",width:"1755",height:"702"})}),"\n",(0,n.jsx)(i.h2,{id:"sketch",children:"Sketch"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-cpp",children:"/*\n Franzininho\n Exemplo: Tecla liga/desliga\n Esse exemplo exibe como fazer ligar e desligar uma sa\xedda atrav\xe9s de uma tecla\n*/\nconst int LED = 1; //pino para o LED\nconst int BOTAO = 2; //pino para o bot\xe3o\nint estadoAnteriorBotao = 0; // armazena o estado anterior do bot\xe3o\n\nvoid setup(){\n pinMode(LED,OUTPUT); //o LED \xe9 uma sa\xedda\n pinMode(BOTAO,INPUT); //o BOTAO \xe9 uma entrada\n}\n\nvoid loop (){\n int estadoAtualBT= digitalRead(BOTAO); // L\xea estado do bot\xe3o\n delay(10);\n\nif ((estadoAtualBT != estadoAnteriorBotao)&& (estadoAtualBT == LOW)){ //Se o bot\xe3o foi pressionado e o seu estado mudou\n digitalWrite(LED,!digitalRead(LED)); //inverte estado do LED\n}\n estadoAnteriorBotao = estadoAtualBT; //salva o estado do bot\xe3o para comparar na pr\xf3xima leitura\n}\n"})}),"\n",(0,n.jsx)(i.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,n.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311373968060711489?view=diagram"}),"\n",(0,n.jsx)(i.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,n.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/Aht0fUuGIjQ",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function u(e={}){const{wrapper:i}={...(0,o.MN)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},95788:(e,i,a)=>{a.d(i,{MN:()=>c});var n=a(11504);function o(e,i,a){return i in e?Object.defineProperty(e,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[i]=a,e}function t(e,i){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);i&&(n=n.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var i=1;i=0||(o[a]=e[a]);return o}(e,i);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var i=n.useContext(s),a=i;return e&&(a="function"==typeof e?e(i):r(r({},i),e)),a},d={inlineCode:"code",wrapper:function(e){var i=e.children;return n.createElement(n.Fragment,{},i)}},u=n.forwardRef((function(e,i){var a=e.components,o=e.mdxType,t=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=o,g=p["".concat(s,".").concat(m)]||p[m]||d[m]||t;return a?n.createElement(g,r(r({ref:i},u),{},{components:a})):n.createElement(g,r({ref:i},u))}));u.displayName="MDXCreateElement"},73676:(e,i,a)=>{a.d(i,{c:()=>n});const n=a.p+"assets/images/circuito-tecla-liga-desliga-0133088e4f085079b1a5dc507efc2d45.png"}}]); \ No newline at end of file diff --git a/en/assets/js/58231389.62dcb7d4.js b/en/assets/js/58231389.62dcb7d4.js deleted file mode 100755 index 961861946..000000000 --- a/en/assets/js/58231389.62dcb7d4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9429],{3905:(e,a,t)=>{t.d(a,{Zo:()=>m,kt:()=>g});var n=t(7294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=n.createContext({}),u=function(e){var a=n.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},m=function(e){var a=u(e.components);return n.createElement(s.Provider,{value:a},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},c=n.forwardRef((function(e,a){var t=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),p=u(t),c=o,g=p["".concat(s,".").concat(c)]||p[c]||d[c]||r;return t?n.createElement(g,i(i({ref:a},m),{},{components:t})):n.createElement(g,i({ref:a},m))}));function g(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var r=t.length,i=new Array(r);i[0]=c;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var u=2;u{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>u});var n=t(3117),o=(t(7294),t(3905));const r={id:"circuitpython-sistema-de-irriga\xe7\xe3o",title:"Sistema de irriga\xe7\xe3o autom\xe1tico",slug:"/franzininho-wifi/exemplos-circuitpython/irrigacao",description:"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.",author:"Giuliane Eul\xe1lia Corr\xeaa"},i=void 0,l={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o",title:"Sistema de irriga\xe7\xe3o autom\xe1tico",description:"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/irrigacao.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/irrigacao",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/irrigacao.md",tags:[],version:"current",frontMatter:{id:"circuitpython-sistema-de-irriga\xe7\xe3o",title:"Sistema de irriga\xe7\xe3o autom\xe1tico",slug:"/franzininho-wifi/exemplos-circuitpython/irrigacao",description:"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.",author:"Giuliane Eul\xe1lia Corr\xeaa"},sidebar:"docs",previous:{title:"Servo motor",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor"},next:{title:"Primeiros Passos",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos"}},s={},u=[{value:"Materiais Usados",id:"materiais-usados",level:2},{value:"Circuito Eletr\xf4nico",id:"circuito-eletr\xf4nico",level:2},{value:"C\xf3digo-fonte",id:"c\xf3digo-fonte",level:2},{value:"Entendendo o C\xf3digo-fonte",id:"entendendo-o-c\xf3digo-fonte",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],m={toc:u},p="wrapper";function d(e){let{components:a,...r}=e;return(0,o.kt)(p,(0,n.Z)({},m,r,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o\nde suas plantas. "),(0,o.kt)("p",null,"Esse sistema permite programar as regras de acordo com as necessidades das plantas. Isso garante uma economia\nde \xe1gua e tempo, para quem possui um jardim ou horta e para grandes sistemas de irriga\xe7\xe3o\nna agricultura."),(0,o.kt)("p",null,"Agora vamos descrever um exemplo de um sistema de irriga\xe7\xe3o automatico poss\xedvel de construir de forma simples mas com grande\npoder de automa\xe7\xe3o."),(0,o.kt)("h2",{id:"materiais-usados"},(0,o.kt)("strong",{parentName:"h2"},"Materiais Usados")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"1 Placa Franzininho WiFi"),(0,o.kt)("li",{parentName:"ul"},"1 Sensor de umidade do solo - Higr\xf4metro com saida digital e analogica"),(0,o.kt)("li",{parentName:"ul"},"1 Protoboard de 830 pontos"),(0,o.kt)("li",{parentName:"ul"},"1 Mini bomba de \xe1gua submersa 5v"),(0,o.kt)("li",{parentName:"ul"},"1 Rel\xe9 5v"),(0,o.kt)("li",{parentName:"ul"},"Cabos Jumpers - Macho/Macho e Macho/Femea")),(0,o.kt)("h2",{id:"circuito-eletr\xf4nico"},(0,o.kt)("strong",{parentName:"h2"},"Circuito Eletr\xf4nico")),(0,o.kt)("p",null,"Para o exemplo que vamos ver a seguir, realize a seguinte montagem:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Circuito Servo Motor",src:t(3566).Z,width:"1779",height:"2385"})),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Observa\xe7\xf5es:")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"O rel\xe9 \xe9 conectado a 5V da placa"),(0,o.kt)("li",{parentName:"ul"},"Cabos azuis: sa\xeddas digitais"),(0,o.kt)("li",{parentName:"ul"},"Cabos vermelhos: VCC"),(0,o.kt)("li",{parentName:"ul"},"Cabos pretos: GND")),(0,o.kt)("h2",{id:"c\xf3digo-fonte"},(0,o.kt)("strong",{parentName:"h2"},"C\xf3digo-fonte")),(0,o.kt)("p",null,"Para iniciar, \xe9 necess\xe1rio j\xe1 ter seguido o tutorial de ",(0,o.kt)("strong",{parentName:"p"},"Primeiros passos"),", que tamb\xe9m se encontra na p\xe1gina da Franzininho em documenta\xe7\xe3o,\nter o CircuitPython instalado na placa e para esse projeto utilizamos o Mu editor. Para obter esse ambiente basta seguir os passos em ",(0,o.kt)("strong",{parentName:"p"},"Instalando as ferramentas"),"."),(0,o.kt)("p",null,"A partir daqui consideramos que os primeiros passos de instala\xe7\xe3o e do ambiente foram conclu\xeddos.\nAbaixo est\xe1 o c\xf3digo do sistema na placa usando CircuitPython, voc\xea pode copiar e colar o c\xf3digo fonte na sua IDE."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'import board\nimport time\n\nfrom digitalio import DigitalInOut, Direction, Pull\nfrom analogio import AnalogIn \n\nrelay = DigitalInOut(board.IO0)\nrelay.switch_to_output()\n\nhumid_analog = AnalogIn(board.IO1) \nhumid_digital = DigitalInOut(board.IO4) \nhumid_digital.direction = Direction.INPUT \n\nrelay.value = True\n\nwait_time = 1\nwatering_time = 1\n\ndry_value = 51130\n\nwhile True:\n try:\n print("humid (Digital value):", humid_digital.value)\n print("humid (Analogic value):", humid_analog.value)\n\n time.sleep(1);\n\n if humid_analog.value > dry_value :\n print("Starting watering...")\n\n relay.value = False\n\n time.sleep(watering_time)\n print("Finishing watering.")\n\n else:\n relay.value = True\n time.sleep(wait_time)\n\n except RuntimeError as e:\n print("Read failure")\n\n time.sleep(1)\n')),(0,o.kt)("p",null,"Ap\xf3s terminar de escrever, e analisar no ambiente de desenvolvimento. Basta salvar e apertar no serial para executar no mu-editor. Caso esteja utilizando outra IDE, basta execut\xe1-la no ambiente escolhido."),(0,o.kt)("h2",{id:"entendendo-o-c\xf3digo-fonte"},(0,o.kt)("strong",{parentName:"h2"},"Entendendo o C\xf3digo-fonte")),(0,o.kt)("p",null,"O primeiro m\xf3dulo que vamos importar, \xe9 o board. Ele possibilita o acesso aos pinos da placa:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,o.kt)("p",null,"Este m\xf3dulo fornece v\xe1rias fun\xe7\xf5es relacionadas ao tempo:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"import time\n")),(0,o.kt)("p",null,"O digitalio \xe9 um m\xf3dulo que cont\xe9m classes para fornecer acesso a IO digital b\xe1sico:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"from digitalio import DigitalInOut, Direction, Pull\n")),(0,o.kt)("p",null,"Cria um objeto e conecta o objeto com uma entrada anal\xf3gica:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"from analogio import AnalogIn \n")),(0,o.kt)("p",null,"Agora, vamos atribuir o rel\xe9:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"relay = DigitalInOut(board.IO0)\nrelay.switch_to_output()\n")),(0,o.kt)("p",null,"Atribuimos as entradas anal\xf3gicas e digitais do sensor de umidade do solo na porta 1, sendo esta uma porta anal\xf3gica e na porta 4 a digital do franzinho. Configurando tamb\xe9m o pino como entrada digital:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"humid_analog = AnalogIn(board.IO1) # analog\nhumid_digital = DigitalInOut(board.IO4) # digital\nhumid_digital.direction = Direction.INPUT\n")),(0,o.kt)("p",null,'O rel\xe9 foi configurado para usar a porta "sempre fechada",ent\xe3o precisamos defini-lo com o valor verdadeiro para que o rel\xe9 fique inativo:'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"relay.value = True\n")),(0,o.kt)("p",null,"Per\xedodo de tempo para verificar o sistema. O controle desse per\xedodo de tempo para manter a rega da planta depende da voltagem que alimenta a bomba:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"wait_time = 1\nwatering_time = 1\n")),(0,o.kt)("p",null,"Adaptado de acordo com o sensor de umidade do solo, \xe9 necessario fazer laguns testes na sua terra para saber o valor da terra que vai ser utilizada:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"dry_value = 51130\n")),(0,o.kt)("p",null,"Por fim, dentro do ",(0,o.kt)("strong",{parentName:"p"},"while True"),", o nosso loop, faremos com que os sensores leiam continuamente e imprima os valores lidos do sensor de umidade do solo:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'while True:\n try:\n\n print("humid (Digital value):", humid_digital.value)\n print("humid (Analogic value):", humid_analog.value)\n\n time.sleep(1);\n')),(0,o.kt)("p",null,'J\xe1 na condi\xe7\xe3o abaixo, caso o sensor receba um valor que indique que a terra est\xe1 seca, entramos no condicional if e conectamos o rel\xe9 no "sempre fechado",\ne \xe9 por isso que adicionar um Falso a "sempre fechado", signinifica aberto. Ent\xe3o a bomba \xe9 acionada realizando a irriga\xe7\xe3o:'),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'if humid_analog.value > dry_value :\n print("Starting watering...")\n\n relay.value = False\n\n time.sleep(watering_time)\n print("Finishing watering.")\n\n')),(0,o.kt)("p",null,"Se o n\xedvel estiver OK, apenas nos certificamos de que o rel\xe9 esteja fechado:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"}," else:\n relay.value = True\n time.sleep(wait_time)\n\n")),(0,o.kt)("p",null,"E colocamos o sensor para dormir novamente:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"}," time.sleep(1)\n")),(0,o.kt)("p",null,"Tamb\xe9m \xe9 possivel encontrar o codigo em ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/GiulianeEC/SystemOfIrrigation_Franzininho"},"https://github.com/GiulianeEC/SystemOfIrrigation_Franzininho")),(0,o.kt)("h2",{id:"conclus\xe3o"},(0,o.kt)("strong",{parentName:"h2"},"Conclus\xe3o")),(0,o.kt)("p",null,"No decorrer da explica\xe7\xe3o, aprendemos a como montar de maneira simples um prot\xf3tipo de irriga\xe7\xe3o automatizado."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Autor"),(0,o.kt)("th",{parentName:"tr",align:null},"Giuliane Eul\xe1lia Corr\xeaa"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Data:"),(0,o.kt)("td",{parentName:"tr",align:null},"28/01/2023")))))}d.isMDXComponent=!0},3566:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/prototipo_-b5947fa5c92bd19c5bf7a5f20d326652.jpg"}}]); \ No newline at end of file diff --git a/en/assets/js/58231389.76037183.js b/en/assets/js/58231389.76037183.js new file mode 100755 index 000000000..200f24b10 --- /dev/null +++ b/en/assets/js/58231389.76037183.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1520],{89172:(e,a,i)=>{i.r(a),i.d(a,{assets:()=>l,contentTitle:()=>t,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var n=i(17624),r=i(95788);const o={id:"circuitpython-sistema-de-irriga\xe7\xe3o",title:"Sistema de irriga\xe7\xe3o autom\xe1tico",slug:"/franzininho-wifi/exemplos-circuitpython/irrigacao",description:"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.",author:"Giuliane Eul\xe1lia Corr\xeaa"},t=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o",title:"Sistema de irriga\xe7\xe3o autom\xe1tico",description:"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/irrigacao.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/irrigacao",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/irrigacao.md",tags:[],version:"current",frontMatter:{id:"circuitpython-sistema-de-irriga\xe7\xe3o",title:"Sistema de irriga\xe7\xe3o autom\xe1tico",slug:"/franzininho-wifi/exemplos-circuitpython/irrigacao",description:"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.",author:"Giuliane Eul\xe1lia Corr\xeaa"},sidebar:"docs",previous:{title:"Servo motor",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor"},next:{title:"Primeiros Passos",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos"}},l={},d=[{value:"Materiais Usados",id:"materiais-usados",level:2},{value:"Circuito Eletr\xf4nico",id:"circuito-eletr\xf4nico",level:2},{value:"C\xf3digo-fonte",id:"c\xf3digo-fonte",level:2},{value:"Entendendo o C\xf3digo-fonte",id:"entendendo-o-c\xf3digo-fonte",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function c(e){const a={a:"a",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o\nde suas plantas."}),"\n",(0,n.jsx)(a.p,{children:"Esse sistema permite programar as regras de acordo com as necessidades das plantas. Isso garante uma economia\nde \xe1gua e tempo, para quem possui um jardim ou horta e para grandes sistemas de irriga\xe7\xe3o\nna agricultura."}),"\n",(0,n.jsx)(a.p,{children:"Agora vamos descrever um exemplo de um sistema de irriga\xe7\xe3o automatico poss\xedvel de construir de forma simples mas com grande\npoder de automa\xe7\xe3o."}),"\n",(0,n.jsx)(a.h2,{id:"materiais-usados",children:(0,n.jsx)(a.strong,{children:"Materiais Usados"})}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"1 Placa Franzininho WiFi"}),"\n",(0,n.jsx)(a.li,{children:"1 Sensor de umidade do solo - Higr\xf4metro com saida digital e analogica"}),"\n",(0,n.jsx)(a.li,{children:"1 Protoboard de 830 pontos"}),"\n",(0,n.jsx)(a.li,{children:"1 Mini bomba de \xe1gua submersa 5v"}),"\n",(0,n.jsx)(a.li,{children:"1 Rel\xe9 5v"}),"\n",(0,n.jsx)(a.li,{children:"Cabos Jumpers - Macho/Macho e Macho/Femea"}),"\n"]}),"\n",(0,n.jsx)(a.h2,{id:"circuito-eletr\xf4nico",children:(0,n.jsx)(a.strong,{children:"Circuito Eletr\xf4nico"})}),"\n",(0,n.jsx)(a.p,{children:"Para o exemplo que vamos ver a seguir, realize a seguinte montagem:"}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Circuito Servo Motor",src:i(11868).c+"",width:"1779",height:"2385"})}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.strong,{children:"Observa\xe7\xf5es:"})}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"O rel\xe9 \xe9 conectado a 5V da placa"}),"\n",(0,n.jsx)(a.li,{children:"Cabos azuis: sa\xeddas digitais"}),"\n",(0,n.jsx)(a.li,{children:"Cabos vermelhos: VCC"}),"\n",(0,n.jsx)(a.li,{children:"Cabos pretos: GND"}),"\n"]}),"\n",(0,n.jsx)(a.h2,{id:"c\xf3digo-fonte",children:(0,n.jsx)(a.strong,{children:"C\xf3digo-fonte"})}),"\n",(0,n.jsxs)(a.p,{children:["Para iniciar, \xe9 necess\xe1rio j\xe1 ter seguido o tutorial de ",(0,n.jsx)(a.strong,{children:"Primeiros passos"}),", que tamb\xe9m se encontra na p\xe1gina da Franzininho em documenta\xe7\xe3o,\nter o CircuitPython instalado na placa e para esse projeto utilizamos o Mu editor. Para obter esse ambiente basta seguir os passos em ",(0,n.jsx)(a.strong,{children:"Instalando as ferramentas"}),"."]}),"\n",(0,n.jsx)(a.p,{children:"A partir daqui consideramos que os primeiros passos de instala\xe7\xe3o e do ambiente foram conclu\xeddos.\nAbaixo est\xe1 o c\xf3digo do sistema na placa usando CircuitPython, voc\xea pode copiar e colar o c\xf3digo fonte na sua IDE."}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:'import board\nimport time\n\nfrom digitalio import DigitalInOut, Direction, Pull\nfrom analogio import AnalogIn \n\nrelay = DigitalInOut(board.IO0)\nrelay.switch_to_output()\n\nhumid_analog = AnalogIn(board.IO1) \nhumid_digital = DigitalInOut(board.IO4) \nhumid_digital.direction = Direction.INPUT \n\nrelay.value = True\n\nwait_time = 1\nwatering_time = 1\n\ndry_value = 51130\n\nwhile True:\n try:\n print("humid (Digital value):", humid_digital.value)\n print("humid (Analogic value):", humid_analog.value)\n\n time.sleep(1);\n\n if humid_analog.value > dry_value :\n print("Starting watering...")\n\n relay.value = False\n\n time.sleep(watering_time)\n print("Finishing watering.")\n\n else:\n relay.value = True\n time.sleep(wait_time)\n\n except RuntimeError as e:\n print("Read failure")\n\n time.sleep(1)\n'})}),"\n",(0,n.jsx)(a.p,{children:"Ap\xf3s terminar de escrever, e analisar no ambiente de desenvolvimento. Basta salvar e apertar no serial para executar no mu-editor. Caso esteja utilizando outra IDE, basta execut\xe1-la no ambiente escolhido."}),"\n",(0,n.jsx)(a.h2,{id:"entendendo-o-c\xf3digo-fonte",children:(0,n.jsx)(a.strong,{children:"Entendendo o C\xf3digo-fonte"})}),"\n",(0,n.jsx)(a.p,{children:"O primeiro m\xf3dulo que vamos importar, \xe9 o board. Ele possibilita o acesso aos pinos da placa:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"import board\n"})}),"\n",(0,n.jsx)(a.p,{children:"Este m\xf3dulo fornece v\xe1rias fun\xe7\xf5es relacionadas ao tempo:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"import time\n"})}),"\n",(0,n.jsx)(a.p,{children:"O digitalio \xe9 um m\xf3dulo que cont\xe9m classes para fornecer acesso a IO digital b\xe1sico:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"from digitalio import DigitalInOut, Direction, Pull\n"})}),"\n",(0,n.jsx)(a.p,{children:"Cria um objeto e conecta o objeto com uma entrada anal\xf3gica:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"from analogio import AnalogIn \n"})}),"\n",(0,n.jsx)(a.p,{children:"Agora, vamos atribuir o rel\xe9:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"relay = DigitalInOut(board.IO0)\nrelay.switch_to_output()\n"})}),"\n",(0,n.jsx)(a.p,{children:"Atribuimos as entradas anal\xf3gicas e digitais do sensor de umidade do solo na porta 1, sendo esta uma porta anal\xf3gica e na porta 4 a digital do franzinho. Configurando tamb\xe9m o pino como entrada digital:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"humid_analog = AnalogIn(board.IO1) # analog\nhumid_digital = DigitalInOut(board.IO4) # digital\nhumid_digital.direction = Direction.INPUT\n"})}),"\n",(0,n.jsx)(a.p,{children:'O rel\xe9 foi configurado para usar a porta "sempre fechada",ent\xe3o precisamos defini-lo com o valor verdadeiro para que o rel\xe9 fique inativo:'}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"relay.value = True\n"})}),"\n",(0,n.jsx)(a.p,{children:"Per\xedodo de tempo para verificar o sistema. O controle desse per\xedodo de tempo para manter a rega da planta depende da voltagem que alimenta a bomba:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"wait_time = 1\nwatering_time = 1\n"})}),"\n",(0,n.jsx)(a.p,{children:"Adaptado de acordo com o sensor de umidade do solo, \xe9 necessario fazer laguns testes na sua terra para saber o valor da terra que vai ser utilizada:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"dry_value = 51130\n"})}),"\n",(0,n.jsxs)(a.p,{children:["Por fim, dentro do ",(0,n.jsx)(a.strong,{children:"while True"}),", o nosso loop, faremos com que os sensores leiam continuamente e imprima os valores lidos do sensor de umidade do solo:"]}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:'while True:\n try:\n\n print("humid (Digital value):", humid_digital.value)\n print("humid (Analogic value):", humid_analog.value)\n\n time.sleep(1);\n'})}),"\n",(0,n.jsx)(a.p,{children:'J\xe1 na condi\xe7\xe3o abaixo, caso o sensor receba um valor que indique que a terra est\xe1 seca, entramos no condicional if e conectamos o rel\xe9 no "sempre fechado",\ne \xe9 por isso que adicionar um Falso a "sempre fechado", signinifica aberto. Ent\xe3o a bomba \xe9 acionada realizando a irriga\xe7\xe3o:'}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:'if humid_analog.value > dry_value :\n print("Starting watering...")\n\n relay.value = False\n\n time.sleep(watering_time)\n print("Finishing watering.")\n\n'})}),"\n",(0,n.jsx)(a.p,{children:"Se o n\xedvel estiver OK, apenas nos certificamos de que o rel\xe9 esteja fechado:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:" else:\n relay.value = True\n time.sleep(wait_time)\n\n"})}),"\n",(0,n.jsx)(a.p,{children:"E colocamos o sensor para dormir novamente:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:" time.sleep(1)\n"})}),"\n",(0,n.jsxs)(a.p,{children:["Tamb\xe9m \xe9 possivel encontrar o codigo em ",(0,n.jsx)(a.a,{href:"https://github.com/GiulianeEC/SystemOfIrrigation_Franzininho",children:"https://github.com/GiulianeEC/SystemOfIrrigation_Franzininho"})]}),"\n",(0,n.jsx)(a.h2,{id:"conclus\xe3o",children:(0,n.jsx)(a.strong,{children:"Conclus\xe3o"})}),"\n",(0,n.jsx)(a.p,{children:"No decorrer da explica\xe7\xe3o, aprendemos a como montar de maneira simples um prot\xf3tipo de irriga\xe7\xe3o automatizado."}),"\n",(0,n.jsxs)(a.table,{children:[(0,n.jsx)(a.thead,{children:(0,n.jsxs)(a.tr,{children:[(0,n.jsx)(a.th,{children:"Autor"}),(0,n.jsx)(a.th,{children:"Giuliane Eul\xe1lia Corr\xeaa"})]})}),(0,n.jsx)(a.tbody,{children:(0,n.jsxs)(a.tr,{children:[(0,n.jsx)(a.td,{children:"Data:"}),(0,n.jsx)(a.td,{children:"28/01/2023"})]})})]})]})}function m(e={}){const{wrapper:a}={...(0,r.MN)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},95788:(e,a,i)=>{i.d(a,{MN:()=>d});var n=i(11504);function r(e,a,i){return a in e?Object.defineProperty(e,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[a]=i,e}function o(e,a){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),i.push.apply(i,n)}return i}function t(e){for(var a=1;a=0||(r[i]=e[i]);return r}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var l=n.createContext({}),d=function(e){var a=n.useContext(l),i=a;return e&&(i="function"==typeof e?e(a):t(t({},a),e)),i},c={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},m=n.forwardRef((function(e,a){var i=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=d(i),p=r,h=u["".concat(l,".").concat(p)]||u[p]||c[p]||o;return i?n.createElement(h,t(t({ref:a},m),{},{components:i})):n.createElement(h,t({ref:a},m))}));m.displayName="MDXCreateElement"},11868:(e,a,i)=>{i.d(a,{c:()=>n});const n=i.p+"assets/images/prototipo_-b5947fa5c92bd19c5bf7a5f20d326652.jpg"}}]); \ No newline at end of file diff --git a/en/assets/js/5c90fd8c.1d241669.js b/en/assets/js/5c90fd8c.1d241669.js new file mode 100755 index 000000000..5d2a7679e --- /dev/null +++ b/en/assets/js/5c90fd8c.1d241669.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2212],{29456:(e,a,r)=>{r.r(a),r.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>t,metadata:()=>c,toc:()=>l});var n=r(17624),o=r(95788);const t={id:"franzmakey",title:"Placa FranzMakey",slug:"/FranzMakey/franzmakey",description:"Detalhes da placa FranzMakey"},i=void 0,c={id:"FranzMakey/franzmakey",title:"Placa FranzMakey",description:"Detalhes da placa FranzMakey",source:"@site/docs/FranzMakey/franzmakey.md",sourceDirName:"FranzMakey",slug:"/FranzMakey/franzmakey",permalink:"/en/docs/FranzMakey/franzmakey",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzMakey/franzmakey.md",tags:[],version:"current",frontMatter:{id:"franzmakey",title:"Placa FranzMakey",slug:"/FranzMakey/franzmakey",description:"Detalhes da placa FranzMakey"},sidebar:"docs",previous:{title:"Franzininho DIY no PICSimLab",permalink:"/en/docs/franzininho-diy/picsimlab/primeiros-passos"},next:{title:"Primeiros Passos",permalink:"/en/docs/FranzMakey/primeiros-passos"}},s={},l=[{value:"O que eu posso fazer com o FRANZmakey?",id:"o-que-eu-posso-fazer-com-o-franzmakey",level:2},{value:"O que posso aprender com o FRANZmakey?",id:"o-que-posso-aprender-com-o-franzmakey",level:2},{value:"O que vem no Kit:",id:"o-que-vem-no-kit",level:2},{value:"Veja o funcionamento:",id:"veja-o-funcionamento",level:2},{value:"Onde comprar?",id:"onde-comprar",level:2}];function m(e){const a={a:"a",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,o.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"FRANZmakey \xe9 um kit com funcionamento similar ao Makey Makey, por\xe9m com um custo bem mais acess\xedvel e \xe9 feito no Brasil. O objetivo dessa placa \xe9 possibilitar a intera\xe7\xe3o com o computador atrav\xe9s de objetos inusitados, como: frutas, legumes, etc, e assim estimular a criatividade com muita m\xe3o na massa e o pensamento computacional atrav\xe9s da programa\xe7\xe3o no Scratch."}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Placa FranzMakey",src:r(32960).c+"",width:"1156",height:"867"})}),"\n",(0,n.jsx)(a.h2,{id:"o-que-eu-posso-fazer-com-o-franzmakey",children:"O que eu posso fazer com o FRANZmakey?"}),"\n",(0,n.jsx)(a.p,{children:"Com esse kit voc\xea pode colocar a criatividade e m\xe3o na massa para funcionar, voc\xea pode criar um controle para controlar os controlar jogos no Scartch, animar personagens no Scratch tocando em frutas, criar narrativas, fazer m\xfasicas tocando em frutas e etc."}),"\n",(0,n.jsx)(a.h2,{id:"o-que-posso-aprender-com-o-franzmakey",children:"O que posso aprender com o FRANZmakey?"}),"\n",(0,n.jsx)(a.p,{children:"Pensamento computacional, criatividade, programa\xe7\xe3o em blocos no caso o Scratch, aplica\xe7\xf5es para interface com computador, etc."}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Placa FranzMakey",src:r(55876).c+"",width:"6000",height:"4000"})}),"\n",(0,n.jsx)(a.h2,{id:"o-que-vem-no-kit",children:"O que vem no Kit:"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"1 Placa FRANZmakey"}),"\n",(0,n.jsx)(a.li,{children:"1 Cabo USB 2 metros"}),"\n",(0,n.jsx)(a.li,{children:"5 Garras de jacar\xe9"}),"\n",(0,n.jsx)(a.li,{children:"Manual de instru\xe7\xf5es"}),"\n",(0,n.jsx)(a.li,{children:"Exemplos de projetos"}),"\n"]}),"\n",(0,n.jsx)(a.h2,{id:"veja-o-funcionamento",children:"Veja o funcionamento:"}),"\n",(0,n.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/1Ef_uA7mybc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,n.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/KfDgfVB0vzc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,n.jsx)(a.h2,{id:"onde-comprar",children:"Onde comprar?"}),"\n",(0,n.jsxs)(a.p,{children:["Esse kit \xe9 feito sob encomenda. Para adquiri-lo, entre em contato conosco: ",(0,n.jsx)(a.a,{href:"mailto:contato@franzininho.com.br%EF%BB%BF",children:"contato@franzininho.com.br\ufeff"})]})]})}function p(e={}){const{wrapper:a}={...(0,o.MN)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},95788:(e,a,r)=>{r.d(a,{MN:()=>l});var n=r(11504);function o(e,a,r){return a in e?Object.defineProperty(e,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[a]=r,e}function t(e,a){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var a=1;a=0||(o[r]=e[r]);return o}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var a=n.useContext(s),r=a;return e&&(r="function"==typeof e?e(a):i(i({},a),e)),r},m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},p=n.forwardRef((function(e,a){var r=e.components,o=e.mdxType,t=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),d=l(r),u=o,f=d["".concat(s,".").concat(u)]||d[u]||m[u]||t;return r?n.createElement(f,i(i({ref:a},p),{},{components:r})):n.createElement(f,i({ref:a},p))}));p.displayName="MDXCreateElement"},32960:(e,a,r)=>{r.d(a,{c:()=>n});const n=r.p+"assets/images/kit-FranzMakey-43924bbd9b93f8b37cccbbea0143239a.jpeg"},55876:(e,a,r)=>{r.d(a,{c:()=>n});const n=r.p+"assets/images/kit-franzmakey-frutas-c3bee3b42f39fc669574b58690132123.JPG"}}]); \ No newline at end of file diff --git a/en/assets/js/5c90fd8c.f7da1637.js b/en/assets/js/5c90fd8c.f7da1637.js deleted file mode 100755 index 926ef4164..000000000 --- a/en/assets/js/5c90fd8c.f7da1637.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5016],{3905:(e,a,r)=>{r.d(a,{Zo:()=>m,kt:()=>f});var t=r(7294);function o(e,a,r){return a in e?Object.defineProperty(e,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[a]=r,e}function n(e,a){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),r.push.apply(r,t)}return r}function i(e){for(var a=1;a=0||(o[r]=e[r]);return o}(e,a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=t.createContext({}),l=function(e){var a=t.useContext(s),r=a;return e&&(r="function"==typeof e?e(a):i(i({},a),e)),r},m=function(e){var a=l(e.components);return t.createElement(s.Provider,{value:a},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},d=t.forwardRef((function(e,a){var r=e.components,o=e.mdxType,n=e.originalType,s=e.parentName,m=c(e,["components","mdxType","originalType","parentName"]),p=l(r),d=o,f=p["".concat(s,".").concat(d)]||p[d]||u[d]||n;return r?t.createElement(f,i(i({ref:a},m),{},{components:r})):t.createElement(f,i({ref:a},m))}));function f(e,a){var r=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var n=r.length,i=new Array(n);i[0]=d;var c={};for(var s in a)hasOwnProperty.call(a,s)&&(c[s]=a[s]);c.originalType=e,c[p]="string"==typeof e?e:o,i[1]=c;for(var l=2;l{r.r(a),r.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>n,metadata:()=>c,toc:()=>l});var t=r(3117),o=(r(7294),r(3905));const n={id:"franzmakey",title:"Placa FranzMakey",slug:"/FranzMakey/franzmakey",description:"Detalhes da placa FranzMakey"},i=void 0,c={unversionedId:"FranzMakey/franzmakey",id:"FranzMakey/franzmakey",title:"Placa FranzMakey",description:"Detalhes da placa FranzMakey",source:"@site/docs/FranzMakey/franzmakey.md",sourceDirName:"FranzMakey",slug:"/FranzMakey/franzmakey",permalink:"/en/docs/FranzMakey/franzmakey",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzMakey/franzmakey.md",tags:[],version:"current",frontMatter:{id:"franzmakey",title:"Placa FranzMakey",slug:"/FranzMakey/franzmakey",description:"Detalhes da placa FranzMakey"},sidebar:"docs",previous:{title:"Franzininho DIY no PICSimLab",permalink:"/en/docs/franzininho-diy/picsimlab/primeiros-passos"},next:{title:"Primeiros Passos",permalink:"/en/docs/FranzMakey/primeiros-passos"}},s={},l=[{value:"O que eu posso fazer com o FRANZmakey?",id:"o-que-eu-posso-fazer-com-o-franzmakey",level:2},{value:"O que posso aprender com o FRANZmakey?",id:"o-que-posso-aprender-com-o-franzmakey",level:2},{value:"O que vem no Kit:",id:"o-que-vem-no-kit",level:2},{value:"Veja o funcionamento:",id:"veja-o-funcionamento",level:2},{value:"Onde comprar?",id:"onde-comprar",level:2}],m={toc:l},p="wrapper";function u(e){let{components:a,...n}=e;return(0,o.kt)(p,(0,t.Z)({},m,n,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"FRANZmakey \xe9 um kit com funcionamento similar ao Makey Makey, por\xe9m com um custo bem mais acess\xedvel e \xe9 feito no Brasil. O objetivo dessa placa \xe9 possibilitar a intera\xe7\xe3o com o computador atrav\xe9s de objetos inusitados, como: frutas, legumes, etc, e assim estimular a criatividade com muita m\xe3o na massa e o pensamento computacional atrav\xe9s da programa\xe7\xe3o no Scratch."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Placa FranzMakey",src:r(3712).Z,width:"1156",height:"867"})),(0,o.kt)("h2",{id:"o-que-eu-posso-fazer-com-o-franzmakey"},"O que eu posso fazer com o FRANZmakey?"),(0,o.kt)("p",null,"Com esse kit voc\xea pode colocar a criatividade e m\xe3o na massa para funcionar, voc\xea pode criar um controle para controlar os controlar jogos no Scartch, animar personagens no Scratch tocando em frutas, criar narrativas, fazer m\xfasicas tocando em frutas e etc."),(0,o.kt)("h2",{id:"o-que-posso-aprender-com-o-franzmakey"},"O que posso aprender com o FRANZmakey?"),(0,o.kt)("p",null,"Pensamento computacional, criatividade, programa\xe7\xe3o em blocos no caso o Scratch, aplica\xe7\xf5es para interface com computador, etc."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Placa FranzMakey",src:r(7340).Z,width:"6000",height:"4000"})),(0,o.kt)("h2",{id:"o-que-vem-no-kit"},"O que vem no Kit:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"1 Placa FRANZmakey"),(0,o.kt)("li",{parentName:"ul"},"1 Cabo USB 2 metros"),(0,o.kt)("li",{parentName:"ul"},"5 Garras de jacar\xe9"),(0,o.kt)("li",{parentName:"ul"},"Manual de instru\xe7\xf5es"),(0,o.kt)("li",{parentName:"ul"},"Exemplos de projetos")),(0,o.kt)("h2",{id:"veja-o-funcionamento"},"Veja o funcionamento:"),(0,o.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/1Ef_uA7mybc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,o.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/KfDgfVB0vzc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,o.kt)("h2",{id:"onde-comprar"},"Onde comprar?"),(0,o.kt)("p",null,"Esse kit \xe9 feito sob encomenda. Para adquiri-lo, entre em contato conosco: ",(0,o.kt)("a",{parentName:"p",href:"mailto:contato@franzininho.com.br"},"contato@franzininho.com.br\ufeff")))}u.isMDXComponent=!0},3712:(e,a,r)=>{r.d(a,{Z:()=>t});const t=r.p+"assets/images/kit-FranzMakey-43924bbd9b93f8b37cccbbea0143239a.jpeg"},7340:(e,a,r)=>{r.d(a,{Z:()=>t});const t=r.p+"assets/images/kit-franzmakey-frutas-c3bee3b42f39fc669574b58690132123.JPG"}}]); \ No newline at end of file diff --git a/en/assets/js/5cfa1a80.0c6bae68.js b/en/assets/js/5cfa1a80.0c6bae68.js deleted file mode 100755 index ebf160d1d..000000000 --- a/en/assets/js/5cfa1a80.0c6bae68.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7600],{3905:(e,n,r)=>{r.d(n,{Zo:()=>c,kt:()=>f});var o=r(7294);function a(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function t(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var n=1;n=0||(a[r]=e[r]);return a}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=o.createContext({}),d=function(e){var n=o.useContext(s),r=n;return e&&(r="function"==typeof e?e(n):i(i({},n),e)),r},c=function(e){var n=d(e.components);return o.createElement(s.Provider,{value:n},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},m=o.forwardRef((function(e,n){var r=e.components,a=e.mdxType,t=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=d(r),m=a,f=u["".concat(s,".").concat(m)]||u[m]||p[m]||t;return r?o.createElement(f,i(i({ref:n},c),{},{components:r})):o.createElement(f,i({ref:n},c))}));function f(e,n){var r=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var t=r.length,i=new Array(t);i[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var d=2;d{r.r(n),r.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var o=r(3117),a=(r(7294),r(3905));const t={id:"sensor-luz-ldr",title:"Sensor de luz com LDR",slug:"/franzininho-diy/sensor-luz-ldr",description:"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY"},i=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr",id:"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr",title:"Sensor de luz com LDR",description:"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/sensor-luz.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/sensor-luz-ldr",permalink:"/en/docs/franzininho-diy/sensor-luz-ldr",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/sensor-luz.md",tags:[],version:"current",frontMatter:{id:"sensor-luz-ldr",title:"Sensor de luz com LDR",slug:"/franzininho-diy/sensor-luz-ldr",description:"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY"},sidebar:"docs",previous:{title:"Elefante Colorido! Que cor?",permalink:"/en/docs/franzininho-diy/elefante-colorido"},next:{title:"Sem\xe1foro",permalink:"/en/docs/franzininho-diy/semaforo"}},s={},d=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],c={toc:d},u="wrapper";function p(e){let{components:n,...t}=e;return(0,a.kt)(u,(0,o.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica. "),(0,a.kt)("p",null,"Ser\xe1 exibido um exemplo de funcionamento de uma fotoc\xe9lula, onde ao escurecer ser\xe1 aceso o LED, como acontece com a luz da rua."),(0,a.kt)("h2",{id:"materiais"},"Materiais"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Placa Franzininho;"),(0,a.kt)("li",{parentName:"ul"},"Protoboard;"),(0,a.kt)("li",{parentName:"ul"},"1 Resistor 10K;"),(0,a.kt)("li",{parentName:"ul"},"1 LDR","(","10K",")"),(0,a.kt)("li",{parentName:"ul"},"Jumpers")),(0,a.kt)("h2",{id:"circuito"},"Circuito"),(0,a.kt)("p",null,"Fa\xe7a a seguinte liga\xe7\xe3o no protoboard:"),(0,a.kt)("p",null,(0,a.kt)("img",{src:r(7803).Z,width:"551",height:"231"})),(0,a.kt)("h2",{id:"sketch"},"Sketch"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cpp"},"/*\n Franzininho\n Exemplo: Sensor de Luz - LDR\n Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica. Ser\xe1 exibido um exemplo de funcionamento de uma fotoc\xe9lula, onde ao escurecer ser\xe1 aceso o LED, como acontece na luz da rua. ;)\n*/\n//Sensor de luz com LDR\nint ledPin = 1; //Led no pino 1 - LED da placa\nint ldrPin = A1; //LDR no pino anal\xf3gico A1\nint ldrValor = 0; //Valor lido do LDR\n\nvoid setup() {\n pinMode(ledPin,OUTPUT); //define LED como Sa\xedda\n}\n\nvoid loop() {\n //ler o valor do LDR\n ldrValor = analogRead(ldrPin); //O valor lido ser\xe1 entre 0 e 1023\n //se o valor lido for maior que 800, liga o led\n if (ldrValor>= 800){\n digitalWrite(ledPin, HIGH); //aciona sa\xedda\n } else { // sen\xe3o, apaga o led \n digitalWrite(ledPin,LOW); //desliga sa\xedda\n }\n delay(100);\n}\n")),(0,a.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,a.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311443234729493056?view=diagram"}),(0,a.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,a.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/AzypBpXO238",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}p.isMDXComponent=!0},7803:(e,n,r)=>{r.d(n,{Z:()=>o});const o=r.p+"assets/images/sensor-luz-circuito-6c590c3ead770407b6f4c790d14d0251.png"}}]); \ No newline at end of file diff --git a/en/assets/js/5cfa1a80.dfeabd99.js b/en/assets/js/5cfa1a80.dfeabd99.js new file mode 100755 index 000000000..52dc5c114 --- /dev/null +++ b/en/assets/js/5cfa1a80.dfeabd99.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6780],{61184:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>s,contentTitle:()=>t,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var o=r(17624),i=r(95788);const a={id:"sensor-luz-ldr",title:"Sensor de luz com LDR",slug:"/franzininho-diy/sensor-luz-ldr",description:"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY"},t=void 0,l={id:"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr",title:"Sensor de luz com LDR",description:"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/sensor-luz.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/sensor-luz-ldr",permalink:"/en/docs/franzininho-diy/sensor-luz-ldr",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/sensor-luz.md",tags:[],version:"current",frontMatter:{id:"sensor-luz-ldr",title:"Sensor de luz com LDR",slug:"/franzininho-diy/sensor-luz-ldr",description:"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY"},sidebar:"docs",previous:{title:"Elefante Colorido! Que cor?",permalink:"/en/docs/franzininho-diy/elefante-colorido"},next:{title:"Sem\xe1foro",permalink:"/en/docs/franzininho-diy/semaforo"}},s={},d=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function c(e){const n={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica."}),"\n",(0,o.jsx)(n.p,{children:"Ser\xe1 exibido um exemplo de funcionamento de uma fotoc\xe9lula, onde ao escurecer ser\xe1 aceso o LED, como acontece com a luz da rua."}),"\n",(0,o.jsx)(n.h2,{id:"materiais",children:"Materiais"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Placa Franzininho;"}),"\n",(0,o.jsx)(n.li,{children:"Protoboard;"}),"\n",(0,o.jsx)(n.li,{children:"1 Resistor 10K;"}),"\n",(0,o.jsx)(n.li,{children:"1 LDR(10K)"}),"\n",(0,o.jsx)(n.li,{children:"Jumpers"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,o.jsx)(n.p,{children:"Fa\xe7a a seguinte liga\xe7\xe3o no protoboard:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{src:r(37876).c+"",width:"551",height:"231"})}),"\n",(0,o.jsx)(n.h2,{id:"sketch",children:"Sketch"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-cpp",children:"/*\n Franzininho\n Exemplo: Sensor de Luz - LDR\n Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica. Ser\xe1 exibido um exemplo de funcionamento de uma fotoc\xe9lula, onde ao escurecer ser\xe1 aceso o LED, como acontece na luz da rua. ;)\n*/\n//Sensor de luz com LDR\nint ledPin = 1; //Led no pino 1 - LED da placa\nint ldrPin = A1; //LDR no pino anal\xf3gico A1\nint ldrValor = 0; //Valor lido do LDR\n\nvoid setup() {\n pinMode(ledPin,OUTPUT); //define LED como Sa\xedda\n}\n\nvoid loop() {\n //ler o valor do LDR\n ldrValor = analogRead(ldrPin); //O valor lido ser\xe1 entre 0 e 1023\n //se o valor lido for maior que 800, liga o led\n if (ldrValor>= 800){\n digitalWrite(ledPin, HIGH); //aciona sa\xedda\n } else { // sen\xe3o, apaga o led \n digitalWrite(ledPin,LOW); //desliga sa\xedda\n }\n delay(100);\n}\n"})}),"\n",(0,o.jsx)(n.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311443234729493056?view=diagram"}),"\n",(0,o.jsx)(n.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/AzypBpXO238",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function u(e={}){const{wrapper:n}={...(0,i.MN)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},95788:(e,n,r)=>{r.d(n,{MN:()=>d});var o=r(11504);function i(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function a(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,o)}return r}function t(e){for(var n=1;n=0||(i[r]=e[r]);return i}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var s=o.createContext({}),d=function(e){var n=o.useContext(s),r=n;return e&&(r="function"==typeof e?e(n):t(t({},n),e)),r},c={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var r=e.components,i=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=d(r),m=i,h=p["".concat(s,".").concat(m)]||p[m]||c[m]||a;return r?o.createElement(h,t(t({ref:n},u),{},{components:r})):o.createElement(h,t({ref:n},u))}));u.displayName="MDXCreateElement"},37876:(e,n,r)=>{r.d(n,{c:()=>o});const o=r.p+"assets/images/sensor-luz-circuito-6c590c3ead770407b6f4c790d14d0251.png"}}]); \ No newline at end of file diff --git a/en/assets/js/5e95c892.1ebb8d2b.js b/en/assets/js/5e95c892.1ebb8d2b.js new file mode 100755 index 000000000..0728e3098 --- /dev/null +++ b/en/assets/js/5e95c892.1ebb8d2b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4304],{43564:(e,r,n)=>{n.r(r),n.d(r,{default:()=>t});n(11504);var s=n(34064),c=n(68900),a=n(45864),u=n(85464),i=n(99012),h=n(17624);function t(e){return(0,h.jsx)(c.cr,{className:(0,s.c)(a.W.wrapper.docsPages),children:(0,h.jsx)(i.c,{children:(0,u.k)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/en/assets/js/5f765f30.37433f5c.js b/en/assets/js/5f765f30.37433f5c.js deleted file mode 100755 index a2fd0e93c..000000000 --- a/en/assets/js/5f765f30.37433f5c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8601],{3905:(e,a,o)=>{o.d(a,{Zo:()=>c,kt:()=>h});var n=o(7294);function r(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function t(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var a=1;a=0||(r[o]=e[o]);return r}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var p=n.createContext({}),s=function(e){var a=n.useContext(p),o=a;return e&&(o="function"==typeof e?e(a):i(i({},a),e)),o},c=function(e){var a=s(e.components);return n.createElement(p.Provider,{value:a},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},d=n.forwardRef((function(e,a){var o=e.components,r=e.mdxType,t=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(o),d=r,h=u["".concat(p,".").concat(d)]||u[d]||m[d]||t;return o?n.createElement(h,i(i({ref:a},c),{},{components:o})):n.createElement(h,i({ref:a},c))}));function h(e,a){var o=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var t=o.length,i=new Array(t);i[0]=d;var l={};for(var p in a)hasOwnProperty.call(a,p)&&(l[p]=a[p]);l.originalType=e,l[u]="string"==typeof e?e:r,i[1]=l;for(var s=2;s{o.r(a),o.d(a,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>t,metadata:()=>l,toc:()=>s});var n=o(3117),r=(o(7294),o(3905));const t={id:"circuitpython-pwm",title:"PWM - Pulse Width Modulation",slug:"/franzininho-wifi/exemplos-circuitpython/pwm",description:"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.",author:"Mateus Adriano Ventura Vieira"},i=void 0,l={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm",title:"PWM - Pulse Width Modulation",description:"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/pwm.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/pwm",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/pwm",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/pwm.md",tags:[],version:"current",frontMatter:{id:"circuitpython-pwm",title:"PWM - Pulse Width Modulation",slug:"/franzininho-wifi/exemplos-circuitpython/pwm",description:"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.",author:"Mateus Adriano Ventura Vieira"},sidebar:"docs",previous:{title:"Entrada Anal\xf3gica",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas"},next:{title:"Pinos de Toque Capacitivo",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo"}},p={},s=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo para PWM com CircuitPython",id:"c\xf3digo-para-pwm-com-circuitpython",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],c={toc:s},u="wrapper";function m(e){let{components:a,...t}=e;return(0,r.kt)(u,(0,n.Z)({},c,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar."),(0,r.kt)("p",null,"PWM \xe9 abrevia\xe7\xe3o para, Pulse Width Modulation \u2013 que significa \u2013 Modula\xe7\xe3o por Largura de Pulso. Essa \xe9 uma t\xe9cnica onde, uma sa\xedda digital \xe9 usada para simular uma sa\xedda anal\xf3gica. Isso acontece por meio de mudan\xe7as constantes de sinal, que s\xe3o impercept\xedveis e, dessa maneira o componente conectado a esse pino apenas tira uma m\xe9dia de quanto tempo est\xe1 em estado alto e baixo. Quanto mais tempo ligado, maior o valor e, consequentemente, quando menor tempo ligado, menor o valor."),(0,r.kt)("p",null,"Neste exemplo, vamos aprender a usar PWM com CircuitPython na Franzininho WiFi."),(0,r.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"1 Placa Franzininho WiFi com CircuitPython;"),(0,r.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,r.kt)("li",{parentName:"ul"},"1 LED;"),(0,r.kt)("li",{parentName:"ul"},"1 potenci\xf4metro de 10 k\u03a9;"),(0,r.kt)("li",{parentName:"ul"},"1 resistor de 220 \u03a9 ou 330 \u03a9;"),(0,r.kt)("li",{parentName:"ul"},"Jumpers.")),(0,r.kt)("h2",{id:"circuito"},"Circuito"),(0,r.kt)("p",null,"Para os nossos primeiros experimentos, realize a seguinte montagem:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"franzininho-wifi-pwm",src:o(5522).Z,width:"1755",height:"678"}),"\nFigura 1 \u2013 Circuito para teste de PWM com CircuitPython na Franzininho WiFi"),(0,r.kt)("h2",{id:"c\xf3digo-para-pwm-com-circuitpython"},"C\xf3digo para PWM com CircuitPython"),(0,r.kt)("p",null,"Para esse c\xf3digo, utilizaremos a biblioteca simpleio, que ser\xe1 necess\xe1ria para realizarmos a convers\xe3o de valores. As bibliotecas do CircuitPython podem ser encontradas no seguinte endere\xe7o: ",(0,r.kt)("a",{parentName:"p",href:"https://circuitpython.org/libraries"},"https://circuitpython.org/libraries"),". Fa\xe7a o download, de acordo com a vers\xe3o do CircuitPython instalada na sua Franzininho WiFi."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"franzininho-wifi-pwm",src:o(2191).Z,width:"1543",height:"328"})),(0,r.kt)("p",null,"Ap\xf3s baixar o arquivo, copie a pasta desejada para a pasta de arquivos da Franzininho WiFi:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"simpleio.mpy\n")),(0,r.kt)("p",null,"Escreva o c\xf3digo abaixo no arquivo code.py, que est\xe1 localizado no diret\xf3rio da Franzininho:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import pwmio\nimport math\nimport simpleio\nfrom analogio import AnalogIn\nfrom time import sleep\n\npotIn = board.IO2\npot = AnalogIn(potIn)\n\nLED = board.IO4\nled = pwmio.PWMOut(LED)\n\ndef converter(pin):\n pinValue = pin.value\n mapValue = math.trunc(simpleio.map_range\n (pinValue, 536, 51355, 0, 65535))\n print('Valor Original: ', pinValue,\n 'Valor Convertido: ', mapValue)\n return mapValue\n\nwhile True:\n potValue = converter(pot)\n led.duty_cycle = potValue\n sleep(0.1)\n")),(0,r.kt)("p",null,"Depois de finalizar a edi\xe7\xe3o do c\xf3digo, salve. Execute o programa."),(0,r.kt)("p",null,"Utilizaremos o m\xf3dulo board para acessarmos os pinos da Franzininho:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,r.kt)("p",null,"E para configurarmos os pinos PWM, \xe9 necess\xe1rio importarmos o pwmio:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import pwmio\n")),(0,r.kt)("p",null,"Al\xe9m disso, ser\xe1 necess\xe1rio a biblioteca math, para \u201celiminar\u201d as casas decimais:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import math\n")),(0,r.kt)("p",null,"Como dito anteriormente, usaremos o m\xf3dulo simpleio:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import simpleio\n")),(0,r.kt)("p",null,"Ademais, importaremos a fun\xe7\xe3o AnalogIn do m\xf3dulo analogio para, configuramos o potenci\xf4metro como uma entrada anal\xf3gica:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"from analogio import AnalogIn\n")),(0,r.kt)("p",null,"Tamb\xe9m, iremos chamar a fun\xe7\xe3o sleep, da biblioteca time, pois precisaremos de intervalos de temporiza\xe7\xe3o:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"from time import sleep\n")),(0,r.kt)("p",null,"Agora, ap\xf3s importarmos todas os m\xf3dulos que vamos utilizar, vamos configurar os pinos. Primeiro, vamos associar o GPIO2 a uma vari\xe1vel chamada potIn. Ap\xf3s isso, vamos criar um objeto chamado pot e configur\xe1-lo como uma entrada anal\xf3gica:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"LED = board.IO4\nled = pwmio.PWMOut(LED)\n")),(0,r.kt)("p",null,"Configura\xe7\xf5es iniciais encerradas! Depois disso, vamos criar uma fun\xe7\xe3o chamada converte. Como par\xe2metro, essa fun\xe7\xe3o receber\xe1 o pino que estamos realizando a leitura:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"def converter(pin):\n")),(0,r.kt)("p",null,"Dentro da fun\xe7\xe3o, realizaremos a leitura do valor do potenci\xf4metro, que ser\xe1 armazenada na vari\xe1vel pinValue:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"pinValue = pin.value\n")),(0,r.kt)("p",null,"Al\xe9m disso, vamos converter o valor do potenci\xf4metro para o valor aceito pelos pinos PWM. Para isso, vamos usar a fun\xe7\xe3o simpleio.map_range. Os par\xe2metros dessa fun\xe7\xe3o s\xe3o: valor bruto (no caso, o valor recebido naquele instante), valor m\xednimo de entrada, valor m\xe1ximo de entrada, valor m\xednimo de sa\xedda e valor m\xe1ximo de sa\xedda. E, vamos precisar da fun\xe7\xe3o math.trunc, que eliminar\xe1 as casas decimais. Todas essas informa\xe7\xf5es ficar\xe3o armazenadas na vari\xe1vel mapValue:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"mapValue = math.trunc(simpleio.map_range\n (pinValue, 536, 51355, 0, 65535))\n")),(0,r.kt)("p",null,"Colocaremos o print apenas para visualizarmos a convers\xe3o:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"print('Valor Original: ', pinValue,\n 'Valor Convertido: ', mapValue)\n return mapValue\n")),(0,r.kt)("p",null,"E a fun\xe7\xe3o nos retornar\xe1 o valor de mapValue:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"return mapValue\n")),(0,r.kt)("p",null,"E por fim, o loop. Dentro do while True, vamos associar o valor retornado pela fun\xe7\xe3o converte a vari\xe1vel potValue e mandar esse valor para o led. Para enviarmos um valor para o componente, utilizamos a fun\xe7\xe3o duty_cycle, que \xe9 o ciclo de trabalho, ou seja, quanto tempo o sinal estar\xe1 ligado ou n\xe3o. Tamb\xe9m, colocaremos um delay:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"while True:\n potValue = converter(pot)\n led.duty_cycle = potValue\n sleep(0.1)\n")),(0,r.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,r.kt)("p",null,"Nesse exemplo, aprendemos a como usar os pinos PWM com CircuitPython e, como control\xe1-los atrav\xe9s de um potenci\xf4metro. Al\xe9m disso, aprendemos a como mapear valores. No pr\xf3ximo exemplo, vamos aprender a como usar Servos Motores.\nOutros artigos da s\xe9rie."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Autor"),(0,r.kt)("th",{parentName:"tr",align:null},"Mateus Adriano Ventura Vieira"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data:"),(0,r.kt)("td",{parentName:"tr",align:null},"09/05/2022")))))}m.isMDXComponent=!0},2191:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/bundles-58357a122b96bde035495e9835cb75e7.png"},5522:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/pwm-eb18c8cc8e0dbfee8a2537d3706ee4c3.png"}}]); \ No newline at end of file diff --git a/en/assets/js/5f765f30.758c5a83.js b/en/assets/js/5f765f30.758c5a83.js new file mode 100755 index 000000000..9fa76beaf --- /dev/null +++ b/en/assets/js/5f765f30.758c5a83.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7024],{77092:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>c,contentTitle:()=>t,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var n=o(17624),i=o(95788);const r={id:"circuitpython-pwm",title:"PWM - Pulse Width Modulation",slug:"/franzininho-wifi/exemplos-circuitpython/pwm",description:"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.",author:"Mateus Adriano Ventura Vieira"},t=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm",title:"PWM - Pulse Width Modulation",description:"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/pwm.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/pwm",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/pwm",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/pwm.md",tags:[],version:"current",frontMatter:{id:"circuitpython-pwm",title:"PWM - Pulse Width Modulation",slug:"/franzininho-wifi/exemplos-circuitpython/pwm",description:"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.",author:"Mateus Adriano Ventura Vieira"},sidebar:"docs",previous:{title:"Entrada Anal\xf3gica",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas"},next:{title:"Pinos de Toque Capacitivo",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo"}},c={},l=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo para PWM com CircuitPython",id:"c\xf3digo-para-pwm-com-circuitpython",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function p(e){const a={a:"a",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar."}),"\n",(0,n.jsx)(a.p,{children:"PWM \xe9 abrevia\xe7\xe3o para, Pulse Width Modulation \u2013 que significa \u2013 Modula\xe7\xe3o por Largura de Pulso. Essa \xe9 uma t\xe9cnica onde, uma sa\xedda digital \xe9 usada para simular uma sa\xedda anal\xf3gica. Isso acontece por meio de mudan\xe7as constantes de sinal, que s\xe3o impercept\xedveis e, dessa maneira o componente conectado a esse pino apenas tira uma m\xe9dia de quanto tempo est\xe1 em estado alto e baixo. Quanto mais tempo ligado, maior o valor e, consequentemente, quando menor tempo ligado, menor o valor."}),"\n",(0,n.jsx)(a.p,{children:"Neste exemplo, vamos aprender a usar PWM com CircuitPython na Franzininho WiFi."}),"\n",(0,n.jsx)(a.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"1 Placa Franzininho WiFi com CircuitPython;"}),"\n",(0,n.jsx)(a.li,{children:"1 Protoboard;"}),"\n",(0,n.jsx)(a.li,{children:"1 LED;"}),"\n",(0,n.jsx)(a.li,{children:"1 potenci\xf4metro de 10 k\u03a9;"}),"\n",(0,n.jsx)(a.li,{children:"1 resistor de 220 \u03a9 ou 330 \u03a9;"}),"\n",(0,n.jsx)(a.li,{children:"Jumpers."}),"\n"]}),"\n",(0,n.jsx)(a.h2,{id:"circuito",children:"Circuito"}),"\n",(0,n.jsx)(a.p,{children:"Para os nossos primeiros experimentos, realize a seguinte montagem:"}),"\n",(0,n.jsxs)(a.p,{children:[(0,n.jsx)(a.img,{alt:"franzininho-wifi-pwm",src:o(33832).c+"",width:"1755",height:"678"}),"\nFigura 1 \u2013 Circuito para teste de PWM com CircuitPython na Franzininho WiFi"]}),"\n",(0,n.jsx)(a.h2,{id:"c\xf3digo-para-pwm-com-circuitpython",children:"C\xf3digo para PWM com CircuitPython"}),"\n",(0,n.jsxs)(a.p,{children:["Para esse c\xf3digo, utilizaremos a biblioteca simpleio, que ser\xe1 necess\xe1ria para realizarmos a convers\xe3o de valores. As bibliotecas do CircuitPython podem ser encontradas no seguinte endere\xe7o: ",(0,n.jsx)(a.a,{href:"https://circuitpython.org/libraries",children:"https://circuitpython.org/libraries"}),". Fa\xe7a o download, de acordo com a vers\xe3o do CircuitPython instalada na sua Franzininho WiFi."]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"franzininho-wifi-pwm",src:o(55184).c+"",width:"1543",height:"328"})}),"\n",(0,n.jsx)(a.p,{children:"Ap\xf3s baixar o arquivo, copie a pasta desejada para a pasta de arquivos da Franzininho WiFi:"}),"\n",(0,n.jsx)(a.p,{children:"simpleio.mpy"}),"\n",(0,n.jsx)(a.p,{children:"Escreva o c\xf3digo abaixo no arquivo code.py, que est\xe1 localizado no diret\xf3rio da Franzininho:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"import pwmio\nimport math\nimport simpleio\nfrom analogio import AnalogIn\nfrom time import sleep\n\npotIn = board.IO2\npot = AnalogIn(potIn)\n\nLED = board.IO4\nled = pwmio.PWMOut(LED)\n\ndef converter(pin):\n pinValue = pin.value\n mapValue = math.trunc(simpleio.map_range\n (pinValue, 536, 51355, 0, 65535))\n print('Valor Original: ', pinValue,\n 'Valor Convertido: ', mapValue)\n return mapValue\n\nwhile True:\n potValue = converter(pot)\n led.duty_cycle = potValue\n sleep(0.1)\n"})}),"\n",(0,n.jsx)(a.p,{children:"Depois de finalizar a edi\xe7\xe3o do c\xf3digo, salve. Execute o programa."}),"\n",(0,n.jsx)(a.p,{children:"Utilizaremos o m\xf3dulo board para acessarmos os pinos da Franzininho:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"import board\n"})}),"\n",(0,n.jsx)(a.p,{children:"E para configurarmos os pinos PWM, \xe9 necess\xe1rio importarmos o pwmio:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"import pwmio\n"})}),"\n",(0,n.jsx)(a.p,{children:"Al\xe9m disso, ser\xe1 necess\xe1rio a biblioteca math, para \u201celiminar\u201d as casas decimais:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"import math\n"})}),"\n",(0,n.jsx)(a.p,{children:"Como dito anteriormente, usaremos o m\xf3dulo simpleio:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"import simpleio\n"})}),"\n",(0,n.jsx)(a.p,{children:"Ademais, importaremos a fun\xe7\xe3o AnalogIn do m\xf3dulo analogio para, configuramos o potenci\xf4metro como uma entrada anal\xf3gica:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"from analogio import AnalogIn\n"})}),"\n",(0,n.jsx)(a.p,{children:"Tamb\xe9m, iremos chamar a fun\xe7\xe3o sleep, da biblioteca time, pois precisaremos de intervalos de temporiza\xe7\xe3o:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"from time import sleep\n"})}),"\n",(0,n.jsx)(a.p,{children:"Agora, ap\xf3s importarmos todas os m\xf3dulos que vamos utilizar, vamos configurar os pinos. Primeiro, vamos associar o GPIO2 a uma vari\xe1vel chamada potIn. Ap\xf3s isso, vamos criar um objeto chamado pot e configur\xe1-lo como uma entrada anal\xf3gica:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"LED = board.IO4\nled = pwmio.PWMOut(LED)\n"})}),"\n",(0,n.jsx)(a.p,{children:"Configura\xe7\xf5es iniciais encerradas! Depois disso, vamos criar uma fun\xe7\xe3o chamada converte. Como par\xe2metro, essa fun\xe7\xe3o receber\xe1 o pino que estamos realizando a leitura:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"def converter(pin):\n"})}),"\n",(0,n.jsx)(a.p,{children:"Dentro da fun\xe7\xe3o, realizaremos a leitura do valor do potenci\xf4metro, que ser\xe1 armazenada na vari\xe1vel pinValue:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"pinValue = pin.value\n"})}),"\n",(0,n.jsx)(a.p,{children:"Al\xe9m disso, vamos converter o valor do potenci\xf4metro para o valor aceito pelos pinos PWM. Para isso, vamos usar a fun\xe7\xe3o simpleio.map_range. Os par\xe2metros dessa fun\xe7\xe3o s\xe3o: valor bruto (no caso, o valor recebido naquele instante), valor m\xednimo de entrada, valor m\xe1ximo de entrada, valor m\xednimo de sa\xedda e valor m\xe1ximo de sa\xedda. E, vamos precisar da fun\xe7\xe3o math.trunc, que eliminar\xe1 as casas decimais. Todas essas informa\xe7\xf5es ficar\xe3o armazenadas na vari\xe1vel mapValue:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"mapValue = math.trunc(simpleio.map_range\n (pinValue, 536, 51355, 0, 65535))\n"})}),"\n",(0,n.jsx)(a.p,{children:"Colocaremos o print apenas para visualizarmos a convers\xe3o:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"print('Valor Original: ', pinValue,\n 'Valor Convertido: ', mapValue)\n return mapValue\n"})}),"\n",(0,n.jsx)(a.p,{children:"E a fun\xe7\xe3o nos retornar\xe1 o valor de mapValue:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"return mapValue\n"})}),"\n",(0,n.jsx)(a.p,{children:"E por fim, o loop. Dentro do while True, vamos associar o valor retornado pela fun\xe7\xe3o converte a vari\xe1vel potValue e mandar esse valor para o led. Para enviarmos um valor para o componente, utilizamos a fun\xe7\xe3o duty_cycle, que \xe9 o ciclo de trabalho, ou seja, quanto tempo o sinal estar\xe1 ligado ou n\xe3o. Tamb\xe9m, colocaremos um delay:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-python",children:"while True:\n potValue = converter(pot)\n led.duty_cycle = potValue\n sleep(0.1)\n"})}),"\n",(0,n.jsx)(a.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,n.jsx)(a.p,{children:"Nesse exemplo, aprendemos a como usar os pinos PWM com CircuitPython e, como control\xe1-los atrav\xe9s de um potenci\xf4metro. Al\xe9m disso, aprendemos a como mapear valores. No pr\xf3ximo exemplo, vamos aprender a como usar Servos Motores.\nOutros artigos da s\xe9rie."}),"\n",(0,n.jsxs)(a.table,{children:[(0,n.jsx)(a.thead,{children:(0,n.jsxs)(a.tr,{children:[(0,n.jsx)(a.th,{children:"Autor"}),(0,n.jsx)(a.th,{children:"Mateus Adriano Ventura Vieira"})]})}),(0,n.jsx)(a.tbody,{children:(0,n.jsxs)(a.tr,{children:[(0,n.jsx)(a.td,{children:"Data:"}),(0,n.jsx)(a.td,{children:"09/05/2022"})]})})]})]})}function d(e={}){const{wrapper:a}={...(0,i.MN)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},95788:(e,a,o)=>{o.d(a,{MN:()=>l});var n=o(11504);function i(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function r(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function t(e){for(var a=1;a=0||(i[o]=e[o]);return i}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var c=n.createContext({}),l=function(e){var a=n.useContext(c),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},p={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},d=n.forwardRef((function(e,a){var o=e.components,i=e.mdxType,r=e.originalType,c=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),m=l(o),u=i,h=m["".concat(c,".").concat(u)]||m[u]||p[u]||r;return o?n.createElement(h,t(t({ref:a},d),{},{components:o})):n.createElement(h,t({ref:a},d))}));d.displayName="MDXCreateElement"},55184:(e,a,o)=>{o.d(a,{c:()=>n});const n=o.p+"assets/images/bundles-58357a122b96bde035495e9835cb75e7.png"},33832:(e,a,o)=>{o.d(a,{c:()=>n});const n=o.p+"assets/images/pwm-eb18c8cc8e0dbfee8a2537d3706ee4c3.png"}}]); \ No newline at end of file diff --git a/en/assets/js/5f9a86e6.6bde7b81.js b/en/assets/js/5f9a86e6.6bde7b81.js deleted file mode 100755 index 88692b272..000000000 --- a/en/assets/js/5f9a86e6.6bde7b81.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3405],{3905:(a,e,t)=>{t.d(e,{Zo:()=>p,kt:()=>h});var n=t(7294);function o(a,e,t){return e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function i(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(a);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable}))),t.push.apply(t,n)}return t}function r(a){for(var e=1;e=0||(o[t]=a[t]);return o}(a,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(a);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(a,t)&&(o[t]=a[t])}return o}var l=n.createContext({}),d=function(a){var e=n.useContext(l),t=e;return a&&(t="function"==typeof a?a(e):r(r({},e),a)),t},p=function(a){var e=d(a.components);return n.createElement(l.Provider,{value:e},a.children)},m="mdxType",c={inlineCode:"code",wrapper:function(a){var e=a.children;return n.createElement(n.Fragment,{},e)}},u=n.forwardRef((function(a,e){var t=a.components,o=a.mdxType,i=a.originalType,l=a.parentName,p=s(a,["components","mdxType","originalType","parentName"]),m=d(t),u=o,h=m["".concat(l,".").concat(u)]||m[u]||c[u]||i;return t?n.createElement(h,r(r({ref:e},p),{},{components:t})):n.createElement(h,r({ref:e},p))}));function h(a,e){var t=arguments,o=e&&e.mdxType;if("string"==typeof a||o){var i=t.length,r=new Array(i);r[0]=u;var s={};for(var l in e)hasOwnProperty.call(e,l)&&(s[l]=e[l]);s.originalType=a,s[m]="string"==typeof a?a:o,r[1]=s;for(var d=2;d{t.r(e),t.d(e,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var n=t(3117),o=(t(7294),t(3905));const i={id:"micropython-entradas-saidas-digitais",title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",slug:"/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",description:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.",author:"Sthefania Fernandes"},r=void 0,s={unversionedId:"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais",id:"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais",title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",description:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.",source:"@site/docs/FranzininhoWifi/exemplos-micropython/entradas-saidas-digitais.md",sourceDirName:"FranzininhoWifi/exemplos-micropython",slug:"/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",permalink:"/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-micropython/entradas-saidas-digitais.md",tags:[],version:"current",frontMatter:{id:"micropython-entradas-saidas-digitais",title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",slug:"/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",description:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.",author:"Sthefania Fernandes"},sidebar:"docs",previous:{title:"Primeiros Passos com MicroPython",permalink:"/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos"},next:{title:"Placa Franzininho WiFi dev Edition",permalink:"/en/docs/franzininho-wifi/franzininho-wifi-dev-edition"}},l={},d=[{value:"Introdu\xe7\xe3o",id:"introdu\xe7\xe3o",level:2},{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"M\xf3dulos do MicroPython",id:"m\xf3dulos-do-micropython",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],p={toc:d},m="wrapper";function c(a){let{components:e,...i}=a;return(0,o.kt)(m,(0,n.Z)({},p,i,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"introdu\xe7\xe3o"},"Introdu\xe7\xe3o"),(0,o.kt)("p",null,"A Franzininho WiFi conta com pinos que podem operar em dois modos: OUTPUT e INPUT. Al\xe9m disso, \xe9 poss\xedvel usar resistores internos nos pinos configurados como Pull-Up ou Pull-Down para os pinos configurados como entradas."),(0,o.kt)("p",null,"Neste artigo, vamos explorar como utilizar o MicroPython para controlar os pinos de I/O."),(0,o.kt)("p",null,"Para isso vamos criar um c\xf3digo para manipular os LEDs e bot\xf5es da placa Franzininho WiFi LAB01, permitindo criar funcionalidades personalizadas e interativas."),(0,o.kt)("h2",{id:"recursos-necess\xe1rios"},"Recursos necess\xe1rios"),(0,o.kt)("p",null,"Para iniciar o trabalho com os GPIOs, \xe9 essencial possuir o diagrama de pinos da placa Franzininho WiFI LAB01 \xe0 disposi\xe7\xe3o, pois isso permitir\xe1 que voc\xea identifique tanto os nomes quanto as fun\xe7\xf5es associadas a cada um deles."),(0,o.kt)("p",null,"Tabela 1 \u2013 Franzininho WiFi LAB01 mapeamento de pinos"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Pino"),(0,o.kt)("th",{parentName:"tr",align:null},"Recurso"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO1"),(0,o.kt)("td",{parentName:"tr",align:null},"LDR")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO2"),(0,o.kt)("td",{parentName:"tr",align:null},"BT6")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO3"),(0,o.kt)("td",{parentName:"tr",align:null},"BT5")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO4"),(0,o.kt)("td",{parentName:"tr",align:null},"BT4")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO5"),(0,o.kt)("td",{parentName:"tr",align:null},"BT3")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO6"),(0,o.kt)("td",{parentName:"tr",align:null},"BT2")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO7"),(0,o.kt)("td",{parentName:"tr",align:null},"BT1")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO8"),(0,o.kt)("td",{parentName:"tr",align:null},"OLED_SDA")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO9"),(0,o.kt)("td",{parentName:"tr",align:null},"OLED_SCL")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO10"),(0,o.kt)("td",{parentName:"tr",align:null},"TFT_DC")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO11"),(0,o.kt)("td",{parentName:"tr",align:null},"TFT_RES")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO12"),(0,o.kt)("td",{parentName:"tr",align:null},"LED AZUL")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO13"),(0,o.kt)("td",{parentName:"tr",align:null},"LED VERDE")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO14"),(0,o.kt)("td",{parentName:"tr",align:null},"LED VERMELHO")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO15"),(0,o.kt)("td",{parentName:"tr",align:null},"DHT11")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO17"),(0,o.kt)("td",{parentName:"tr",align:null},"BUZZER")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO35"),(0,o.kt)("td",{parentName:"tr",align:null},"TFT_SDA")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"IO36"),(0,o.kt)("td",{parentName:"tr",align:null},"TFT_SCL")))),(0,o.kt)("p",null,"Nesta pr\xe1tica iremos utilizar o LED RGB e os bot\xf5es da ",(0,o.kt)("a",{parentName:"p",href:"https://docs.franzininho.com.br/docs/franzininho-wifi-lab01"},"Franzininho WiFi LAB01"),", conforme destacado na Figura abaixo:"),(0,o.kt)("p",null,"Figura 1 \u2013 Resumo dos recursos da placa\n",(0,o.kt)("img",{alt:"entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython",src:t(7939).Z,width:"800",height:"640"})),(0,o.kt)("h3",{id:"m\xf3dulos-do-micropython"},"M\xf3dulos do MicroPython"),(0,o.kt)("p",null,"O ",(0,o.kt)("a",{parentName:"p",href:"https://docs.micropython.org/en/latest/library/machine.html"},"machine")," cont\xe9m fun\xe7\xf5es espec\xedficas relacionadas ao hardware de uma placa em particular. A maioria das fun\xe7\xf5es neste m\xf3dulo permitem obter acesso direto e irrestrito aos blocos de hardware em um sistema, como: pinos, I2C, UART, SPI, ADC."),(0,o.kt)("p",null,"No MicroPython, como no Python, \xe9 poss\xedvel importar apenas parte de uma biblioteca, ao inv\xe9s de importar a biblioteca inteira. Um recurso \xfatil que utilizaremos bastante."),(0,o.kt)("p",null,"A biblioteca ",(0,o.kt)("strong",{parentName:"p"},"\u2018utime\u2019")," \xe9 uma vers\xe3o projetada para microcontroladores da biblioteca \u2018time\u2019. Essa biblioteca \xe9 \xfatil para inserir os atrasos necess\xe1rios em muitos projetos."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Obs"),": se voc\xea esquecer e usar ",(0,o.kt)("inlineCode",{parentName:"p"},"import time")," , n\xe3o se preocupe: o MicroPython usar\xe1 automaticamente a biblioteca ",(0,o.kt)("inlineCode",{parentName:"p"},"utime")," em seu lugar."),(0,o.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,o.kt)("p",null,"Com a Franzininho WiFi conectada ao seu computador, abra o Thonny e crie um novo arquivo contendo o c\xf3digo a seguir:"),(0,o.kt)("p",null,"Para criar o programa que controla o LED RGB, come\xe7amos com a instru\xe7\xe3o ",(0,o.kt)("inlineCode",{parentName:"p"},"from machine import Pin"),". Isso instrui o MicroPython a importar apenas a fun\xe7\xe3o ",(0,o.kt)("inlineCode",{parentName:"p"},"Pin")," da biblioteca ",(0,o.kt)("inlineCode",{parentName:"p"},"machine"),", em vez de importar a biblioteca inteira. Dessa forma, teremos acesso apenas \xe0 funcionalidade necess\xe1ria para controlar os pinos da placa."),(0,o.kt)("p",null,"\xc9 importante enfatizar que o Micropython \xe9 case-sensitive, isso significa que se voc\xea digitar ",(0,o.kt)("inlineCode",{parentName:"p"},"pin")," a biblioteca n\xe3o ser\xe1 reconhecida, ent\xe3o se atente no uso das letras mai\xfasculas e min\xfasculas."),(0,o.kt)("p",null,"Em seguida, vamos nomear os LEDs e associ\xe1-los aos pinos da placa como sa\xedda (",(0,o.kt)("inlineCode",{parentName:"p"},"Pin.OUT"),"). Consultando a tabela de pinos da Franzininho WiFi LAB01, identificamos que o pino 12 \xe9 respons\xe1vel pela cor azul do LED RGB, o pino 13 pela cor verde e o pino 14 pela cor vermelha. Com isso fazemos a atribui\xe7\xe3o setando todos os pinos como sa\xedda."),(0,o.kt)("p",null,"De forma semelhante, realizamos o mesmo procedimento com os bot\xf5es. Ao consultar a tabela de pinos, identificamos que o pino 7 corresponde ao bot\xe3o 1, o pino 6 ao bot\xe3o 2 e o pino 5 ao bot\xe3o 3. \xc9 importante lembrar que esses dispositivos operam com a configura\xe7\xe3o pull-up, e essa informa\xe7\xe3o deve ser inclu\xedda no programa."),(0,o.kt)("p",null,"Por \xfaltimo, o loop principal monitora constantemente o estado dos bot\xf5es para determinar se o LED deve ser ligado. H\xe1 uma pequena pausa de 100 milissegundos entre cada atualiza\xe7\xe3o do LED em resposta ao estado dos bot\xf5es. Esses atrasos s\xe3o usados para evitar que a leitura dos bot\xf5es e as altera\xe7\xf5es nos LEDs aconte\xe7am muito rapidamente e possam ser dif\xedceis de perceber."),(0,o.kt)("p",null,"Se voc\xea n\xe3o possui a Franzininho WiFi LAB01 para testar o projeto, \xe9 poss\xedvel testar o programa utilizando a montagem do circuito em uma protoboard."),(0,o.kt)("p",null,"Pressione as teclas e verifique que os leds acender\xe3o conforme a tecla pressionada:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Funcionamento",src:t(1649).Z,width:"510",height:"306"})),(0,o.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,o.kt)("p",null,"Neste artigo, explicamos o funcionamento b\xe1sico dos pinos de I/O da Franzininho WiFi usando a placa de aplica\xe7\xe3o Franzininho WiFi LAB01. Exploramos as bibliotecas e fun\xe7\xf5es essenciais que nos permitem configurar esses pinos e acessar seus estados l\xf3gicos."),(0,o.kt)("p",null,"Encorajamos que continue desenvolvendo suas habilidades de programa\xe7\xe3o e eletr\xf4nica, adaptando o c\xf3digo e criando projetos mais complexos. Isso permitir\xe1 explorar todo o potencial da Franzininho WiFi LAB01 com o MicroPython."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Autor"),(0,o.kt)("th",{parentName:"tr",align:null},"Sthefania Fernandes"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Data:"),(0,o.kt)("td",{parentName:"tr",align:null},"17/11/2023")))))}c.isMDXComponent=!0},7939:(a,e,t)=>{t.d(e,{Z:()=>n});const n=t.p+"assets/images/1-a73b02e1e67137518f241488c8367938.png"},1649:(a,e,t)=>{t.d(e,{Z:()=>n});const n=t.p+"assets/images/2-7c035b6c259779caa74c5edd5e4d9c96.gif"}}]); \ No newline at end of file diff --git a/en/assets/js/5f9a86e6.83c71a86.js b/en/assets/js/5f9a86e6.83c71a86.js new file mode 100755 index 000000000..df9dc9a0c --- /dev/null +++ b/en/assets/js/5f9a86e6.83c71a86.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6280],{51032:(e,i,o)=>{o.r(i),o.d(i,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var s=o(17624),n=o(95788);const r={id:"micropython-entradas-saidas-digitais",title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",slug:"/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",description:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.",author:"Sthefania Fernandes"},a=void 0,t={id:"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais",title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",description:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.",source:"@site/docs/FranzininhoWifi/exemplos-micropython/entradas-saidas-digitais.md",sourceDirName:"FranzininhoWifi/exemplos-micropython",slug:"/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",permalink:"/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-micropython/entradas-saidas-digitais.md",tags:[],version:"current",frontMatter:{id:"micropython-entradas-saidas-digitais",title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",slug:"/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",description:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.",author:"Sthefania Fernandes"},sidebar:"docs",previous:{title:"Primeiros Passos com MicroPython",permalink:"/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos"},next:{title:"Placa Franzininho WiFi dev Edition",permalink:"/en/docs/franzininho-wifi/franzininho-wifi-dev-edition"}},d={},c=[{value:"Introdu\xe7\xe3o",id:"introdu\xe7\xe3o",level:2},{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"M\xf3dulos do MicroPython",id:"m\xf3dulos-do-micropython",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function l(e){const i={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.MN)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h2,{id:"introdu\xe7\xe3o",children:"Introdu\xe7\xe3o"}),"\n",(0,s.jsx)(i.p,{children:"A Franzininho WiFi conta com pinos que podem operar em dois modos: OUTPUT e INPUT. Al\xe9m disso, \xe9 poss\xedvel usar resistores internos nos pinos configurados como Pull-Up ou Pull-Down para os pinos configurados como entradas."}),"\n",(0,s.jsx)(i.p,{children:"Neste artigo, vamos explorar como utilizar o MicroPython para controlar os pinos de I/O."}),"\n",(0,s.jsx)(i.p,{children:"Para isso vamos criar um c\xf3digo para manipular os LEDs e bot\xf5es da placa Franzininho WiFi LAB01, permitindo criar funcionalidades personalizadas e interativas."}),"\n",(0,s.jsx)(i.h2,{id:"recursos-necess\xe1rios",children:"Recursos necess\xe1rios"}),"\n",(0,s.jsx)(i.p,{children:"Para iniciar o trabalho com os GPIOs, \xe9 essencial possuir o diagrama de pinos da placa Franzininho WiFI LAB01 \xe0 disposi\xe7\xe3o, pois isso permitir\xe1 que voc\xea identifique tanto os nomes quanto as fun\xe7\xf5es associadas a cada um deles."}),"\n",(0,s.jsx)(i.p,{children:"Tabela 1 \u2013 Franzininho WiFi LAB01 mapeamento de pinos"}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Pino"}),(0,s.jsx)(i.th,{children:"Recurso"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO1"}),(0,s.jsx)(i.td,{children:"LDR"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO2"}),(0,s.jsx)(i.td,{children:"BT6"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO3"}),(0,s.jsx)(i.td,{children:"BT5"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO4"}),(0,s.jsx)(i.td,{children:"BT4"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO5"}),(0,s.jsx)(i.td,{children:"BT3"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO6"}),(0,s.jsx)(i.td,{children:"BT2"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO7"}),(0,s.jsx)(i.td,{children:"BT1"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO8"}),(0,s.jsx)(i.td,{children:"OLED_SDA"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO9"}),(0,s.jsx)(i.td,{children:"OLED_SCL"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO10"}),(0,s.jsx)(i.td,{children:"TFT_DC"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO11"}),(0,s.jsx)(i.td,{children:"TFT_RES"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO12"}),(0,s.jsx)(i.td,{children:"LED AZUL"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO13"}),(0,s.jsx)(i.td,{children:"LED VERDE"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO14"}),(0,s.jsx)(i.td,{children:"LED VERMELHO"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO15"}),(0,s.jsx)(i.td,{children:"DHT11"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO17"}),(0,s.jsx)(i.td,{children:"BUZZER"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO35"}),(0,s.jsx)(i.td,{children:"TFT_SDA"})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"IO36"}),(0,s.jsx)(i.td,{children:"TFT_SCL"})]})]})]}),"\n",(0,s.jsxs)(i.p,{children:["Nesta pr\xe1tica iremos utilizar o LED RGB e os bot\xf5es da ",(0,s.jsx)(i.a,{href:"https://docs.franzininho.com.br/docs/franzininho-wifi-lab01",children:"Franzininho WiFi LAB01"}),", conforme destacado na Figura abaixo:"]}),"\n",(0,s.jsxs)(i.p,{children:["Figura 1 \u2013 Resumo dos recursos da placa\n",(0,s.jsx)(i.img,{alt:"entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython",src:o(1521).c+"",width:"800",height:"640"})]}),"\n",(0,s.jsx)(i.h3,{id:"m\xf3dulos-do-micropython",children:"M\xf3dulos do MicroPython"}),"\n",(0,s.jsxs)(i.p,{children:["O ",(0,s.jsx)(i.a,{href:"https://docs.micropython.org/en/latest/library/machine.html",children:"machine"})," cont\xe9m fun\xe7\xf5es espec\xedficas relacionadas ao hardware de uma placa em particular. A maioria das fun\xe7\xf5es neste m\xf3dulo permitem obter acesso direto e irrestrito aos blocos de hardware em um sistema, como: pinos, I2C, UART, SPI, ADC."]}),"\n",(0,s.jsx)(i.p,{children:"No MicroPython, como no Python, \xe9 poss\xedvel importar apenas parte de uma biblioteca, ao inv\xe9s de importar a biblioteca inteira. Um recurso \xfatil que utilizaremos bastante."}),"\n",(0,s.jsxs)(i.p,{children:["A biblioteca ",(0,s.jsx)(i.strong,{children:"\u2018utime\u2019"})," \xe9 uma vers\xe3o projetada para microcontroladores da biblioteca \u2018time\u2019. Essa biblioteca \xe9 \xfatil para inserir os atrasos necess\xe1rios em muitos projetos."]}),"\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.strong,{children:"Obs"}),": se voc\xea esquecer e usar ",(0,s.jsx)(i.code,{children:"import time"})," , n\xe3o se preocupe: o MicroPython usar\xe1 automaticamente a biblioteca ",(0,s.jsx)(i.code,{children:"utime"})," em seu lugar."]}),"\n",(0,s.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,s.jsx)(i.p,{children:"Com a Franzininho WiFi conectada ao seu computador, abra o Thonny e crie um novo arquivo contendo o c\xf3digo a seguir:"}),"\n",(0,s.jsxs)(i.p,{children:["Para criar o programa que controla o LED RGB, come\xe7amos com a instru\xe7\xe3o ",(0,s.jsx)(i.code,{children:"from machine import Pin"}),". Isso instrui o MicroPython a importar apenas a fun\xe7\xe3o ",(0,s.jsx)(i.code,{children:"Pin"})," da biblioteca ",(0,s.jsx)(i.code,{children:"machine"}),", em vez de importar a biblioteca inteira. Dessa forma, teremos acesso apenas \xe0 funcionalidade necess\xe1ria para controlar os pinos da placa."]}),"\n",(0,s.jsxs)(i.p,{children:["\xc9 importante enfatizar que o Micropython \xe9 case-sensitive, isso significa que se voc\xea digitar ",(0,s.jsx)(i.code,{children:"pin"})," a biblioteca n\xe3o ser\xe1 reconhecida, ent\xe3o se atente no uso das letras mai\xfasculas e min\xfasculas."]}),"\n",(0,s.jsxs)(i.p,{children:["Em seguida, vamos nomear os LEDs e associ\xe1-los aos pinos da placa como sa\xedda (",(0,s.jsx)(i.code,{children:"Pin.OUT"}),"). Consultando a tabela de pinos da Franzininho WiFi LAB01, identificamos que o pino 12 \xe9 respons\xe1vel pela cor azul do LED RGB, o pino 13 pela cor verde e o pino 14 pela cor vermelha. Com isso fazemos a atribui\xe7\xe3o setando todos os pinos como sa\xedda."]}),"\n",(0,s.jsx)(i.p,{children:"De forma semelhante, realizamos o mesmo procedimento com os bot\xf5es. Ao consultar a tabela de pinos, identificamos que o pino 7 corresponde ao bot\xe3o 1, o pino 6 ao bot\xe3o 2 e o pino 5 ao bot\xe3o 3. \xc9 importante lembrar que esses dispositivos operam com a configura\xe7\xe3o pull-up, e essa informa\xe7\xe3o deve ser inclu\xedda no programa."}),"\n",(0,s.jsx)(i.p,{children:"Por \xfaltimo, o loop principal monitora constantemente o estado dos bot\xf5es para determinar se o LED deve ser ligado. H\xe1 uma pequena pausa de 100 milissegundos entre cada atualiza\xe7\xe3o do LED em resposta ao estado dos bot\xf5es. Esses atrasos s\xe3o usados para evitar que a leitura dos bot\xf5es e as altera\xe7\xf5es nos LEDs aconte\xe7am muito rapidamente e possam ser dif\xedceis de perceber."}),"\n",(0,s.jsx)(i.p,{children:"Se voc\xea n\xe3o possui a Franzininho WiFi LAB01 para testar o projeto, \xe9 poss\xedvel testar o programa utilizando a montagem do circuito em uma protoboard."}),"\n",(0,s.jsx)(i.p,{children:"Pressione as teclas e verifique que os leds acender\xe3o conforme a tecla pressionada:"}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Funcionamento",src:o(77792).c+"",width:"510",height:"306"})}),"\n",(0,s.jsx)(i.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,s.jsx)(i.p,{children:"Neste artigo, explicamos o funcionamento b\xe1sico dos pinos de I/O da Franzininho WiFi usando a placa de aplica\xe7\xe3o Franzininho WiFi LAB01. Exploramos as bibliotecas e fun\xe7\xf5es essenciais que nos permitem configurar esses pinos e acessar seus estados l\xf3gicos."}),"\n",(0,s.jsx)(i.p,{children:"Encorajamos que continue desenvolvendo suas habilidades de programa\xe7\xe3o e eletr\xf4nica, adaptando o c\xf3digo e criando projetos mais complexos. Isso permitir\xe1 explorar todo o potencial da Franzininho WiFi LAB01 com o MicroPython."}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Autor"}),(0,s.jsx)(i.th,{children:"Sthefania Fernandes"})]})}),(0,s.jsx)(i.tbody,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Data:"}),(0,s.jsx)(i.td,{children:"17/11/2023"})]})})]})]})}function h(e={}){const{wrapper:i}={...(0,n.MN)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},95788:(e,i,o)=>{o.d(i,{MN:()=>c});var s=o(11504);function n(e,i,o){return i in e?Object.defineProperty(e,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[i]=o,e}function r(e,i){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);i&&(s=s.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),o.push.apply(o,s)}return o}function a(e){for(var i=1;i=0||(n[o]=e[o]);return n}(e,i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var d=s.createContext({}),c=function(e){var i=s.useContext(d),o=i;return e&&(o="function"==typeof e?e(i):a(a({},i),e)),o},l={inlineCode:"code",wrapper:function(e){var i=e.children;return s.createElement(s.Fragment,{},i)}},h=s.forwardRef((function(e,i){var o=e.components,n=e.mdxType,r=e.originalType,d=e.parentName,h=t(e,["components","mdxType","originalType","parentName"]),p=c(o),m=n,u=p["".concat(d,".").concat(m)]||p[m]||l[m]||r;return o?s.createElement(u,a(a({ref:i},h),{},{components:o})):s.createElement(u,a({ref:i},h))}));h.displayName="MDXCreateElement"},1521:(e,i,o)=>{o.d(i,{c:()=>s});const s=o.p+"assets/images/1-a73b02e1e67137518f241488c8367938.png"},77792:(e,i,o)=>{o.d(i,{c:()=>s});const s=o.p+"assets/images/2-7c035b6c259779caa74c5edd5e4d9c96.gif"}}]); \ No newline at end of file diff --git a/en/assets/js/6048.6ee355ae.js b/en/assets/js/6048.6ee355ae.js deleted file mode 100755 index 80d64a863..000000000 --- a/en/assets/js/6048.6ee355ae.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6048],{9058:(e,t,a)=>{a.d(t,{Z:()=>h});var l=a(7294),r=a(4334),n=a(7961),o=a(7524),s=a(9960),i=a(5999);const m={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};function c(e){let{sidebar:t}=e;return l.createElement("aside",{className:"col col--3"},l.createElement("nav",{className:(0,r.Z)(m.sidebar,"thin-scrollbar"),"aria-label":(0,i.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},l.createElement("div",{className:(0,r.Z)(m.sidebarItemTitle,"margin-bottom--md")},t.title),l.createElement("ul",{className:(0,r.Z)(m.sidebarItemList,"clean-list")},t.items.map((e=>l.createElement("li",{key:e.permalink,className:m.sidebarItem},l.createElement(s.Z,{isNavLink:!0,to:e.permalink,className:m.sidebarItemLink,activeClassName:m.sidebarItemLinkActive},e.title)))))))}var u=a(3102);function d(e){let{sidebar:t}=e;return l.createElement("ul",{className:"menu__list"},t.items.map((e=>l.createElement("li",{key:e.permalink,className:"menu__list-item"},l.createElement(s.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title)))))}function g(e){return l.createElement(u.Zo,{component:d,props:e})}function p(e){let{sidebar:t}=e;const a=(0,o.i)();return t?.items.length?"mobile"===a?l.createElement(g,{sidebar:t}):l.createElement(c,{sidebar:t}):null}function h(e){const{sidebar:t,toc:a,children:o,...s}=e,i=t&&t.items.length>0;return l.createElement(n.Z,s,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement(p,{sidebar:t}),l.createElement("main",{className:(0,r.Z)("col",{"col--7":i,"col--9 col--offset-1":!i}),itemScope:!0,itemType:"http://schema.org/Blog"},o),a&&l.createElement("div",{className:"col col--2"},a))))}},390:(e,t,a)=>{a.d(t,{Z:()=>A});var l=a(7294),r=a(4334),n=a(9460),o=a(4996);function s(e){let{children:t,className:a}=e;const{frontMatter:r,assets:s,metadata:{description:i}}=(0,n.C)(),{withBaseUrl:m}=(0,o.C)(),c=s.image??r.image,u=r.keywords??[];return l.createElement("article",{className:a,itemProp:"blogPost",itemScope:!0,itemType:"http://schema.org/BlogPosting"},i&&l.createElement("meta",{itemProp:"description",content:i}),c&&l.createElement("link",{itemProp:"image",href:m(c,{absolute:!0})}),u.length>0&&l.createElement("meta",{itemProp:"keywords",content:u.join(",")}),t)}var i=a(9960);const m={title:"title_f1Hy"};function c(e){let{className:t}=e;const{metadata:a,isBlogPostPage:o}=(0,n.C)(),{permalink:s,title:c}=a,u=o?"h1":"h2";return l.createElement(u,{className:(0,r.Z)(m.title,t),itemProp:"headline"},o?c:l.createElement(i.Z,{itemProp:"url",to:s},c))}var u=a(5999),d=a(8824);const g={container:"container_mt6G"};function p(e){let{readingTime:t}=e;const a=function(){const{selectMessage:e}=(0,d.c)();return t=>{const a=Math.ceil(t);return e(a,(0,u.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:a}))}}();return l.createElement(l.Fragment,null,a(t))}function h(e){let{date:t,formattedDate:a}=e;return l.createElement("time",{dateTime:t,itemProp:"datePublished"},a)}function E(){return l.createElement(l.Fragment,null," \xb7 ")}function b(e){let{className:t}=e;const{metadata:a}=(0,n.C)(),{date:o,formattedDate:s,readingTime:i}=a;return l.createElement("div",{className:(0,r.Z)(g.container,"margin-vert--md",t)},l.createElement(h,{date:o,formattedDate:s}),void 0!==i&&l.createElement(l.Fragment,null,l.createElement(E,null),l.createElement(p,{readingTime:i})))}function f(e){return e.href?l.createElement(i.Z,e):l.createElement(l.Fragment,null,e.children)}function v(e){let{author:t,className:a}=e;const{name:n,title:o,url:s,imageURL:i,email:m}=t,c=s||m&&`mailto:${m}`||void 0;return l.createElement("div",{className:(0,r.Z)("avatar margin-bottom--sm",a)},i&&l.createElement(f,{href:c,className:"avatar__photo-link"},l.createElement("img",{className:"avatar__photo",src:i,alt:n,itemProp:"image"})),n&&l.createElement("div",{className:"avatar__intro",itemProp:"author",itemScope:!0,itemType:"https://schema.org/Person"},l.createElement("div",{className:"avatar__name"},l.createElement(f,{href:c,itemProp:"url"},l.createElement("span",{itemProp:"name"},n))),o&&l.createElement("small",{className:"avatar__subtitle",itemProp:"description"},o)))}const P={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function N(e){let{className:t}=e;const{metadata:{authors:a},assets:o}=(0,n.C)();if(0===a.length)return null;const s=a.every((e=>{let{name:t}=e;return!t}));return l.createElement("div",{className:(0,r.Z)("margin-top--md margin-bottom--sm",s?P.imageOnlyAuthorRow:"row",t)},a.map(((e,t)=>l.createElement("div",{className:(0,r.Z)(!s&&"col col--6",s?P.imageOnlyAuthorCol:P.authorCol),key:t},l.createElement(v,{author:{...e,imageURL:o.authorsImageUrls[t]??e.imageURL}})))))}function _(){return l.createElement("header",null,l.createElement(c,null),l.createElement(b,null),l.createElement(N,null))}var k=a(8780),Z=a(1506);function I(e){let{children:t,className:a}=e;const{isBlogPostPage:o}=(0,n.C)();return l.createElement("div",{id:o?k.blogPostContainerID:void 0,className:(0,r.Z)("markdown",a),itemProp:"articleBody"},l.createElement(Z.Z,null,t))}var C=a(4881),w=a(1526),y=a(3117);function F(){return l.createElement("b",null,l.createElement(u.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts"},"Read More"))}function T(e){const{blogPostTitle:t,...a}=e;return l.createElement(i.Z,(0,y.Z)({"aria-label":(0,u.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t})},a),l.createElement(F,null))}const L={blogPostFooterDetailsFull:"blogPostFooterDetailsFull_mRVl"};function B(){const{metadata:e,isBlogPostPage:t}=(0,n.C)(),{tags:a,title:o,editUrl:s,hasTruncateMarker:i}=e,m=!t&&i,c=a.length>0;return c||m||s?l.createElement("footer",{className:(0,r.Z)("row docusaurus-mt-lg",t&&L.blogPostFooterDetailsFull)},c&&l.createElement("div",{className:(0,r.Z)("col",{"col--9":m})},l.createElement(w.Z,{tags:a})),t&&s&&l.createElement("div",{className:"col margin-top--sm"},l.createElement(C.Z,{editUrl:s})),m&&l.createElement("div",{className:(0,r.Z)("col text--right",{"col--3":c})},l.createElement(T,{blogPostTitle:o,to:e.permalink}))):null}function A(e){let{children:t,className:a}=e;const o=function(){const{isBlogPostPage:e}=(0,n.C)();return e?void 0:"margin-bottom--xl"}();return l.createElement(s,{className:(0,r.Z)(o,a)},l.createElement(_,null),l.createElement(I,null,t),l.createElement(B,null))}},9460:(e,t,a)=>{a.d(t,{C:()=>s,n:()=>o});var l=a(7294),r=a(902);const n=l.createContext(null);function o(e){let{children:t,content:a,isBlogPostPage:r=!1}=e;const o=function(e){let{content:t,isBlogPostPage:a}=e;return(0,l.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:a})),[t,a])}({content:a,isBlogPostPage:r});return l.createElement(n.Provider,{value:o},t)}function s(){const e=(0,l.useContext)(n);if(null===e)throw new r.i6("BlogPostProvider");return e}},8824:(e,t,a)=>{a.d(t,{c:()=>m});var l=a(7294),r=a(2263);const n=["zero","one","two","few","many","other"];function o(e){return n.filter((t=>e.includes(t)))}const s={locale:"en",pluralForms:o(["one","other"]),select:e=>1===e?"one":"other"};function i(){const{i18n:{currentLocale:e}}=(0,r.Z)();return(0,l.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:o(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),s}}),[e])}function m(){const e=i();return{selectMessage:(t,a)=>function(e,t,a){const l=e.split("|");if(1===l.length)return l[0];l.length>a.pluralForms.length&&console.error(`For locale=${a.locale}, a maximum of ${a.pluralForms.length} plural forms are expected (${a.pluralForms.join(",")}), but the message contains ${l.length}: ${e}`);const r=a.select(t),n=a.pluralForms.indexOf(r);return l[Math.min(n,l.length-1)]}(a,t,e)}}}}]); \ No newline at end of file diff --git a/en/assets/js/62ad6a78.25478d60.js b/en/assets/js/62ad6a78.25478d60.js new file mode 100755 index 000000000..21c6c8c92 --- /dev/null +++ b/en/assets/js/62ad6a78.25478d60.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3800],{77744:a=>{a.exports=JSON.parse('{"label":"facebook","permalink":"/en/blog/tags/facebook","allTagsPath":"/en/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/en/assets/js/62ad6a78.97cf9748.js b/en/assets/js/62ad6a78.97cf9748.js deleted file mode 100755 index 3398b0d73..000000000 --- a/en/assets/js/62ad6a78.97cf9748.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8434],{7088:a=>{a.exports=JSON.parse('{"label":"facebook","permalink":"/en/blog/tags/facebook","allTagsPath":"/en/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/en/assets/js/66e66c27.2254b746.js b/en/assets/js/66e66c27.2254b746.js new file mode 100755 index 000000000..78c71f4a4 --- /dev/null +++ b/en/assets/js/66e66c27.2254b746.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1676],{66016:(i,o,e)=>{e.r(o),e.d(o,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>t,toc:()=>l});var n=e(17624),r=e(95788);const s={id:"franzininho-wifi-wokwi-intro",title:"Como simular a Franzininho WiFi no Wokwi",slug:"/franzininho-wifi/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi"},a=void 0,t={id:"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro",title:"Como simular a Franzininho WiFi no Wokwi",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi",source:"@site/docs/FranzininhoWifi/wokwi/franzininho-wifi-wokwi.md",sourceDirName:"FranzininhoWifi/wokwi",slug:"/franzininho-wifi/wokwi/primeiros-passos",permalink:"/en/docs/franzininho-wifi/wokwi/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/wokwi/franzininho-wifi-wokwi.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-wokwi-intro",title:"Como simular a Franzininho WiFi no Wokwi",slug:"/franzininho-wifi/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi"},sidebar:"docs",previous:{title:"Placa Franzininho WiFi",permalink:"/en/docs/franzininho-wifi/franzininho-wifi"},next:{title:"Primeiros Passos com ESP-IDF",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos"}},c={},l=[{value:"Saiba mais",id:"saiba-mais",level:2},{value:"Exemplos no simulador",id:"exemplos-no-simulador",level:2}];function d(i){const o={a:"a",admonition:"admonition",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,r.MN)(),...i.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.p,{children:"Wokwi \xe9 um simulador de eletr\xf4nica online. Voc\xea pode us\xe1-lo para simular Arduino, ESP32 e muitas outras placas, componentes e sensores populares. Foi desenvolvido para makers, por makers."}),"\n",(0,n.jsx)(o.p,{children:"Voc\xea pode usar o Wokwi para aprender a programar o Franzininho WiFi, criar prot\xf3tipos de suas id\xe9ias, e compartilhar seus projetos com outros makers."}),"\n",(0,n.jsx)("div",{style:{textAlign:"center"},children:(0,n.jsx)(o.p,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/new/franzininho-wifi",children:(0,n.jsx)(o.img,{alt:"Wokwi Franzininho WiFi",src:e(48472).c+"",width:"243",height:"96"})})})}),"\n",(0,n.jsx)(o.admonition,{title:"Dica",type:"tip",children:(0,n.jsx)(o.p,{children:"Use o Template do Franzininho wifi clicando na imagem acima para come\xe7ar um novo projeto no Wokwi."})}),"\n",(0,n.jsx)(o.h2,{id:"saiba-mais",children:"Saiba mais"}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/parts/board-franzininho-wifi",children:"Documenta\xe7\xe3o da Franzininho WiFi no WokWi"})}),"\n",(0,n.jsxs)(o.p,{children:["Caso queira saber mais sobre outras funcionalidades do simulador, d\xea uma olhada na lista abaixo. Voc\xea pode tamb\xe9m consultar as pe\xe7as na lista de ",(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/",children:"Refer\xeancia do Diagrama"}),", dispon\xedvel na documenta\xe7\xe3o do Wokwi."]}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/diagram-format",children:"Formato do diagram.json"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/keyboard-shortcuts",children:"Teclas de Atalho do Editor"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/serial-monitor",children:"O Monitor Serial"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/gdb-debugging",children:"Usando o GDB no Wokwi"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/logic-analyzer",children:"Guia do Analisador L\xf3gico"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/libraries",children:"Trabalhando com Bibliotecas"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/esp32",children:"Simulador ESP32"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/esp32-wifi",children:"Rede WiFi ESP32"})}),"\n"]}),"\n",(0,n.jsx)(o.h2,{id:"exemplos-no-simulador",children:"Exemplos no simulador"}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/323796775459619410",children:"Rel\xf3gio LCD com cliente (NTP)"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/327061759288410708",children:"Controle de servo motor"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/324682033130373716",children:"Misturador de LED RGB (usando 3 potenci\xf4metros)"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/313606939786347074",children:"Blink com CircuitPython"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/329013233501340242",children:"Display TFT ILI9341"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/323796775459619410",children:"Rel\xf3gico com Display LCD 16 x 2"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/324615433106752083",children:"Entrada anal\xf3gica e saida PWM com ESP-IDF"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/324613550740865619",children:"FreeRTOS Tasks"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/329133882849886804",children:"PWM ESP-IDF"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/322524997423727188",children:"MQTT"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.a,{href:"https://wokwi.com/projects/323043284024820308",children:"NTP"})}),"\n"]})]})}function h(i={}){const{wrapper:o}={...(0,r.MN)(),...i.components};return o?(0,n.jsx)(o,{...i,children:(0,n.jsx)(d,{...i})}):d(i)}},95788:(i,o,e)=>{e.d(o,{MN:()=>l});var n=e(11504);function r(i,o,e){return o in i?Object.defineProperty(i,o,{value:e,enumerable:!0,configurable:!0,writable:!0}):i[o]=e,i}function s(i,o){var e=Object.keys(i);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(i);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(i,o).enumerable}))),e.push.apply(e,n)}return e}function a(i){for(var o=1;o=0||(r[e]=i[e]);return r}(i,o);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(i);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(i,e)&&(r[e]=i[e])}return r}var c=n.createContext({}),l=function(i){var o=n.useContext(c),e=o;return i&&(e="function"==typeof i?i(o):a(a({},o),i)),e},d={inlineCode:"code",wrapper:function(i){var o=i.children;return n.createElement(n.Fragment,{},o)}},h=n.forwardRef((function(i,o){var e=i.components,r=i.mdxType,s=i.originalType,c=i.parentName,h=t(i,["components","mdxType","originalType","parentName"]),p=l(e),m=r,w=p["".concat(c,".").concat(m)]||p[m]||d[m]||s;return e?n.createElement(w,a(a({ref:o},h),{},{components:e})):n.createElement(w,a({ref:o},h))}));h.displayName="MDXCreateElement"},48472:(i,o,e)=>{e.d(o,{c:()=>n});const n=e.p+"assets/images/franzininho-wifi-board-b801f9fce63884679d7c579b276a16ab.svg"}}]); \ No newline at end of file diff --git a/en/assets/js/66e66c27.dc789238.js b/en/assets/js/66e66c27.dc789238.js deleted file mode 100755 index 41ff140e2..000000000 --- a/en/assets/js/66e66c27.dc789238.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7932],{3905:(i,e,o)=>{o.d(e,{Zo:()=>m,kt:()=>k});var t=o(7294);function a(i,e,o){return e in i?Object.defineProperty(i,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):i[e]=o,i}function r(i,e){var o=Object.keys(i);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(i);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable}))),o.push.apply(o,t)}return o}function n(i){for(var e=1;e=0||(a[o]=i[o]);return a}(i,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(i,o)&&(a[o]=i[o])}return a}var p=t.createContext({}),l=function(i){var e=t.useContext(p),o=e;return i&&(o="function"==typeof i?i(e):n(n({},e),i)),o},m=function(i){var e=l(i.components);return t.createElement(p.Provider,{value:e},i.children)},c="mdxType",u={inlineCode:"code",wrapper:function(i){var e=i.children;return t.createElement(t.Fragment,{},e)}},d=t.forwardRef((function(i,e){var o=i.components,a=i.mdxType,r=i.originalType,p=i.parentName,m=s(i,["components","mdxType","originalType","parentName"]),c=l(o),d=a,k=c["".concat(p,".").concat(d)]||c[d]||u[d]||r;return o?t.createElement(k,n(n({ref:e},m),{},{components:o})):t.createElement(k,n({ref:e},m))}));function k(i,e){var o=arguments,a=e&&e.mdxType;if("string"==typeof i||a){var r=o.length,n=new Array(r);n[0]=d;var s={};for(var p in e)hasOwnProperty.call(e,p)&&(s[p]=e[p]);s.originalType=i,s[c]="string"==typeof i?i:a,n[1]=s;for(var l=2;l{o.r(e),o.d(e,{assets:()=>p,contentTitle:()=>n,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var t=o(3117),a=(o(7294),o(3905));const r={id:"franzininho-wifi-wokwi-intro",title:"Como simular a Franzininho WiFi no Wokwi",slug:"/franzininho-wifi/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi"},n=void 0,s={unversionedId:"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro",id:"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro",title:"Como simular a Franzininho WiFi no Wokwi",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi",source:"@site/docs/FranzininhoWifi/wokwi/franzininho-wifi-wokwi.md",sourceDirName:"FranzininhoWifi/wokwi",slug:"/franzininho-wifi/wokwi/primeiros-passos",permalink:"/en/docs/franzininho-wifi/wokwi/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/wokwi/franzininho-wifi-wokwi.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-wokwi-intro",title:"Como simular a Franzininho WiFi no Wokwi",slug:"/franzininho-wifi/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi"},sidebar:"docs",previous:{title:"Placa Franzininho WiFi",permalink:"/en/docs/franzininho-wifi/franzininho-wifi"},next:{title:"Primeiros Passos com ESP-IDF",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos"}},p={},l=[{value:"Saiba mais",id:"saiba-mais",level:2},{value:"Exemplos no simulador",id:"exemplos-no-simulador",level:2}],m={toc:l},c="wrapper";function u(i){let{components:e,...r}=i;return(0,a.kt)(c,(0,t.Z)({},m,r,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Wokwi \xe9 um simulador de eletr\xf4nica online. Voc\xea pode us\xe1-lo para simular Arduino, ESP32 e muitas outras placas, componentes e sensores populares. Foi desenvolvido para makers, por makers."),(0,a.kt)("p",null,"Voc\xea pode usar o Wokwi para aprender a programar o Franzininho WiFi, criar prot\xf3tipos de suas id\xe9ias, e compartilhar seus projetos com outros makers."),(0,a.kt)("div",{style:{textAlign:"center"}},(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://wokwi.com/projects/new/franzininho-wifi"},(0,a.kt)("img",{alt:"Wokwi Franzininho WiFi",src:o(7560).Z,width:"243",height:"96"})))),(0,a.kt)("admonition",{title:"Dica",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"Use o Template do Franzininho wifi clicando na imagem acima para come\xe7ar um novo projeto no Wokwi.")),(0,a.kt)("h2",{id:"saiba-mais"},"Saiba mais"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://docs.wokwi.com/pt-BR/parts/board-franzininho-wifi"},"Documenta\xe7\xe3o da Franzininho WiFi no WokWi")),(0,a.kt)("p",null,"Caso queira saber mais sobre outras funcionalidades do simulador, d\xea uma olhada na lista abaixo. Voc\xea pode tamb\xe9m consultar as pe\xe7as na lista de ",(0,a.kt)("a",{parentName:"p",href:"https://docs.wokwi.com/pt-BR/"},"Refer\xeancia do Diagrama"),", dispon\xedvel na documenta\xe7\xe3o do Wokwi."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/diagram-format"},"Formato do diagram.json")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/keyboard-shortcuts"},"Teclas de Atalho do Editor")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/serial-monitor"},"O Monitor Serial")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/gdb-debugging"},"Usando o GDB no Wokwi")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/logic-analyzer"},"Guia do Analisador L\xf3gico")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/libraries"},"Trabalhando com Bibliotecas")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/esp32"},"Simulador ESP32")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/esp32-wifi"},"Rede WiFi ESP32"))),(0,a.kt)("h2",{id:"exemplos-no-simulador"},"Exemplos no simulador"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/323796775459619410"},"Rel\xf3gio LCD com cliente (NTP)")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/327061759288410708"},"Controle de servo motor")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/324682033130373716"},"Misturador de LED RGB (usando 3 potenci\xf4metros)")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/313606939786347074"},"Blink com CircuitPython")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/329013233501340242"},"Display TFT ILI9341")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/323796775459619410"},"Rel\xf3gico com Display LCD 16 x 2")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/324615433106752083"},"Entrada anal\xf3gica e saida PWM com ESP-IDF")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/324613550740865619"},"FreeRTOS Tasks")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/329133882849886804"},"PWM ESP-IDF")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/322524997423727188"},"MQTT")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://wokwi.com/projects/323043284024820308"},"NTP"))))}u.isMDXComponent=!0},7560:(i,e,o)=>{o.d(e,{Z:()=>t});const t=o.p+"assets/images/franzininho-wifi-board-b801f9fce63884679d7c579b276a16ab.svg"}}]); \ No newline at end of file diff --git a/en/assets/js/68401cc9.39515e47.js b/en/assets/js/68401cc9.39515e47.js new file mode 100755 index 000000000..bc550619e --- /dev/null +++ b/en/assets/js/68401cc9.39515e47.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1168],{19864:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>t,toc:()=>d});var a=n(17624),i=n(95788);const r={id:"identificando-componentes",title:"Identificando os componentes",slug:"/franzininho-diy/identificando-componentes",description:"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},s=void 0,t={id:"FranzininhoDIY/identificando-componentes",title:"Identificando os componentes",description:"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.",source:"@site/docs/FranzininhoDIY/identificando-componentes.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/identificando-componentes",permalink:"/en/docs/franzininho-diy/identificando-componentes",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/identificando-componentes.md",tags:[],version:"current",frontMatter:{id:"identificando-componentes",title:"Identificando os componentes",slug:"/franzininho-diy/identificando-componentes",description:"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},sidebar:"docs",previous:{title:"Lista de Materiais",permalink:"/en/docs/franzininho-diy/lista-de-materiais"},next:{title:"Montagem da Franzininho DIY",permalink:"/en/docs/franzininho-diy/montagem"}},c={},d=[{value:"Placa de Circuito impresso",id:"placa-de-circuito-impresso",level:2},{value:"Resistores",id:"resistores",level:2},{value:"Capacitores",id:"capacitores",level:2},{value:"LEDs",id:"leds",level:2},{value:"Chave t\xe1ctil",id:"chave-t\xe1ctil",level:2},{value:"Soquete",id:"soquete",level:2},{value:"Barra de pinos",id:"barra-de-pinos",level:2},{value:"Regulador de Tens\xe3o",id:"regulador-de-tens\xe3o",level:2},{value:"Conector USB",id:"conector-usb",level:2},{value:"ATtiny85",id:"attiny85",level:2}];function p(e){const o={a:"a",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.h2,{id:"placa-de-circuito-impresso",children:"Placa de Circuito impresso"}),"\n",(0,a.jsx)(o.p,{children:"A placa de circuito impresso \xe9 respons\xe1vel por receber todos os componentes. Ela pode ser feita de fibra de vidro ou fenolite. Para a Franzininho DIY foi desenvolvido um projeto em face simples, o que permite a fabrica\xe7\xe3o caseira."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"PCB",src:n(82148).c+"",width:"510",height:"301"})}),"\n",(0,a.jsxs)(o.p,{children:["Na parte superior da placa (",(0,a.jsx)(o.strong,{children:"TOP"}),") h\xe1 os desenhos dos componentes, indicando a posi\xe7\xe3o de cada um. Os componentes s\xe3o encaixados em seus respectivos locais e depois s\xe3o soldados atrav\xe9s da parte inferior (",(0,a.jsx)(o.strong,{children:"Bottom"}),")."]}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"TOP e Bottom da placa Franzininho DIY V2",src:n(83880).c+"",width:"1130",height:"294"})}),"\n",(0,a.jsx)(o.h2,{id:"resistores",children:"Resistores"}),"\n",(0,a.jsx)(o.p,{children:"Os resistores s\xe3o componentes passivos que se op\xf5em \xe0 passagem de corrente el\xe9trica no circuito. Existem diversos tipos de resistores dispon\xedveis. Na Franzininho DIY usamos resistores de carbono de 1/4 W. Os an\xe9is coloridos indicam o valor e toler\xe2ncia do resistor."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Tabela C\xf3digo de cores para resistores de 4 faixas",src:n(37580).c+"",width:"780",height:"629"})}),"\n",(0,a.jsxs)(o.p,{children:["Fonte: ",(0,a.jsx)(o.a,{href:"http://blog.render.com.br/eletronica/como-calcular-o-valor-de-um-resistor/",children:"http://blog.render.com.br/eletronica/como-calcular-o-valor-de-um-resistor/"})]}),"\n",(0,a.jsx)(o.p,{children:"Na Franzininho DIY usamos 5 resistores, com as seguintes refer\xeancias e valores:"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"R1 e R2 - 68 R (Azul, Cinza, Preto, Dourado)"}),"\n"]}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Resistores de 68 Ohm",src:n(11916).c+"",width:"356",height:"224"})}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"R3 - 1K5 (Marrom, Verde, Vermelho, Dourado)"}),"\n"]}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Resistor de 1500 Ohm",src:n(44768).c+"",width:"356",height:"145"})}),"\n",(0,a.jsx)(o.p,{children:"R4 e R5 - 1K (Marrom, Preto, Vermelho, Dourado)"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Resistor de 1k Ohm",src:n(64752).c+"",width:"356",height:"123"})}),"\n",(0,a.jsx)(o.h2,{id:"capacitores",children:"Capacitores"}),"\n",(0,a.jsx)(o.p,{children:"Capacitores s\xe3o dispositivos el\xe9tricos capazes de armazenar carga el\xe9trica em um campo el\xe9trico. Na Franzininho DIY temos 2 tipos de capacitores:"}),"\n",(0,a.jsx)(o.p,{children:"C1 - Capacitor Cer\xe2mico 100 nF x 50 V"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Capacitor Cer\xe2mico 100 nF",src:n(71184).c+"",width:"150",height:"305"})}),"\n",(0,a.jsx)(o.p,{children:"C2 - Capacitor eletrol\xedtico 10uF x 35V"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Capacitor eletrol\xedtico 10uF x 35V",src:n(41548).c+"",width:"200",height:"132"})}),"\n",(0,a.jsx)(o.h2,{id:"leds",children:"LEDs"}),"\n",(0,a.jsx)(o.p,{children:"O LED (Light Emitting Diode) \xe9 usado para a emiss\xe3o de luz em locais e instrumentos onde se torna mais conveniente a sua utiliza\xe7\xe3o no lugar de uma l\xe2mpada."}),"\n",(0,a.jsx)(o.p,{children:"Na Franzininho DIY s\xe3o usados dois leds difusos de 3 mm"}),"\n",(0,a.jsx)(o.p,{children:"ON - LED Verde, LED - LED Amarelo"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"LEDs 3mm",src:n(99552).c+"",width:"158",height:"195"})}),"\n",(0,a.jsx)(o.h2,{id:"chave-t\xe1ctil",children:"Chave t\xe1ctil"}),"\n",(0,a.jsx)(o.p,{children:"\xc9 um bot\xe3o de contato moment\xe2neo. Na Franzininho DIY usamos uma chave t\xe1ctil NA (normalmente aberta) de 4,3 x 6 x 6 mm que tem a fun\xe7\xe3o de bot\xe3o de Reset."}),"\n",(0,a.jsx)(o.p,{children:"Chave - RESET"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Chave t\xe1ctil",src:n(19744).c+"",width:"150",height:"150"})}),"\n",(0,a.jsx)(o.h2,{id:"soquete",children:"Soquete"}),"\n",(0,a.jsx)(o.p,{children:"O soquete \xe9 usado para o encaixe de circuitos integrados, facilitando a sua troca na placa."}),"\n",(0,a.jsx)(o.p,{children:"Na Franzininho DIY usamos um soquete de 8 pinos para acomodar o Microcontrolador ATtiny85"}),"\n",(0,a.jsx)(o.p,{children:"IC1 - Soquete"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Soquete torneado 8 pinos",src:n(90116).c+"",width:"200",height:"200"})}),"\n",(0,a.jsx)(o.h2,{id:"barra-de-pinos",children:"Barra de pinos"}),"\n",(0,a.jsx)(o.p,{children:"S\xe3o usadas para expans\xe3o de pinos e entrada de alimenta\xe7\xe3o na placa. Na Franzininho DIY usamos 3 vias para o conector de alimenta\xe7\xe3o e 8 vias para o conector de expans\xe3o da placa"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"J1 - Barra de 3 pinos"}),"\n",(0,a.jsx)(o.li,{children:"P0, P1...GND - Barra de 8 pinos"}),"\n"]}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Barra de pinos",src:n(51368).c+"",width:"450",height:"336"})}),"\n",(0,a.jsx)(o.h2,{id:"regulador-de-tens\xe3o",children:"Regulador de Tens\xe3o"}),"\n",(0,a.jsx)(o.p,{children:"Usado para abaixar a tens\xe3o de entrada para um n\xedvel em que o circuito possa trabalhar. Na Franzininho DIY usamos um regulador de tens\xe3o de 5V, o 78L05"}),"\n",(0,a.jsx)(o.p,{children:"IC2 - 78L05 - Regulador de tens\xe3o 5V"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Regulador de tens\xe3o 78L05",src:n(73204).c+"",width:"200",height:"155"})}),"\n",(0,a.jsx)(o.h2,{id:"conector-usb",children:"Conector USB"}),"\n",(0,a.jsx)(o.p,{children:"Usado para conectar a placa ao computador ou a um circuito de alimenta\xe7\xe3o com conector USB. Na Franzininho DIY usamos um Conector USB Macho 90\xba com trava"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Conector USB Macho 90\xba com trava",src:n(35924).c+"",width:"200",height:"200"})}),"\n",(0,a.jsx)(o.h2,{id:"attiny85",children:"ATtiny85"}),"\n",(0,a.jsx)(o.p,{children:"\xc9 o c\xe9rebro da Franzininho DIY e o componente mais caro. Tenha cuidado na hora de encaixar no soquete. Siga as orienta\xe7\xf5es de montagem."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"ATtiny85",src:n(2198).c+"",width:"600",height:"600"})})]})}function l(e={}){const{wrapper:o}={...(0,i.MN)(),...e.components};return o?(0,a.jsx)(o,{...e,children:(0,a.jsx)(p,{...e})}):p(e)}},95788:(e,o,n)=>{n.d(o,{MN:()=>d});var a=n(11504);function i(e,o,n){return o in e?Object.defineProperty(e,o,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[o]=n,e}function r(e,o){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);o&&(a=a.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var o=1;o=0||(i[n]=e[n]);return i}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var c=a.createContext({}),d=function(e){var o=a.useContext(c),n=o;return e&&(n="function"==typeof e?e(o):s(s({},o),e)),n},p={inlineCode:"code",wrapper:function(e){var o=e.children;return a.createElement(a.Fragment,{},o)}},l=a.forwardRef((function(e,o){var n=e.components,i=e.mdxType,r=e.originalType,c=e.parentName,l=t(e,["components","mdxType","originalType","parentName"]),m=d(n),h=i,u=m["".concat(c,".").concat(h)]||m[h]||p[h]||r;return n?a.createElement(u,s(s({ref:o},l),{},{components:n})):a.createElement(u,s({ref:o},l))}));l.displayName="MDXCreateElement"},2198:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/attiny85-c3f7296a3f19fedda9c4797cfe019d1d.jpeg"},51368:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-barra-37f182ba7a00ccbddafa8dc40ca9e52c.png"},71184:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-capacitor1-f377f2c7605d9807e8a3275a975bafba.png"},41548:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-capacitor2-d6242d5a4f44d52664b79b39535dde51.png"},19744:(e,o,n)=>{n.d(o,{c:()=>a});const a="data:image/png;base64,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"},99552:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-leds-32db86c807fab9e890804d4a228154e4.png"},83880:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-placa-top-botton-9ccf094c03e2914ecc04fc2ef4bebde2.png"},82148:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-placa-82f9ed3365c7b53a5a09ce31390b9aad.png"},73204:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-regulador-c29f86619a6fb5ebd53a76d5106c1471.png"},64752:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-resistor1k-b1aa065144e842347cbc7ffca90e597e.png"},44768:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-resistor1k5-0797ad85dba140cfe5b6e159f138814d.png"},11916:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-resistor68r-f217f04e7a0256e62606a54608736ef7.png"},90116:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-soquete-2f97a7d7776b202d7f80ad3a5fe700b2.png"},37580:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-tabela-resistores-edd34fa8f3b4a4465ccc329faa70cfb0.png"},35924:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/componentes-usb-3c13b47eb498c03a88bd467edcc5e5a5.png"}}]); \ No newline at end of file diff --git a/en/assets/js/68401cc9.9ac83595.js b/en/assets/js/68401cc9.9ac83595.js deleted file mode 100755 index cd83c0c62..000000000 --- a/en/assets/js/68401cc9.9ac83595.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2654],{3905:(e,o,a)=>{a.d(o,{Zo:()=>p,kt:()=>h});var t=a(7294);function n(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function i(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,t)}return a}function r(e){for(var o=1;o=0||(n[a]=e[a]);return n}(e,o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var c=t.createContext({}),d=function(e){var o=t.useContext(c),a=o;return e&&(a="function"==typeof e?e(o):r(r({},o),e)),a},p=function(e){var o=d(e.components);return t.createElement(c.Provider,{value:o},e.children)},l="mdxType",m={inlineCode:"code",wrapper:function(e){var o=e.children;return t.createElement(t.Fragment,{},o)}},u=t.forwardRef((function(e,o){var a=e.components,n=e.mdxType,i=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),l=d(a),u=n,h=l["".concat(c,".").concat(u)]||l[u]||m[u]||i;return a?t.createElement(h,r(r({ref:o},p),{},{components:a})):t.createElement(h,r({ref:o},p))}));function h(e,o){var a=arguments,n=o&&o.mdxType;if("string"==typeof e||n){var i=a.length,r=new Array(i);r[0]=u;var s={};for(var c in o)hasOwnProperty.call(o,c)&&(s[c]=o[c]);s.originalType=e,s[l]="string"==typeof e?e:n,r[1]=s;for(var d=2;d{a.r(o),a.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var t=a(3117),n=(a(7294),a(3905));const i={id:"identificando-componentes",title:"Identificando os componentes",slug:"/franzininho-diy/identificando-componentes",description:"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},r=void 0,s={unversionedId:"FranzininhoDIY/identificando-componentes",id:"FranzininhoDIY/identificando-componentes",title:"Identificando os componentes",description:"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.",source:"@site/docs/FranzininhoDIY/identificando-componentes.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/identificando-componentes",permalink:"/en/docs/franzininho-diy/identificando-componentes",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/identificando-componentes.md",tags:[],version:"current",frontMatter:{id:"identificando-componentes",title:"Identificando os componentes",slug:"/franzininho-diy/identificando-componentes",description:"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},sidebar:"docs",previous:{title:"Lista de Materiais",permalink:"/en/docs/franzininho-diy/lista-de-materiais"},next:{title:"Montagem da Franzininho DIY",permalink:"/en/docs/franzininho-diy/montagem"}},c={},d=[{value:"Placa de Circuito impresso",id:"placa-de-circuito-impresso",level:2},{value:"Resistores",id:"resistores",level:2},{value:"Capacitores",id:"capacitores",level:2},{value:"LEDs",id:"leds",level:2},{value:"Chave t\xe1ctil",id:"chave-t\xe1ctil",level:2},{value:"Soquete",id:"soquete",level:2},{value:"Barra de pinos",id:"barra-de-pinos",level:2},{value:"Regulador de Tens\xe3o",id:"regulador-de-tens\xe3o",level:2},{value:"Conector USB",id:"conector-usb",level:2},{value:"ATtiny85",id:"attiny85",level:2}],p={toc:d},l="wrapper";function m(e){let{components:o,...i}=e;return(0,n.kt)(l,(0,t.Z)({},p,i,{components:o,mdxType:"MDXLayout"}),(0,n.kt)("h2",{id:"placa-de-circuito-impresso"},"Placa de Circuito impresso"),(0,n.kt)("p",null,"A placa de circuito impresso \xe9 respons\xe1vel por receber todos os componentes. Ela pode ser feita de fibra de vidro ou fenolite. Para a Franzininho DIY foi desenvolvido um projeto em face simples, o que permite a fabrica\xe7\xe3o caseira."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"PCB",src:a(2354).Z,width:"510",height:"301"})),(0,n.kt)("p",null,"Na parte superior da placa ","(",(0,n.kt)("strong",{parentName:"p"},"TOP"),")"," h\xe1 os desenhos dos componentes, indicando a posi\xe7\xe3o de cada um. Os componentes s\xe3o encaixados em seus respectivos locais e depois s\xe3o soldados atrav\xe9s da parte inferior ","(",(0,n.kt)("strong",{parentName:"p"},"Bottom"),")","."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"TOP e Bottom da placa Franzininho DIY V2",src:a(377).Z,width:"1130",height:"294"})),(0,n.kt)("h2",{id:"resistores"},"Resistores"),(0,n.kt)("p",null,"Os resistores s\xe3o componentes passivos que se op\xf5em \xe0 passagem de corrente el\xe9trica no circuito. Existem diversos tipos de resistores dispon\xedveis. Na Franzininho DIY usamos resistores de carbono de 1/4 W. Os an\xe9is coloridos indicam o valor e toler\xe2ncia do resistor."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Tabela C\xf3digo de cores para resistores de 4 faixas",src:a(1753).Z,width:"780",height:"629"})),(0,n.kt)("p",null,"Fonte: ",(0,n.kt)("a",{parentName:"p",href:"http://blog.render.com.br/eletronica/como-calcular-o-valor-de-um-resistor/"},"http://blog.render.com.br/eletronica/como-calcular-o-valor-de-um-resistor/")),(0,n.kt)("p",null,"Na Franzininho DIY usamos 5 resistores, com as seguintes refer\xeancias e valores:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"R1 e R2 - 68 R ","(","Azul, Cinza, Preto, Dourado",")")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Resistores de 68 Ohm",src:a(9454).Z,width:"356",height:"224"})),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"R3 - 1K5 ","(","Marrom, Verde, Vermelho, Dourado",")")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Resistor de 1500 Ohm",src:a(70).Z,width:"356",height:"145"})),(0,n.kt)("p",null,"R4 e R5 - 1K ","(","Marrom, Preto, Vermelho, Dourado",")"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Resistor de 1k Ohm",src:a(3397).Z,width:"356",height:"123"})),(0,n.kt)("h2",{id:"capacitores"},"Capacitores"),(0,n.kt)("p",null,"Capacitores s\xe3o dispositivos el\xe9tricos capazes de armazenar carga el\xe9trica em um campo el\xe9trico. Na Franzininho DIY temos 2 tipos de capacitores:"),(0,n.kt)("p",null,"C1 - Capacitor Cer\xe2mico 100 nF x 50 V"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Capacitor Cer\xe2mico 100 nF",src:a(5845).Z,width:"150",height:"305"})),(0,n.kt)("p",null,"C2 - Capacitor eletrol\xedtico 10uF x 35V"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Capacitor eletrol\xedtico 10uF x 35V",src:a(5994).Z,width:"200",height:"132"})),(0,n.kt)("h2",{id:"leds"},"LEDs"),(0,n.kt)("p",null,"O LED ","(","Light Emitting Diode",")"," \xe9 usado para a emiss\xe3o de luz em locais e instrumentos onde se torna mais conveniente a sua utiliza\xe7\xe3o no lugar de uma l\xe2mpada."),(0,n.kt)("p",null,"Na Franzininho DIY s\xe3o usados dois leds difusos de 3 mm"),(0,n.kt)("p",null,"ON - LED Verde, LED - LED Amarelo"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"LEDs 3mm",src:a(8173).Z,width:"158",height:"195"})),(0,n.kt)("h2",{id:"chave-t\xe1ctil"},"Chave t\xe1ctil"),(0,n.kt)("p",null,"\xc9 um bot\xe3o de contato moment\xe2neo. Na Franzininho DIY usamos uma chave t\xe1ctil NA ","(","normalmente aberta",")"," de 4,3 x 6 x 6 mm que tem a fun\xe7\xe3o de bot\xe3o de Reset."),(0,n.kt)("p",null,"Chave - RESET"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Chave t\xe1ctil",src:a(1682).Z,width:"150",height:"150"})),(0,n.kt)("h2",{id:"soquete"},"Soquete"),(0,n.kt)("p",null,"O soquete \xe9 usado para o encaixe de circuitos integrados, facilitando a sua troca na placa."),(0,n.kt)("p",null,"Na Franzininho DIY usamos um soquete de 8 pinos para acomodar o Microcontrolador ATtiny85"),(0,n.kt)("p",null,"IC1 - Soquete"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Soquete torneado 8 pinos",src:a(535).Z,width:"200",height:"200"})),(0,n.kt)("h2",{id:"barra-de-pinos"},"Barra de pinos"),(0,n.kt)("p",null,"S\xe3o usadas para expans\xe3o de pinos e entrada de alimenta\xe7\xe3o na placa. Na Franzininho DIY usamos 3 vias para o conector de alimenta\xe7\xe3o e 8 vias para o conector de expans\xe3o da placa"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"J1 - Barra de 3 pinos"),(0,n.kt)("li",{parentName:"ul"},"P0, P1...GND - Barra de 8 pinos")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Barra de pinos",src:a(2152).Z,width:"450",height:"336"})),(0,n.kt)("h2",{id:"regulador-de-tens\xe3o"},"Regulador de Tens\xe3o"),(0,n.kt)("p",null,"Usado para abaixar a tens\xe3o de entrada para um n\xedvel em que o circuito possa trabalhar. Na Franzininho DIY usamos um regulador de tens\xe3o de 5V, o 78L05"),(0,n.kt)("p",null,"IC2 - 78L05 - Regulador de tens\xe3o 5V"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Regulador de tens\xe3o 78L05",src:a(1990).Z,width:"200",height:"155"})),(0,n.kt)("h2",{id:"conector-usb"},"Conector USB"),(0,n.kt)("p",null,"Usado para conectar a placa ao computador ou a um circuito de alimenta\xe7\xe3o com conector USB. Na Franzininho DIY usamos um Conector USB Macho 90\xba com trava"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Conector USB Macho 90\xba com trava",src:a(6449).Z,width:"200",height:"200"})),(0,n.kt)("h2",{id:"attiny85"},"ATtiny85"),(0,n.kt)("p",null,"\xc9 o c\xe9rebro da Franzininho DIY e o componente mais caro. Tenha cuidado na hora de encaixar no soquete. Siga as orienta\xe7\xf5es de montagem."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ATtiny85",src:a(6011).Z,width:"600",height:"600"})))}m.isMDXComponent=!0},6011:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/attiny85-c3f7296a3f19fedda9c4797cfe019d1d.jpeg"},2152:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-barra-37f182ba7a00ccbddafa8dc40ca9e52c.png"},5845:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-capacitor1-f377f2c7605d9807e8a3275a975bafba.png"},5994:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-capacitor2-d6242d5a4f44d52664b79b39535dde51.png"},1682:(e,o,a)=>{a.d(o,{Z:()=>t});const t="data:image/png;base64,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"},8173:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-leds-32db86c807fab9e890804d4a228154e4.png"},377:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-placa-top-botton-9ccf094c03e2914ecc04fc2ef4bebde2.png"},2354:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-placa-82f9ed3365c7b53a5a09ce31390b9aad.png"},1990:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-regulador-c29f86619a6fb5ebd53a76d5106c1471.png"},3397:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-resistor1k-b1aa065144e842347cbc7ffca90e597e.png"},70:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-resistor1k5-0797ad85dba140cfe5b6e159f138814d.png"},9454:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-resistor68r-f217f04e7a0256e62606a54608736ef7.png"},535:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-soquete-2f97a7d7776b202d7f80ad3a5fe700b2.png"},1753:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-tabela-resistores-edd34fa8f3b4a4465ccc329faa70cfb0.png"},6449:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/componentes-usb-3c13b47eb498c03a88bd467edcc5e5a5.png"}}]); \ No newline at end of file diff --git a/en/assets/js/6875c492.19f388a6.js b/en/assets/js/6875c492.19f388a6.js deleted file mode 100755 index 2a47f0b4f..000000000 --- a/en/assets/js/6875c492.19f388a6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8610],{9703:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(7294),l=a(5999),r=a(2244);function s(e){const{metadata:t}=e,{previousPage:a,nextPage:s}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,l.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(r.Z,{permalink:a,title:n.createElement(l.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),s&&n.createElement(r.Z,{permalink:s,title:n.createElement(l.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},9985:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(7294),l=a(9460),r=a(390);function s(e){let{items:t,component:a=r.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(l.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}},1714:(e,t,a)=>{a.r(t),a.d(t,{default:()=>E});var n=a(7294),l=a(4334),r=a(5999),s=a(8824),o=a(1944),i=a(5281),g=a(9960),c=a(9058),m=a(9703),p=a(197),u=a(9985);function d(e){const t=function(){const{selectMessage:e}=(0,s.c)();return t=>e(t,(0,r.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,r.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function h(e){let{tag:t}=e;const a=d(t);return n.createElement(n.Fragment,null,n.createElement(o.d,{title:a}),n.createElement(p.Z,{tag:"blog_tags_posts"}))}function b(e){let{tag:t,items:a,sidebar:l,listMetadata:s}=e;const o=d(t);return n.createElement(c.Z,{sidebar:l},n.createElement("header",{className:"margin-bottom--xl"},n.createElement("h1",null,o),n.createElement(g.Z,{href:t.allTagsPath},n.createElement(r.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),n.createElement(u.Z,{items:a}),n.createElement(m.Z,{metadata:s}))}function E(e){return n.createElement(o.FG,{className:(0,l.Z)(i.k.wrapper.blogPages,i.k.page.blogTagPostListPage)},n.createElement(h,e),n.createElement(b,e))}}}]); \ No newline at end of file diff --git a/en/assets/js/6875c492.3e92a214.js b/en/assets/js/6875c492.3e92a214.js new file mode 100755 index 000000000..76f559448 --- /dev/null +++ b/en/assets/js/6875c492.3e92a214.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2392],{22687:(e,t,n)=>{n.d(t,{c:()=>r});n(11504);var s=n(84357),a=n(70308),i=n(17624);function r(e){const{metadata:t}=e,{previousPage:n,nextPage:r}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.G)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,i.jsx)(a.c,{permalink:n,title:(0,i.jsx)(s.c,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),r&&(0,i.jsx)(a.c,{permalink:r,title:(0,i.jsx)(s.c,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},60992:(e,t,n)=>{n.d(t,{c:()=>r});n(11504);var s=n(83152),a=n(47590),i=n(17624);function r(e){let{items:t,component:n=a.c}=e;return(0,i.jsx)(i.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,i.jsx)(s.E,{content:t,children:(0,i.jsx)(n,{children:(0,i.jsx)(t,{})})},t.metadata.permalink)}))})}},62948:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});n(11504);var s=n(34064),a=n(84357),i=n(95944),r=n(68900),l=n(45864),o=n(10867),c=n(9452),g=n(22687),d=n(48712),u=n(60992),h=n(61528),p=n(56448),m=n(17624);function x(e){const t=function(){const{selectMessage:e}=(0,i.A)();return t=>e(t,(0,a.G)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,a.G)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function j(e){let{tag:t}=e;const n=x(t);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(r.U7,{title:n}),(0,m.jsx)(d.c,{tag:"blog_tags_posts"})]})}function b(e){let{tag:t,items:n,sidebar:s,listMetadata:i}=e;const r=x(t);return(0,m.jsxs)(c.c,{sidebar:s,children:[t.unlisted&&(0,m.jsx)(h.c,{}),(0,m.jsxs)("header",{className:"margin-bottom--xl",children:[(0,m.jsx)(p.c,{as:"h1",children:r}),(0,m.jsx)(o.c,{href:t.allTagsPath,children:(0,m.jsx)(a.c,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,m.jsx)(u.c,{items:n}),(0,m.jsx)(g.c,{metadata:i})]})}function f(e){return(0,m.jsxs)(r.cr,{className:(0,s.c)(l.W.wrapper.blogPages,l.W.page.blogTagPostListPage),children:[(0,m.jsx)(j,{...e}),(0,m.jsx)(b,{...e})]})}},61528:(e,t,n)=>{n.d(t,{c:()=>h});n(11504);var s=n(34064),a=n(84357),i=n(56952),r=n(17624);function l(){return(0,r.jsx)(a.c,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function o(){return(0,r.jsx)(a.c,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,r.jsx)(i.c,{children:(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var g=n(45864),d=n(30304);function u(e){let{className:t}=e;return(0,r.jsx)(d.c,{type:"caution",title:(0,r.jsx)(l,{}),className:(0,s.c)(t,g.W.common.unlistedBanner),children:(0,r.jsx)(o,{})})}function h(e){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c,{}),(0,r.jsx)(u,{...e})]})}}}]); \ No newline at end of file diff --git a/en/assets/js/69d6b121.bca69276.js b/en/assets/js/69d6b121.bca69276.js deleted file mode 100755 index 5a9be4491..000000000 --- a/en/assets/js/69d6b121.bca69276.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6251],{3905:(e,a,o)=>{o.d(a,{Zo:()=>s,kt:()=>f});var n=o(7294);function r(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function i(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function t(e){for(var a=1;a=0||(r[o]=e[o]);return r}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var d=n.createContext({}),c=function(e){var a=n.useContext(d),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},s=function(e){var a=c(e.components);return n.createElement(d.Provider,{value:a},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},p=n.forwardRef((function(e,a){var o=e.components,r=e.mdxType,i=e.originalType,d=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=c(o),p=r,f=u["".concat(d,".").concat(p)]||u[p]||m[p]||i;return o?n.createElement(f,t(t({ref:a},s),{},{components:o})):n.createElement(f,t({ref:a},s))}));function f(e,a){var o=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var i=o.length,t=new Array(i);t[0]=p;var l={};for(var d in a)hasOwnProperty.call(a,d)&&(l[d]=a[d]);l.originalType=e,l[u]="string"==typeof e?e:r,t[1]=l;for(var c=2;c{o.r(a),o.d(a,{assets:()=>d,contentTitle:()=>t,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var n=o(3117),r=(o(7294),o(3905));const i={id:"elefante-colorido",title:"Elefante Colorido! Que cor?",slug:"/franzininho-diy/elefante-colorido",description:"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica."},t=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/elefante-colorido",id:"FranzininhoDIY/exemplos-arduino/elefante-colorido",title:"Elefante Colorido! Que cor?",description:"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/elefante-colorido.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/elefante-colorido",permalink:"/en/docs/franzininho-diy/elefante-colorido",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/elefante-colorido.md",tags:[],version:"current",frontMatter:{id:"elefante-colorido",title:"Elefante Colorido! Que cor?",slug:"/franzininho-diy/elefante-colorido",description:"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica."},sidebar:"docs",previous:{title:"LED RGB",permalink:"/en/docs/franzininho-diy/led-rgb"},next:{title:"Sensor de luz com LDR",permalink:"/en/docs/franzininho-diy/sensor-luz-ldr"}},d={},c=[{value:"Elefante colorido! Que cor?",id:"elefante-colorido-que-cor",level:2},{value:"Podemos adaptar essa brincadeira com eletr\xf4nica?",id:"podemos-adaptar-essa-brincadeira-com-eletr\xf4nica",level:3},{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Simula\xe7\xe3o (modo avan\xe7ado)",id:"simula\xe7\xe3o-modo-avan\xe7ado",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],s={toc:c},u="wrapper";function m(e){let{components:a,...i}=e;return(0,r.kt)(u,(0,n.Z)({},s,i,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica. Podemos adaptar essa brincadeira com eletr\xf4nica, confira abaixo!"),(0,r.kt)("h2",{id:"elefante-colorido-que-cor"},"Elefante colorido! Que cor?"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Montagem Elefante Colorido",src:o(980).Z,width:"2992",height:"2000"})),(0,r.kt)("p",null,"\u201cElefante colorido\u201d. \xc9 uma brincadeira caracter\xedstica da Regi\xe3o Sudeste, da cidade de S\xe3o Paulo. As regras s\xe3o as seguintes: uma crian\xe7a \xe9 escolhida para comandar. Em roda, ela diz aos colegas: \u201cElefante colorido!\u201d O grupo pergunta: \u201cQue cor ele \xe9?\u201d O comandante escolhe uma cor e as crian\xe7as correm para tocar em algo que tenha a cor que o comandante escolheu."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Com essa brincadeira podemos trabalhar diversas habilidades, como o desenvolvimento da concentra\xe7\xe3o, aten\xe7\xe3o, coordena\xe7\xe3o motora, reconhecimento das cores, discrimina\xe7\xe3o visual e auditiva.")),(0,r.kt)("h3",{id:"podemos-adaptar-essa-brincadeira-com-eletr\xf4nica"},"Podemos adaptar essa brincadeira com eletr\xf4nica?"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Montagem Elefante Colorido",src:o(5944).Z,width:"2992",height:"2000"})),(0,r.kt)("p",null,"Sim e o mais bacana de tudo que ela est\xe1 alinhada a BNCC."),(0,r.kt)("p",null,"Para Educa\xe7\xe3o infantil trabalhamos com o campos de Experi\xeancia:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Tra\xe7os, sons, cores e formas"),(0,r.kt)("li",{parentName:"ul"},"Escuta, fala, pensamento e imagina\xe7\xe3o")),(0,r.kt)("p",null,"Para o Fundamental 1 (1\xb0 ao 5 ano):"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"(EF15AR02) Explorar e reconhecer elementos constitutivos das artes visuais (ponto, linha, forma, cor, espa\xe7o, movimento etc.)."),(0,r.kt)("li",{parentName:"ul"},"(EF15AR26) Explorar diferentes tecnologias e recursos digitais (multimeios, anima\xe7\xf5es, jogos eletr\xf4nicos, grava\xe7\xf5es em \xe1udio e v\xeddeo, fotografia, softwares etc.) nos processos de cria\xe7\xe3o art\xedstica.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Montagem Elefante Colorido",src:o(6467).Z,width:"2992",height:"2000"})),(0,r.kt)("h2",{id:"materiais"},"Materiais"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"1 Placa Franzininho;"),(0,r.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,r.kt)("li",{parentName:"ul"},"1 LED RGB;"),(0,r.kt)("li",{parentName:"ul"},"3 Resistor 1k;"),(0,r.kt)("li",{parentName:"ul"},"3 Jumpers macho/f\xeamea")),(0,r.kt)("h2",{id:"circuito"},"Circuito"),(0,r.kt)("p",null,"Na protoboard voc\xea pode montar da seguinte forma:"),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Voc\xea pode montar ele fora da protoboard depois!")),(0,r.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,r.kt)("p",null,"Modo simples: utilizando apenas 3 cores: vermelho, verde e azul."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"//RGB com a Franzininho DIY\n\nconst int red = 0; \nconst int green = 1; \nconst int blue = 2; \n\nvoid setup() {\n // configura os pinos de cada cor como sa\xedda:\n pinMode(red, OUTPUT);\n pinMode(green, OUTPUT);\n pinMode(blue, OUTPUT);\n}\n\nvoid loop() {\n // aciona o LED na cor vermelha:\n digitalWrite(red, HIGH);\n digitalWrite(green, LOW);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n \n // aciona o LED na cor verde:\n digitalWrite(red, LOW);\n digitalWrite(green, HIGH);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n\n // aciona o LED na cor azul:\n digitalWrite(red, LOW);\n digitalWrite(green, LOW);\n digitalWrite(blue, HIGH);\n delay(5000); // aguarda 5000ms \n}\n")),(0,r.kt)("p",null,"Modo avan\xe7ado: Variando as cores, confira!"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"const int red = 0; \nconst int green = 1; \nconst int blue = 2;\n\n// vari\xe1veis para salvar a intensidade de cada cor\nint valor_r = 255; // vermelho (red)\nint valor_g = 0; // verde (green)\nint valor_b = 0; // blue (blue)\n\nvoid setup() {\n // configura os pinos de cada cor como sa\xedda:\n pinMode(red, OUTPUT);\n pinMode(green, OUTPUT);\n pinMode(blue, OUTPUT);\n \n // inicializa LED em cor vemelha e de m\xe1xima intensidade\n analogWrite(red, valor_r);\n analogWrite(green, valor_g);\n analogWrite(blue, valor_b);\n}\n\nvoid loop() {\n // aumenta a intensidade do LED verde\n for (valor_g = 0; valor_g < 255; valor_g=valor_g+5){\n analogWrite(green, valor_g);\n delay(50); // aguarda 50ms \n }\n \n // diminui a intensidade do LED vermelho\n for (valor_r = 255; valor_r > 0; valor_r=valor_r-5){\n analogWrite(red, valor_r);\n delay(50); // aguarda 50ms \n }\n \n // aumenta a intensidade do LED azul\n for (valor_b = 0; valor_b < 255; valor_b=valor_b+5){\n analogWrite(blue, valor_b);\n delay(50); // aguarda 50ms \n }\n \n // diminui a intensidade do LED verde\n for (valor_g = 255; valor_g > 0; valor_g=valor_g-5){\n analogWrite(green, valor_g);\n delay(50);\n }\n \n // aumenta a intensidade do LED vermelho\n for (valor_r = 0; valor_r < 255; valor_r=valor_r+5){\n analogWrite(red, valor_r);\n delay(50); // aguarda 50ms \n }\n}\n\n")),(0,r.kt)("h2",{id:"simula\xe7\xe3o-modo-avan\xe7ado"},"Simula\xe7\xe3o (modo avan\xe7ado)"),(0,r.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311376279774429761?view=diagram"}),(0,r.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,r.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/t2_ay1J6TWQ",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}m.isMDXComponent=!0},980:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/elefante-colorido-1-82b80e20d425137e97c37e6a642777ac.JPG"},5944:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/elefante-colorido-2-9c268fc9897060a4d24eec40816254b2.JPG"},6467:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/elefante-colorido-3-c25273f9a0ee9f87ffcb78620efe28d7.JPG"}}]); \ No newline at end of file diff --git a/en/assets/js/69d6b121.c660d41a.js b/en/assets/js/69d6b121.c660d41a.js new file mode 100755 index 000000000..461c9a9e4 --- /dev/null +++ b/en/assets/js/69d6b121.c660d41a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6316],{2788:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var o=a(17624),r=a(95788);const i={id:"elefante-colorido",title:"Elefante Colorido! Que cor?",slug:"/franzininho-diy/elefante-colorido",description:"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica."},t=void 0,l={id:"FranzininhoDIY/exemplos-arduino/elefante-colorido",title:"Elefante Colorido! Que cor?",description:"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/elefante-colorido.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/elefante-colorido",permalink:"/en/docs/franzininho-diy/elefante-colorido",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/elefante-colorido.md",tags:[],version:"current",frontMatter:{id:"elefante-colorido",title:"Elefante Colorido! Que cor?",slug:"/franzininho-diy/elefante-colorido",description:"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica."},sidebar:"docs",previous:{title:"LED RGB",permalink:"/en/docs/franzininho-diy/led-rgb"},next:{title:"Sensor de luz com LDR",permalink:"/en/docs/franzininho-diy/sensor-luz-ldr"}},d={},c=[{value:"Elefante colorido! Que cor?",id:"elefante-colorido-que-cor",level:2},{value:"Podemos adaptar essa brincadeira com eletr\xf4nica?",id:"podemos-adaptar-essa-brincadeira-com-eletr\xf4nica",level:3},{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Simula\xe7\xe3o (modo avan\xe7ado)",id:"simula\xe7\xe3o-modo-avan\xe7ado",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function s(e){const n={admonition:"admonition",blockquote:"blockquote",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica. Podemos adaptar essa brincadeira com eletr\xf4nica, confira abaixo!"}),"\n",(0,o.jsx)(n.h2,{id:"elefante-colorido-que-cor",children:"Elefante colorido! Que cor?"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Montagem Elefante Colorido",src:a(41356).c+"",width:"2992",height:"2000"})}),"\n",(0,o.jsx)(n.p,{children:"\u201cElefante colorido\u201d. \xc9 uma brincadeira caracter\xedstica da Regi\xe3o Sudeste, da cidade de S\xe3o Paulo. As regras s\xe3o as seguintes: uma crian\xe7a \xe9 escolhida para comandar. Em roda, ela diz aos colegas: \u201cElefante colorido!\u201d O grupo pergunta: \u201cQue cor ele \xe9?\u201d O comandante escolhe uma cor e as crian\xe7as correm para tocar em algo que tenha a cor que o comandante escolheu."}),"\n",(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsx)(n.p,{children:"Com essa brincadeira podemos trabalhar diversas habilidades, como o desenvolvimento da concentra\xe7\xe3o, aten\xe7\xe3o, coordena\xe7\xe3o motora, reconhecimento das cores, discrimina\xe7\xe3o visual e auditiva."}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"podemos-adaptar-essa-brincadeira-com-eletr\xf4nica",children:"Podemos adaptar essa brincadeira com eletr\xf4nica?"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Montagem Elefante Colorido",src:a(41724).c+"",width:"2992",height:"2000"})}),"\n",(0,o.jsx)(n.p,{children:"Sim e o mais bacana de tudo que ela est\xe1 alinhada a BNCC."}),"\n",(0,o.jsx)(n.p,{children:"Para Educa\xe7\xe3o infantil trabalhamos com o campos de Experi\xeancia:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Tra\xe7os, sons, cores e formas"}),"\n",(0,o.jsx)(n.li,{children:"Escuta, fala, pensamento e imagina\xe7\xe3o"}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"Para o Fundamental 1 (1\xb0 ao 5 ano):"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"(EF15AR02) Explorar e reconhecer elementos constitutivos das artes visuais (ponto, linha, forma, cor, espa\xe7o, movimento etc.)."}),"\n",(0,o.jsx)(n.li,{children:"(EF15AR26) Explorar diferentes tecnologias e recursos digitais (multimeios, anima\xe7\xf5es, jogos eletr\xf4nicos, grava\xe7\xf5es em \xe1udio e v\xeddeo, fotografia, softwares etc.) nos processos de cria\xe7\xe3o art\xedstica."}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Montagem Elefante Colorido",src:a(46584).c+"",width:"2992",height:"2000"})}),"\n",(0,o.jsx)(n.h2,{id:"materiais",children:"Materiais"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"1 Placa Franzininho;"}),"\n",(0,o.jsx)(n.li,{children:"1 Protoboard;"}),"\n",(0,o.jsx)(n.li,{children:"1 LED RGB;"}),"\n",(0,o.jsx)(n.li,{children:"3 Resistor 1k;"}),"\n",(0,o.jsx)(n.li,{children:"3 Jumpers macho/f\xeamea"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,o.jsx)(n.p,{children:"Na protoboard voc\xea pode montar da seguinte forma:"}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsx)(n.p,{children:"Voc\xea pode montar ele fora da protoboard depois!"})}),"\n",(0,o.jsx)(n.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,o.jsx)(n.p,{children:"Modo simples: utilizando apenas 3 cores: vermelho, verde e azul."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-cpp",children:"//RGB com a Franzininho DIY\n\nconst int red = 0; \nconst int green = 1; \nconst int blue = 2; \n\nvoid setup() {\n // configura os pinos de cada cor como sa\xedda:\n pinMode(red, OUTPUT);\n pinMode(green, OUTPUT);\n pinMode(blue, OUTPUT);\n}\n\nvoid loop() {\n // aciona o LED na cor vermelha:\n digitalWrite(red, HIGH);\n digitalWrite(green, LOW);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n \n // aciona o LED na cor verde:\n digitalWrite(red, LOW);\n digitalWrite(green, HIGH);\n digitalWrite(blue, LOW);\n delay(5000); // aguarda 5000ms \n\n // aciona o LED na cor azul:\n digitalWrite(red, LOW);\n digitalWrite(green, LOW);\n digitalWrite(blue, HIGH);\n delay(5000); // aguarda 5000ms \n}\n"})}),"\n",(0,o.jsx)(n.p,{children:"Modo avan\xe7ado: Variando as cores, confira!"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-cpp",children:"const int red = 0; \nconst int green = 1; \nconst int blue = 2;\n\n// vari\xe1veis para salvar a intensidade de cada cor\nint valor_r = 255; // vermelho (red)\nint valor_g = 0; // verde (green)\nint valor_b = 0; // blue (blue)\n\nvoid setup() {\n // configura os pinos de cada cor como sa\xedda:\n pinMode(red, OUTPUT);\n pinMode(green, OUTPUT);\n pinMode(blue, OUTPUT);\n \n // inicializa LED em cor vemelha e de m\xe1xima intensidade\n analogWrite(red, valor_r);\n analogWrite(green, valor_g);\n analogWrite(blue, valor_b);\n}\n\nvoid loop() {\n // aumenta a intensidade do LED verde\n for (valor_g = 0; valor_g < 255; valor_g=valor_g+5){\n analogWrite(green, valor_g);\n delay(50); // aguarda 50ms \n }\n \n // diminui a intensidade do LED vermelho\n for (valor_r = 255; valor_r > 0; valor_r=valor_r-5){\n analogWrite(red, valor_r);\n delay(50); // aguarda 50ms \n }\n \n // aumenta a intensidade do LED azul\n for (valor_b = 0; valor_b < 255; valor_b=valor_b+5){\n analogWrite(blue, valor_b);\n delay(50); // aguarda 50ms \n }\n \n // diminui a intensidade do LED verde\n for (valor_g = 255; valor_g > 0; valor_g=valor_g-5){\n analogWrite(green, valor_g);\n delay(50);\n }\n \n // aumenta a intensidade do LED vermelho\n for (valor_r = 0; valor_r < 255; valor_r=valor_r+5){\n analogWrite(red, valor_r);\n delay(50); // aguarda 50ms \n }\n}\n\n"})}),"\n",(0,o.jsx)(n.h2,{id:"simula\xe7\xe3o-modo-avan\xe7ado",children:"Simula\xe7\xe3o (modo avan\xe7ado)"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311376279774429761?view=diagram"}),"\n",(0,o.jsx)(n.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/t2_ay1J6TWQ",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function u(e={}){const{wrapper:n}={...(0,r.MN)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(s,{...e})}):s(e)}},95788:(e,n,a)=>{a.d(n,{MN:()=>c});var o=a(11504);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function i(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,o)}return a}function t(e){for(var n=1;n=0||(r[a]=e[a]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var d=o.createContext({}),c=function(e){var n=o.useContext(d),a=n;return e&&(a="function"==typeof e?e(n):t(t({},n),e)),a},s={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var a=e.components,r=e.mdxType,i=e.originalType,d=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=c(a),p=r,h=m["".concat(d,".").concat(p)]||m[p]||s[p]||i;return a?o.createElement(h,t(t({ref:n},u),{},{components:a})):o.createElement(h,t({ref:n},u))}));u.displayName="MDXCreateElement"},41356:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/elefante-colorido-1-82b80e20d425137e97c37e6a642777ac.JPG"},41724:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/elefante-colorido-2-9c268fc9897060a4d24eec40816254b2.JPG"},46584:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/elefante-colorido-3-c25273f9a0ee9f87ffcb78620efe28d7.JPG"}}]); \ No newline at end of file diff --git a/en/assets/js/6b289e1f.046c4858.js b/en/assets/js/6b289e1f.046c4858.js new file mode 100755 index 000000000..d3557b0fd --- /dev/null +++ b/en/assets/js/6b289e1f.046c4858.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7560],{92472:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>a,frontMatter:()=>s,metadata:()=>d,toc:()=>c});var n=r(17624),i=r(95788);const s={id:"avr-libc-todo",title:"TODO",slug:"/franzininho-diy/exemplos-avr-libc/todo",description:"Mapeamento dos conte\xfados para exemplos com a AVR LibC"},l=void 0,d={id:"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo",title:"TODO",description:"Mapeamento dos conte\xfados para exemplos com a AVR LibC",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/avr-libc-todo.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/todo",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/todo",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/avr-libc-todo.md",tags:[],version:"current",frontMatter:{id:"avr-libc-todo",title:"TODO",slug:"/franzininho-diy/exemplos-avr-libc/todo",description:"Mapeamento dos conte\xfados para exemplos com a AVR LibC"},sidebar:"docs",previous:{title:"Interrup\xe7\xe3o externa",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/int-ext"},next:{title:"Como simular a Franzininho DIY no Wokwi",permalink:"/en/docs/franzininho-diy/wokwi/primeiros-passos"}},o={},c=[{value:"Reposit\xf3rio de Exemplos",id:"reposit\xf3rio-de-exemplos",level:2}];function x(e){const t={a:"a",h2:"h2",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a AVR LibC com a Franzininho DIY."}),"\n",(0,n.jsx)(t.p,{children:"Fique a vontade para colaborar na constru\xe7\xe3o dos materiais e c\xf3digos."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Exemplos"}),(0,n.jsx)(t.th,{style:{textAlign:"center"},children:"Status"}),(0,n.jsx)(t.th,{children:"Nota"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Primeiros Passos"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Hello, World!"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Sa\xedda Digital"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Entrada Digital"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Timer 0"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Timer 0 - Interrup\xe7\xe3o"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Contador de pulsos externos"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Instrumento musical com Buzzer"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Interrup\xe7\xe3o externa"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udfe2"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Timer0 CTC"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Timer0 PWM"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Timer 1"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Timer 2 Interrup\xe7\xe3o"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Timer 1 PWM"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Conversor AD"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"I2C"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"SPI"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"EEPROM"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Configura\xe7\xe3o de Clock"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Sleep"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Fuse bits"}),(0,n.jsx)(t.td,{style:{textAlign:"center"},children:"\ud83d\udd34"}),(0,n.jsx)(t.td,{})]})]})]}),"\n",(0,n.jsx)(t.p,{children:"Legenda:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"\ud83d\udfe2 Feito"}),"\n",(0,n.jsx)(t.li,{children:"\ud83d\udfe1 Em progresso"}),"\n",(0,n.jsx)(t.li,{children:"\ud83d\udd34 Ainda n\xe3o implementado"}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"reposit\xf3rio-de-exemplos",children:"Reposit\xf3rio de Exemplos"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/Franzininho/exemplos-avr-libc",children:"Exemplos AVR LibC"})}),"\n"]})]})}function a(e={}){const{wrapper:t}={...(0,i.MN)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(x,{...e})}):x(e)}},95788:(e,t,r)=>{r.d(t,{MN:()=>c});var n=r(11504);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var o=n.createContext({}),c=function(e){var t=n.useContext(o),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},x={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},a=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,s=e.originalType,o=e.parentName,a=d(e,["components","mdxType","originalType","parentName"]),h=c(r),j=i,p=h["".concat(o,".").concat(j)]||h[j]||x[j]||s;return r?n.createElement(p,l(l({ref:t},a),{},{components:r})):n.createElement(p,l({ref:t},a))}));a.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/6b289e1f.5c308790.js b/en/assets/js/6b289e1f.5c308790.js deleted file mode 100755 index dbf25f02d..000000000 --- a/en/assets/js/6b289e1f.5c308790.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9226],{3905:(t,e,n)=>{n.d(e,{Zo:()=>d,kt:()=>k});var r=n(7294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var p=r.createContext({}),m=function(t){var e=r.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},d=function(t){var e=m(t.components);return r.createElement(p.Provider,{value:e},t.children)},c="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},s=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,l=t.originalType,p=t.parentName,d=o(t,["components","mdxType","originalType","parentName"]),c=m(n),s=a,k=c["".concat(p,".").concat(s)]||c[s]||u[s]||l;return n?r.createElement(k,i(i({ref:e},d),{},{components:n})):r.createElement(k,i({ref:e},d))}));function k(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var l=n.length,i=new Array(l);i[0]=s;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o[c]="string"==typeof t?t:a,i[1]=o;for(var m=2;m{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>o,toc:()=>m});var r=n(3117),a=(n(7294),n(3905));const l={id:"avr-libc-todo",title:"TODO",slug:"/franzininho-diy/exemplos-avr-libc/todo",description:"Mapeamento dos conte\xfados para exemplos com a AVR LibC"},i=void 0,o={unversionedId:"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo",id:"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo",title:"TODO",description:"Mapeamento dos conte\xfados para exemplos com a AVR LibC",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/avr-libc-todo.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/todo",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/todo",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/avr-libc-todo.md",tags:[],version:"current",frontMatter:{id:"avr-libc-todo",title:"TODO",slug:"/franzininho-diy/exemplos-avr-libc/todo",description:"Mapeamento dos conte\xfados para exemplos com a AVR LibC"},sidebar:"docs",previous:{title:"Interrup\xe7\xe3o externa",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/int-ext"},next:{title:"Como simular a Franzininho DIY no Wokwi",permalink:"/en/docs/franzininho-diy/wokwi/primeiros-passos"}},p={},m=[{value:"Reposit\xf3rio de Exemplos",id:"reposit\xf3rio-de-exemplos",level:2}],d={toc:m},c="wrapper";function u(t){let{components:e,...n}=t;return(0,a.kt)(c,(0,r.Z)({},d,n,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a AVR LibC com a Franzininho DIY. "),(0,a.kt)("p",null,"Fique a vontade para colaborar na constru\xe7\xe3o dos materiais e c\xf3digos."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Exemplos"),(0,a.kt)("th",{parentName:"tr",align:"center"},"Status"),(0,a.kt)("th",{parentName:"tr",align:null},"Nota"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Primeiros Passos"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Hello, World!"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Sa\xedda Digital"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Entrada Digital"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Timer 0"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Timer 0 - Interrup\xe7\xe3o"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Contador de pulsos externos"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Instrumento musical com Buzzer"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Interrup\xe7\xe3o externa"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udfe2"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Timer0 CTC"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Timer0 PWM"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Timer 1"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Timer 2 Interrup\xe7\xe3o"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Timer 1 PWM"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Conversor AD"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"I2C"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"SPI"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"EEPROM"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Configura\xe7\xe3o de Clock"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Sleep"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Fuse bits"),(0,a.kt)("td",{parentName:"tr",align:"center"},"\ud83d\udd34"),(0,a.kt)("td",{parentName:"tr",align:null})))),(0,a.kt)("p",null,"Legenda: "),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\ud83d\udfe2 Feito"),(0,a.kt)("li",{parentName:"ul"},"\ud83d\udfe1 Em progresso"),(0,a.kt)("li",{parentName:"ul"},"\ud83d\udd34 Ainda n\xe3o implementado")),(0,a.kt)("h2",{id:"reposit\xf3rio-de-exemplos"},"Reposit\xf3rio de Exemplos"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/exemplos-avr-libc"},"Exemplos AVR LibC"))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/6d6d470f.03bf544a.js b/en/assets/js/6d6d470f.03bf544a.js new file mode 100755 index 000000000..0d1c1c9f0 --- /dev/null +++ b/en/assets/js/6d6d470f.03bf544a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8448],{2008:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=n(17624),a=n(95788);const o={id:"franzininho-wifi-dev-edition",title:"Placa Franzininho WiFi dev Edition",slug:"/franzininho-wifi/franzininho-wifi-dev-edition",description:"Detalhes da Franzininho WiFi Developer Edition"},t=void 0,s={id:"FranzininhoWifi/franzininho-wifi-dev-edition",title:"Placa Franzininho WiFi dev Edition",description:"Detalhes da Franzininho WiFi Developer Edition",source:"@site/docs/FranzininhoWifi/franzininho-wifi-dev-edition.md",sourceDirName:"FranzininhoWifi",slug:"/franzininho-wifi/franzininho-wifi-dev-edition",permalink:"/en/docs/franzininho-wifi/franzininho-wifi-dev-edition",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/franzininho-wifi-dev-edition.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-dev-edition",title:"Placa Franzininho WiFi dev Edition",slug:"/franzininho-wifi/franzininho-wifi-dev-edition",description:"Detalhes da Franzininho WiFi Developer Edition"},sidebar:"docs",previous:{title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",permalink:"/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais"},next:{title:"Franzininho WiFi LAB01",permalink:"/en/docs/franzininho-wifi-lab01"}},c={},d=[{value:"Caracter\xedsticas",id:"caracter\xedsticas",level:2},{value:"Pinout",id:"pinout",level:2},{value:"Licen\xe7a",id:"licen\xe7a",level:2}];function l(e){const i={a:"a",admonition:"admonition",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,a.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.admonition,{title:"Aten\xe7\xe3o",type:"caution",children:(0,r.jsx)(i.p,{children:"Essa placa foi feita apenas como prot\xf3tipo. N\xe3o est\xe1 em produ\xe7\xe3o"})}),"\n",(0,r.jsx)(i.p,{children:"A Franzininho WiFi Developer Edition \xe9 uma placa de desenvolvimento para avaliar os m\xf3dulos ESP32-S2 (Wroom e Wrover) e desenvolver a nova gera\xe7\xe3o de placas Franzininho. O projeto Franzininho foi criado para desenvolver habilidades em pessoas nas \xe1reas de eletr\xf4nica e programa\xe7\xe3o, por meio de atividades no formato DIY e em conjunto com a cultura maker, no Brasil."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"Placa Franzininho WiFi Developer Edition Front",src:n(75820).c+"",width:"852",height:"449"})}),"\n",(0,r.jsx)(i.p,{children:"Como n\xe3o existem muitas placas no mercado brasileiro com ESP32-S2, desenvolvemos o Franzininho WiFi Developer Edition (em 2020) para servir como plataforma de desenvolvimento ESP32-S2 e nos ajudar a avaliar e validar aplica\xe7\xf5es com este SoC."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"Placa Franzininho WiFi Developer Edition",src:n(89160).c+"",width:"792",height:"517"})}),"\n",(0,r.jsx)(i.h2,{id:"caracter\xedsticas",children:"Caracter\xedsticas"}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsxs)(i.li,{children:["ESP32-S2 module( Wrover ou Wroom):","\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsx)(i.li,{children:"Xtensa\xaesingle-core32-bit LX7 microprocessor, up to 240 MHz"}),"\n",(0,r.jsx)(i.li,{children:"128 KB ROM"}),"\n",(0,r.jsx)(i.li,{children:"320 KB SRAM"}),"\n",(0,r.jsx)(i.li,{children:"16 KB SRAM in RTC"}),"\n",(0,r.jsx)(i.li,{children:"2 MB (8 Mbit) PSRAM ( Only with Wrover Module)"}),"\n",(0,r.jsx)(i.li,{children:"WiFi 802.11 b/g/n"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(i.li,{children:"Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera interface, IR, pulse counter, LED PWM, TWAI(compatible with ISO 11898-1), USB 1.1OTG, ADC, DAC, touch sensor, temperature sensor."}),"\n",(0,r.jsx)(i.li,{children:"USB Type-A Male"}),"\n",(0,r.jsx)(i.li,{children:"RGB LED (WS2812) (GPIO 18)"}),"\n",(0,r.jsx)(i.li,{children:"40 pin broken out to 2x20 2.54mm header pins(36 GPIO) - Breadboard Friendly"}),"\n",(0,r.jsx)(i.li,{children:"Reset and DFU (BOOT0) buttons to get into the ROM bootloader (which is a USB serial port so you don\u2019t need a separate cable!)"}),"\n",(0,r.jsx)(i.li,{children:"Serial debug pins ( TX and RX, for checking the hardware serial debug console)\nJTAG pads for advanced debugging access."}),"\n",(0,r.jsx)(i.li,{children:"3.3 V Power On LED"}),"\n",(0,r.jsx)(i.li,{children:"3.3 V Regulator"}),"\n",(0,r.jsxs)(i.li,{children:["Power:","\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsx)(i.li,{children:"Micro USB port (default power supply)"}),"\n",(0,r.jsx)(i.li,{children:"5V and GND header pins"}),"\n",(0,r.jsx)(i.li,{children:"3V3 and GND header pins"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(i.li,{children:"Dimensions: 72 mm x 30 mm"}),"\n",(0,r.jsxs)(i.li,{children:["Works with ",(0,r.jsx)(i.a,{href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/index.html",children:"ESP-IDF"})," or ",(0,r.jsx)(i.a,{href:"https://circuitpython.org/",children:"CircuitPython"})]}),"\n"]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"Placa Franzininho WiFi Developer Edition back",src:n(32080).c+"",width:"784",height:"492"})}),"\n",(0,r.jsx)(i.h2,{id:"pinout",children:"Pinout"}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"Pinout placa Franzininho WiFi Developer Edition",src:n(55380).c+"",width:"2138",height:"1417"})}),"\n",(0,r.jsx)(i.h2,{id:"licen\xe7a",children:"Licen\xe7a"}),"\n",(0,r.jsx)(i.p,{children:"O projeto \xe9 um hardware de c\xf3digo aberto e est\xe1 dispon\xedvel na licen\xe7a de hardware aberto do CERN."}),"\n",(0,r.jsxs)(i.p,{children:["A placa Franzininho WiFi Developer Edition \xe9 certificada na OSHWA:\n",(0,r.jsx)(i.a,{href:"https://certification.oshwa.org/br000006.html",children:"UID BR000006"})]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"oshwa",src:n(51836).c+"",width:"900",height:"660"})})]})}function h(e={}){const{wrapper:i}={...(0,a.MN)(),...e.components};return i?(0,r.jsx)(i,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},95788:(e,i,n)=>{n.d(i,{MN:()=>d});var r=n(11504);function a(e,i,n){return i in e?Object.defineProperty(e,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[i]=n,e}function o(e,i){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);i&&(r=r.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),n.push.apply(n,r)}return n}function t(e){for(var i=1;i=0||(a[n]=e[n]);return a}(e,i);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),d=function(e){var i=r.useContext(c),n=i;return e&&(n="function"==typeof e?e(i):t(t({},i),e)),n},l={inlineCode:"code",wrapper:function(e){var i=e.children;return r.createElement(r.Fragment,{},i)}},h=r.forwardRef((function(e,i){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,h=s(e,["components","mdxType","originalType","parentName"]),p=d(n),f=a,u=p["".concat(c,".").concat(f)]||p[f]||l[f]||o;return n?r.createElement(u,t(t({ref:i},h),{},{components:n})):r.createElement(u,t({ref:i},h))}));h.displayName="MDXCreateElement"},51836:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/OSHW_mark_BR000006-d3520baa4e06ecf07d8ffc4e77efc865.png"},32080:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/back-7e00c997c9b7384d1b1802e74d36763f.jpeg"},89160:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/front-4c0319330ac58760d0a1d8d19f8d84ed.jpeg"},55380:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/pinagem-franzininho-wifi-3ee791cdc4872c0837b81cd12994e047.png"},75820:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/placaFranzininhoWiFi-a2a75be880fd864e7e155166d4e669af.jpeg"}}]); \ No newline at end of file diff --git a/en/assets/js/6d6d470f.75487779.js b/en/assets/js/6d6d470f.75487779.js deleted file mode 100755 index 20aaed94c..000000000 --- a/en/assets/js/6d6d470f.75487779.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3020],{3905:(e,i,n)=>{n.d(i,{Zo:()=>d,kt:()=>f});var t=n(7294);function a(e,i,n){return i in e?Object.defineProperty(e,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[i]=n,e}function r(e,i){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);i&&(t=t.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),n.push.apply(n,t)}return n}function o(e){for(var i=1;i=0||(a[n]=e[n]);return a}(e,i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=t.createContext({}),p=function(e){var i=t.useContext(s),n=i;return e&&(n="function"==typeof e?e(i):o(o({},i),e)),n},d=function(e){var i=p(e.components);return t.createElement(s.Provider,{value:i},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var i=e.children;return t.createElement(t.Fragment,{},i)}},m=t.forwardRef((function(e,i){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=p(n),m=a,f=c["".concat(s,".").concat(m)]||c[m]||u[m]||r;return n?t.createElement(f,o(o({ref:i},d),{},{components:n})):t.createElement(f,o({ref:i},d))}));function f(e,i){var n=arguments,a=i&&i.mdxType;if("string"==typeof e||a){var r=n.length,o=new Array(r);o[0]=m;var l={};for(var s in i)hasOwnProperty.call(i,s)&&(l[s]=i[s]);l.originalType=e,l[c]="string"==typeof e?e:a,o[1]=l;for(var p=2;p{n.r(i),n.d(i,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var t=n(3117),a=(n(7294),n(3905));const r={id:"franzininho-wifi-dev-edition",title:"Placa Franzininho WiFi dev Edition",slug:"/franzininho-wifi/franzininho-wifi-dev-edition",description:"Detalhes da Franzininho WiFi Developer Edition"},o=void 0,l={unversionedId:"FranzininhoWifi/franzininho-wifi-dev-edition",id:"FranzininhoWifi/franzininho-wifi-dev-edition",title:"Placa Franzininho WiFi dev Edition",description:"Detalhes da Franzininho WiFi Developer Edition",source:"@site/docs/FranzininhoWifi/franzininho-wifi-dev-edition.md",sourceDirName:"FranzininhoWifi",slug:"/franzininho-wifi/franzininho-wifi-dev-edition",permalink:"/en/docs/franzininho-wifi/franzininho-wifi-dev-edition",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/franzininho-wifi-dev-edition.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-dev-edition",title:"Placa Franzininho WiFi dev Edition",slug:"/franzininho-wifi/franzininho-wifi-dev-edition",description:"Detalhes da Franzininho WiFi Developer Edition"},sidebar:"docs",previous:{title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",permalink:"/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais"},next:{title:"Franzininho WiFi LAB01",permalink:"/en/docs/franzininho-wifi-lab01"}},s={},p=[{value:"Caracter\xedsticas",id:"caracter\xedsticas",level:2},{value:"Pinout",id:"pinout",level:2},{value:"Licen\xe7a",id:"licen\xe7a",level:2}],d={toc:p},c="wrapper";function u(e){let{components:i,...r}=e;return(0,a.kt)(c,(0,t.Z)({},d,r,{components:i,mdxType:"MDXLayout"}),(0,a.kt)("admonition",{title:"Aten\xe7\xe3o",type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Essa placa foi feita apenas como prot\xf3tipo. N\xe3o est\xe1 em produ\xe7\xe3o")),(0,a.kt)("p",null,"A Franzininho WiFi Developer Edition \xe9 uma placa de desenvolvimento para avaliar os m\xf3dulos ESP32-S2 (Wroom e Wrover) e desenvolver a nova gera\xe7\xe3o de placas Franzininho. O projeto Franzininho foi criado para desenvolver habilidades em pessoas nas \xe1reas de eletr\xf4nica e programa\xe7\xe3o, por meio de atividades no formato DIY e em conjunto com a cultura maker, no Brasil."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Placa Franzininho WiFi Developer Edition Front",src:n(8167).Z,width:"852",height:"449"})),(0,a.kt)("p",null,"Como n\xe3o existem muitas placas no mercado brasileiro com ESP32-S2, desenvolvemos o Franzininho WiFi Developer Edition (em 2020) para servir como plataforma de desenvolvimento ESP32-S2 e nos ajudar a avaliar e validar aplica\xe7\xf5es com este SoC."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Placa Franzininho WiFi Developer Edition",src:n(9825).Z,width:"792",height:"517"})),(0,a.kt)("h2",{id:"caracter\xedsticas"},"Caracter\xedsticas"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"ESP32-S2 module( Wrover ou Wroom): ",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Xtensa\xaesingle-core32-bit LX7 microprocessor, up to 240 MHz"),(0,a.kt)("li",{parentName:"ul"},"128 KB ROM"),(0,a.kt)("li",{parentName:"ul"},"320 KB SRAM"),(0,a.kt)("li",{parentName:"ul"},"16 KB SRAM in RTC"),(0,a.kt)("li",{parentName:"ul"},"2 MB (8 Mbit) PSRAM ( Only with Wrover Module)"),(0,a.kt)("li",{parentName:"ul"},"WiFi 802.11 b/g/n"))),(0,a.kt)("li",{parentName:"ul"},"Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera interface, IR, pulse counter, LED PWM, TWAI(compatible with ISO 11898-1), USB 1.1OTG, ADC, DAC, touch sensor, temperature sensor."),(0,a.kt)("li",{parentName:"ul"},"USB Type-A Male"),(0,a.kt)("li",{parentName:"ul"},"RGB LED (WS2812) (GPIO 18)"),(0,a.kt)("li",{parentName:"ul"},"40 pin broken out to 2x20 2.54mm header pins(36 GPIO) - Breadboard Friendly"),(0,a.kt)("li",{parentName:"ul"},"Reset and DFU (BOOT0) buttons to get into the ROM bootloader (which is a USB serial port so you don\u2019t need a separate cable!)"),(0,a.kt)("li",{parentName:"ul"},"Serial debug pins ( TX and RX, for checking the hardware serial debug console)\nJTAG pads for advanced debugging access."),(0,a.kt)("li",{parentName:"ul"},"3.3 V Power On LED"),(0,a.kt)("li",{parentName:"ul"},"3.3 V Regulator"),(0,a.kt)("li",{parentName:"ul"},"Power: ",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Micro USB port (default power supply)"),(0,a.kt)("li",{parentName:"ul"},"5V and GND header pins"),(0,a.kt)("li",{parentName:"ul"},"3V3 and GND header pins"))),(0,a.kt)("li",{parentName:"ul"},"Dimensions: 72 mm x 30 mm"),(0,a.kt)("li",{parentName:"ul"},"Works with ",(0,a.kt)("a",{parentName:"li",href:"https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/index.html"},"ESP-IDF")," or ",(0,a.kt)("a",{parentName:"li",href:"https://circuitpython.org/"},"CircuitPython"))),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Placa Franzininho WiFi Developer Edition back",src:n(1378).Z,width:"784",height:"492"})),(0,a.kt)("h2",{id:"pinout"},"Pinout"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Pinout placa Franzininho WiFi Developer Edition",src:n(3381).Z,width:"2138",height:"1417"})),(0,a.kt)("h2",{id:"licen\xe7a"},"Licen\xe7a"),(0,a.kt)("p",null,"O projeto \xe9 um hardware de c\xf3digo aberto e est\xe1 dispon\xedvel na licen\xe7a de hardware aberto do CERN."),(0,a.kt)("p",null,"A placa Franzininho WiFi Developer Edition \xe9 certificada na OSHWA:\n",(0,a.kt)("a",{parentName:"p",href:"https://certification.oshwa.org/br000006.html"},"UID BR000006")),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"oshwa",src:n(4272).Z,width:"900",height:"660"})))}u.isMDXComponent=!0},4272:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/OSHW_mark_BR000006-d3520baa4e06ecf07d8ffc4e77efc865.png"},1378:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/back-7e00c997c9b7384d1b1802e74d36763f.jpeg"},9825:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/front-4c0319330ac58760d0a1d8d19f8d84ed.jpeg"},3381:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/pinagem-franzininho-wifi-3ee791cdc4872c0837b81cd12994e047.png"},8167:(e,i,n)=>{n.d(i,{Z:()=>t});const t=n.p+"assets/images/placaFranzininhoWiFi-a2a75be880fd864e7e155166d4e669af.jpeg"}}]); \ No newline at end of file diff --git a/en/assets/js/6da7bcf7.bbd9ed21.js b/en/assets/js/6da7bcf7.bbd9ed21.js new file mode 100755 index 000000000..62ae29fad --- /dev/null +++ b/en/assets/js/6da7bcf7.bbd9ed21.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8292],{69484:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>t,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>d});var r=n(17624),o=n(95788);const a={id:"drivers-micronucleus",title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",slug:"/franzininho-diy/drivers-micronucleus",description:"Instala\xe7\xe3o dos drivers USB para correto funcionamento"},t=void 0,s={id:"FranzininhoDIY/bootloader/drivers-micronucleus",title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",description:"Instala\xe7\xe3o dos drivers USB para correto funcionamento",source:"@site/docs/FranzininhoDIY/bootloader/drivers.md",sourceDirName:"FranzininhoDIY/bootloader",slug:"/franzininho-diy/drivers-micronucleus",permalink:"/en/docs/franzininho-diy/drivers-micronucleus",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/bootloader/drivers.md",tags:[],version:"current",frontMatter:{id:"drivers-micronucleus",title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",slug:"/franzininho-diy/drivers-micronucleus",description:"Instala\xe7\xe3o dos drivers USB para correto funcionamento"},sidebar:"docs",previous:{title:"Bootloader",permalink:"/en/docs/franzininho-diy/bootloader"},next:{title:"Configura\xe7\xe3o da Arduino IDE",permalink:"/en/docs/franzininho-diy/pacote"}},c={},d=[{value:"Windows",id:"windows",level:2},{value:"Linux",id:"linux",level:2}];function l(e){const i={a:"a",admonition:"admonition",h2:"h2",img:"img",p:"p",...(0,o.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.p,{children:"At\xe9 aqui voc\xea possui a placa pronta!"}),"\n",(0,r.jsx)(i.p,{children:"Agora precisamos instalar os drivers necess\xe1rio para que a USB da Franzininho DIY possa receber os c\xf3digos atrav\xe9s da Arduino IDE."}),"\n",(0,r.jsx)(i.p,{children:"A seguir s\xe3o apresentados os passos para correta configura\xe7\xe3o, conforme o sistema operacional usado."}),"\n",(0,r.jsx)(i.h2,{id:"windows",children:"Windows"}),"\n",(0,r.jsxs)(i.p,{children:["Fa\xe7a o download do driver no seguinte link: ",(0,r.jsx)(i.a,{href:"https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip",children:"https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip"})]}),"\n",(0,r.jsx)(i.p,{children:"Descompacte."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"instalando drive",src:n(90508).c+"",width:"512",height:"315"})}),"\n",(0,r.jsx)(i.p,{children:"Abra a pasta!"}),"\n",(0,r.jsx)(i.p,{children:"Dentro dela ter\xe1 v\xe1rios arquivos, v\xe1 at\xe9 as op\xe7\xf5es abaixo:"}),"\n",(0,r.jsx)(i.p,{children:"Para Windows 32 bits execute o DPinst.exe e se tiver usando o Windows 64 bits execute o DPinst64.exe"}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"instalando drive",src:n(38844).c+"",width:"1600",height:"984"})}),"\n",(0,r.jsx)(i.p,{children:"Ao selecionar um deles d\xea dois cliques e ir\xe1 aparecer uma janela, pressione sim, ent\xe3o aparecer\xe1 outra janela e clique em avan\xe7ar."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"instalando drive",src:n(8216).c+"",width:"500",height:"389"})}),"\n",(0,r.jsx)(i.p,{children:"Aguarde a instala\xe7\xe3o e clique em concluir!"}),"\n",(0,r.jsx)(i.p,{children:"Maravilha, agora veremos se realmente o driver foi instalado."}),"\n",(0,r.jsx)(i.p,{children:"Plugue seu Franzininho na USB do seu computador e abra o gerenciador de dispositivo."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"instalando drive",src:n(18384).c+"",width:"512",height:"396"})}),"\n",(0,r.jsx)(i.p,{children:"Se aparecer libusb ou digispark, maravilha foi instalado com sucesso!"}),"\n",(0,r.jsx)(i.admonition,{title:"N\xe3o esque\xe7a de plugar a Franzininho em seu computador, pois se n\xe3o. N\xe3o ir\xe1 aparecer!",type:"warning"}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"instalando drive",src:n(38096).c+"",width:"1308",height:"966"})}),"\n",(0,r.jsxs)(i.p,{children:["Fonte: ",(0,r.jsx)(i.a,{href:"http://digistump.com/wiki/digispark/tutorials/connecting",children:"http://digistump.com/wiki/digispark/tutorials/connecting"})]}),"\n",(0,r.jsx)(i.h2,{id:"linux",children:"Linux"}),"\n",(0,r.jsx)(i.p,{children:"Fa\xe7a o seguinte procedimento"}),"\n",(0,r.jsxs)(i.p,{children:["Linux Troubleshooting: ",(0,r.jsx)(i.a,{href:"http://digistump.com/wiki/digispark/tutorials/linuxtroubleshooting",children:"http://digistump.com/wiki/digispark/tutorials/linuxtroubleshooting"})]})]})}function u(e={}){const{wrapper:i}={...(0,o.MN)(),...e.components};return i?(0,r.jsx)(i,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},95788:(e,i,n)=>{n.d(i,{MN:()=>d});var r=n(11504);function o(e,i,n){return i in e?Object.defineProperty(e,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[i]=n,e}function a(e,i){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);i&&(r=r.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),n.push.apply(n,r)}return n}function t(e){for(var i=1;i=0||(o[n]=e[n]);return o}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),d=function(e){var i=r.useContext(c),n=i;return e&&(n="function"==typeof e?e(i):t(t({},i),e)),n},l={inlineCode:"code",wrapper:function(e){var i=e.children;return r.createElement(r.Fragment,{},i)}},u=r.forwardRef((function(e,i){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=d(n),m=o,h=p["".concat(c,".").concat(m)]||p[m]||l[m]||a;return n?r.createElement(h,t(t({ref:i},u),{},{components:n})):r.createElement(h,t({ref:i},u))}));u.displayName="MDXCreateElement"},90508:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/imagem1-55713c352d357089e7567e4b64ea6117.png"},38844:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/imagem2-770c6fccd5193b12ac18d230ade94bdb.png"},8216:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/imagem3-a18e79cf7427506529aee7d9333433a5.png"},18384:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/imagem4-88a2c677015dd3904d35cc788e537ae6.png"},38096:(e,i,n)=>{n.d(i,{c:()=>r});const r=n.p+"assets/images/imagem5-b292a12333da269a6bce1870fd64dd26.png"}}]); \ No newline at end of file diff --git a/en/assets/js/6da7bcf7.c24e360a.js b/en/assets/js/6da7bcf7.c24e360a.js deleted file mode 100755 index b66cd9119..000000000 --- a/en/assets/js/6da7bcf7.c24e360a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9515],{3905:(e,r,n)=>{n.d(r,{Zo:()=>c,kt:()=>g});var t=n(7294);function i(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function o(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function a(e){for(var r=1;r=0||(i[n]=e[n]);return i}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=t.createContext({}),d=function(e){var r=t.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):a(a({},r),e)),n},c=function(e){var r=d(e.components);return t.createElement(l.Provider,{value:r},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},m=t.forwardRef((function(e,r){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=d(n),m=i,g=u["".concat(l,".").concat(m)]||u[m]||p[m]||o;return n?t.createElement(g,a(a({ref:r},c),{},{components:n})):t.createElement(g,a({ref:r},c))}));function g(e,r){var n=arguments,i=r&&r.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=m;var s={};for(var l in r)hasOwnProperty.call(r,l)&&(s[l]=r[l]);s.originalType=e,s[u]="string"==typeof e?e:i,a[1]=s;for(var d=2;d{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>a,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var t=n(3117),i=(n(7294),n(3905));const o={id:"drivers-micronucleus",title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",slug:"/franzininho-diy/drivers-micronucleus",description:"Instala\xe7\xe3o dos drivers USB para correto funcionamento"},a=void 0,s={unversionedId:"FranzininhoDIY/bootloader/drivers-micronucleus",id:"FranzininhoDIY/bootloader/drivers-micronucleus",title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",description:"Instala\xe7\xe3o dos drivers USB para correto funcionamento",source:"@site/docs/FranzininhoDIY/bootloader/drivers.md",sourceDirName:"FranzininhoDIY/bootloader",slug:"/franzininho-diy/drivers-micronucleus",permalink:"/en/docs/franzininho-diy/drivers-micronucleus",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/bootloader/drivers.md",tags:[],version:"current",frontMatter:{id:"drivers-micronucleus",title:"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB",slug:"/franzininho-diy/drivers-micronucleus",description:"Instala\xe7\xe3o dos drivers USB para correto funcionamento"},sidebar:"docs",previous:{title:"Bootloader",permalink:"/en/docs/franzininho-diy/bootloader"},next:{title:"Configura\xe7\xe3o da Arduino IDE",permalink:"/en/docs/franzininho-diy/pacote"}},l={},d=[{value:"Windows",id:"windows",level:2},{value:"Linux",id:"linux",level:2}],c={toc:d},u="wrapper";function p(e){let{components:r,...o}=e;return(0,i.kt)(u,(0,t.Z)({},c,o,{components:r,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"At\xe9 aqui voc\xea possui a placa pronta!"),(0,i.kt)("p",null,"Agora precisamos instalar os drivers necess\xe1rio para que a USB da Franzininho DIY possa receber os c\xf3digos atrav\xe9s da Arduino IDE."),(0,i.kt)("p",null,"A seguir s\xe3o apresentados os passos para correta configura\xe7\xe3o, conforme o sistema operacional usado."),(0,i.kt)("h2",{id:"windows"},"Windows"),(0,i.kt)("p",null,"Fa\xe7a o download do driver no seguinte link: ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip"},"https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip")),(0,i.kt)("p",null,"Descompacte."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"instalando drive",src:n(6433).Z,width:"512",height:"315"})),(0,i.kt)("p",null,"Abra a pasta!"),(0,i.kt)("p",null,"Dentro dela ter\xe1 v\xe1rios arquivos, v\xe1 at\xe9 as op\xe7\xf5es abaixo:"),(0,i.kt)("p",null,"Para Windows 32 bits execute o DPinst.exe e se tiver usando o Windows 64 bits execute o DPinst64.exe"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"instalando drive",src:n(5438).Z,width:"1600",height:"984"})),(0,i.kt)("p",null,"Ao selecionar um deles d\xea dois cliques e ir\xe1 aparecer uma janela, pressione sim, ent\xe3o aparecer\xe1 outra janela e clique em avan\xe7ar."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"instalando drive",src:n(4346).Z,width:"500",height:"389"})),(0,i.kt)("p",null,"Aguarde a instala\xe7\xe3o e clique em concluir!"),(0,i.kt)("p",null,"Maravilha, agora veremos se realmente o driver foi instalado."),(0,i.kt)("p",null,"Plugue seu Franzininho na USB do seu computador e abra o gerenciador de dispositivo."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"instalando drive",src:n(8713).Z,width:"512",height:"396"})),(0,i.kt)("p",null,"Se aparecer libusb ou digispark, maravilha foi instalado com sucesso!"),(0,i.kt)("admonition",{title:"N\xe3o esque\xe7a de plugar a Franzininho em seu computador, pois se n\xe3o. N\xe3o ir\xe1 aparecer!",type:"warning"}),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"instalando drive",src:n(4506).Z,width:"1308",height:"966"})),(0,i.kt)("p",null,"Fonte: ",(0,i.kt)("a",{parentName:"p",href:"http://digistump.com/wiki/digispark/tutorials/connecting"},"http://digistump.com/wiki/digispark/tutorials/connecting")),(0,i.kt)("h2",{id:"linux"},"Linux"),(0,i.kt)("p",null,"Fa\xe7a o seguinte procedimento"),(0,i.kt)("p",null,"Linux Troubleshooting: ",(0,i.kt)("a",{parentName:"p",href:"http://digistump.com/wiki/digispark/tutorials/linuxtroubleshooting"},"http://digistump.com/wiki/digispark/tutorials/linuxtroubleshooting")))}p.isMDXComponent=!0},6433:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/imagem1-55713c352d357089e7567e4b64ea6117.png"},5438:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/imagem2-770c6fccd5193b12ac18d230ade94bdb.png"},4346:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/imagem3-a18e79cf7427506529aee7d9333433a5.png"},8713:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/imagem4-88a2c677015dd3904d35cc788e537ae6.png"},4506:(e,r,n)=>{n.d(r,{Z:()=>t});const t=n.p+"assets/images/imagem5-b292a12333da269a6bce1870fd64dd26.png"}}]); \ No newline at end of file diff --git a/en/assets/js/6e2ab842.3ede0e29.js b/en/assets/js/6e2ab842.3ede0e29.js new file mode 100755 index 000000000..8b153a969 --- /dev/null +++ b/en/assets/js/6e2ab842.3ede0e29.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4268],{23156:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>t,metadata:()=>d,toc:()=>c});var r=a(17624),n=a(95788);const t={id:"badge",title:"Badge - Aprenda a soldar",slug:"/badge/badge",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},i=void 0,d={id:"Badge/badge",title:"Badge - Aprenda a soldar",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.",source:"@site/docs/Badge/badge.md",sourceDirName:"Badge",slug:"/badge/badge",permalink:"/en/docs/badge/badge",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Badge/badge.md",tags:[],version:"current",frontMatter:{id:"badge",title:"Badge - Aprenda a soldar",slug:"/badge/badge",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},sidebar:"docs",previous:{title:"Placa FranzBoy",permalink:"/en/docs/FranzBoy/franzboy"},next:{title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",permalink:"/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot"}},s={},c=[{value:"O que \xe9 Badge?",id:"o-que-\xe9-badge",level:2},{value:"Contrate uma oficina ou adquira kit do Badge Aprenda Soldar",id:"contrate-uma-oficina-ou-adquira-kit-do-badge-aprenda-soldar",level:2}];function p(e){const o={a:"a",admonition:"admonition",h2:"h2",img:"img",p:"p",...(0,n.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.h2,{id:"o-que-\xe9-badge",children:"O que \xe9 Badge?"}),"\n",(0,r.jsx)(o.p,{children:"O badge Aprenda Soldar foi desenvolvido para oficinas de solda onde os participantes d\xe3o os primeiros passos com o uso de ferramentas de soldagem e adquirem conhecimento dos componentes eletr\xf4nicos e circuito da placa."}),"\n",(0,r.jsx)(o.p,{children:"Com poucos componentes, esse badge permite que qualquer pessoa aprenda a soldar e se divertir."}),"\n",(0,r.jsx)(o.p,{children:(0,r.jsx)(o.img,{alt:"montagem Badge",src:a(80548).c+"",width:"900",height:"675"})}),"\n",(0,r.jsx)(o.p,{children:"O circuito escolhido para esse badge, foi o cl\xe1ssico multivibrador ast\xe1vel com transistores. Ao final da soldagem os olhos do rob\xf4 piscam, e placa est\xe1 pronta para usar como colar ou chaveiro."}),"\n",(0,r.jsx)(o.p,{children:"Durante a oficina os participantes conseguem aprender a usar o ferro de solda e como \xe9 o processo de soldagem de componentes PTH em uma placa."}),"\n",(0,r.jsx)(o.p,{children:"As oficinas com o Badge Aprenda Soldar s\xe3o direcionadas para adultos e adolescentes com interesse em aprender sobre soldagem eletr\xf4nica. A oficina dura em m\xe9dia 1 h, dependendo da quantidade de pessoas no grupo."}),"\n",(0,r.jsx)(o.admonition,{title:'Premia\xe7\xe3o: Contest badge Love na categoria "The Badge of Hope\ufeff"',type:"tip"}),"\n",(0,r.jsx)(o.p,{children:"Esse projeto foi um dos vencedores do Contest badge Love na categoria The Badge of Hope, promovido pelo Hackster\ufeff \ufeff O projeto \xe9 open hardware e foi publicado sob a licen\xe7a Creative Commons Attribution Share Alike 4.0 International\ufeff"}),"\n",(0,r.jsx)(o.h2,{id:"contrate-uma-oficina-ou-adquira-kit-do-badge-aprenda-soldar",children:"Contrate uma oficina ou adquira kit do Badge Aprenda Soldar"}),"\n",(0,r.jsxs)(o.p,{children:["Para adquirir placas e kits do Badge Aprenda Soldar ou oficinas, entre em contato conosco: ",(0,r.jsx)(o.a,{href:"mailto:contato@franzininho.com.br",children:"contato@franzininho.com.br"}),"\ufeff"]}),"\n",(0,r.jsx)(o.p,{children:"Fotos de oficinas com Badge Aprenda Soldar"}),"\n",(0,r.jsx)(o.p,{children:(0,r.jsx)(o.img,{alt:"montagem Badge",src:a(56968).c+"",width:"2000",height:"1600"})})]})}function m(e={}){const{wrapper:o}={...(0,n.MN)(),...e.components};return o?(0,r.jsx)(o,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},95788:(e,o,a)=>{a.d(o,{MN:()=>c});var r=a(11504);function n(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function t(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);o&&(r=r.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var o=1;o=0||(n[a]=e[a]);return n}(e,o);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),c=function(e){var o=r.useContext(s),a=o;return e&&(a="function"==typeof e?e(o):i(i({},o),e)),a},p={inlineCode:"code",wrapper:function(e){var o=e.children;return r.createElement(r.Fragment,{},o)}},m=r.forwardRef((function(e,o){var a=e.components,n=e.mdxType,t=e.originalType,s=e.parentName,m=d(e,["components","mdxType","originalType","parentName"]),l=c(a),u=n,f=l["".concat(s,".").concat(u)]||l[u]||p[u]||t;return a?r.createElement(f,i(i({ref:o},m),{},{components:a})):r.createElement(f,i({ref:o},m))}));m.displayName="MDXCreateElement"},56968:(e,o,a)=>{a.d(o,{c:()=>r});const r=a.p+"assets/images/oficinas-57a5fef71b5d7ee7d1e002a56ac4959a.png"},80548:(e,o,a)=>{a.d(o,{c:()=>r});const r=a.p+"assets/images/project-badge-aprenda-soldar-00-e68e0962b230233de45052f9516773be.jpeg"}}]); \ No newline at end of file diff --git a/en/assets/js/6e2ab842.bbdfc894.js b/en/assets/js/6e2ab842.bbdfc894.js deleted file mode 100755 index 7ca3ea744..000000000 --- a/en/assets/js/6e2ab842.bbdfc894.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3567],{3905:(e,a,o)=>{o.d(a,{Zo:()=>p,kt:()=>f});var r=o(7294);function t(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function n(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,r)}return o}function i(e){for(var a=1;a=0||(t[o]=e[o]);return t}(e,a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var s=r.createContext({}),c=function(e){var a=r.useContext(s),o=a;return e&&(o="function"==typeof e?e(a):i(i({},a),e)),o},p=function(e){var a=c(e.components);return r.createElement(s.Provider,{value:a},e.children)},l="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},m=r.forwardRef((function(e,a){var o=e.components,t=e.mdxType,n=e.originalType,s=e.parentName,p=d(e,["components","mdxType","originalType","parentName"]),l=c(o),m=t,f=l["".concat(s,".").concat(m)]||l[m]||u[m]||n;return o?r.createElement(f,i(i({ref:a},p),{},{components:o})):r.createElement(f,i({ref:a},p))}));function f(e,a){var o=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var n=o.length,i=new Array(n);i[0]=m;var d={};for(var s in a)hasOwnProperty.call(a,s)&&(d[s]=a[s]);d.originalType=e,d[l]="string"==typeof e?e:t,i[1]=d;for(var c=2;c{o.r(a),o.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>n,metadata:()=>d,toc:()=>c});var r=o(3117),t=(o(7294),o(3905));const n={id:"badge",title:"Badge - Aprenda a soldar",slug:"/badge/badge",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},i=void 0,d={unversionedId:"Badge/badge",id:"Badge/badge",title:"Badge - Aprenda a soldar",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.",source:"@site/docs/Badge/badge.md",sourceDirName:"Badge",slug:"/badge/badge",permalink:"/en/docs/badge/badge",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Badge/badge.md",tags:[],version:"current",frontMatter:{id:"badge",title:"Badge - Aprenda a soldar",slug:"/badge/badge",description:"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},sidebar:"docs",previous:{title:"Placa FranzBoy",permalink:"/en/docs/FranzBoy/franzboy"},next:{title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",permalink:"/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot"}},s={},c=[{value:"O que \xe9 Badge?",id:"o-que-\xe9-badge",level:2},{value:"Contrate uma oficina ou adquira kit do Badge Aprenda Soldar",id:"contrate-uma-oficina-ou-adquira-kit-do-badge-aprenda-soldar",level:2}],p={toc:c},l="wrapper";function u(e){let{components:a,...n}=e;return(0,t.kt)(l,(0,r.Z)({},p,n,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("h2",{id:"o-que-\xe9-badge"},"O que \xe9 Badge?"),(0,t.kt)("p",null,"O badge Aprenda Soldar foi desenvolvido para oficinas de solda onde os participantes d\xe3o os primeiros passos com o uso de ferramentas de soldagem e adquirem conhecimento dos componentes eletr\xf4nicos e circuito da placa."),(0,t.kt)("p",null,"Com poucos componentes, esse badge permite que qualquer pessoa aprenda a soldar e se divertir."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"montagem Badge",src:o(4992).Z,width:"900",height:"675"})),(0,t.kt)("p",null,"O circuito escolhido para esse badge, foi o cl\xe1ssico multivibrador ast\xe1vel com transistores. Ao final da soldagem os olhos do rob\xf4 piscam, e placa est\xe1 pronta para usar como colar ou chaveiro."),(0,t.kt)("p",null,"Durante a oficina os participantes conseguem aprender a usar o ferro de solda e como \xe9 o processo de soldagem de componentes PTH em uma placa."),(0,t.kt)("p",null,"As oficinas com o Badge Aprenda Soldar s\xe3o direcionadas para adultos e adolescentes com interesse em aprender sobre soldagem eletr\xf4nica. A oficina dura em m\xe9dia 1 h, dependendo da quantidade de pessoas no grupo."),(0,t.kt)("admonition",{title:'Premia\xe7\xe3o: Contest badge Love na categoria "The Badge of Hope\ufeff"',type:"tip"}),(0,t.kt)("p",null,"Esse projeto foi um dos vencedores do Contest badge Love na categoria The Badge of Hope, promovido pelo Hackster\ufeff \ufeff O projeto \xe9 open hardware e foi publicado sob a licen\xe7a Creative Commons Attribution Share Alike 4.0 International\ufeff"),(0,t.kt)("h2",{id:"contrate-uma-oficina-ou-adquira-kit-do-badge-aprenda-soldar"},"Contrate uma oficina ou adquira kit do Badge Aprenda Soldar"),(0,t.kt)("p",null,"Para adquirir placas e kits do Badge Aprenda Soldar ou oficinas, entre em contato conosco: ",(0,t.kt)("a",{parentName:"p",href:"mailto:contato@franzininho.com.br"},"contato@franzininho.com.br"),"\ufeff"),(0,t.kt)("p",null,"Fotos de oficinas com Badge Aprenda Soldar"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"montagem Badge",src:o(6725).Z,width:"2000",height:"1600"})))}u.isMDXComponent=!0},6725:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/oficinas-57a5fef71b5d7ee7d1e002a56ac4959a.png"},4992:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/project-badge-aprenda-soldar-00-e68e0962b230233de45052f9516773be.jpeg"}}]); \ No newline at end of file diff --git a/en/assets/js/7561b0ae.11734230.js b/en/assets/js/7561b0ae.11734230.js new file mode 100755 index 000000000..cd5e70876 --- /dev/null +++ b/en/assets/js/7561b0ae.11734230.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9488],{89976:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>t,metadata:()=>c,toc:()=>l});var a=r(17624),o=r(95788);const t={id:"franzboy",title:"Placa FranzBoy",slug:"/FranzBoy/franzboy",description:"Detalhes da placa Franzboy"},i=void 0,c={id:"FranzBoy/franzboy",title:"Placa FranzBoy",description:"Detalhes da placa Franzboy",source:"@site/docs/FranzBoy/franzboy.md",sourceDirName:"FranzBoy",slug:"/FranzBoy/franzboy",permalink:"/en/docs/FranzBoy/franzboy",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzBoy/franzboy.md",tags:[],version:"current",frontMatter:{id:"franzboy",title:"Placa FranzBoy",slug:"/FranzBoy/franzboy",description:"Detalhes da placa Franzboy"},sidebar:"docs",previous:{title:"Gravando a Franzino com um placa Arduino UNO",permalink:"/en/docs/Franzino/upload-com-arduino-uno"},next:{title:"Badge - Aprenda a soldar",permalink:"/en/docs/badge/badge"}},s={},l=[{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Confira o video de apresenta\xe7\xe3o da placa",id:"confira-o-video-de-apresenta\xe7\xe3o-da-placa",level:2}];function d(e){const n={a:"a",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,o.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"A placa FranzBoy veio para integrar a fam\xedlia de placas Franzininho em uma nova abordagem. Com o formato de game retro, procura incentivar o desenvolvimento de jogos, e hacks diversos. Voc\xea pode se divertir e aprender muito com eletr\xf4nica e programa\xe7\xe3o."}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Placa FranzBoy",src:r(40912).c+"",width:"1280",height:"960"})}),"\n",(0,a.jsx)(n.p,{children:"Possui um hardware enxuto onde \xe9 explorado (escovando bits) os recursos do Atmega328, em conjunto com Display OLED e teclas, em um formato de badge para voc\xea usar nos eventos."}),"\n",(0,a.jsx)(n.h2,{id:"licen\xe7a",children:"Licen\xe7a"}),"\n",(0,a.jsx)(n.p,{children:"Assim como as placas Franzininho DIY e Franzininho Tiny, a placa FranzBoy tamb\xe9m foi publicada como projeto de hardware aberto. Ela foi publicada sob a licen\xe7a CERN Open Hardware Licence."}),"\n",(0,a.jsx)(n.p,{children:"Conforme definido no \u201chow to\u201d da licen\xe7a, no reposit\xf3rio do projeto est\xe3o inclu\xeddos os seguintes arquivos:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"LICENSE.TXT"}),"\n",(0,a.jsx)(n.li,{children:"cern_ohl_v_1_2_howto.pdf"}),"\n",(0,a.jsx)(n.li,{children:"CHANGES.TXT"}),"\n",(0,a.jsx)(n.li,{children:"COPYRIGHT.TXT"}),"\n",(0,a.jsx)(n.li,{children:"PRODUCT.TXT"}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["O projeto est\xe1 dispon\xedvel em: ",(0,a.jsx)(n.a,{href:"https://github.com/Franzininho/FranzBoy",children:"https://github.com/Franzininho/FranzBoy"})]}),"\n",(0,a.jsx)(n.h2,{id:"confira-o-video-de-apresenta\xe7\xe3o-da-placa",children:"Confira o video de apresenta\xe7\xe3o da placa"}),"\n",(0,a.jsx)("iframe",{width:"828",height:"466",src:"https://www.youtube.com/embed/EFIQ9oZN7Zc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function p(e={}){const{wrapper:n}={...(0,o.MN)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},95788:(e,n,r)=>{r.d(n,{MN:()=>l});var a=r(11504);function o(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function t(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var n=1;n=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=a.createContext({}),l=function(e){var n=a.useContext(s),r=n;return e&&(r="function"==typeof e?e(n):i(i({},n),e)),r},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},p=a.forwardRef((function(e,n){var r=e.components,o=e.mdxType,t=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(r),m=o,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||t;return r?a.createElement(f,i(i({ref:n},p),{},{components:r})):a.createElement(f,i({ref:n},p))}));p.displayName="MDXCreateElement"},40912:(e,n,r)=>{r.d(n,{c:()=>a});const a=r.p+"assets/images/1-1c1862f25749e45cbcb838377e66d001.jpeg"}}]); \ No newline at end of file diff --git a/en/assets/js/7561b0ae.2e4c2594.js b/en/assets/js/7561b0ae.2e4c2594.js deleted file mode 100755 index 91be01031..000000000 --- a/en/assets/js/7561b0ae.2e4c2594.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[157],{3905:(e,r,a)=>{a.d(r,{Zo:()=>s,kt:()=>f});var n=a(7294);function o(e,r,a){return r in e?Object.defineProperty(e,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[r]=a,e}function t(e,r){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var r=1;r=0||(o[a]=e[a]);return o}(e,r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),p=function(e){var r=n.useContext(l),a=r;return e&&(a="function"==typeof e?e(r):i(i({},r),e)),a},s=function(e){var r=p(e.components);return n.createElement(l.Provider,{value:r},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},m=n.forwardRef((function(e,r){var a=e.components,o=e.mdxType,t=e.originalType,l=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),d=p(a),m=o,f=d["".concat(l,".").concat(m)]||d[m]||u[m]||t;return a?n.createElement(f,i(i({ref:r},s),{},{components:a})):n.createElement(f,i({ref:r},s))}));function f(e,r){var a=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var t=a.length,i=new Array(t);i[0]=m;var c={};for(var l in r)hasOwnProperty.call(r,l)&&(c[l]=r[l]);c.originalType=e,c[d]="string"==typeof e?e:o,i[1]=c;for(var p=2;p{a.r(r),a.d(r,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>t,metadata:()=>c,toc:()=>p});var n=a(3117),o=(a(7294),a(3905));const t={id:"franzboy",title:"Placa FranzBoy",slug:"/FranzBoy/franzboy",description:"Detalhes da placa Franzboy"},i=void 0,c={unversionedId:"FranzBoy/franzboy",id:"FranzBoy/franzboy",title:"Placa FranzBoy",description:"Detalhes da placa Franzboy",source:"@site/docs/FranzBoy/franzboy.md",sourceDirName:"FranzBoy",slug:"/FranzBoy/franzboy",permalink:"/en/docs/FranzBoy/franzboy",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzBoy/franzboy.md",tags:[],version:"current",frontMatter:{id:"franzboy",title:"Placa FranzBoy",slug:"/FranzBoy/franzboy",description:"Detalhes da placa Franzboy"},sidebar:"docs",previous:{title:"Gravando a Franzino com um placa Arduino UNO",permalink:"/en/docs/Franzino/upload-com-arduino-uno"},next:{title:"Badge - Aprenda a soldar",permalink:"/en/docs/badge/badge"}},l={},p=[{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Confira o video de apresenta\xe7\xe3o da placa",id:"confira-o-video-de-apresenta\xe7\xe3o-da-placa",level:2}],s={toc:p},d="wrapper";function u(e){let{components:r,...t}=e;return(0,o.kt)(d,(0,n.Z)({},s,t,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"A placa FranzBoy veio para integrar a fam\xedlia de placas Franzininho em uma nova abordagem. Com o formato de game retro, procura incentivar o desenvolvimento de jogos, e hacks diversos. Voc\xea pode se divertir e aprender muito com eletr\xf4nica e programa\xe7\xe3o."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Placa FranzBoy",src:a(4894).Z,width:"1280",height:"960"})),(0,o.kt)("p",null,"Possui um hardware enxuto onde \xe9 explorado (escovando bits) os recursos do Atmega328, em conjunto com Display OLED e teclas, em um formato de badge para voc\xea usar nos eventos."),(0,o.kt)("h2",{id:"licen\xe7a"},"Licen\xe7a"),(0,o.kt)("p",null,"Assim como as placas Franzininho DIY e Franzininho Tiny, a placa FranzBoy tamb\xe9m foi publicada como projeto de hardware aberto. Ela foi publicada sob a licen\xe7a CERN Open Hardware Licence."),(0,o.kt)("p",null,"Conforme definido no \u201chow to\u201d da licen\xe7a, no reposit\xf3rio do projeto est\xe3o inclu\xeddos os seguintes arquivos:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"LICENSE.TXT"),(0,o.kt)("li",{parentName:"ul"},"cern_ohl_v_1_2_howto.pdf"),(0,o.kt)("li",{parentName:"ul"},"CHANGES.TXT"),(0,o.kt)("li",{parentName:"ul"},"COPYRIGHT.TXT"),(0,o.kt)("li",{parentName:"ul"},"PRODUCT.TXT")),(0,o.kt)("p",null,"O projeto est\xe1 dispon\xedvel em: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/FranzBoy"},"https://github.com/Franzininho/FranzBoy")),(0,o.kt)("h2",{id:"confira-o-video-de-apresenta\xe7\xe3o-da-placa"},"Confira o video de apresenta\xe7\xe3o da placa"),(0,o.kt)("iframe",{width:"828",height:"466",src:"https://www.youtube.com/embed/EFIQ9oZN7Zc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}u.isMDXComponent=!0},4894:(e,r,a)=>{a.d(r,{Z:()=>n});const n=a.p+"assets/images/1-1c1862f25749e45cbcb838377e66d001.jpeg"}}]); \ No newline at end of file diff --git a/en/assets/js/7e45b7ad.28fb7f3a.js b/en/assets/js/7e45b7ad.28fb7f3a.js deleted file mode 100755 index 66935bfbf..000000000 --- a/en/assets/js/7e45b7ad.28fb7f3a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[694],{3905:(e,a,o)=>{o.d(a,{Zo:()=>m,kt:()=>g});var n=o(7294);function r(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function t(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var a=1;a=0||(r[o]=e[o]);return r}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=n.createContext({}),u=function(e){var a=n.useContext(l),o=a;return e&&(o="function"==typeof e?e(a):i(i({},a),e)),o},m=function(e){var a=u(e.components);return n.createElement(l.Provider,{value:a},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},d=n.forwardRef((function(e,a){var o=e.components,r=e.mdxType,t=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=u(o),d=r,g=c["".concat(l,".").concat(d)]||c[d]||p[d]||t;return o?n.createElement(g,i(i({ref:a},m),{},{components:o})):n.createElement(g,i({ref:a},m))}));function g(e,a){var o=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var t=o.length,i=new Array(t);i[0]=d;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var u=2;u{o.r(a),o.d(a,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>t,metadata:()=>s,toc:()=>u});var n=o(3117),r=(o(7294),o(3905));const t={id:"buzzer",title:"Instrumento musical com Buzzer",slug:"/franzininho-diy/exemplos-avr-libc/buzzer",description:"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/06/2020",some_url:"https://github.com/EduardoDuenas"},i=void 0,s={unversionedId:"FranzininhoDIY/exemplos-avr-libc/buzzer",id:"FranzininhoDIY/exemplos-avr-libc/buzzer",title:"Instrumento musical com Buzzer",description:"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/buzzer.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/buzzer",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/buzzer",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/buzzer.md",tags:[],version:"current",frontMatter:{id:"buzzer",title:"Instrumento musical com Buzzer",slug:"/franzininho-diy/exemplos-avr-libc/buzzer",description:"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/06/2020",some_url:"https://github.com/EduardoDuenas"},sidebar:"docs",previous:{title:"Contador de pulsos externos",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/contadores"},next:{title:"Interrup\xe7\xe3o externa",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/int-ext"}},l={},u=[{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Fazendo m\xfasica com o Buzzer",id:"fazendo-m\xfasica-com-o-buzzer",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Montagem",id:"montagem",level:3},{value:"Compila\xe7\xe3o e upload",id:"compila\xe7\xe3o-e-upload",level:3},{value:"Resultado",id:"resultado",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2},{value:"Gloss\xe1rio",id:"gloss\xe1rio",level:2}],m={toc:u},c="wrapper";function p(e){let{components:a,...t}=e;return(0,r.kt)(c,(0,n.Z)({},m,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer na Franzininho DIY. Vamos aprender como se usar um buzzer passivo para gerar cada nota musical com ajuda do timer0."),(0,r.kt)("p",null,"Boa pr\xe1tica!"),(0,r.kt)("h2",{id:"recursos-necess\xe1rios"},(0,r.kt)("strong",{parentName:"h2"},"Recursos necess\xe1rios")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Franzininho DIY (com Micronucleos)"),(0,r.kt)("li",{parentName:"ul"},"1 buzzer passivo 5v"),(0,r.kt)("li",{parentName:"ul"},"4 jumpers macho-f\xeamea"),(0,r.kt)("li",{parentName:"ul"},"1 jumper macho-macho")),(0,r.kt)("h2",{id:"fazendo-m\xfasica-com-o-buzzer"},(0,r.kt)("strong",{parentName:"h2"},"Fazendo m\xfasica com o Buzzer")),(0,r.kt)("p",null,"Nesse exemplo vamos atrav\xe9s de uma ",(0,r.kt)("em",{parentName:"p"},"lookup table")," vamos ensinar quais as frequ\xeancias de cada nota, e com o uso do timer vamos variar a entrada no buzzer na frequ\xeancia da nota que queremos. Com a ajuda de outra tabela, vamos dar para o Franzininho a sequ\xeancia das notas que queremos que ele toque, podendo assim, tocar a m\xfasica que quisermos."),(0,r.kt)("p",null,"O buzzer passivo funciona como um pequeno alto falante, enquanto tivermos a tens\xe3o nominal na entrada positiva e o terra na entrada negativa o im\xe3 dentro dele vai para frente. Por outro lado, quando tivermos terra em ambas ele volta para a posi\xe7\xe3o inicial. Se variarmos entre esses dois estados na frequ\xeancia de uma nota musical geraremos uma onda sonora com o tom dela."),(0,r.kt)("p",null,"As notas musicais ocidentais em uma escala maior s\xe3o ",(0,r.kt)("em",{parentName:"p"},"Do Do# Re Re# Mi Fa Fa# Sol Sol# L\xe1 L\xe1# Si")," voltando para ",(0,r.kt)("em",{parentName:"p"},"Do")," depois. Cada nota est\xe1 a uma dist\xe2ncia de meio tom da outra e a 6 tons de sua pr\xf3xima oitava, que \xe9 a mesma nota por\xe9m mais fina."),(0,r.kt)("p",null,"Olhando pela frequ\xeancia temos que partindo de ",(0,r.kt)("em",{parentName:"p"},"L\xe1")," da terceira oitava, 440Hz, cada ",(0,r.kt)("em",{parentName:"p"},"L\xe1")," uma oitava acima tem o dobro da frequ\xeancia e cada oitava a baixo tem metade da frequ\xeancia. J\xe1 para subir cada semitom, basta multiplicar por 2^(1/12), ou para x semitons, 2^(x/12)."),(0,r.kt)("h3",{id:"c\xf3digo"},(0,r.kt)("strong",{parentName:"h3"},"C\xf3digo")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-c"},'/***********************************************\n * @file main.c\n * @author Eduardo Due\xf1as / Daniel Quadros\n * @brief Exemplo tocar musicas usando buzzer\n * @version 1.0\n * @date 21/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 15/05/2021\n **********************************************/\n#include \n#include \n\n#define F_CPU 16500000L\n\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\n\n#define NumNotas 32\n#define CONT(freq) ((F_CPU*10L)/(256L*freq))\n\nenum notas {Pausa, Do, DoS, Re, ReS, Mi, Fa, FaS, Sol, SolS, La, LaS, Si, DoM, DoSM, ReM};\nlong f[16] = {\n 255L, (long)CONT(5232L), (long)CONT(5543L), (long)CONT(5873L), (long)CONT(6222L), (long)CONT(6592L), (long)CONT(6984L),\n (long)CONT(7400L), (long)CONT(7840L), (long)CONT(8306L), (long)CONT(8800L), (long)CONT(9323L), (long)CONT(9877L),\n (long)CONT(10465L), (long)CONT(11087L), (long)CONT(11746L)\n};\n\n// {0xFF,123, 116, 110, 104, 98, 92, 87, 82, 78, 73, 69, 65, 62, 58, 54}\n// Lookup table com os valores de cada nota a ser colocado na flag do timer\n\nchar Partitura[NumNotas] = {\n Re, Mi, Mi, Re, Sol, FaS, FaS, FaS, Re, Mi, Mi, Re, La, Sol, Sol, Sol,\n Re, ReM, ReM, Si, Sol, FaS, FaS, Mi, DoM, Si, Si, Sol, La, Sol, Sol, Sol\n}; // Partitura da m\xfasica\nvolatile char cont = 0; // Local da partitura\nvolatile long aux = 0;\n\n// Tratamento de interrup\xe7\xe3o\nISR (TIM0_COMPB_vect) { // Vetor de compara\xe7\xe3o B\n if (aux <= 0xff) { // Se aux menor que 8bits\n OCR0B = (TCNT0 + aux) & (0xff); // Mandar aux para o contador\n aux = f[Partitura[cont]]; // Reinicia o aux\n toogleBit(PORTB, PB1); // Inverter o buzzer\n }\n else { // Se n\xe3o\n OCR0B = TCNT0; // Mandar o tempoatual para o contador, o mesmo que esperar um overflow\n aux -= 0xff; // Subitrair 8bits do aux\n }\n}\n\n// Fun\xe7\xe3o main\nint main() {\n enum notas nota;\n setBit(DDRB, PB1); // Configura o PortB1 como sa\xedda, pino do buzzer\n\n // Configura\xe7\xe3o do timer\n TCCR0A = 0x00; // Configura pino de comparara\xe7\xe3o desconectado\n TCCR0B = 0x04; // Configura o prescaler como 256\n setBit(TIMSK, OCIE0B); // Habilita a interrup\xe7\xe3o por compara\xe7\xe3o de COMPB\n sei(); // Habilita interrup\xe7\xf5es globais\n aux = f[Partitura[cont]]; // Inicia o contador de COMPB\n\n if (aux <= 0xff) {\n OCR0B = (TCNT0 + aux) & (0xff);\n aux = f[Partitura[cont]];\n toogleBit(PORTB, PB1);\n }\n else {\n OCR0B = TCNT0;\n aux -= 0xff;\n }\n\n // Loop infinito\n for (;;) {\n long i;\n for (i = 0; i < 1000000L; i++) {\n asm ("nop");\n cont++; // Avan\xe7a na partitura\n if (cont >= NumNotas)cont = 0; // Toca de novo\n }\n}\n')),(0,r.kt)("h3",{id:"montagem"},(0,r.kt)("strong",{parentName:"h3"},"Montagem")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"circuito buzzer",src:o(2247).Z,width:"2535",height:"636"})),(0,r.kt)("p",null,"Dependendo do buzzer \xe9 necess\xe1rio conectar os jumpers diretamente nos pinos do buzzer ao inv\xe9s de coloc\xe1-lo na protoboard."),(0,r.kt)("h3",{id:"compila\xe7\xe3o-e-upload"},(0,r.kt)("strong",{parentName:"h3"},"Compila\xe7\xe3o e upload")),(0,r.kt)("p",null,"Para compilar o programa, acesse a pasta do exemplo e d\xea o comando ",(0,r.kt)("inlineCode",{parentName:"p"},"make"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"exemplos-avr-libc/exemplos/buzzer$ make\n")),(0,r.kt)("p",null,"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n")),(0,r.kt)("p",null,"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."),(0,r.kt)("h3",{id:"resultado"},(0,r.kt)("strong",{parentName:"h3"},"Resultado")),(0,r.kt)("p",null,"O buzzer deve tocar Parab\xe9ns para voc\xea e deve continuar em loop at\xe9 a placa ser desligada."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://wokwi.com/arduino/projects/302834828095521293"},"Simule esse exemplo no WokWi")),(0,r.kt)("h2",{id:"conclus\xe3o"},(0,r.kt)("strong",{parentName:"h2"},"Conclus\xe3o")),(0,r.kt)("p",null,"O buzzer passivo \xe9 um componente muito vers\xe1til com o qual podemos, n\xe3o s\xf3, tocar m\xfasicas como tamb\xe9m gerar diversos tipos de efeitos sonoros, tudo que precisamos \xe9 entender como gerar o som que queremos. Al\xe9m disso vimos como podemos usar interrup\xe7\xf5es de timer para fun\xe7\xf5es que precisam de Real Time, ou seja, que precisam de precis\xe3o de tempo."),(0,r.kt)("h2",{id:"gloss\xe1rio"},"Gloss\xe1rio"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Setar: colocar um novo valor em um registrador. Para um bit \xe9 convencionado setar, mud\xe1-lo para valor 1, e clear (limpar), mud\xe1-lo para valor 0"),(0,r.kt)("li",{parentName:"ul"},"Resetar: reiniciar"),(0,r.kt)("li",{parentName:"ul"},"Timer: circuito eletr\xf4nico dedicado a contagem de tempo"),(0,r.kt)("li",{parentName:"ul"},"Lookup table: tabela de consulta, no contexto de programa\xe7\xe3o \xe9 um vetor com informa\xe7\xf5es necess\xe1rias para o programa.")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Autor"),(0,r.kt)("th",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"th",href:"https://github.com/EduardoDuenas"},"Eduardo Due\xf1as")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data:"),(0,r.kt)("td",{parentName:"tr",align:null},"05/06/2020")))))}p.isMDXComponent=!0},2247:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/Exemplo_Buzzer_Circuito-a4e81be25a4bb91d65d45043dffc52ac.png"}}]); \ No newline at end of file diff --git a/en/assets/js/7e45b7ad.c0aa14c5.js b/en/assets/js/7e45b7ad.c0aa14c5.js new file mode 100755 index 000000000..0114b6d2c --- /dev/null +++ b/en/assets/js/7e45b7ad.c0aa14c5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4124],{84220:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>c,contentTitle:()=>t,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=o(17624),r=o(95788);const i={id:"buzzer",title:"Instrumento musical com Buzzer",slug:"/franzininho-diy/exemplos-avr-libc/buzzer",description:"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/06/2020",some_url:"https://github.com/EduardoDuenas"},t=void 0,s={id:"FranzininhoDIY/exemplos-avr-libc/buzzer",title:"Instrumento musical com Buzzer",description:"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/buzzer.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/buzzer",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/buzzer",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/buzzer.md",tags:[],version:"current",frontMatter:{id:"buzzer",title:"Instrumento musical com Buzzer",slug:"/franzininho-diy/exemplos-avr-libc/buzzer",description:"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/06/2020",some_url:"https://github.com/EduardoDuenas"},sidebar:"docs",previous:{title:"Contador de pulsos externos",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/contadores"},next:{title:"Interrup\xe7\xe3o externa",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/int-ext"}},c={},l=[{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Fazendo m\xfasica com o Buzzer",id:"fazendo-m\xfasica-com-o-buzzer",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Montagem",id:"montagem",level:3},{value:"Compila\xe7\xe3o e upload",id:"compila\xe7\xe3o-e-upload",level:3},{value:"Resultado",id:"resultado",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2},{value:"Gloss\xe1rio",id:"gloss\xe1rio",level:2}];function d(e){const a={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer na Franzininho DIY. Vamos aprender como se usar um buzzer passivo para gerar cada nota musical com ajuda do timer0."}),"\n",(0,n.jsx)(a.p,{children:"Boa pr\xe1tica!"}),"\n",(0,n.jsx)(a.h2,{id:"recursos-necess\xe1rios",children:(0,n.jsx)(a.strong,{children:"Recursos necess\xe1rios"})}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"Franzininho DIY (com Micronucleos)"}),"\n",(0,n.jsx)(a.li,{children:"1 buzzer passivo 5v"}),"\n",(0,n.jsx)(a.li,{children:"4 jumpers macho-f\xeamea"}),"\n",(0,n.jsx)(a.li,{children:"1 jumper macho-macho"}),"\n"]}),"\n",(0,n.jsx)(a.h2,{id:"fazendo-m\xfasica-com-o-buzzer",children:(0,n.jsx)(a.strong,{children:"Fazendo m\xfasica com o Buzzer"})}),"\n",(0,n.jsxs)(a.p,{children:["Nesse exemplo vamos atrav\xe9s de uma ",(0,n.jsx)(a.em,{children:"lookup table"})," vamos ensinar quais as frequ\xeancias de cada nota, e com o uso do timer vamos variar a entrada no buzzer na frequ\xeancia da nota que queremos. Com a ajuda de outra tabela, vamos dar para o Franzininho a sequ\xeancia das notas que queremos que ele toque, podendo assim, tocar a m\xfasica que quisermos."]}),"\n",(0,n.jsx)(a.p,{children:"O buzzer passivo funciona como um pequeno alto falante, enquanto tivermos a tens\xe3o nominal na entrada positiva e o terra na entrada negativa o im\xe3 dentro dele vai para frente. Por outro lado, quando tivermos terra em ambas ele volta para a posi\xe7\xe3o inicial. Se variarmos entre esses dois estados na frequ\xeancia de uma nota musical geraremos uma onda sonora com o tom dela."}),"\n",(0,n.jsxs)(a.p,{children:["As notas musicais ocidentais em uma escala maior s\xe3o ",(0,n.jsx)(a.em,{children:"Do Do# Re Re# Mi Fa Fa# Sol Sol# L\xe1 L\xe1# Si"})," voltando para ",(0,n.jsx)(a.em,{children:"Do"})," depois. Cada nota est\xe1 a uma dist\xe2ncia de meio tom da outra e a 6 tons de sua pr\xf3xima oitava, que \xe9 a mesma nota por\xe9m mais fina."]}),"\n",(0,n.jsxs)(a.p,{children:["Olhando pela frequ\xeancia temos que partindo de ",(0,n.jsx)(a.em,{children:"L\xe1"})," da terceira oitava, 440Hz, cada ",(0,n.jsx)(a.em,{children:"L\xe1"})," uma oitava acima tem o dobro da frequ\xeancia e cada oitava a baixo tem metade da frequ\xeancia. J\xe1 para subir cada semitom, basta multiplicar por 2^(1/12), ou para x semitons, 2^(x/12)."]}),"\n",(0,n.jsx)(a.h3,{id:"c\xf3digo",children:(0,n.jsx)(a.strong,{children:"C\xf3digo"})}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-c",children:'/***********************************************\n * @file main.c\n * @author Eduardo Due\xf1as / Daniel Quadros\n * @brief Exemplo tocar musicas usando buzzer\n * @version 1.0\n * @date 21/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 15/05/2021\n **********************************************/\n#include \n#include \n\n#define F_CPU 16500000L\n\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\n\n#define NumNotas 32\n#define CONT(freq) ((F_CPU*10L)/(256L*freq))\n\nenum notas {Pausa, Do, DoS, Re, ReS, Mi, Fa, FaS, Sol, SolS, La, LaS, Si, DoM, DoSM, ReM};\nlong f[16] = {\n 255L, (long)CONT(5232L), (long)CONT(5543L), (long)CONT(5873L), (long)CONT(6222L), (long)CONT(6592L), (long)CONT(6984L),\n (long)CONT(7400L), (long)CONT(7840L), (long)CONT(8306L), (long)CONT(8800L), (long)CONT(9323L), (long)CONT(9877L),\n (long)CONT(10465L), (long)CONT(11087L), (long)CONT(11746L)\n};\n\n// {0xFF,123, 116, 110, 104, 98, 92, 87, 82, 78, 73, 69, 65, 62, 58, 54}\n// Lookup table com os valores de cada nota a ser colocado na flag do timer\n\nchar Partitura[NumNotas] = {\n Re, Mi, Mi, Re, Sol, FaS, FaS, FaS, Re, Mi, Mi, Re, La, Sol, Sol, Sol,\n Re, ReM, ReM, Si, Sol, FaS, FaS, Mi, DoM, Si, Si, Sol, La, Sol, Sol, Sol\n}; // Partitura da m\xfasica\nvolatile char cont = 0; // Local da partitura\nvolatile long aux = 0;\n\n// Tratamento de interrup\xe7\xe3o\nISR (TIM0_COMPB_vect) { // Vetor de compara\xe7\xe3o B\n if (aux <= 0xff) { // Se aux menor que 8bits\n OCR0B = (TCNT0 + aux) & (0xff); // Mandar aux para o contador\n aux = f[Partitura[cont]]; // Reinicia o aux\n toogleBit(PORTB, PB1); // Inverter o buzzer\n }\n else { // Se n\xe3o\n OCR0B = TCNT0; // Mandar o tempoatual para o contador, o mesmo que esperar um overflow\n aux -= 0xff; // Subitrair 8bits do aux\n }\n}\n\n// Fun\xe7\xe3o main\nint main() {\n enum notas nota;\n setBit(DDRB, PB1); // Configura o PortB1 como sa\xedda, pino do buzzer\n\n // Configura\xe7\xe3o do timer\n TCCR0A = 0x00; // Configura pino de comparara\xe7\xe3o desconectado\n TCCR0B = 0x04; // Configura o prescaler como 256\n setBit(TIMSK, OCIE0B); // Habilita a interrup\xe7\xe3o por compara\xe7\xe3o de COMPB\n sei(); // Habilita interrup\xe7\xf5es globais\n aux = f[Partitura[cont]]; // Inicia o contador de COMPB\n\n if (aux <= 0xff) {\n OCR0B = (TCNT0 + aux) & (0xff);\n aux = f[Partitura[cont]];\n toogleBit(PORTB, PB1);\n }\n else {\n OCR0B = TCNT0;\n aux -= 0xff;\n }\n\n // Loop infinito\n for (;;) {\n long i;\n for (i = 0; i < 1000000L; i++) {\n asm ("nop");\n cont++; // Avan\xe7a na partitura\n if (cont >= NumNotas)cont = 0; // Toca de novo\n }\n}\n'})}),"\n",(0,n.jsx)(a.h3,{id:"montagem",children:(0,n.jsx)(a.strong,{children:"Montagem"})}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"circuito buzzer",src:o(99732).c+"",width:"2535",height:"636"})}),"\n",(0,n.jsx)(a.p,{children:"Dependendo do buzzer \xe9 necess\xe1rio conectar os jumpers diretamente nos pinos do buzzer ao inv\xe9s de coloc\xe1-lo na protoboard."}),"\n",(0,n.jsx)(a.h3,{id:"compila\xe7\xe3o-e-upload",children:(0,n.jsx)(a.strong,{children:"Compila\xe7\xe3o e upload"})}),"\n",(0,n.jsxs)(a.p,{children:["Para compilar o programa, acesse a pasta do exemplo e d\xea o comando ",(0,n.jsx)(a.code,{children:"make"}),":"]}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"exemplos-avr-libc/exemplos/buzzer$ make\n"})}),"\n",(0,n.jsx)(a.p,{children:"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{className:"language-bash",children:"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n"})}),"\n",(0,n.jsx)(a.p,{children:"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."}),"\n",(0,n.jsx)(a.h3,{id:"resultado",children:(0,n.jsx)(a.strong,{children:"Resultado"})}),"\n",(0,n.jsx)(a.p,{children:"O buzzer deve tocar Parab\xe9ns para voc\xea e deve continuar em loop at\xe9 a placa ser desligada."}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.a,{href:"https://wokwi.com/arduino/projects/302834828095521293",children:"Simule esse exemplo no WokWi"})}),"\n",(0,n.jsx)(a.h2,{id:"conclus\xe3o",children:(0,n.jsx)(a.strong,{children:"Conclus\xe3o"})}),"\n",(0,n.jsx)(a.p,{children:"O buzzer passivo \xe9 um componente muito vers\xe1til com o qual podemos, n\xe3o s\xf3, tocar m\xfasicas como tamb\xe9m gerar diversos tipos de efeitos sonoros, tudo que precisamos \xe9 entender como gerar o som que queremos. Al\xe9m disso vimos como podemos usar interrup\xe7\xf5es de timer para fun\xe7\xf5es que precisam de Real Time, ou seja, que precisam de precis\xe3o de tempo."}),"\n",(0,n.jsx)(a.h2,{id:"gloss\xe1rio",children:"Gloss\xe1rio"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"Setar: colocar um novo valor em um registrador. Para um bit \xe9 convencionado setar, mud\xe1-lo para valor 1, e clear (limpar), mud\xe1-lo para valor 0"}),"\n",(0,n.jsx)(a.li,{children:"Resetar: reiniciar"}),"\n",(0,n.jsx)(a.li,{children:"Timer: circuito eletr\xf4nico dedicado a contagem de tempo"}),"\n",(0,n.jsx)(a.li,{children:"Lookup table: tabela de consulta, no contexto de programa\xe7\xe3o \xe9 um vetor com informa\xe7\xf5es necess\xe1rias para o programa."}),"\n"]}),"\n",(0,n.jsxs)(a.table,{children:[(0,n.jsx)(a.thead,{children:(0,n.jsxs)(a.tr,{children:[(0,n.jsx)(a.th,{children:"Autor"}),(0,n.jsx)(a.th,{children:(0,n.jsx)(a.a,{href:"https://github.com/EduardoDuenas",children:"Eduardo Due\xf1as"})})]})}),(0,n.jsx)(a.tbody,{children:(0,n.jsxs)(a.tr,{children:[(0,n.jsx)(a.td,{children:"Data:"}),(0,n.jsx)(a.td,{children:"05/06/2020"})]})})]})]})}function u(e={}){const{wrapper:a}={...(0,r.MN)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},95788:(e,a,o)=>{o.d(a,{MN:()=>l});var n=o(11504);function r(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function i(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function t(e){for(var a=1;a=0||(r[o]=e[o]);return r}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var c=n.createContext({}),l=function(e){var a=n.useContext(c),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},d={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var o=e.components,r=e.mdxType,i=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=l(o),p=r,h=m["".concat(c,".").concat(p)]||m[p]||d[p]||i;return o?n.createElement(h,t(t({ref:a},u),{},{components:o})):n.createElement(h,t({ref:a},u))}));u.displayName="MDXCreateElement"},99732:(e,a,o)=>{o.d(a,{c:()=>n});const n=o.p+"assets/images/Exemplo_Buzzer_Circuito-a4e81be25a4bb91d65d45043dffc52ac.png"}}]); \ No newline at end of file diff --git a/en/assets/js/814f3328.0967c8fa.js b/en/assets/js/814f3328.0967c8fa.js deleted file mode 100755 index 8aacefe01..000000000 --- a/en/assets/js/814f3328.0967c8fa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2535],{5641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Welcome","permalink":"/en/blog/welcome"},{"title":"Hello","permalink":"/en/blog/hello-world"},{"title":"Hola","permalink":"/en/blog/hola"}]}')}}]); \ No newline at end of file diff --git a/en/assets/js/814f3328.775e20dc.js b/en/assets/js/814f3328.775e20dc.js new file mode 100755 index 000000000..3a3c49608 --- /dev/null +++ b/en/assets/js/814f3328.775e20dc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5512],{4352:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Welcome","permalink":"/en/blog/welcome","unlisted":false},{"title":"Hello","permalink":"/en/blog/hello-world","unlisted":false},{"title":"Hola","permalink":"/en/blog/hola","unlisted":false}]}')}}]); \ No newline at end of file diff --git a/en/assets/js/8b8a5829.11ecbc77.js b/en/assets/js/8b8a5829.11ecbc77.js new file mode 100755 index 000000000..fbf59d831 --- /dev/null +++ b/en/assets/js/8b8a5829.11ecbc77.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6116],{82076:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>m,frontMatter:()=>t,metadata:()=>s,toc:()=>l});var r=i(17624),o=i(95788);const t={id:"theremim",title:"Theremim",slug:"/franzininho-diy/theremim",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},a=void 0,s={id:"FranzininhoDIY/exemplos-arduino/theremim",title:"Theremim",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/theremim.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/theremim",permalink:"/en/docs/franzininho-diy/theremim",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/theremim.md",tags:[],version:"current",frontMatter:{id:"theremim",title:"Theremim",slug:"/franzininho-diy/theremim",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},sidebar:"docs",previous:{title:"Sem\xe1foro",permalink:"/en/docs/franzininho-diy/semaforo"},next:{title:"Girassol Automatizado",permalink:"/en/docs/franzininho-diy/girassol-automatizado"}},c={},l=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function d(e){const n={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"O Theremim \xe9 um instrumento musical eletr\xf4nico controlado sem contato f\xedsico. O nome vem do seu inventor, L\xe9on Theremin, que patenteou o dispositivo em 1928."}),"\n",(0,r.jsx)(n.p,{children:"Nesse tutorial voc\xea far\xe1 uma vers\xe3o simplificada do Theremim usando a Franzininho DIY."}),"\n",(0,r.jsx)(n.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Franzininho DIY"}),"\n",(0,r.jsx)(n.li,{children:"2 LDR 10K"}),"\n",(0,r.jsx)(n.li,{children:"BC548"}),"\n",(0,r.jsx)(n.li,{children:"Resistor 330 R"}),"\n",(0,r.jsx)(n.li,{children:"Alto falante 8 ohm"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Circuito Theremim",src:i(43204).c+"",width:"552",height:"330"})}),"\n",(0,r.jsx)(n.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,r.jsx)(n.p,{children:"O c\xf3digo a seguir ler o valor da entrada anal\xf3gica e atua na sa\xedda do speaker:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-cpp",children:"/*\n * Theremim Franzininho\n * Autor: F\xe1bio Souza\n * Data: 10/09/2018\n */\nint speaker = 0; // pino de sa\xedda do falante\nint sensor = 1;\n\nvoid setup()\n{\n pinMode(speaker, OUTPUT);\n}\n\n// Theremin\nvoid loop()\n{\n digitalWrite(speaker, HIGH);\n delayMicroseconds(analogRead(sensor)<<2);\n digitalWrite(speaker, LOW);\n delayMicroseconds(analogRead(sensor)<<2);\n}\n"})}),"\n",(0,r.jsx)(n.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,r.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311445334890906178?view=diagram"}),"\n",(0,r.jsx)(n.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,r.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/l1MmqiYB4GI",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function m(e={}){const{wrapper:n}={...(0,o.MN)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},95788:(e,n,i)=>{i.d(n,{MN:()=>l});var r=i(11504);function o(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function t(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,r)}return i}function a(e){for(var n=1;n=0||(o[i]=e[i]);return o}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(o[i]=e[i])}return o}var c=r.createContext({}),l=function(e){var n=r.useContext(c),i=n;return e&&(i="function"==typeof e?e(n):a(a({},n),e)),i},d={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var i=e.components,o=e.mdxType,t=e.originalType,c=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),u=l(i),p=o,h=u["".concat(c,".").concat(p)]||u[p]||d[p]||t;return i?r.createElement(h,a(a({ref:n},m),{},{components:i})):r.createElement(h,a({ref:n},m))}));m.displayName="MDXCreateElement"},43204:(e,n,i)=>{i.d(n,{c:()=>r});const r=i.p+"assets/images/theremin-5678c5409f34287c92b305f1a9f92c42.png"}}]); \ No newline at end of file diff --git a/en/assets/js/8b8a5829.b2aa9e17.js b/en/assets/js/8b8a5829.b2aa9e17.js deleted file mode 100755 index 55850d881..000000000 --- a/en/assets/js/8b8a5829.b2aa9e17.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[604],{3905:(e,n,r)=>{r.d(n,{Zo:()=>c,kt:()=>f});var i=r(7294);function t(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function o(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,i)}return r}function a(e){for(var n=1;n=0||(t[r]=e[r]);return t}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(t[r]=e[r])}return t}var s=i.createContext({}),m=function(e){var n=i.useContext(s),r=n;return e&&(r="function"==typeof e?e(n):a(a({},n),e)),r},c=function(e){var n=m(e.components);return i.createElement(s.Provider,{value:n},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},p=i.forwardRef((function(e,n){var r=e.components,t=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=m(r),p=t,f=u["".concat(s,".").concat(p)]||u[p]||d[p]||o;return r?i.createElement(f,a(a({ref:n},c),{},{components:r})):i.createElement(f,a({ref:n},c))}));function f(e,n){var r=arguments,t=n&&n.mdxType;if("string"==typeof e||t){var o=r.length,a=new Array(o);a[0]=p;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[u]="string"==typeof e?e:t,a[1]=l;for(var m=2;m{r.r(n),r.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>m});var i=r(3117),t=(r(7294),r(3905));const o={id:"theremim",title:"Theremim",slug:"/franzininho-diy/theremim",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},a=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/theremim",id:"FranzininhoDIY/exemplos-arduino/theremim",title:"Theremim",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/theremim.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/theremim",permalink:"/en/docs/franzininho-diy/theremim",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/theremim.md",tags:[],version:"current",frontMatter:{id:"theremim",title:"Theremim",slug:"/franzininho-diy/theremim",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},sidebar:"docs",previous:{title:"Sem\xe1foro",permalink:"/en/docs/franzininho-diy/semaforo"},next:{title:"Girassol Automatizado",permalink:"/en/docs/franzininho-diy/girassol-automatizado"}},s={},m=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],c={toc:m},u="wrapper";function d(e){let{components:n,...o}=e;return(0,t.kt)(u,(0,i.Z)({},c,o,{components:n,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"O Theremim \xe9 um instrumento musical eletr\xf4nico controlado sem contato f\xedsico. O nome vem do seu inventor, L\xe9on Theremin, que patenteou o dispositivo em 1928."),(0,t.kt)("p",null,"Nesse tutorial voc\xea far\xe1 uma vers\xe3o simplificada do Theremim usando a Franzininho DIY."),(0,t.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Franzininho DIY"),(0,t.kt)("li",{parentName:"ul"},"2 LDR 10K "),(0,t.kt)("li",{parentName:"ul"},"BC548"),(0,t.kt)("li",{parentName:"ul"},"Resistor 330 R"),(0,t.kt)("li",{parentName:"ul"},"Alto falante 8 ohm")),(0,t.kt)("h2",{id:"circuito"},"Circuito"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Circuito Theremim",src:r(5193).Z,width:"552",height:"330"})),(0,t.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,t.kt)("p",null,"O c\xf3digo a seguir ler o valor da entrada anal\xf3gica e atua na sa\xedda do speaker:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-cpp"},"/*\n * Theremim Franzininho\n * Autor: F\xe1bio Souza\n * Data: 10/09/2018\n */\nint speaker = 0; // pino de sa\xedda do falante\nint sensor = 1;\n\nvoid setup()\n{\n pinMode(speaker, OUTPUT);\n}\n\n// Theremin\nvoid loop()\n{\n digitalWrite(speaker, HIGH);\n delayMicroseconds(analogRead(sensor)<<2);\n digitalWrite(speaker, LOW);\n delayMicroseconds(analogRead(sensor)<<2);\n}\n")),(0,t.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,t.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311445334890906178?view=diagram"}),(0,t.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,t.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/l1MmqiYB4GI",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}d.isMDXComponent=!0},5193:(e,n,r)=>{r.d(n,{Z:()=>i});const i=r.p+"assets/images/theremin-5678c5409f34287c92b305f1a9f92c42.png"}}]); \ No newline at end of file diff --git a/en/assets/js/8e9f0a8a.3b2f4d79.js b/en/assets/js/8e9f0a8a.3b2f4d79.js new file mode 100755 index 000000000..27311bd25 --- /dev/null +++ b/en/assets/js/8e9f0a8a.3b2f4d79.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3496],{75224:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>u,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var o=r(17624),n=r(95788);const a={slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},u=void 0,i={permalink:"/en/blog/hola",source:"@site/blog/2019-05-28-hola.md",title:"Hola",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet",date:"2019-05-28T00:00:00.000Z",tags:[{label:"hola",permalink:"/en/blog/tags/hola"},{label:"docusaurus",permalink:"/en/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!1,authors:[{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",imageURL:"https://avatars1.githubusercontent.com/u/2055384?v=4"}],frontMatter:{slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},unlisted:!1,prevItem:{title:"Hello",permalink:"/en/blog/hello-world"}},s={authorsImageUrls:[void 0]},l=[];function c(e){const t={p:"p",...(0,n.MN)(),...e.components};return(0,o.jsx)(t.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"})}function m(e={}){const{wrapper:t}={...(0,n.MN)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},95788:(e,t,r)=>{r.d(t,{MN:()=>l});var o=r(11504);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function u(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=o.createContext({}),l=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):u(u({},t),e)),r},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),p=l(r),h=n,g=p["".concat(s,".").concat(h)]||p[h]||c[h]||a;return r?o.createElement(g,u(u({ref:t},m),{},{components:r})):o.createElement(g,u({ref:t},m))}));m.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/8e9f0a8a.3ebbed82.js b/en/assets/js/8e9f0a8a.3ebbed82.js deleted file mode 100755 index dac060350..000000000 --- a/en/assets/js/8e9f0a8a.3ebbed82.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4035],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function u(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),s=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):u(u({},t),e)),r},c=function(e){var t=s(e.components);return o.createElement(l.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},g=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=s(r),g=n,h=p["".concat(l,".").concat(g)]||p[g]||m[g]||a;return r?o.createElement(h,u(u({ref:t},c),{},{components:r})):o.createElement(h,u({ref:t},c))}));function h(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,u=new Array(a);u[0]=g;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[p]="string"==typeof e?e:n,u[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var o=r(3117),n=(r(7294),r(3905));const a={slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},u=void 0,i={permalink:"/en/blog/hola",source:"@site/blog/2019-05-28-hola.md",title:"Hola",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet",date:"2019-05-28T00:00:00.000Z",formattedDate:"May 28, 2019",tags:[{label:"hola",permalink:"/en/blog/tags/hola"},{label:"docusaurus",permalink:"/en/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!1,authors:[{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",imageURL:"https://avatars1.githubusercontent.com/u/2055384?v=4"}],frontMatter:{slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},prevItem:{title:"Hello",permalink:"/en/blog/hello-world"}},l={authorsImageUrls:[void 0]},s=[],c={toc:s},p="wrapper";function m(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,o.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/8f70110c.02c9189c.js b/en/assets/js/8f70110c.02c9189c.js new file mode 100755 index 000000000..6fdf41e54 --- /dev/null +++ b/en/assets/js/8f70110c.02c9189c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2496],{99920:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>l,contentTitle:()=>t,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var i=n(17624),o=n(95788);const r={id:"circuitpython-entradas-analogicas",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",description:"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi",author:"Diana Santos e F\xe1bio Souza"},t=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas",title:"Entrada Anal\xf3gica",description:"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-analogica.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/entrada-analogica.md",tags:[],version:"current",frontMatter:{id:"circuitpython-entradas-analogicas",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",description:"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi",author:"Diana Santos e F\xe1bio Souza"},sidebar:"docs",previous:{title:"Entradas e Sa\xeddas Digitais",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais"},next:{title:"PWM - Pulse Width Modulation",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/pwm"}},l={},c=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo (Exemplos 1 e 2)",id:"an\xe1lise-do-c\xf3digo-exemplos-1-e-2",level:3},{value:"An\xe1lise do c\xf3digo (Exemplo 3)",id:"an\xe1lise-do-c\xf3digo-exemplo-3",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function d(e){const a={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.p,{children:"Neste exemplo aprenderemos como usar as entradas anal\xf3gicas. Veremos qual m\xf3dulo precisamos usar e como fazer a leitura do valor anal\xf3gico usando um potenci\xf4metro. Ao final faremos um exemplo para ligar e desligar um LED a partir do valor lido na entrada anal\xf3gica. Assim, ao final dessa etapa voc\xea estar\xe1 apto para ler sensores anal\xf3gicos."}),"\n",(0,i.jsx)(a.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,i.jsxs)(a.ul,{children:["\n",(0,i.jsx)(a.li,{children:"1 Placa Franzininho WiFi com CircuitPython;"}),"\n",(0,i.jsx)(a.li,{children:"1 Protoboard;"}),"\n",(0,i.jsx)(a.li,{children:"1 potenci\xf4metro de 10K;"}),"\n",(0,i.jsx)(a.li,{children:"1 LED vermelho de 3 mm;"}),"\n",(0,i.jsx)(a.li,{children:"1 Resistor 330 \u03a9;"}),"\n",(0,i.jsx)(a.li,{children:"Jumpers."}),"\n"]}),"\n",(0,i.jsx)(a.h2,{id:"circuito",children:"Circuito"}),"\n",(0,i.jsx)(a.p,{children:"Para os primeiros exemplos, fa\xe7a a seguinte montagem:"}),"\n",(0,i.jsx)(a.p,{children:(0,i.jsx)(a.img,{alt:"Circuito",src:n(36212).c+"",width:"984",height:"1164"})}),"\n",(0,i.jsx)(a.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,i.jsx)(a.p,{children:"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 no diret\xf3rio CIRCUITPY:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"#Leitura de Entrada anal\xf3gica - Exemplo 2\nimport time #importa m\xf3dulo de temporiza\xe7\xe3o\nimport board #importa m\xf3dulo da placa\nfrom analogio import AnalogIn #immport m\xf3dulo de entrada anal\xf3gica\n\nanalog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n\nwhile True: #loop infinito\n print((analog_in.value,)) #imprime o valor da leitura anal\xf3gica\n time.sleep(0.2) #aguarda 200 ms\n"})}),"\n",(0,i.jsx)(a.p,{children:"Salve o arquivo e teste o funcionamento girando o potenci\xf4metro e no Mu Editor visualize os dados no terminal serial e no gr\xe1fico:"}),"\n",(0,i.jsx)(a.p,{children:(0,i.jsx)(a.img,{alt:"Teste 1",src:n(66112).c+"",width:"1861",height:"998"})}),"\n",(0,i.jsx)(a.p,{children:"Note que os valores de convers\xe3o AD s\xe3o exibidos no terminal e no gr\xe1fico."}),"\n",(0,i.jsx)(a.p,{children:"Agora faremos um exemplo para converter esses valores em tens\xe3o."}),"\n",(0,i.jsx)(a.p,{children:"Digite o seguinte c\xf3digo:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"#Leitura de Entrada anal\xf3gica - Exemplo 2\nimport time #importa m\xf3dulo de temporiza\xe7\xe3o\nimport board #importa m\xf3dulo da placa\nfrom analogio import AnalogIn #import m\xf3dulo de entrada anal\xf3gica\n\nanalog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n\ndef ler_tensao(pin):\n return (pin.value * 3.3) / 65536\n\nwhile True: #loop infinito\n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica\n time.sleep(0.2) #aguarda 200 ms\n"})}),"\n",(0,i.jsx)(a.p,{children:"Salve o arquivo e teste o funcionamento girando o potenci\xf4metro e no Mu Editor visualize os dados no terminal serial e no gr\xe1fico:"}),"\n",(0,i.jsx)(a.p,{children:(0,i.jsx)(a.img,{alt:"Teste 2",src:n(17650).c+"",width:"1861",height:"998"})}),"\n",(0,i.jsx)(a.p,{children:"Note que exibimos agora o valor de tens\xe3o."}),"\n",(0,i.jsx)(a.h3,{id:"an\xe1lise-do-c\xf3digo-exemplos-1-e-2",children:"An\xe1lise do c\xf3digo (Exemplos 1 e 2)"}),"\n",(0,i.jsx)(a.p,{children:"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"import board\n"})}),"\n",(0,i.jsx)(a.p,{children:"Como precisaremos de intervalos de temporiza\xe7\xe3o importamos o m\xf3dulo time:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"import time\n"})}),"\n",(0,i.jsx)(a.p,{children:"Trabalharemos como entradas anal\xf3gicas nesse exemplo, assim, precisamos importar o seguinte m\xf3dulo em analogio:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"from analogio import AnalogIn #import m\xf3dulo de entrada anal\xf3gica\n"})}),"\n",(0,i.jsx)(a.p,{children:"A Franzininho Wifi possui diversas entradas anal\xf3gicas. Para esse exemplo usamos a entrada anal\xf3gica no pino IO1"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"analog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n"})}),"\n",(0,i.jsx)(a.p,{children:"No loop infinito fazemos a leitura da convers\xe3o AD lendo o valor presente no pino em intervalos de 200 ms. No primeiro exemplos fizemos apenas a impress\xe3o do valor convertido:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"while True: #loop infinito \n print((analog_in.value,)) #imprime o valor da leitura anal\xf3gica \n time.sleep(0.2) #aguarda 200 ms\n"})}),"\n",(0,i.jsx)(a.p,{children:"J\xe1 no segundo exemplo fizemos uma fun\xe7\xe3o que converte o valor lido no pino em tens\xe3o:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"def ler_tensao(pin): \n return (pin.value * 3.3) / 65536 \n \nwhile True: #loop infinito \n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica \n time.sleep(0.2) #aguarda 200 ms\n"})}),"\n",(0,i.jsx)(a.p,{children:"Agora faremos uma aplica\xe7\xe3o para ligar e desligar um LED dependo do valor lido no potenci\xf4metro."}),"\n",(0,i.jsx)(a.p,{children:"Digite o seguinte c\xf3digo:"}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"#Leitura de Entrada anal\xf3gica - Exemplo 3\nimport time #importa m\xf3dulo de temporiza\xe7\xe3o\nimport board #importa m\xf3dulo da placa\nfrom analogio import AnalogIn #immport m\xf3dulo de entrada anal\xf3gica\nfrom digitalio import DigitalInOut, Direction\n\nanalog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n\nled = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n\ndef ler_tensao(pin):\n return (pin.value * 3.3) / 65536\n\nwhile True: #loop infinito\n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica\n \n if(ler_tensao(analog_in)>2.5): #se valor lido for maior que 2.5V\n led.value = 1 #liga LED\n else: #se n\xe3o\n led.value =0 #desliga o LED\n \n time.sleep(0.2) #aguarda 200 ms\n"})}),"\n",(0,i.jsx)(a.p,{children:"Salve o arquivo e teste o funcionamento girando o potenci\xf4metro. Verifique se o LED acender\xe1 quando ultrapassar o valor de 2,5V (exibido no terminal). Quando abaixo de 2,5V o LED deve apagar."}),"\n",(0,i.jsx)(a.p,{children:(0,i.jsx)(a.img,{alt:"Teste 3",src:n(81032).c+"",width:"1861",height:"998"})}),"\n",(0,i.jsx)(a.h3,{id:"an\xe1lise-do-c\xf3digo-exemplo-3",children:"An\xe1lise do c\xf3digo (Exemplo 3)"}),"\n",(0,i.jsx)(a.p,{children:"Nesse exemplo adicionamos uma sa\xedda digital para controlar um LED."}),"\n",(0,i.jsx)(a.admonition,{title:"Dica",type:"tip",children:(0,i.jsxs)(a.p,{children:["Se voc\xea ainda n\xe3o sabe trabalhar com entradas anal\xf3gicas. Consulte o exemplo ",(0,i.jsx)(a.a,{href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",children:"Entradas e Sa\xeddas Digitais"}),"."]})}),"\n",(0,i.jsx)(a.p,{children:"No loop principal fizemos um teste para verificar o valor de tens\xe3o da entrada anal\xf3gico, caso acima de 2,5V liga o LED e abaixo de 2,5 V desliga o LED."}),"\n",(0,i.jsx)(a.pre,{children:(0,i.jsx)(a.code,{className:"language-python",children:"while True: #loop infinito \n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica \n \n if(ler_tensao(analog_in)>2.5): #se valor lido for maior que 2.5V \n led.value = 1 #liga LED \n else: #se n\xe3o \n led.value =0 #desliga o LED \n \n time.sleep(0.2) #aguarda 200 ms\n"})}),"\n",(0,i.jsx)(a.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,i.jsx)(a.p,{children:"Neste exemplo, aprendemos como fazer a leitura de uma entrada anal\xf3gica. Para voc\xea ler outras entradas pode seguir o mesmo padr\xe3o. Por\xe9m, \xe9 importante verificar se o pino possui essa funcionalidade."}),"\n",(0,i.jsx)(a.p,{children:"Com esse recurso poderemos ler diversos sensores anal\xf3gicos como de temperatura, aceler\xf4metro, som, etc."}),"\n",(0,i.jsx)(a.admonition,{title:"Desafio",type:"tip",children:(0,i.jsx)(a.p,{children:"Fa\xe7a a leitura de outro potenci\xf4metro usando outra entrada anal\xf3gica. Exiba no gr\xe1fico o valor dos 2 potenci\xf4metros em simult\xe2neo."})}),"\n",(0,i.jsxs)(a.table,{children:[(0,i.jsx)(a.thead,{children:(0,i.jsxs)(a.tr,{children:[(0,i.jsx)(a.th,{children:"Autor"}),(0,i.jsx)(a.th,{children:"Diana Santos"})]})}),(0,i.jsxs)(a.tbody,{children:[(0,i.jsxs)(a.tr,{children:[(0,i.jsx)(a.td,{children:"Autor"}),(0,i.jsx)(a.td,{children:(0,i.jsx)(a.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]}),(0,i.jsxs)(a.tr,{children:[(0,i.jsx)(a.td,{children:"Data:"}),(0,i.jsx)(a.td,{children:"16/09/2021"})]})]})]})]})}function p(e={}){const{wrapper:a}={...(0,o.MN)(),...e.components};return a?(0,i.jsx)(a,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},95788:(e,a,n)=>{n.d(a,{MN:()=>c});var i=n(11504);function o(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function r(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,i)}return n}function t(e){for(var a=1;a=0||(o[n]=e[n]);return o}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=i.createContext({}),c=function(e){var a=i.useContext(l),n=a;return e&&(n="function"==typeof e?e(a):t(t({},a),e)),n},d={inlineCode:"code",wrapper:function(e){var a=e.children;return i.createElement(i.Fragment,{},a)}},p=i.forwardRef((function(e,a){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=c(n),u=o,g=m["".concat(l,".").concat(u)]||m[u]||d[u]||r;return n?i.createElement(g,t(t({ref:a},p),{},{components:n})):i.createElement(g,t({ref:a},p))}));p.displayName="MDXCreateElement"},36212:(e,a,n)=>{n.d(a,{c:()=>i});const i=n.p+"assets/images/circuito-337482518ca8b8ea5e0631611abb8e67.png"},66112:(e,a,n)=>{n.d(a,{c:()=>i});const i=n.p+"assets/images/grafico_entrada_analogica-1-76717640082c66f149c344256345a47c.gif"},17650:(e,a,n)=>{n.d(a,{c:()=>i});const i=n.p+"assets/images/grafico_entrada_analogica-2-6e0e667074f33acf85d9a4775bad2013.gif"},81032:(e,a,n)=>{n.d(a,{c:()=>i});const i=n.p+"assets/images/grafico_entrada_analogica-3-a3dd8b9ac8f4c314d4ba9db8516dba43.gif"}}]); \ No newline at end of file diff --git a/en/assets/js/8f70110c.839e0dd7.js b/en/assets/js/8f70110c.839e0dd7.js deleted file mode 100755 index e86239242..000000000 --- a/en/assets/js/8f70110c.839e0dd7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6553],{3905:(a,e,n)=>{n.d(e,{Zo:()=>m,kt:()=>g});var o=n(7294);function i(a,e,n){return e in a?Object.defineProperty(a,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):a[e]=n,a}function t(a,e){var n=Object.keys(a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(a);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable}))),n.push.apply(n,o)}return n}function r(a){for(var e=1;e=0||(i[n]=a[n]);return i}(a,e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(a);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(a,n)&&(i[n]=a[n])}return i}var s=o.createContext({}),p=function(a){var e=o.useContext(s),n=e;return a&&(n="function"==typeof a?a(e):r(r({},e),a)),n},m=function(a){var e=p(a.components);return o.createElement(s.Provider,{value:e},a.children)},c="mdxType",d={inlineCode:"code",wrapper:function(a){var e=a.children;return o.createElement(o.Fragment,{},e)}},u=o.forwardRef((function(a,e){var n=a.components,i=a.mdxType,t=a.originalType,s=a.parentName,m=l(a,["components","mdxType","originalType","parentName"]),c=p(n),u=i,g=c["".concat(s,".").concat(u)]||c[u]||d[u]||t;return n?o.createElement(g,r(r({ref:e},m),{},{components:n})):o.createElement(g,r({ref:e},m))}));function g(a,e){var n=arguments,i=e&&e.mdxType;if("string"==typeof a||i){var t=n.length,r=new Array(t);r[0]=u;var l={};for(var s in e)hasOwnProperty.call(e,s)&&(l[s]=e[s]);l.originalType=a,l[c]="string"==typeof a?a:i,r[1]=l;for(var p=2;p{n.r(e),n.d(e,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>t,metadata:()=>l,toc:()=>p});var o=n(3117),i=(n(7294),n(3905));const t={id:"circuitpython-entradas-analogicas",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",description:"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi",author:"Diana Santos e F\xe1bio Souza"},r=void 0,l={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas",title:"Entrada Anal\xf3gica",description:"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-analogica.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/entrada-analogica.md",tags:[],version:"current",frontMatter:{id:"circuitpython-entradas-analogicas",title:"Entrada Anal\xf3gica",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",description:"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi",author:"Diana Santos e F\xe1bio Souza"},sidebar:"docs",previous:{title:"Entradas e Sa\xeddas Digitais",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais"},next:{title:"PWM - Pulse Width Modulation",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/pwm"}},s={},p=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo (Exemplos 1 e 2)",id:"an\xe1lise-do-c\xf3digo-exemplos-1-e-2",level:3},{value:"An\xe1lise do c\xf3digo (Exemplo 3)",id:"an\xe1lise-do-c\xf3digo-exemplo-3",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],m={toc:p},c="wrapper";function d(a){let{components:e,...t}=a;return(0,i.kt)(c,(0,o.Z)({},m,t,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Neste exemplo aprenderemos como usar as entradas anal\xf3gicas. Veremos qual m\xf3dulo precisamos usar e como fazer a leitura do valor anal\xf3gico usando um potenci\xf4metro. Ao final faremos um exemplo para ligar e desligar um LED a partir do valor lido na entrada anal\xf3gica. Assim, ao final dessa etapa voc\xea estar\xe1 apto para ler sensores anal\xf3gicos."),(0,i.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"1 Placa Franzininho WiFi com CircuitPython;"),(0,i.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,i.kt)("li",{parentName:"ul"},"1 potenci\xf4metro de 10K;"),(0,i.kt)("li",{parentName:"ul"},"1 LED vermelho de 3 mm;"),(0,i.kt)("li",{parentName:"ul"},"1 Resistor 330 \u03a9;"),(0,i.kt)("li",{parentName:"ul"},"Jumpers.")),(0,i.kt)("h2",{id:"circuito"},"Circuito"),(0,i.kt)("p",null,"Para os primeiros exemplos, fa\xe7a a seguinte montagem:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Circuito",src:n(3672).Z,width:"984",height:"1164"})),(0,i.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,i.kt)("p",null,"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 no diret\xf3rio CIRCUITPY:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"#Leitura de Entrada anal\xf3gica - Exemplo 2\nimport time #importa m\xf3dulo de temporiza\xe7\xe3o\nimport board #importa m\xf3dulo da placa\nfrom analogio import AnalogIn #immport m\xf3dulo de entrada anal\xf3gica\n\nanalog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n\nwhile True: #loop infinito\n print((analog_in.value,)) #imprime o valor da leitura anal\xf3gica\n time.sleep(0.2) #aguarda 200 ms\n")),(0,i.kt)("p",null,"Salve o arquivo e teste o funcionamento girando o potenci\xf4metro e no Mu Editor visualize os dados no terminal serial e no gr\xe1fico:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Teste 1",src:n(591).Z,width:"1861",height:"998"})),(0,i.kt)("p",null,"Note que os valores de convers\xe3o AD s\xe3o exibidos no terminal e no gr\xe1fico."),(0,i.kt)("p",null,"Agora faremos um exemplo para converter esses valores em tens\xe3o."),(0,i.kt)("p",null,"Digite o seguinte c\xf3digo:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"#Leitura de Entrada anal\xf3gica - Exemplo 2\nimport time #importa m\xf3dulo de temporiza\xe7\xe3o\nimport board #importa m\xf3dulo da placa\nfrom analogio import AnalogIn #import m\xf3dulo de entrada anal\xf3gica\n\nanalog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n\ndef ler_tensao(pin):\n return (pin.value * 3.3) / 65536\n\nwhile True: #loop infinito\n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica\n time.sleep(0.2) #aguarda 200 ms\n")),(0,i.kt)("p",null,"Salve o arquivo e teste o funcionamento girando o potenci\xf4metro e no Mu Editor visualize os dados no terminal serial e no gr\xe1fico:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Teste 2",src:n(5402).Z,width:"1861",height:"998"})),(0,i.kt)("p",null,"Note que exibimos agora o valor de tens\xe3o."),(0,i.kt)("h3",{id:"an\xe1lise-do-c\xf3digo-exemplos-1-e-2"},"An\xe1lise do c\xf3digo (Exemplos 1 e 2)"),(0,i.kt)("p",null,"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,i.kt)("p",null,"Como precisaremos de intervalos de temporiza\xe7\xe3o importamos o m\xf3dulo time:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"import time\n")),(0,i.kt)("p",null,"Trabalharemos como entradas anal\xf3gicas nesse exemplo, assim, precisamos importar o seguinte m\xf3dulo em analogio:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"from analogio import AnalogIn #import m\xf3dulo de entrada anal\xf3gica\n")),(0,i.kt)("p",null,"A Franzininho Wifi possui diversas entradas anal\xf3gicas. Para esse exemplo usamos a entrada anal\xf3gica no pino IO1"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"analog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n")),(0,i.kt)("p",null,"No loop infinito fazemos a leitura da convers\xe3o AD lendo o valor presente no pino em intervalos de 200 ms. No primeiro exemplos fizemos apenas a impress\xe3o do valor convertido:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"while True: #loop infinito \n print((analog_in.value,)) #imprime o valor da leitura anal\xf3gica \n time.sleep(0.2) #aguarda 200 ms\n")),(0,i.kt)("p",null,"J\xe1 no segundo exemplo fizemos uma fun\xe7\xe3o que converte o valor lido no pino em tens\xe3o:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"def ler_tensao(pin): \n return (pin.value * 3.3) / 65536 \n \nwhile True: #loop infinito \n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica \n time.sleep(0.2) #aguarda 200 ms\n")),(0,i.kt)("p",null,"Agora faremos uma aplica\xe7\xe3o para ligar e desligar um LED dependo do valor lido no potenci\xf4metro."),(0,i.kt)("p",null,"Digite o seguinte c\xf3digo:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"#Leitura de Entrada anal\xf3gica - Exemplo 3\nimport time #importa m\xf3dulo de temporiza\xe7\xe3o\nimport board #importa m\xf3dulo da placa\nfrom analogio import AnalogIn #immport m\xf3dulo de entrada anal\xf3gica\nfrom digitalio import DigitalInOut, Direction\n\nanalog_in = AnalogIn(board.IO1) #mapeia pino anal\xf3gico\n\nled = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n\ndef ler_tensao(pin):\n return (pin.value * 3.3) / 65536\n\nwhile True: #loop infinito\n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica\n \n if(ler_tensao(analog_in)>2.5): #se valor lido for maior que 2.5V\n led.value = 1 #liga LED\n else: #se n\xe3o\n led.value =0 #desliga o LED\n \n time.sleep(0.2) #aguarda 200 ms\n")),(0,i.kt)("p",null,"Salve o arquivo e teste o funcionamento girando o potenci\xf4metro. Verifique se o LED acender\xe1 quando ultrapassar o valor de 2,5V (exibido no terminal). Quando abaixo de 2,5V o LED deve apagar."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Teste 3",src:n(3924).Z,width:"1861",height:"998"})),(0,i.kt)("h3",{id:"an\xe1lise-do-c\xf3digo-exemplo-3"},"An\xe1lise do c\xf3digo (Exemplo 3)"),(0,i.kt)("p",null,"Nesse exemplo adicionamos uma sa\xedda digital para controlar um LED."),(0,i.kt)("admonition",{title:"Dica",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Se voc\xea ainda n\xe3o sabe trabalhar com entradas anal\xf3gicas. Consulte o exemplo ",(0,i.kt)("a",{parentName:"p",href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais"},"Entradas e Sa\xeddas Digitais"),".")),(0,i.kt)("p",null,"No loop principal fizemos um teste para verificar o valor de tens\xe3o da entrada anal\xf3gico, caso acima de 2,5V liga o LED e abaixo de 2,5 V desliga o LED."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"while True: #loop infinito \n print((ler_tensao(analog_in),)) #imprime o valor da leitura anal\xf3gica \n \n if(ler_tensao(analog_in)>2.5): #se valor lido for maior que 2.5V \n led.value = 1 #liga LED \n else: #se n\xe3o \n led.value =0 #desliga o LED \n \n time.sleep(0.2) #aguarda 200 ms\n")),(0,i.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,i.kt)("p",null,"Neste exemplo, aprendemos como fazer a leitura de uma entrada anal\xf3gica. Para voc\xea ler outras entradas pode seguir o mesmo padr\xe3o. Por\xe9m, \xe9 importante verificar se o pino possui essa funcionalidade."),(0,i.kt)("p",null,"Com esse recurso poderemos ler diversos sensores anal\xf3gicos como de temperatura, aceler\xf4metro, som, etc."),(0,i.kt)("admonition",{title:"Desafio",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Fa\xe7a a leitura de outro potenci\xf4metro usando outra entrada anal\xf3gica. Exiba no gr\xe1fico o valor dos 2 potenci\xf4metros em simult\xe2neo.")),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Autor"),(0,i.kt)("th",{parentName:"tr",align:null},"Diana Santos"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Autor"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("a",{parentName:"td",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Data:"),(0,i.kt)("td",{parentName:"tr",align:null},"16/09/2021")))))}d.isMDXComponent=!0},3672:(a,e,n)=>{n.d(e,{Z:()=>o});const o=n.p+"assets/images/circuito-337482518ca8b8ea5e0631611abb8e67.png"},591:(a,e,n)=>{n.d(e,{Z:()=>o});const o=n.p+"assets/images/grafico_entrada_analogica-1-76717640082c66f149c344256345a47c.gif"},5402:(a,e,n)=>{n.d(e,{Z:()=>o});const o=n.p+"assets/images/grafico_entrada_analogica-2-6e0e667074f33acf85d9a4775bad2013.gif"},3924:(a,e,n)=>{n.d(e,{Z:()=>o});const o=n.p+"assets/images/grafico_entrada_analogica-3-a3dd8b9ac8f4c314d4ba9db8516dba43.gif"}}]); \ No newline at end of file diff --git a/en/assets/js/8f8a0b80.7cac2a19.js b/en/assets/js/8f8a0b80.7cac2a19.js new file mode 100755 index 000000000..eb8e6ce4b --- /dev/null +++ b/en/assets/js/8f8a0b80.7cac2a19.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5752],{60060:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>p,frontMatter:()=>a,metadata:()=>d,toc:()=>s});var o=i(17624),r=i(95788);const a={id:"arduino-neopixel",title:"Neopixel RGB LED Onboard",slug:"/franzininho-wifi/exemplos-arduino/neopixel-onboard",description:"Exemplo de uso do led RGB onboard do Franzininho WiFi",author:"Henrique Vilela"},t=void 0,d={id:"FranzininhoWifi/exemplos-arduino/arduino-neopixel",title:"Neopixel RGB LED Onboard",description:"Exemplo de uso do led RGB onboard do Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-arduino/onboard-rgb-led-example.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/neopixel-onboard",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/onboard-rgb-led-example.md",tags:[],version:"current",frontMatter:{id:"arduino-neopixel",title:"Neopixel RGB LED Onboard",slug:"/franzininho-wifi/exemplos-arduino/neopixel-onboard",description:"Exemplo de uso do led RGB onboard do Franzininho WiFi",author:"Henrique Vilela"},sidebar:"docs",previous:{title:"Blink",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/blink"},next:{title:"Leitura DHT11",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/dht11"}},l={},s=[{value:"Instala\xe7\xe3o da biblioteca",id:"instala\xe7\xe3o-da-biblioteca",level:2},{value:"C\xf3digo de Exemplo",id:"c\xf3digo-de-exemplo",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"Nesse exemplo vamos aprender usar o LED RGB Neopixel onboard na Franzininho WiFi."}),"\n",(0,o.jsx)(n.h2,{id:"instala\xe7\xe3o-da-biblioteca",children:"Instala\xe7\xe3o da biblioteca"}),"\n",(0,o.jsxs)(n.p,{children:["Na IDE Arduino, clique em ",(0,o.jsx)(n.strong,{children:"Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas"})]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Neopixel",src:i(84960).c+"",width:"865",height:"452"})}),"\n",(0,o.jsxs)(n.p,{children:['Selecione: "Adafruit NeoPixel by Adafruit Vers\xe3o X.X.X" e clique em ',(0,o.jsx)(n.strong,{children:"Instalar"})]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Neopixel",src:i(73855).c+"",width:"1178",height:"654"})}),"\n",(0,o.jsx)(n.p,{children:"Ap\xf3s selecionar a placa Franzininho conforme os outros tutoriais, poder\xe1 ser usado o c\xf3digo de exemplo abaixo:"}),"\n",(0,o.jsx)(n.h2,{id:"c\xf3digo-de-exemplo",children:"C\xf3digo de Exemplo"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-cpp",children:'// inclui biblioteca NeoPixel\n#include \n\n// O Led RGB est\xe1 conectado ao pino 18 do Franzininho\n#define PIN 18\n// H\xe1 apenas um LED\n#define NUMPIXELS 1\n\n// quantidade de cores que ser\xe3o mostradas\n#define MAXCOLORS 4\n\n// Inst\xe2ncia do objeto "Adafruit_NeoPixel"\nAdafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);\n\n//cores\n#define RED pixels.Color(255, 0, 0) // vermelho\n#define GREEN pixels.Color(0, 255, 0) // verde\n#define BLUE pixels.Color(0, 0, 255) // azul\n#define WHITE pixels.Color(255, 255, 255) // branco\n\n// array com todas as cores para uso em la\xe7o for\n// uint32_t \xe9 o tipo retornado pela fun\xe7\xe3o Color\nuint32_t cores[MAXCOLORS] = {RED, GREEN, BLUE, WHITE};\n\nvoid setup() {\n \n // Inicializa o NeoPixel\n pixels.begin();\n}\n\nvoid loop() {\n \n // "apaga" o LED RGB\n pixels.clear();\n\n // exibe as cores em sequ\xeancia definida no array cores\n for(int i = 0; i{i.d(n,{MN:()=>s});var o=i(11504);function r(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function a(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,o)}return i}function t(e){for(var n=1;n=0||(r[i]=e[i]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var l=o.createContext({}),s=function(e){var n=o.useContext(l),i=n;return e&&(i="function"==typeof e?e(n):t(t({},n),e)),i},c={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},p=o.forwardRef((function(e,n){var i=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,p=d(e,["components","mdxType","originalType","parentName"]),u=s(i),x=r,h=u["".concat(l,".").concat(x)]||u[x]||c[x]||a;return i?o.createElement(h,t(t({ref:n},p),{},{components:i})):o.createElement(h,t({ref:n},p))}));p.displayName="MDXCreateElement"},84960:(e,n,i)=>{i.d(n,{c:()=>o});const o=i.p+"assets/images/neopixel01-2aab47e3a5428cdb244778275a87cc07.PNG"},73855:(e,n,i)=>{i.d(n,{c:()=>o});const o=i.p+"assets/images/neopixel02-92c8d5b2ebfc5c043d28e78d7dce21ff.PNG"}}]); \ No newline at end of file diff --git a/en/assets/js/8f8a0b80.85e4bc16.js b/en/assets/js/8f8a0b80.85e4bc16.js deleted file mode 100755 index 42c114fcc..000000000 --- a/en/assets/js/8f8a0b80.85e4bc16.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2559],{3905:(e,n,o)=>{o.d(n,{Zo:()=>s,kt:()=>f});var i=o(7294);function r(e,n,o){return n in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o,e}function a(e,n){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),o.push.apply(o,i)}return o}function t(e){for(var n=1;n=0||(r[o]=e[o]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var d=i.createContext({}),p=function(e){var n=i.useContext(d),o=n;return e&&(o="function"==typeof e?e(n):t(t({},n),e)),o},s=function(e){var n=p(e.components);return i.createElement(d.Provider,{value:n},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},m=i.forwardRef((function(e,n){var o=e.components,r=e.mdxType,a=e.originalType,d=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),c=p(o),m=r,f=c["".concat(d,".").concat(m)]||c[m]||u[m]||a;return o?i.createElement(f,t(t({ref:n},s),{},{components:o})):i.createElement(f,t({ref:n},s))}));function f(e,n){var o=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=o.length,t=new Array(a);t[0]=m;var l={};for(var d in n)hasOwnProperty.call(n,d)&&(l[d]=n[d]);l.originalType=e,l[c]="string"==typeof e?e:r,t[1]=l;for(var p=2;p{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var i=o(3117),r=(o(7294),o(3905));const a={id:"arduino-neopixel",title:"Neopixel RGB LED Onboard",slug:"/franzininho-wifi/exemplos-arduino/neopixel-onboard",description:"Exemplo de uso do led RGB onboard do Franzininho WiFi",author:"Henrique Vilela"},t=void 0,l={unversionedId:"FranzininhoWifi/exemplos-arduino/arduino-neopixel",id:"FranzininhoWifi/exemplos-arduino/arduino-neopixel",title:"Neopixel RGB LED Onboard",description:"Exemplo de uso do led RGB onboard do Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-arduino/onboard-rgb-led-example.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/neopixel-onboard",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/onboard-rgb-led-example.md",tags:[],version:"current",frontMatter:{id:"arduino-neopixel",title:"Neopixel RGB LED Onboard",slug:"/franzininho-wifi/exemplos-arduino/neopixel-onboard",description:"Exemplo de uso do led RGB onboard do Franzininho WiFi",author:"Henrique Vilela"},sidebar:"docs",previous:{title:"Blink",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/blink"},next:{title:"Leitura DHT11",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/dht11"}},d={},p=[{value:"Instala\xe7\xe3o da biblioteca",id:"instala\xe7\xe3o-da-biblioteca",level:2},{value:"C\xf3digo de Exemplo",id:"c\xf3digo-de-exemplo",level:2}],s={toc:p},c="wrapper";function u(e){let{components:n,...a}=e;return(0,r.kt)(c,(0,i.Z)({},s,a,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Nesse exemplo vamos aprender usar o LED RGB Neopixel onboard na Franzininho WiFi."),(0,r.kt)("h2",{id:"instala\xe7\xe3o-da-biblioteca"},"Instala\xe7\xe3o da biblioteca"),(0,r.kt)("p",null,"Na IDE Arduino, clique em ",(0,r.kt)("strong",{parentName:"p"},"Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Neopixel",src:o(5037).Z,width:"865",height:"452"})),(0,r.kt)("p",null,'Selecione: "Adafruit NeoPixel by Adafruit Vers\xe3o X.X.X" e clique em ',(0,r.kt)("strong",{parentName:"p"},"Instalar")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Neopixel",src:o(3634).Z,width:"1178",height:"654"})),(0,r.kt)("p",null,"Ap\xf3s selecionar a placa Franzininho conforme os outros tutoriais, poder\xe1 ser usado o c\xf3digo de exemplo abaixo:"),(0,r.kt)("h2",{id:"c\xf3digo-de-exemplo"},"C\xf3digo de Exemplo"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},'// inclui biblioteca NeoPixel\n#include \n\n// O Led RGB est\xe1 conectado ao pino 18 do Franzininho\n#define PIN 18\n// H\xe1 apenas um LED\n#define NUMPIXELS 1\n\n// quantidade de cores que ser\xe3o mostradas\n#define MAXCOLORS 4\n\n// Inst\xe2ncia do objeto "Adafruit_NeoPixel"\nAdafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);\n\n//cores\n#define RED pixels.Color(255, 0, 0) // vermelho\n#define GREEN pixels.Color(0, 255, 0) // verde\n#define BLUE pixels.Color(0, 0, 255) // azul\n#define WHITE pixels.Color(255, 255, 255) // branco\n\n// array com todas as cores para uso em la\xe7o for\n// uint32_t \xe9 o tipo retornado pela fun\xe7\xe3o Color\nuint32_t cores[MAXCOLORS] = {RED, GREEN, BLUE, WHITE};\n\nvoid setup() {\n \n // Inicializa o NeoPixel\n pixels.begin();\n}\n\nvoid loop() {\n \n // "apaga" o LED RGB\n pixels.clear();\n\n // exibe as cores em sequ\xeancia definida no array cores\n for(int i = 0; i{o.d(n,{Z:()=>i});const i=o.p+"assets/images/neopixel01-2aab47e3a5428cdb244778275a87cc07.PNG"},3634:(e,n,o)=>{o.d(n,{Z:()=>i});const i=o.p+"assets/images/neopixel02-92c8d5b2ebfc5c043d28e78d7dce21ff.PNG"}}]); \ No newline at end of file diff --git a/en/assets/js/92ef60c0.33d26db8.js b/en/assets/js/92ef60c0.33d26db8.js new file mode 100755 index 000000000..b86c4ceaf --- /dev/null +++ b/en/assets/js/92ef60c0.33d26db8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9964],{86100:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>s,contentTitle:()=>t,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>l});var o=i(17624),r=i(95788);const a={id:"pisca-led",title:"Pisca LED",slug:"/franzininho-diy/pisca-led",description:"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY."},t=void 0,c={id:"FranzininhoDIY/exemplos-arduino/pisca-led",title:"Pisca LED",description:"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/pisca-led.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/pisca-led",permalink:"/en/docs/franzininho-diy/pisca-led",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/pisca-led.md",tags:[],version:"current",frontMatter:{id:"pisca-led",title:"Pisca LED",slug:"/franzininho-diy/pisca-led",description:"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY."},sidebar:"docs",previous:{title:"Sa\xeddas PWM",permalink:"/en/docs/franzininho-diy/saidas-pwm"},next:{title:"Controle brilho de LED",permalink:"/en/docs/franzininho-diy/brilho-led"}},s={},l=[{value:"Materiais:",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function d(e){const n={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"O primeiro contato com a programa\xe7\xe3o com o Arduino, voc\xea faz o blink (que faz com que o led pisque em intervalos de tempo). Com a Franzininho n\xe3o \xe9 diferente, voc\xea pode testar com o pr\xf3prio LED que ela tem ou caso voc\xea queira, pode ligar um LED em uma protoboard. A seguir vamos explicar como fazer um blink com a Franzininho."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"resultado Pisca LED",src:i(59288).c+"",width:"4000",height:"2250"})}),"\n",(0,o.jsx)(n.h2,{id:"materiais",children:"Materiais:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Placa Franzininho;"}),"\n",(0,o.jsx)(n.li,{children:"Protoboard;"}),"\n",(0,o.jsx)(n.li,{children:"LED 3mm;"}),"\n",(0,o.jsx)(n.li,{children:"Resistor 330;"}),"\n",(0,o.jsx)(n.li,{children:"Jumpers"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,o.jsx)(n.p,{children:"Na protoboard voc\xea pode montar o circuito para acionamento do LED da seguinte forma:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Circuito Pisca LED",src:i(18540).c+"",width:"1833",height:"756"})}),"\n",(0,o.jsx)(n.h2,{id:"sketch",children:"Sketch"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-cpp",children:"/*\n Pisca LED - Blink\n\n Esse exemplo exibe como piscar o LED presente na placa ou um LED externo ligado ao pino 1 da Franzininho em intervalos de 1 segundo.\n\n*/\n\nconst int LED = 1; //pino digital conectado ao LED\n\nvoid setup(){\n pinMode(LED,OUTPUT); //pino digital de sa\xedda\n}\n\nvoid loop(){\n digitalWrite(LED,HIGH); //acende o led da placa\n delay(1000); //aguarda um segundo\n digitalWrite(LED,LOW); //apaga o led da placa\n delay(1000); //aguarda um segundo\n}\n"})}),"\n",(0,o.jsx)(n.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311359028691206722?view=diagram"}),"\n",(0,o.jsx)(n.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/0YHNiuUSfyk",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function p(e={}){const{wrapper:n}={...(0,r.MN)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},95788:(e,n,i)=>{i.d(n,{MN:()=>l});var o=i(11504);function r(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function a(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,o)}return i}function t(e){for(var n=1;n=0||(r[i]=e[i]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var s=o.createContext({}),l=function(e){var n=o.useContext(s),i=n;return e&&(i="function"==typeof e?e(n):t(t({},n),e)),i},d={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},p=o.forwardRef((function(e,n){var i=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(i),m=r,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return i?o.createElement(h,t(t({ref:n},p),{},{components:i})):o.createElement(h,t({ref:n},p))}));p.displayName="MDXCreateElement"},59288:(e,n,i)=>{i.d(n,{c:()=>o});const o=i.p+"assets/images/pisca-led-95dfe2300337a645c61ca8cbda964ef4.gif"},18540:(e,n,i)=>{i.d(n,{c:()=>o});const o=i.p+"assets/images/pisca-led-cafaefb0f69ebc87e542c140ed6f0f67.png"}}]); \ No newline at end of file diff --git a/en/assets/js/92ef60c0.6ea72b49.js b/en/assets/js/92ef60c0.6ea72b49.js deleted file mode 100755 index 16ae9a121..000000000 --- a/en/assets/js/92ef60c0.6ea72b49.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6799],{3905:(e,n,i)=>{i.d(n,{Zo:()=>d,kt:()=>f});var a=i(7294);function o(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function r(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,a)}return i}function t(e){for(var n=1;n=0||(o[i]=e[i]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(o[i]=e[i])}return o}var l=a.createContext({}),s=function(e){var n=a.useContext(l),i=n;return e&&(i="function"==typeof e?e(n):t(t({},n),e)),i},d=function(e){var n=s(e.components);return a.createElement(l.Provider,{value:n},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var i=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),p=s(i),m=o,f=p["".concat(l,".").concat(m)]||p[m]||u[m]||r;return i?a.createElement(f,t(t({ref:n},d),{},{components:i})):a.createElement(f,t({ref:n},d))}));function f(e,n){var i=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=i.length,t=new Array(r);t[0]=m;var c={};for(var l in n)hasOwnProperty.call(n,l)&&(c[l]=n[l]);c.originalType=e,c[p]="string"==typeof e?e:o,t[1]=c;for(var s=2;s{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>s});var a=i(3117),o=(i(7294),i(3905));const r={id:"pisca-led",title:"Pisca LED",slug:"/franzininho-diy/pisca-led",description:"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY."},t=void 0,c={unversionedId:"FranzininhoDIY/exemplos-arduino/pisca-led",id:"FranzininhoDIY/exemplos-arduino/pisca-led",title:"Pisca LED",description:"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/pisca-led.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/pisca-led",permalink:"/en/docs/franzininho-diy/pisca-led",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/pisca-led.md",tags:[],version:"current",frontMatter:{id:"pisca-led",title:"Pisca LED",slug:"/franzininho-diy/pisca-led",description:"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY."},sidebar:"docs",previous:{title:"Sa\xeddas PWM",permalink:"/en/docs/franzininho-diy/saidas-pwm"},next:{title:"Controle brilho de LED",permalink:"/en/docs/franzininho-diy/brilho-led"}},l={},s=[{value:"Materiais:",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],d={toc:s},p="wrapper";function u(e){let{components:n,...r}=e;return(0,o.kt)(p,(0,a.Z)({},d,r,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"O primeiro contato com a programa\xe7\xe3o com o Arduino, voc\xea faz o blink ","(","que faz com que o led pisque em intervalos de tempo",")",". Com a Franzininho n\xe3o \xe9 diferente, voc\xea pode testar com o pr\xf3prio LED que ela tem ou caso voc\xea queira, pode ligar um LED em uma protoboard. A seguir vamos explicar como fazer um blink com a Franzininho."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"resultado Pisca LED",src:i(8382).Z,width:"4000",height:"2250"})),(0,o.kt)("h2",{id:"materiais"},"Materiais:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Placa Franzininho;"),(0,o.kt)("li",{parentName:"ul"},"Protoboard;"),(0,o.kt)("li",{parentName:"ul"},"LED 3mm;"),(0,o.kt)("li",{parentName:"ul"},"Resistor 330;"),(0,o.kt)("li",{parentName:"ul"},"Jumpers")),(0,o.kt)("h2",{id:"circuito"},"Circuito"),(0,o.kt)("p",null,"Na protoboard voc\xea pode montar o circuito para acionamento do LED da seguinte forma:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Circuito Pisca LED",src:i(2676).Z,width:"1833",height:"756"})),(0,o.kt)("h2",{id:"sketch"},"Sketch"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cpp"},"/*\n Pisca LED - Blink\n\n Esse exemplo exibe como piscar o LED presente na placa ou um LED externo ligado ao pino 1 da Franzininho em intervalos de 1 segundo.\n\n*/\n\nconst int LED = 1; //pino digital conectado ao LED\n\nvoid setup(){\n pinMode(LED,OUTPUT); //pino digital de sa\xedda\n}\n\nvoid loop(){\n digitalWrite(LED,HIGH); //acende o led da placa\n delay(1000); //aguarda um segundo\n digitalWrite(LED,LOW); //apaga o led da placa\n delay(1000); //aguarda um segundo\n}\n")),(0,o.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,o.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311359028691206722?view=diagram"}),(0,o.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,o.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/0YHNiuUSfyk",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}u.isMDXComponent=!0},8382:(e,n,i)=>{i.d(n,{Z:()=>a});const a=i.p+"assets/images/pisca-led-95dfe2300337a645c61ca8cbda964ef4.gif"},2676:(e,n,i)=>{i.d(n,{Z:()=>a});const a=i.p+"assets/images/pisca-led-cafaefb0f69ebc87e542c140ed6f0f67.png"}}]); \ No newline at end of file diff --git a/en/assets/js/935f2afb.9cb951ec.js b/en/assets/js/935f2afb.9cb951ec.js deleted file mode 100755 index e15df5048..000000000 --- a/en/assets/js/935f2afb.9cb951ec.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[53],{1109:i=>{i.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"category","label":"Comece aqui","items":[{"type":"link","label":"Welcome!","href":"/en/docs/","docId":"sobre"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho WiFi","items":[{"type":"link","label":"Placa Franzininho WiFi","href":"/en/docs/franzininho-wifi/franzininho-wifi","docId":"FranzininhoWifi/franzininho-wifi"},{"type":"category","label":"Wokwi","items":[{"type":"link","label":"Como simular a Franzininho WiFi no Wokwi","href":"/en/docs/franzininho-wifi/wokwi/primeiros-passos","docId":"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro"}],"collapsed":true,"collapsible":true},{"type":"category","label":"ESP-IDF","items":[{"type":"link","label":"Primeiros Passos com ESP-IDF","href":"/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00"},{"type":"link","label":"Hello World! ESP-IDF","href":"/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01"},{"type":"link","label":"Entrada digital","href":"/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02"},{"type":"link","label":"Entrada Anal\xf3gica","href":"/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03"},{"type":"link","label":"PWM com LEDC","href":"/en/docs/franzininho-wifi/exemplos-espidf/ledc","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04"},{"type":"link","label":"Primeiros passos com a AWS","href":"/en/docs/franzininho-wifi/exemplos-espidf/aws","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05"}],"collapsed":true,"collapsible":true},{"type":"category","label":"CircuitPython","items":[{"type":"link","label":"Primeiros Passos","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos"},{"type":"link","label":"Instalando as ferramentas","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas"},{"type":"link","label":"Hello World!","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world"},{"type":"link","label":"Serial Console","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console"},{"type":"link","label":"Entradas e Sa\xeddas Digitais","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais"},{"type":"link","label":"Entrada Anal\xf3gica","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas"},{"type":"link","label":"PWM - Pulse Width Modulation","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/pwm","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm"},{"type":"link","label":"Pinos de Toque Capacitivo","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo"},{"type":"link","label":"Display OLED I2C","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c"},{"type":"link","label":"Sensor de temperatura e umidade DHT11","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/dht11","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11"},{"type":"link","label":"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04"},{"type":"link","label":"Servo motor","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor"},{"type":"link","label":"Sistema de irriga\xe7\xe3o autom\xe1tico","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Arduino","items":[{"type":"link","label":"Primeiros Passos","href":"/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos","docId":"FranzininhoWifi/exemplos-arduino/arduino"},{"type":"link","label":"Blink","href":"/en/docs/franzininho-wifi/exemplos-arduino/blink","docId":"FranzininhoWifi/exemplos-arduino/arduino-blink"},{"type":"link","label":"Neopixel RGB LED Onboard","href":"/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard","docId":"FranzininhoWifi/exemplos-arduino/arduino-neopixel"},{"type":"link","label":"Leitura DHT11","href":"/en/docs/franzininho-wifi/exemplos-arduino/dht11","docId":"FranzininhoWifi/exemplos-arduino/arduino-dht11"}],"collapsed":true,"collapsible":true},{"type":"category","label":"MicroPython","items":[{"type":"link","label":"Primeiros Passos com MicroPython","href":"/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos","docId":"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos"},{"type":"link","label":"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython","href":"/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais","docId":"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais"}],"collapsed":true,"collapsible":true},{"type":"link","label":"Placa Franzininho WiFi dev Edition","href":"/en/docs/franzininho-wifi/franzininho-wifi-dev-edition","docId":"FranzininhoWifi/franzininho-wifi-dev-edition"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho WiFi Lab01","items":[{"type":"link","label":"Franzininho WiFi LAB01","href":"/en/docs/franzininho-wifi-lab01","docId":"FranzininhoWiFiLAB01/franzininho-wifi-lab01"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho C0(STM32C0)","items":[{"type":"link","label":"Placa Franzininho C0","href":"/en/docs/franzininho-c0/franzininho-c0-board","docId":"franzininhoSTM32C0/franzininho-stm32c0"},{"type":"category","label":"STM32CubeIDE","items":[{"type":"link","label":"STM32Cube IDE TODO List","href":"/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist","docId":"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist"},{"type":"link","label":"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos","href":"/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide","docId":"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Arduino","items":[{"type":"link","label":"Arduino IDE TODO List","href":"/en/docs/franzininho-c0/arduino-todolist","docId":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist"},{"type":"link","label":"Primeiros passos com Arduino","href":"/en/docs/franzininho-c0/arduino-primeiros-passos","docId":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos"},{"type":"link","label":"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino","href":"/en/docs/franzininho-c0/arduino-identificacao-pinos","docId":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho DIY","items":[{"type":"link","label":"Placa Franzininho DIY","href":"/en/docs/franzininho-diy/sobre","docId":"FranzininhoDIY/franzininho-diy"},{"type":"category","label":"Montagem","items":[{"type":"link","label":"Lista de Materiais","href":"/en/docs/franzininho-diy/lista-de-materiais","docId":"FranzininhoDIY/lista-de-materiais"},{"type":"link","label":"Identificando os componentes","href":"/en/docs/franzininho-diy/identificando-componentes","docId":"FranzininhoDIY/identificando-componentes"},{"type":"link","label":"Montagem da Franzininho DIY","href":"/en/docs/franzininho-diy/montagem","docId":"FranzininhoDIY/montagem"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Bootloader","items":[{"type":"link","label":"Bootloader","href":"/en/docs/franzininho-diy/bootloader","docId":"FranzininhoDIY/bootloader/bootloader"},{"type":"link","label":"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB","href":"/en/docs/franzininho-diy/drivers-micronucleus","docId":"FranzininhoDIY/bootloader/drivers-micronucleus"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Exemplos Arduino","items":[{"type":"link","label":"Configura\xe7\xe3o da Arduino IDE","href":"/en/docs/franzininho-diy/pacote","docId":"FranzininhoDIY/exemplos-arduino/pacote"},{"type":"link","label":"Entradas e Sa\xeddas Digitais","href":"/en/docs/franzininho-diy/entradas-saidas-digitais","docId":"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais"},{"type":"link","label":"Entradas Anal\xf3gicas","href":"/en/docs/franzininho-diy/entradas-analogicas","docId":"FranzininhoDIY/exemplos-arduino/entradas-analogicas"},{"type":"link","label":"Sa\xeddas PWM","href":"/en/docs/franzininho-diy/saidas-pwm","docId":"FranzininhoDIY/exemplos-arduino/saidas-pwm"},{"type":"link","label":"Pisca LED","href":"/en/docs/franzininho-diy/pisca-led","docId":"FranzininhoDIY/exemplos-arduino/pisca-led"},{"type":"link","label":"Controle brilho de LED","href":"/en/docs/franzininho-diy/brilho-led","docId":"FranzininhoDIY/exemplos-arduino/brilho-led"},{"type":"link","label":"Leitura de Tecla","href":"/en/docs/franzininho-diy/leitura-tecla","docId":"FranzininhoDIY/exemplos-arduino/leitura-tecla"},{"type":"link","label":"Tecla Liga/Desliga","href":"/en/docs/franzininho-diy/tecla-liga-desliga","docId":"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga"},{"type":"link","label":"LED RGB","href":"/en/docs/franzininho-diy/led-rgb","docId":"FranzininhoDIY/exemplos-arduino/led-rgb"},{"type":"link","label":"Elefante Colorido! Que cor?","href":"/en/docs/franzininho-diy/elefante-colorido","docId":"FranzininhoDIY/exemplos-arduino/elefante-colorido"},{"type":"link","label":"Sensor de luz com LDR","href":"/en/docs/franzininho-diy/sensor-luz-ldr","docId":"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr"},{"type":"link","label":"Sem\xe1foro","href":"/en/docs/franzininho-diy/semaforo","docId":"FranzininhoDIY/exemplos-arduino/semaforo"},{"type":"link","label":"Theremim","href":"/en/docs/franzininho-diy/theremim","docId":"FranzininhoDIY/exemplos-arduino/theremim"},{"type":"link","label":"Girassol Automatizado","href":"/en/docs/franzininho-diy/girassol-automatizado","docId":"FranzininhoDIY/exemplos-arduino/girassol-automatizado"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Exemplos AVR Libc","items":[{"type":"link","label":"Primeiros Passos","href":"/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos","docId":"FranzininhoDIY/exemplos-avr-libc/primeiros-passos"},{"type":"link","label":"Hello, World!","href":"/en/docs/franzininho-diy/exemplos-avr-libc/hello-world","docId":"FranzininhoDIY/exemplos-avr-libc/hello-world"},{"type":"link","label":"Sa\xedda Digital","href":"/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital","docId":"FranzininhoDIY/exemplos-avr-libc/saida-digital"},{"type":"link","label":"Entrada Digital","href":"/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital","docId":"FranzininhoDIY/exemplos-avr-libc/entrada-digital"},{"type":"link","label":"Timer 0","href":"/en/docs/franzininho-diy/exemplos-avr-libc/timer0","docId":"FranzininhoDIY/exemplos-avr-libc/timer0"},{"type":"link","label":"Timer 0 - Interrup\xe7\xe3o","href":"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int","docId":"FranzininhoDIY/exemplos-avr-libc/timer0-int"},{"type":"link","label":"Contador de pulsos externos","href":"/en/docs/franzininho-diy/exemplos-avr-libc/contadores","docId":"FranzininhoDIY/exemplos-avr-libc/contadores"},{"type":"link","label":"Instrumento musical com Buzzer","href":"/en/docs/franzininho-diy/exemplos-avr-libc/buzzer","docId":"FranzininhoDIY/exemplos-avr-libc/buzzer"},{"type":"link","label":"Interrup\xe7\xe3o externa","href":"/en/docs/franzininho-diy/exemplos-avr-libc/int-ext","docId":"FranzininhoDIY/exemplos-avr-libc/int-externa"},{"type":"link","label":"TODO","href":"/en/docs/franzininho-diy/exemplos-avr-libc/todo","docId":"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Simulador Wokwi","items":[{"type":"link","label":"Como simular a Franzininho DIY no Wokwi","href":"/en/docs/franzininho-diy/wokwi/primeiros-passos","docId":"FranzininhoDIY/wokwi/wokwi-intro"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Simulador PICSimLab","items":[{"type":"link","label":"Franzininho DIY no PICSimLab","href":"/en/docs/franzininho-diy/picsimlab/primeiros-passos","docId":"FranzininhoDIY/picsimlab/picsimlab-intro"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"FranzMakey","items":[{"type":"link","label":"Placa FranzMakey","href":"/en/docs/FranzMakey/franzmakey","docId":"FranzMakey/franzmakey"},{"type":"link","label":"Primeiros Passos","href":"/en/docs/FranzMakey/primeiros-passos","docId":"FranzMakey/primeiros-passos"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho Tiny","items":[{"type":"link","label":"Placa Franzininho Tiny","href":"/en/docs/franzininho-tiny/franzininho-tiny","docId":"FranzininhoTiny/franzininho-tiny"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzino","items":[{"type":"link","label":"Placa Franzino","href":"/en/docs/Franzino/franzino","docId":"Franzino/franzino"},{"type":"link","label":"Upload via conversor USB/SERIAL","href":"/en/docs/Franzino/upload-conversor-serial","docId":"Franzino/upload-conversor-serial"},{"type":"link","label":"Gravando a Franzino com um placa Arduino UNO","href":"/en/docs/Franzino/upload-com-arduino-uno","docId":"Franzino/upload-com-arduino-uno"}],"collapsed":true,"collapsible":true},{"type":"category","label":"FranzBoy","items":[{"type":"link","label":"Placa FranzBoy","href":"/en/docs/FranzBoy/franzboy","docId":"FranzBoy/franzboy"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Badges","items":[{"type":"link","label":"Badge - Aprenda a soldar","href":"/en/docs/badge/badge","docId":"Badge/badge"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Laborat\xf3rio de Sistemas Embarcados e IoT","items":[{"type":"link","label":"Placa Laborat\xf3rio de Sistemas Embarcados e IoT","href":"/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot","docId":"LaboratorioSistemasIot/laboratorio-sistemas-iot"},{"type":"category","label":"Adaptadores","items":[{"type":"link","label":"Adaptador Arduino Uno","href":"/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno","docId":"LaboratorioSistemasIot/adaptadores/adaptador-arduino"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Bibliotecas","items":[{"type":"link","label":"laboratorioFW","href":"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","docId":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW"},{"type":"link","label":"laboratorioFW_ARDUNO","href":"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO","docId":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}]},"docs":{"Badge/badge":{"id":"Badge/badge","title":"Badge - Aprenda a soldar","description":"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.","sidebar":"docs"},"FranzBoy/franzboy":{"id":"FranzBoy/franzboy","title":"Placa FranzBoy","description":"Detalhes da placa Franzboy","sidebar":"docs"},"FranzininhoDIY/bootloader/bootloader":{"id":"FranzininhoDIY/bootloader/bootloader","title":"Bootloader","description":"Grava\xe7\xe3o do Bootloader na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/bootloader/drivers-micronucleus":{"id":"FranzininhoDIY/bootloader/drivers-micronucleus","title":"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB","description":"Instala\xe7\xe3o dos drivers USB para correto funcionamento","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/brilho-led":{"id":"FranzininhoDIY/exemplos-arduino/brilho-led","title":"Controle brilho de LED","description":"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/elefante-colorido":{"id":"FranzininhoDIY/exemplos-arduino/elefante-colorido","title":"Elefante Colorido! Que cor?","description":"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/entradas-analogicas":{"id":"FranzininhoDIY/exemplos-arduino/entradas-analogicas","title":"Entradas Anal\xf3gicas","description":"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais":{"id":"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais","title":"Entradas e Sa\xeddas Digitais","description":"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/girassol-automatizado":{"id":"FranzininhoDIY/exemplos-arduino/girassol-automatizado","title":"Girassol Automatizado","description":"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/led-rgb":{"id":"FranzininhoDIY/exemplos-arduino/led-rgb","title":"LED RGB","description":"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/leitura-tecla":{"id":"FranzininhoDIY/exemplos-arduino/leitura-tecla","title":"Leitura de Tecla","description":"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/pacote":{"id":"FranzininhoDIY/exemplos-arduino/pacote","title":"Configura\xe7\xe3o da Arduino IDE","description":"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/pisca-led":{"id":"FranzininhoDIY/exemplos-arduino/pisca-led","title":"Pisca LED","description":"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/saidas-pwm":{"id":"FranzininhoDIY/exemplos-arduino/saidas-pwm","title":"Sa\xeddas PWM","description":"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/semaforo":{"id":"FranzininhoDIY/exemplos-arduino/semaforo","title":"Sem\xe1foro","description":"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr":{"id":"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr","title":"Sensor de luz com LDR","description":"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga":{"id":"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga","title":"Tecla Liga/Desliga","description":"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/theremim":{"id":"FranzininhoDIY/exemplos-arduino/theremim","title":"Theremim","description":"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/tutoriais-i2c":{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-i2c","title":"I2C","description":"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},"FranzininhoDIY/exemplos-arduino/tutoriais-introducao":{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-introducao","title":"Introdu\xe7\xe3o","description":"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho"},"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo":{"id":"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo","title":"TODO","description":"Mapeamento dos conte\xfados para exemplos com a AVR LibC","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/buzzer":{"id":"FranzininhoDIY/exemplos-avr-libc/buzzer","title":"Instrumento musical com Buzzer","description":"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/contadores":{"id":"FranzininhoDIY/exemplos-avr-libc/contadores","title":"Contador de pulsos externos","description":"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/entrada-digital":{"id":"FranzininhoDIY/exemplos-avr-libc/entrada-digital","title":"Entrada Digital","description":"Vamos entender como trabalhar com as Entradas Digitais","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/hello-world":{"id":"FranzininhoDIY/exemplos-avr-libc/hello-world","title":"Hello, World!","description":"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/int-externa":{"id":"FranzininhoDIY/exemplos-avr-libc/int-externa","title":"Interrup\xe7\xe3o externa","description":"Exemplo para uso da interrup\xe7\xe3o externa","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/primeiros-passos":{"id":"FranzininhoDIY/exemplos-avr-libc/primeiros-passos","title":"Primeiros Passos","description":"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/saida-digital":{"id":"FranzininhoDIY/exemplos-avr-libc/saida-digital","title":"Sa\xedda Digital","description":"Vamos entender como trabalhar com as sa\xeddas Digitais","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/timer0":{"id":"FranzininhoDIY/exemplos-avr-libc/timer0","title":"Timer 0","description":"Vamos aprender usar o timer 0 como temporizador","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/timer0-int":{"id":"FranzininhoDIY/exemplos-avr-libc/timer0-int","title":"Timer 0 - Interrup\xe7\xe3o","description":"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o","sidebar":"docs"},"FranzininhoDIY/franzininho-diy":{"id":"FranzininhoDIY/franzininho-diy","title":"Placa Franzininho DIY","description":"Detalhes da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/identificando-componentes":{"id":"FranzininhoDIY/identificando-componentes","title":"Identificando os componentes","description":"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.","sidebar":"docs"},"FranzininhoDIY/lista-de-materiais":{"id":"FranzininhoDIY/lista-de-materiais","title":"Lista de Materiais","description":"Lista de materiais (componentes) para montagem da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/montagem":{"id":"FranzininhoDIY/montagem","title":"Montagem da Franzininho DIY","description":"Passo a passo da montagem da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/picsimlab/picsimlab-intro":{"id":"FranzininhoDIY/picsimlab/picsimlab-intro","title":"Franzininho DIY no PICSimLab","description":"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/wokwi/wokwi-intro":{"id":"FranzininhoDIY/wokwi/wokwi-intro","title":"Como simular a Franzininho DIY no Wokwi","description":"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY","sidebar":"docs"},"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos":{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos","title":"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino","description":"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino","sidebar":"docs"},"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos":{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos","title":"Primeiros passos com Arduino","description":"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0","sidebar":"docs"},"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist":{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist","title":"Arduino IDE TODO List","description":"Todo list para exemplos com Arduino","sidebar":"docs"},"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide":{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide","title":"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos","description":"7 passos para voc\xea configurar um novo projeto para a Franzininho C0","sidebar":"docs"},"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist":{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist","title":"STM32Cube IDE TODO List","description":"Todo list para exemplos com STM32Cube IDE","sidebar":"docs"},"franzininhoSTM32C0/franzininho-stm32c0":{"id":"franzininhoSTM32C0/franzininho-stm32c0","title":"Placa Franzininho C0","description":"Franzininho C0 \'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics","sidebar":"docs"},"FranzininhoTiny/franzininho-tiny":{"id":"FranzininhoTiny/franzininho-tiny","title":"Placa Franzininho Tiny","description":"Detalhes da Franzininho Tiny","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino":{"id":"FranzininhoWifi/exemplos-arduino/arduino","title":"Primeiros Passos","description":"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino-blink":{"id":"FranzininhoWifi/exemplos-arduino/arduino-blink","title":"Blink","description":"Primeiro Hello World com a Franzininho WiFi no Arduino IDE","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino-dht11":{"id":"FranzininhoWifi/exemplos-arduino/arduino-dht11","title":"Leitura DHT11","description":"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino-neopixel":{"id":"FranzininhoWifi/exemplos-arduino/arduino-neopixel","title":"Neopixel RGB LED Onboard","description":"Exemplo de uso do led RGB onboard do Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11","title":"Sensor de temperatura e umidade DHT11","description":"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c","title":"Display OLED I2C","description":"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas","title":"Entrada Anal\xf3gica","description":"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais","title":"Entradas e Sa\xeddas Digitais","description":"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas","title":"Instalando as ferramentas","description":"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world","title":"Hello World!","description":"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos","title":"Primeiros Passos","description":"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm","title":"PWM - Pulse Width Modulation","description":"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04","title":"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04","description":"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console","title":"Serial Console","description":"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor","title":"Servo motor","description":"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o","title":"Sistema de irriga\xe7\xe3o autom\xe1tico","description":"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo","title":"Pinos de Toque Capacitivo","description":"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00","title":"Primeiros Passos com ESP-IDF","description":"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01","title":"Hello World! ESP-IDF","description":"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02","title":"Entrada digital","description":"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03","title":"Entrada Anal\xf3gica","description":"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04","title":"PWM com LEDC","description":"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05","title":"Primeiros passos com a AWS","description":"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.","sidebar":"docs"},"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais":{"id":"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais","title":"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython","description":"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.","sidebar":"docs"},"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos":{"id":"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos","title":"Primeiros Passos com MicroPython","description":"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.","sidebar":"docs"},"FranzininhoWifi/franzininho-wifi":{"id":"FranzininhoWifi/franzininho-wifi","title":"Placa Franzininho WiFi","description":"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes.","sidebar":"docs"},"FranzininhoWifi/franzininho-wifi-dev-edition":{"id":"FranzininhoWifi/franzininho-wifi-dev-edition","title":"Placa Franzininho WiFi dev Edition","description":"Detalhes da Franzininho WiFi Developer Edition","sidebar":"docs"},"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro":{"id":"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro","title":"Como simular a Franzininho WiFi no Wokwi","description":"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi","sidebar":"docs"},"FranzininhoWiFiLAB01/franzininho-wifi-lab01":{"id":"FranzininhoWiFiLAB01/franzininho-wifi-lab01","title":"Franzininho WiFi LAB01","description":"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi.","sidebar":"docs"},"Franzino/franzino":{"id":"Franzino/franzino","title":"Placa Franzino","description":"Detalhes da placa Franzino","sidebar":"docs"},"Franzino/upload-com-arduino-uno":{"id":"Franzino/upload-com-arduino-uno","title":"Gravando a Franzino com um placa Arduino UNO","description":"Veja como usar um Arduino Uno como programador para a Franzino","sidebar":"docs"},"Franzino/upload-conversor-serial":{"id":"Franzino/upload-conversor-serial","title":"Upload via conversor USB/SERIAL","description":"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos","sidebar":"docs"},"FranzMakey/franzmakey":{"id":"FranzMakey/franzmakey","title":"Placa FranzMakey","description":"Detalhes da placa FranzMakey","sidebar":"docs"},"FranzMakey/primeiros-passos":{"id":"FranzMakey/primeiros-passos","title":"Primeiros Passos","description":"Primeiros passos com a placa FranzMakey","sidebar":"docs"},"LaboratorioSistemasIot/adaptadores/adaptador-arduino":{"id":"LaboratorioSistemasIot/adaptadores/adaptador-arduino","title":"Adaptador Arduino Uno","description":"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT","sidebar":"docs"},"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW":{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","title":"laboratorioFW","description":"O que \xe9 a biblioteca laboratorioFW","sidebar":"docs"},"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO":{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO","title":"laboratorioFW_ARDUNO","description":"O que \xe9 a biblioteca laboratorioFW-ARDUNO","sidebar":"docs"},"LaboratorioSistemasIot/laboratorio-sistemas-iot":{"id":"LaboratorioSistemasIot/laboratorio-sistemas-iot","title":"Placa Laborat\xf3rio de Sistemas Embarcados e IoT","description":"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT","sidebar":"docs"},"sobre":{"id":"sobre","title":"Welcome to Franzinho project documentation","description":"Here you find the documents (Under development) to work with all boards and kits Franzinho.","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/en/assets/js/935f2afb.ab236fba.js b/en/assets/js/935f2afb.ab236fba.js new file mode 100755 index 000000000..146d65c43 --- /dev/null +++ b/en/assets/js/935f2afb.ab236fba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5696],{35988:i=>{i.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"category","label":"Comece aqui","items":[{"type":"link","label":"Welcome!","href":"/en/docs/","docId":"sobre","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho WiFi","items":[{"type":"link","label":"Placa Franzininho WiFi","href":"/en/docs/franzininho-wifi/franzininho-wifi","docId":"FranzininhoWifi/franzininho-wifi","unlisted":false},{"type":"category","label":"Wokwi","items":[{"type":"link","label":"Como simular a Franzininho WiFi no Wokwi","href":"/en/docs/franzininho-wifi/wokwi/primeiros-passos","docId":"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"ESP-IDF","items":[{"type":"link","label":"Primeiros Passos com ESP-IDF","href":"/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00","unlisted":false},{"type":"link","label":"Hello World! ESP-IDF","href":"/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01","unlisted":false},{"type":"link","label":"Entrada digital","href":"/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02","unlisted":false},{"type":"link","label":"Entrada Anal\xf3gica","href":"/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03","unlisted":false},{"type":"link","label":"PWM com LEDC","href":"/en/docs/franzininho-wifi/exemplos-espidf/ledc","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04","unlisted":false},{"type":"link","label":"Primeiros passos com a AWS","href":"/en/docs/franzininho-wifi/exemplos-espidf/aws","docId":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"CircuitPython","items":[{"type":"link","label":"Primeiros Passos","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos","unlisted":false},{"type":"link","label":"Instalando as ferramentas","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas","unlisted":false},{"type":"link","label":"Hello World!","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world","unlisted":false},{"type":"link","label":"Serial Console","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console","unlisted":false},{"type":"link","label":"Entradas e Sa\xeddas Digitais","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais","unlisted":false},{"type":"link","label":"Entrada Anal\xf3gica","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas","unlisted":false},{"type":"link","label":"PWM - Pulse Width Modulation","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/pwm","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm","unlisted":false},{"type":"link","label":"Pinos de Toque Capacitivo","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo","unlisted":false},{"type":"link","label":"Display OLED I2C","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c","unlisted":false},{"type":"link","label":"Sensor de temperatura e umidade DHT11","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/dht11","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11","unlisted":false},{"type":"link","label":"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04","unlisted":false},{"type":"link","label":"Servo motor","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor","unlisted":false},{"type":"link","label":"Sistema de irriga\xe7\xe3o autom\xe1tico","href":"/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao","docId":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Arduino","items":[{"type":"link","label":"Primeiros Passos","href":"/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos","docId":"FranzininhoWifi/exemplos-arduino/arduino","unlisted":false},{"type":"link","label":"Blink","href":"/en/docs/franzininho-wifi/exemplos-arduino/blink","docId":"FranzininhoWifi/exemplos-arduino/arduino-blink","unlisted":false},{"type":"link","label":"Neopixel RGB LED Onboard","href":"/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard","docId":"FranzininhoWifi/exemplos-arduino/arduino-neopixel","unlisted":false},{"type":"link","label":"Leitura DHT11","href":"/en/docs/franzininho-wifi/exemplos-arduino/dht11","docId":"FranzininhoWifi/exemplos-arduino/arduino-dht11","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"MicroPython","items":[{"type":"link","label":"Primeiros Passos com MicroPython","href":"/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos","docId":"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos","unlisted":false},{"type":"link","label":"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython","href":"/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais","docId":"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Placa Franzininho WiFi dev Edition","href":"/en/docs/franzininho-wifi/franzininho-wifi-dev-edition","docId":"FranzininhoWifi/franzininho-wifi-dev-edition","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho WiFi Lab01","items":[{"type":"link","label":"Franzininho WiFi LAB01","href":"/en/docs/franzininho-wifi-lab01","docId":"FranzininhoWiFiLAB01/franzininho-wifi-lab01","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho C0(STM32C0)","items":[{"type":"link","label":"Placa Franzininho C0","href":"/en/docs/franzininho-c0/franzininho-c0-board","docId":"franzininhoSTM32C0/franzininho-stm32c0","unlisted":false},{"type":"category","label":"STM32CubeIDE","items":[{"type":"link","label":"STM32Cube IDE TODO List","href":"/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist","docId":"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist","unlisted":false},{"type":"link","label":"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos","href":"/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide","docId":"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Arduino","items":[{"type":"link","label":"Arduino IDE TODO List","href":"/en/docs/franzininho-c0/arduino-todolist","docId":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist","unlisted":false},{"type":"link","label":"Primeiros passos com Arduino","href":"/en/docs/franzininho-c0/arduino-primeiros-passos","docId":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos","unlisted":false},{"type":"link","label":"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino","href":"/en/docs/franzininho-c0/arduino-identificacao-pinos","docId":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho DIY","items":[{"type":"link","label":"Placa Franzininho DIY","href":"/en/docs/franzininho-diy/sobre","docId":"FranzininhoDIY/franzininho-diy","unlisted":false},{"type":"category","label":"Montagem","items":[{"type":"link","label":"Lista de Materiais","href":"/en/docs/franzininho-diy/lista-de-materiais","docId":"FranzininhoDIY/lista-de-materiais","unlisted":false},{"type":"link","label":"Identificando os componentes","href":"/en/docs/franzininho-diy/identificando-componentes","docId":"FranzininhoDIY/identificando-componentes","unlisted":false},{"type":"link","label":"Montagem da Franzininho DIY","href":"/en/docs/franzininho-diy/montagem","docId":"FranzininhoDIY/montagem","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Bootloader","items":[{"type":"link","label":"Bootloader","href":"/en/docs/franzininho-diy/bootloader","docId":"FranzininhoDIY/bootloader/bootloader","unlisted":false},{"type":"link","label":"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB","href":"/en/docs/franzininho-diy/drivers-micronucleus","docId":"FranzininhoDIY/bootloader/drivers-micronucleus","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Exemplos Arduino","items":[{"type":"link","label":"Configura\xe7\xe3o da Arduino IDE","href":"/en/docs/franzininho-diy/pacote","docId":"FranzininhoDIY/exemplos-arduino/pacote","unlisted":false},{"type":"link","label":"Entradas e Sa\xeddas Digitais","href":"/en/docs/franzininho-diy/entradas-saidas-digitais","docId":"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais","unlisted":false},{"type":"link","label":"Entradas Anal\xf3gicas","href":"/en/docs/franzininho-diy/entradas-analogicas","docId":"FranzininhoDIY/exemplos-arduino/entradas-analogicas","unlisted":false},{"type":"link","label":"Sa\xeddas PWM","href":"/en/docs/franzininho-diy/saidas-pwm","docId":"FranzininhoDIY/exemplos-arduino/saidas-pwm","unlisted":false},{"type":"link","label":"Pisca LED","href":"/en/docs/franzininho-diy/pisca-led","docId":"FranzininhoDIY/exemplos-arduino/pisca-led","unlisted":false},{"type":"link","label":"Controle brilho de LED","href":"/en/docs/franzininho-diy/brilho-led","docId":"FranzininhoDIY/exemplos-arduino/brilho-led","unlisted":false},{"type":"link","label":"Leitura de Tecla","href":"/en/docs/franzininho-diy/leitura-tecla","docId":"FranzininhoDIY/exemplos-arduino/leitura-tecla","unlisted":false},{"type":"link","label":"Tecla Liga/Desliga","href":"/en/docs/franzininho-diy/tecla-liga-desliga","docId":"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga","unlisted":false},{"type":"link","label":"LED RGB","href":"/en/docs/franzininho-diy/led-rgb","docId":"FranzininhoDIY/exemplos-arduino/led-rgb","unlisted":false},{"type":"link","label":"Elefante Colorido! Que cor?","href":"/en/docs/franzininho-diy/elefante-colorido","docId":"FranzininhoDIY/exemplos-arduino/elefante-colorido","unlisted":false},{"type":"link","label":"Sensor de luz com LDR","href":"/en/docs/franzininho-diy/sensor-luz-ldr","docId":"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr","unlisted":false},{"type":"link","label":"Sem\xe1foro","href":"/en/docs/franzininho-diy/semaforo","docId":"FranzininhoDIY/exemplos-arduino/semaforo","unlisted":false},{"type":"link","label":"Theremim","href":"/en/docs/franzininho-diy/theremim","docId":"FranzininhoDIY/exemplos-arduino/theremim","unlisted":false},{"type":"link","label":"Girassol Automatizado","href":"/en/docs/franzininho-diy/girassol-automatizado","docId":"FranzininhoDIY/exemplos-arduino/girassol-automatizado","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Exemplos AVR Libc","items":[{"type":"link","label":"Primeiros Passos","href":"/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos","docId":"FranzininhoDIY/exemplos-avr-libc/primeiros-passos","unlisted":false},{"type":"link","label":"Hello, World!","href":"/en/docs/franzininho-diy/exemplos-avr-libc/hello-world","docId":"FranzininhoDIY/exemplos-avr-libc/hello-world","unlisted":false},{"type":"link","label":"Sa\xedda Digital","href":"/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital","docId":"FranzininhoDIY/exemplos-avr-libc/saida-digital","unlisted":false},{"type":"link","label":"Entrada Digital","href":"/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital","docId":"FranzininhoDIY/exemplos-avr-libc/entrada-digital","unlisted":false},{"type":"link","label":"Timer 0","href":"/en/docs/franzininho-diy/exemplos-avr-libc/timer0","docId":"FranzininhoDIY/exemplos-avr-libc/timer0","unlisted":false},{"type":"link","label":"Timer 0 - Interrup\xe7\xe3o","href":"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int","docId":"FranzininhoDIY/exemplos-avr-libc/timer0-int","unlisted":false},{"type":"link","label":"Contador de pulsos externos","href":"/en/docs/franzininho-diy/exemplos-avr-libc/contadores","docId":"FranzininhoDIY/exemplos-avr-libc/contadores","unlisted":false},{"type":"link","label":"Instrumento musical com Buzzer","href":"/en/docs/franzininho-diy/exemplos-avr-libc/buzzer","docId":"FranzininhoDIY/exemplos-avr-libc/buzzer","unlisted":false},{"type":"link","label":"Interrup\xe7\xe3o externa","href":"/en/docs/franzininho-diy/exemplos-avr-libc/int-ext","docId":"FranzininhoDIY/exemplos-avr-libc/int-externa","unlisted":false},{"type":"link","label":"TODO","href":"/en/docs/franzininho-diy/exemplos-avr-libc/todo","docId":"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Simulador Wokwi","items":[{"type":"link","label":"Como simular a Franzininho DIY no Wokwi","href":"/en/docs/franzininho-diy/wokwi/primeiros-passos","docId":"FranzininhoDIY/wokwi/wokwi-intro","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Simulador PICSimLab","items":[{"type":"link","label":"Franzininho DIY no PICSimLab","href":"/en/docs/franzininho-diy/picsimlab/primeiros-passos","docId":"FranzininhoDIY/picsimlab/picsimlab-intro","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"FranzMakey","items":[{"type":"link","label":"Placa FranzMakey","href":"/en/docs/FranzMakey/franzmakey","docId":"FranzMakey/franzmakey","unlisted":false},{"type":"link","label":"Primeiros Passos","href":"/en/docs/FranzMakey/primeiros-passos","docId":"FranzMakey/primeiros-passos","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzininho Tiny","items":[{"type":"link","label":"Placa Franzininho Tiny","href":"/en/docs/franzininho-tiny/franzininho-tiny","docId":"FranzininhoTiny/franzininho-tiny","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Franzino","items":[{"type":"link","label":"Placa Franzino","href":"/en/docs/Franzino/franzino","docId":"Franzino/franzino","unlisted":false},{"type":"link","label":"Upload via conversor USB/SERIAL","href":"/en/docs/Franzino/upload-conversor-serial","docId":"Franzino/upload-conversor-serial","unlisted":false},{"type":"link","label":"Gravando a Franzino com um placa Arduino UNO","href":"/en/docs/Franzino/upload-com-arduino-uno","docId":"Franzino/upload-com-arduino-uno","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"FranzBoy","items":[{"type":"link","label":"Placa FranzBoy","href":"/en/docs/FranzBoy/franzboy","docId":"FranzBoy/franzboy","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Badges","items":[{"type":"link","label":"Badge - Aprenda a soldar","href":"/en/docs/badge/badge","docId":"Badge/badge","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Laborat\xf3rio de Sistemas Embarcados e IoT","items":[{"type":"link","label":"Placa Laborat\xf3rio de Sistemas Embarcados e IoT","href":"/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot","docId":"LaboratorioSistemasIot/laboratorio-sistemas-iot","unlisted":false},{"type":"category","label":"Adaptadores","items":[{"type":"link","label":"Adaptador Arduino Uno","href":"/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno","docId":"LaboratorioSistemasIot/adaptadores/adaptador-arduino","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Bibliotecas","items":[{"type":"link","label":"laboratorioFW","href":"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","docId":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","unlisted":false},{"type":"link","label":"laboratorioFW_ARDUNO","href":"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO","docId":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}]},"docs":{"Badge/badge":{"id":"Badge/badge","title":"Badge - Aprenda a soldar","description":"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.","sidebar":"docs"},"FranzBoy/franzboy":{"id":"FranzBoy/franzboy","title":"Placa FranzBoy","description":"Detalhes da placa Franzboy","sidebar":"docs"},"FranzininhoDIY/bootloader/bootloader":{"id":"FranzininhoDIY/bootloader/bootloader","title":"Bootloader","description":"Grava\xe7\xe3o do Bootloader na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/bootloader/drivers-micronucleus":{"id":"FranzininhoDIY/bootloader/drivers-micronucleus","title":"Instala\xe7\xe3o de drivers e configura\xe7\xe3o da USB","description":"Instala\xe7\xe3o dos drivers USB para correto funcionamento","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/brilho-led":{"id":"FranzininhoDIY/exemplos-arduino/brilho-led","title":"Controle brilho de LED","description":"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/elefante-colorido":{"id":"FranzininhoDIY/exemplos-arduino/elefante-colorido","title":"Elefante Colorido! Que cor?","description":"Esse exemplo exibe como usar o LED RGB para fazer uma aplica\xe7\xe3o did\xe1tica.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/entradas-analogicas":{"id":"FranzininhoDIY/exemplos-arduino/entradas-analogicas","title":"Entradas Anal\xf3gicas","description":"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais":{"id":"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais","title":"Entradas e Sa\xeddas Digitais","description":"Nesse exemplo vamos aprender a trabalhar com as entradas e sa\xeddas digitais na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/girassol-automatizado":{"id":"FranzininhoDIY/exemplos-arduino/girassol-automatizado","title":"Girassol Automatizado","description":"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/led-rgb":{"id":"FranzininhoDIY/exemplos-arduino/led-rgb","title":"LED RGB","description":"Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas tr\xeas cores","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/leitura-tecla":{"id":"FranzininhoDIY/exemplos-arduino/leitura-tecla","title":"Leitura de Tecla","description":"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/pacote":{"id":"FranzininhoDIY/exemplos-arduino/pacote","title":"Configura\xe7\xe3o da Arduino IDE","description":"Configura\xe7\xe3o da IDE Arduino para programa\xe7\xe3o da Franzininho","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/pisca-led":{"id":"FranzininhoDIY/exemplos-arduino/pisca-led","title":"Pisca LED","description":"Nesse exemplo vamos aprender como fazer um pisca LED (Blink) com a Franzininho DIY.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/saidas-pwm":{"id":"FranzininhoDIY/exemplos-arduino/saidas-pwm","title":"Sa\xeddas PWM","description":"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/semaforo":{"id":"FranzininhoDIY/exemplos-arduino/semaforo","title":"Sem\xe1foro","description":"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr":{"id":"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr","title":"Sensor de luz com LDR","description":"Nesse exemplo vamos ler um sensor LDR usando a entrada anal\xf3gica da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga":{"id":"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga","title":"Tecla Liga/Desliga","description":"Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos.","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/theremim":{"id":"FranzininhoDIY/exemplos-arduino/theremim","title":"Theremim","description":"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-arduino/tutoriais-i2c":{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-i2c","title":"I2C","description":"Para deixar claro todo o funcionamento da Franzininho, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto."},"FranzininhoDIY/exemplos-arduino/tutoriais-introducao":{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-introducao","title":"Introdu\xe7\xe3o","description":"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho"},"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo":{"id":"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo","title":"TODO","description":"Mapeamento dos conte\xfados para exemplos com a AVR LibC","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/buzzer":{"id":"FranzininhoDIY/exemplos-avr-libc/buzzer","title":"Instrumento musical com Buzzer","description":"Nesse exemplo vamos criar um programa que l\xea uma partitura e toca a m\xfasica escrita atrav\xe9s de um buzzer no Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/contadores":{"id":"FranzininhoDIY/exemplos-avr-libc/contadores","title":"Contador de pulsos externos","description":"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/entrada-digital":{"id":"FranzininhoDIY/exemplos-avr-libc/entrada-digital","title":"Entrada Digital","description":"Vamos entender como trabalhar com as Entradas Digitais","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/hello-world":{"id":"FranzininhoDIY/exemplos-avr-libc/hello-world","title":"Hello, World!","description":"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/int-externa":{"id":"FranzininhoDIY/exemplos-avr-libc/int-externa","title":"Interrup\xe7\xe3o externa","description":"Exemplo para uso da interrup\xe7\xe3o externa","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/primeiros-passos":{"id":"FranzininhoDIY/exemplos-avr-libc/primeiros-passos","title":"Primeiros Passos","description":"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/saida-digital":{"id":"FranzininhoDIY/exemplos-avr-libc/saida-digital","title":"Sa\xedda Digital","description":"Vamos entender como trabalhar com as sa\xeddas Digitais","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/timer0":{"id":"FranzininhoDIY/exemplos-avr-libc/timer0","title":"Timer 0","description":"Vamos aprender usar o timer 0 como temporizador","sidebar":"docs"},"FranzininhoDIY/exemplos-avr-libc/timer0-int":{"id":"FranzininhoDIY/exemplos-avr-libc/timer0-int","title":"Timer 0 - Interrup\xe7\xe3o","description":"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o","sidebar":"docs"},"FranzininhoDIY/franzininho-diy":{"id":"FranzininhoDIY/franzininho-diy","title":"Placa Franzininho DIY","description":"Detalhes da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/identificando-componentes":{"id":"FranzininhoDIY/identificando-componentes","title":"Identificando os componentes","description":"Para deixar claro todo o funcionamento da Franzininho DIY, precisamos conhecer um pouco dos componentes que comp\xf5em o projeto, assim poderemos fazer mudan\xe7as e aprimorar ainda mais este projeto.","sidebar":"docs"},"FranzininhoDIY/lista-de-materiais":{"id":"FranzininhoDIY/lista-de-materiais","title":"Lista de Materiais","description":"Lista de materiais (componentes) para montagem da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/montagem":{"id":"FranzininhoDIY/montagem","title":"Montagem da Franzininho DIY","description":"Passo a passo da montagem da Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/picsimlab/picsimlab-intro":{"id":"FranzininhoDIY/picsimlab/picsimlab-intro","title":"Franzininho DIY no PICSimLab","description":"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY","sidebar":"docs"},"FranzininhoDIY/wokwi/wokwi-intro":{"id":"FranzininhoDIY/wokwi/wokwi-intro","title":"Como simular a Franzininho DIY no Wokwi","description":"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY","sidebar":"docs"},"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos":{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos","title":"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino","description":"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino","sidebar":"docs"},"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos":{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos","title":"Primeiros passos com Arduino","description":"Instala\xe7\xe3o e configura\xe7\xf5es da Arduino IDE para programar a Franzininho C0","sidebar":"docs"},"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist":{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist","title":"Arduino IDE TODO List","description":"Todo list para exemplos com Arduino","sidebar":"docs"},"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide":{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide","title":"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos","description":"7 passos para voc\xea configurar um novo projeto para a Franzininho C0","sidebar":"docs"},"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist":{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist","title":"STM32Cube IDE TODO List","description":"Todo list para exemplos com STM32Cube IDE","sidebar":"docs"},"franzininhoSTM32C0/franzininho-stm32c0":{"id":"franzininhoSTM32C0/franzininho-stm32c0","title":"Placa Franzininho C0","description":"Franzininho C0 \'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics","sidebar":"docs"},"FranzininhoTiny/franzininho-tiny":{"id":"FranzininhoTiny/franzininho-tiny","title":"Placa Franzininho Tiny","description":"Detalhes da Franzininho Tiny","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino":{"id":"FranzininhoWifi/exemplos-arduino/arduino","title":"Primeiros Passos","description":"Aprenda dar os primeiros passo no uso do Arduino na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino-blink":{"id":"FranzininhoWifi/exemplos-arduino/arduino-blink","title":"Blink","description":"Primeiro Hello World com a Franzininho WiFi no Arduino IDE","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino-dht11":{"id":"FranzininhoWifi/exemplos-arduino/arduino-dht11","title":"Leitura DHT11","description":"Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores na serial;","sidebar":"docs"},"FranzininhoWifi/exemplos-arduino/arduino-neopixel":{"id":"FranzininhoWifi/exemplos-arduino/arduino-neopixel","title":"Neopixel RGB LED Onboard","description":"Exemplo de uso do led RGB onboard do Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11","title":"Sensor de temperatura e umidade DHT11","description":"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c","title":"Display OLED I2C","description":"Nesse exemplo aprenderemos usar o display OLED com comunica\xe7\xe3o I2C explorando as funcionalidades b\xe1sicas usando o CircuitPython.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas","title":"Entrada Anal\xf3gica","description":"Este exemplo exibe como trabalhar com as entradas anal\xf3gicas na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais","title":"Entradas e Sa\xeddas Digitais","description":"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas","title":"Instalando as ferramentas","description":"Neste texto vamos configurar as ferramentas para a utiliza\xe7\xe3o da Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world","title":"Hello World!","description":"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos","title":"Primeiros Passos","description":"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm","title":"PWM - Pulse Width Modulation","description":"Neste artigo vamos aprender a usar o PWM no CircuitPython, uma t\xe9cnica muito usada para controle de pot\xeancia. Veja como \xe9 f\xe1cil aplicar.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04","title":"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04","description":"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console","title":"Serial Console","description":"Neste texto vamos utilizar a comunica\xe7\xe3o serial do Franzininho WiFi para imprimir e coleta valores do console.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor","title":"Servo motor","description":"Confira nesse artigo como controlar um servo motor com a Franzininho WiFi no CircuitPython. Veja como \xe9 f\xe1cil!","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o","title":"Sistema de irriga\xe7\xe3o autom\xe1tico","description":"Um sistema de irriga\xe7\xe3o autom\xe1tico \xe9 uma solu\xe7\xe3o para ajudar a manter de forma sistem\xe1tica a irriga\xe7\xe3o de suas plantas.","sidebar":"docs"},"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo":{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo","title":"Pinos de Toque Capacitivo","description":"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00","title":"Primeiros Passos com ESP-IDF","description":"Este documento tem como objetivo ajud\xe1-lo a configurar o ESP-IDF","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01","title":"Hello World! ESP-IDF","description":"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02","title":"Entrada digital","description":"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03","title":"Entrada Anal\xf3gica","description":"Neste exemplo vamos entender como usar o conversor AD para leitura de sinais anal\xf3gico","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04","title":"PWM com LEDC","description":"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.","sidebar":"docs"},"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05":{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05","title":"Primeiros passos com a AWS","description":"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.","sidebar":"docs"},"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais":{"id":"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais","title":"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython","description":"Explore as entradas e sa\xeddas digitais da Franzininho WiFi com MicroPython. Controle LEDs e bot\xf5es na Franzininho WiFi LAB01.","sidebar":"docs"},"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos":{"id":"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos","title":"Primeiros Passos com MicroPython","description":"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.","sidebar":"docs"},"FranzininhoWifi/franzininho-wifi":{"id":"FranzininhoWifi/franzininho-wifi","title":"Placa Franzininho WiFi","description":"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes.","sidebar":"docs"},"FranzininhoWifi/franzininho-wifi-dev-edition":{"id":"FranzininhoWifi/franzininho-wifi-dev-edition","title":"Placa Franzininho WiFi dev Edition","description":"Detalhes da Franzininho WiFi Developer Edition","sidebar":"docs"},"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro":{"id":"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro","title":"Como simular a Franzininho WiFi no Wokwi","description":"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho WiFi","sidebar":"docs"},"FranzininhoWiFiLAB01/franzininho-wifi-lab01":{"id":"FranzininhoWiFiLAB01/franzininho-wifi-lab01","title":"Franzininho WiFi LAB01","description":"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi.","sidebar":"docs"},"Franzino/franzino":{"id":"Franzino/franzino","title":"Placa Franzino","description":"Detalhes da placa Franzino","sidebar":"docs"},"Franzino/upload-com-arduino-uno":{"id":"Franzino/upload-com-arduino-uno","title":"Gravando a Franzino com um placa Arduino UNO","description":"Veja como usar um Arduino Uno como programador para a Franzino","sidebar":"docs"},"Franzino/upload-conversor-serial":{"id":"Franzino/upload-conversor-serial","title":"Upload via conversor USB/SERIAL","description":"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos","sidebar":"docs"},"FranzMakey/franzmakey":{"id":"FranzMakey/franzmakey","title":"Placa FranzMakey","description":"Detalhes da placa FranzMakey","sidebar":"docs"},"FranzMakey/primeiros-passos":{"id":"FranzMakey/primeiros-passos","title":"Primeiros Passos","description":"Primeiros passos com a placa FranzMakey","sidebar":"docs"},"LaboratorioSistemasIot/adaptadores/adaptador-arduino":{"id":"LaboratorioSistemasIot/adaptadores/adaptador-arduino","title":"Adaptador Arduino Uno","description":"Adaptador Arduino Uno para a placa Laborat\xf3rio de Sistemas Embarcados e IoT","sidebar":"docs"},"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW":{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","title":"laboratorioFW","description":"O que \xe9 a biblioteca laboratorioFW","sidebar":"docs"},"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO":{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO","title":"laboratorioFW_ARDUNO","description":"O que \xe9 a biblioteca laboratorioFW-ARDUNO","sidebar":"docs"},"LaboratorioSistemasIot/laboratorio-sistemas-iot":{"id":"LaboratorioSistemasIot/laboratorio-sistemas-iot","title":"Placa Laborat\xf3rio de Sistemas Embarcados e IoT","description":"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT","sidebar":"docs"},"sobre":{"id":"sobre","title":"Welcome to Franzinho project documentation","description":"Here you find the documents (Under development) to work with all boards and kits Franzinho.","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/en/assets/js/94c955d1.2abb0c2b.js b/en/assets/js/94c955d1.2abb0c2b.js deleted file mode 100755 index 60f70917f..000000000 --- a/en/assets/js/94c955d1.2abb0c2b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7347],{3905:(e,a,t)=>{t.d(a,{Zo:()=>p,kt:()=>f});var n=t(7294);function r(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function i(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function o(e){for(var a=1;a=0||(r[t]=e[t]);return r}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var l=n.createContext({}),d=function(e){var a=n.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):o(o({},a),e)),t},p=function(e){var a=d(e.components);return n.createElement(l.Provider,{value:a},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var t=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=d(t),u=r,f=c["".concat(l,".").concat(u)]||c[u]||m[u]||i;return t?n.createElement(f,o(o({ref:a},p),{},{components:t})):n.createElement(f,o({ref:a},p))}));function f(e,a){var t=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=u;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[c]="string"==typeof e?e:r,o[1]=s;for(var d=2;d{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var n=t(3117),r=(t(7294),t(3905));const i={id:"franzininhoc0-arduino-identificacao-pinos",title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",slug:"/franzininho-c0/arduino-identificacao-pinos",description:"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino"},o=void 0,s={unversionedId:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos",id:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos",title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",description:"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino",source:"@site/docs/franzininhoSTM32C0/exemplos-arduino/identificacao-pinos.md",sourceDirName:"franzininhoSTM32C0/exemplos-arduino",slug:"/franzininho-c0/arduino-identificacao-pinos",permalink:"/en/docs/franzininho-c0/arduino-identificacao-pinos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-arduino/identificacao-pinos.md",tags:[],version:"current",frontMatter:{id:"franzininhoc0-arduino-identificacao-pinos",title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",slug:"/franzininho-c0/arduino-identificacao-pinos",description:"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino"},sidebar:"docs",previous:{title:"Primeiros passos com Arduino",permalink:"/en/docs/franzininho-c0/arduino-primeiros-passos"},next:{title:"Placa Franzininho DIY",permalink:"/en/docs/franzininho-diy/sobre"}},l={},d=[{value:"Entrada e Sa\xedda Digital",id:"entrada-e-sa\xedda-digital",level:2},{value:"Entrada Anal\xf3gica (ADC)",id:"entrada-anal\xf3gica-adc",level:2},{value:"Interface Serial Ass\xedncrona (UART)",id:"interface-serial-ass\xedncrona-uart",level:2},{value:"SPI",id:"spi",level:2},{value:"I^2^C",id:"i2c",level:2},{value:"Op\xe7\xf5es V\xe1lidas para os Pinos",id:"op\xe7\xf5es-v\xe1lidas-para-os-pinos",level:2}],p={toc:d},c="wrapper";function m(e){let{components:a,...i}=e;return(0,r.kt)(c,(0,n.Z)({},p,i,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Na documenta\xe7\xe3o da ST, os pinos dos microcontroladores STM32 s\xe3o identificados por nomes como PA1, PA2 e PB6 (como pode ser visto no esquema da Franzininho C0). Descrevemos aqui as identifica\xe7\xf5es usadas no Ambiente Arduino."),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},'Estas informa\xe7\xf5es se referem \xe0 op\xe7\xe3o de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma op\xe7\xe3o de placa espec\xedfica para a Franzininho C0, usando op\xe7\xf5es default mais adequadas para os pinos.')),(0,r.kt)("p",null,"A figura abaixo resume as identifica\xe7\xf5es:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",src:t(1572).Z,width:"1500",height:"1116"})),(0,r.kt)("p",null,'O pacote STM32duino aceita as identifica\xe7\xf5es do tipo PA1 como "nomes" dos pinos, por\xe9m esta n\xe3o \xe9 a identifica\xe7\xe3o usual do ambiente Arduino.'),(0,r.kt)("h2",{id:"entrada-e-sa\xedda-digital"},"Entrada e Sa\xedda Digital"),(0,r.kt)("p",null,"Para entrada e sa\xedda digital, o ambiente Arduino utiliza n\xfameros para identificar os pinos. A figura no in\xedcio da p\xe1gina mostra os n\xfameros correspondentes aos pinos da Franzininho."),(0,r.kt)("p",null,"As fun\xe7\xf5es digitais aceitam tamb\xe9m os nomes usados para entrada anal\xf3gica (ver o pr\xf3ximo item)."),(0,r.kt)("h2",{id:"entrada-anal\xf3gica-adc"},"Entrada Anal\xf3gica (ADC)"),(0,r.kt)("p",null,"Para entrada anal\xf3gica, o ambiente Arduino utiliza nomes do tipo An. A figura no in\xedcio da p\xe1gina mostra os nomes correspondentes aos pinos da Franzininho."),(0,r.kt)("h2",{id:"interface-serial-ass\xedncrona-uart"},"Interface Serial Ass\xedncrona (UART)"),(0,r.kt)("p",null,"O microcontrolador na Franzininho C0 possui duas interfaces seriais ass\xedncronas (uart1 e uart2). Ele possui uma certa flexibilidade na conex\xe3o destas interfaces aos pinos."),(0,r.kt)("p",null,"No ambiente Arduino, as interfaces seriais ass\xedncronas s\xe3o acessadas atrav\xe9s de objetos com nomes como Serial, Serial1 e Serial2."),(0,r.kt)("p",null,"Na Franzininho C0, os pinos PA9 e PA10 est\xe3o conectados ao conversor serial USB CH340, para fornecer comunica\xe7\xe3o serial com um micro atrav\xe9s de um cabo USB."),(0,r.kt)("p",null,'A op\xe7\xe3o "Generic STM32C0" define um objeto Serial associado \xe0 interface uart1, usando os pinos PA0 e PA1 (como indicado na figura no alto da p\xe1gina). Para usar o objeto Serial para comunicar via USB \xe9 preciso reconfigurar os pinos atrav\xe9s dos m\xe9todos setRx e setTx ',(0,r.kt)("strong",{parentName:"p"},"antes"),' de chamar o m\xe9todo begin (veja tamb\xe9m o exemplo "Hello World"):'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"}," Serial.setRx(PA_10_R);\n Serial.setTx(PA_9_R);\n Serial.begin(115200);\n")),(0,r.kt)("p",null,"Obs.: Os nomes especiais para os pinos PA9 e PA10 se devem ao fato destes pinos compartilharem os mesmos pinos f\xedsicos que PA11 e PA12."),(0,r.kt)("p",null,"Para usar a uart2 \xe9 preciso declarar um objeto Serial2 e especificar os pinos que ser\xe3o usados:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"HardwareSerial Serial2(uart2);\n\n Serial2.setRx(PA3);\n Serial2.setTx(PA2);\n Serial2.begin(115200);\n")),(0,r.kt)("h2",{id:"spi"},"SPI"),(0,r.kt)("p",null,"A figura no alto da p\xe1gina indica os pinos utilizados por padr\xe3o para a interface spi, acessada atrav\xe9s do objeto SPI que \xe9 parte da bioblioteca padr\xe3o SPI."),(0,r.kt)("p",null,"Veja detalhes no exemplo SPI."),(0,r.kt)("h2",{id:"i2c"},"I^2^C"),(0,r.kt)("p",null,"No ambiente Arduino, a interface i^2^c \xe9 acessada atrav\xe9s do objeto Wire, que \xe9 parte da bioblioteca padr\xe3o SPI."),(0,r.kt)("p",null,'A op\xe7\xe3o "Generic STM32C0" usa como padr\xe3o os pinos PA9 e PA10 para a interface i2c. Como estes pinos est\xe3o ligados na Franzininho C0 aos conversor serial USB, \xe9 preciso reconfigurar os pinos atrav\xe9s dos m\xe9todos setSCL e setSDA ',(0,r.kt)("strong",{parentName:"p"},"antes"),' de chamar o m\xe9todo begin (veja o exemplo "I2C").'),(0,r.kt)("h2",{id:"op\xe7\xf5es-v\xe1lidas-para-os-pinos"},"Op\xe7\xf5es V\xe1lidas para os Pinos"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"UART1")," "),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Sinal"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Op\xe7\xf5es"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"TX"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA0, PA9, PB6, PC14")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"RX"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA1, PA8, PA10, PB7")))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"UART2")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Sinal"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Op\xe7\xf5es"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"TX"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA2, PA4, PA8, PA14")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"RX"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA3, PA5, PA13, PA14")))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"SPI")," "),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Sinal"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Op\xe7\xf5es"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"MISO"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA6, PA1, PB6")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"MOSI"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA2, PA7, PA12, PB6")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"SCK"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA1, PA5, PB6")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"SS"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA4, PA8, PA14")))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"I2C")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Sinal"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Op\xe7\xf5es"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"SCL"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PA9, PB6, PB7")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"SDA"),(0,r.kt)("td",{parentName:"tr",align:"left"},"PC14, PA10, PB7")))),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Autor"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Daniel Quadros"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Data:"),(0,r.kt)("td",{parentName:"tr",align:"left"},"19/10/2023")))))}m.isMDXComponent=!0},1572:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/FranzC0_Arduino-89bf26df3ced3b5ae9d0bb802bebeebb.png"}}]); \ No newline at end of file diff --git a/en/assets/js/94c955d1.bee848c2.js b/en/assets/js/94c955d1.bee848c2.js new file mode 100755 index 000000000..f809b133c --- /dev/null +++ b/en/assets/js/94c955d1.bee848c2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6200],{6604:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var t=i(17624),r=i(95788);const s={id:"franzininhoc0-arduino-identificacao-pinos",title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",slug:"/franzininho-c0/arduino-identificacao-pinos",description:"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino"},a=void 0,o={id:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos",title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",description:"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino",source:"@site/docs/franzininhoSTM32C0/exemplos-arduino/identificacao-pinos.md",sourceDirName:"franzininhoSTM32C0/exemplos-arduino",slug:"/franzininho-c0/arduino-identificacao-pinos",permalink:"/en/docs/franzininho-c0/arduino-identificacao-pinos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-arduino/identificacao-pinos.md",tags:[],version:"current",frontMatter:{id:"franzininhoc0-arduino-identificacao-pinos",title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",slug:"/franzininho-c0/arduino-identificacao-pinos",description:"Identifica\xe7\xe3o dos Pinos da Franzininho C0 no Ambiente Arduino"},sidebar:"docs",previous:{title:"Primeiros passos com Arduino",permalink:"/en/docs/franzininho-c0/arduino-primeiros-passos"},next:{title:"Placa Franzininho DIY",permalink:"/en/docs/franzininho-diy/sobre"}},d={},l=[{value:"Entrada e Sa\xedda Digital",id:"entrada-e-sa\xedda-digital",level:2},{value:"Entrada Anal\xf3gica (ADC)",id:"entrada-anal\xf3gica-adc",level:2},{value:"Interface Serial Ass\xedncrona (UART)",id:"interface-serial-ass\xedncrona-uart",level:2},{value:"SPI",id:"spi",level:2},{value:"I^2^C",id:"i2c",level:2},{value:"Op\xe7\xf5es V\xe1lidas para os Pinos",id:"op\xe7\xf5es-v\xe1lidas-para-os-pinos",level:2}];function c(e){const n={code:"code",em:"em",h2:"h2",img:"img",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.MN)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"Na documenta\xe7\xe3o da ST, os pinos dos microcontroladores STM32 s\xe3o identificados por nomes como PA1, PA2 e PB6 (como pode ser visto no esquema da Franzininho C0). Descrevemos aqui as identifica\xe7\xf5es usadas no Ambiente Arduino."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:'Estas informa\xe7\xf5es se referem \xe0 op\xe7\xe3o de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma op\xe7\xe3o de placa espec\xedfica para a Franzininho C0, usando op\xe7\xf5es default mais adequadas para os pinos.'})}),"\n",(0,t.jsx)(n.p,{children:"A figura abaixo resume as identifica\xe7\xf5es:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",src:i(91740).c+"",width:"800",height:"595"})}),"\n",(0,t.jsx)(n.p,{children:'O pacote STM32duino aceita as identifica\xe7\xf5es do tipo PA1 como "nomes" dos pinos, por\xe9m esta n\xe3o \xe9 a identifica\xe7\xe3o usual do ambiente Arduino.'}),"\n",(0,t.jsx)(n.h2,{id:"entrada-e-sa\xedda-digital",children:"Entrada e Sa\xedda Digital"}),"\n",(0,t.jsx)(n.p,{children:"Para entrada e sa\xedda digital, o ambiente Arduino utiliza n\xfameros para identificar os pinos. A figura no in\xedcio da p\xe1gina mostra os n\xfameros correspondentes aos pinos da Franzininho."}),"\n",(0,t.jsx)(n.p,{children:"As fun\xe7\xf5es digitais aceitam tamb\xe9m os nomes usados para entrada anal\xf3gica (ver o pr\xf3ximo item)."}),"\n",(0,t.jsx)(n.h2,{id:"entrada-anal\xf3gica-adc",children:"Entrada Anal\xf3gica (ADC)"}),"\n",(0,t.jsx)(n.p,{children:"Para entrada anal\xf3gica, o ambiente Arduino utiliza nomes do tipo An. A figura no in\xedcio da p\xe1gina mostra os nomes correspondentes aos pinos da Franzininho."}),"\n",(0,t.jsx)(n.h2,{id:"interface-serial-ass\xedncrona-uart",children:"Interface Serial Ass\xedncrona (UART)"}),"\n",(0,t.jsx)(n.p,{children:"O microcontrolador na Franzininho C0 possui duas interfaces seriais ass\xedncronas (uart1 e uart2). Ele possui uma certa flexibilidade na conex\xe3o destas interfaces aos pinos."}),"\n",(0,t.jsx)(n.p,{children:"No ambiente Arduino, as interfaces seriais ass\xedncronas s\xe3o acessadas atrav\xe9s de objetos com nomes como Serial, Serial1 e Serial2."}),"\n",(0,t.jsx)(n.p,{children:"Na Franzininho C0, os pinos PA9 e PA10 est\xe3o conectados ao conversor serial USB CH340, para fornecer comunica\xe7\xe3o serial com um micro atrav\xe9s de um cabo USB."}),"\n",(0,t.jsxs)(n.p,{children:['A op\xe7\xe3o "Generic STM32C0" define um objeto Serial associado \xe0 interface uart1, usando os pinos PA0 e PA1 (como indicado na figura no alto da p\xe1gina). Para usar o objeto Serial para comunicar via USB \xe9 preciso reconfigurar os pinos atrav\xe9s dos m\xe9todos setRx e setTx ',(0,t.jsx)(n.strong,{children:"antes"}),' de chamar o m\xe9todo begin (veja tamb\xe9m o exemplo "Hello World"):']}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:" Serial.setRx(PA_10_R);\r\n Serial.setTx(PA_9_R);\r\n Serial.begin(115200);\n"})}),"\n",(0,t.jsx)(n.p,{children:"Obs.: Os nomes especiais para os pinos PA9 e PA10 se devem ao fato destes pinos compartilharem os mesmos pinos f\xedsicos que PA11 e PA12."}),"\n",(0,t.jsx)(n.p,{children:"Para usar a uart2 \xe9 preciso declarar um objeto Serial2 e especificar os pinos que ser\xe3o usados:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"HardwareSerial Serial2(uart2);\r\n\r\n Serial2.setRx(PA3);\r\n Serial2.setTx(PA2);\r\n Serial2.begin(115200);\n"})}),"\n",(0,t.jsx)(n.h2,{id:"spi",children:"SPI"}),"\n",(0,t.jsx)(n.p,{children:"A figura no alto da p\xe1gina indica os pinos utilizados por padr\xe3o para a interface spi, acessada atrav\xe9s do objeto SPI que \xe9 parte da bioblioteca padr\xe3o SPI."}),"\n",(0,t.jsx)(n.p,{children:"Veja detalhes no exemplo SPI."}),"\n",(0,t.jsx)(n.h2,{id:"i2c",children:"I^2^C"}),"\n",(0,t.jsx)(n.p,{children:"No ambiente Arduino, a interface i^2^c \xe9 acessada atrav\xe9s do objeto Wire, que \xe9 parte da bioblioteca padr\xe3o SPI."}),"\n",(0,t.jsxs)(n.p,{children:['A op\xe7\xe3o "Generic STM32C0" usa como padr\xe3o os pinos PA9 e PA10 para a interface i2c. Como estes pinos est\xe3o ligados na Franzininho C0 aos conversor serial USB, \xe9 preciso reconfigurar os pinos atrav\xe9s dos m\xe9todos setSCL e setSDA ',(0,t.jsx)(n.strong,{children:"antes"}),' de chamar o m\xe9todo begin (veja o exemplo "I2C").']}),"\n",(0,t.jsx)(n.h2,{id:"op\xe7\xf5es-v\xe1lidas-para-os-pinos",children:"Op\xe7\xf5es V\xe1lidas para os Pinos"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"UART1"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Sinal"}),(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Op\xe7\xf5es"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"TX"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA0, PA9, PB6, PC14"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"RX"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA1, PA8, PA10, PB7"})]})]})]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"UART2"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Sinal"}),(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Op\xe7\xf5es"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"TX"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA2, PA4, PA8, PA14"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"RX"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA3, PA5, PA13, PA14"})]})]})]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"SPI"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Sinal"}),(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Op\xe7\xf5es"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"MISO"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA6, PA1, PB6"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"MOSI"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA2, PA7, PA12, PB6"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"SCK"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA1, PA5, PB6"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"SS"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA4, PA8, PA14"})]})]})]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"I2C"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Sinal"}),(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Op\xe7\xf5es"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"SCL"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PA9, PB6, PB7"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"SDA"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"PC14, PA10, PB7"})]})]})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Autor"}),(0,t.jsx)(n.th,{style:{textAlign:"left"},children:"Daniel Quadros"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"Data:"}),(0,t.jsx)(n.td,{style:{textAlign:"left"},children:"19/10/2023"})]})})]})]})}function p(e={}){const{wrapper:n}={...(0,r.MN)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},95788:(e,n,i)=>{i.d(n,{MN:()=>l});var t=i(11504);function r(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function s(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,t)}return i}function a(e){for(var n=1;n=0||(r[i]=e[i]);return r}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var d=t.createContext({}),l=function(e){var n=t.useContext(d),i=n;return e&&(i="function"==typeof e?e(n):a(a({},n),e)),i},c={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},p=t.forwardRef((function(e,n){var i=e.components,r=e.mdxType,s=e.originalType,d=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),h=l(i),x=r,f=h["".concat(d,".").concat(x)]||h[x]||c[x]||s;return i?t.createElement(f,a(a({ref:n},p),{},{components:i})):t.createElement(f,a({ref:n},p))}));p.displayName="MDXCreateElement"},91740:(e,n,i)=>{i.d(n,{c:()=>t});const t=i.p+"assets/images/FranzC0_Arduino-89bf26df3ced3b5ae9d0bb802bebeebb.png"}}]); \ No newline at end of file diff --git a/en/assets/js/9785.4a98800b.js b/en/assets/js/9785.4a98800b.js deleted file mode 100755 index ba6e3434e..000000000 --- a/en/assets/js/9785.4a98800b.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9785],{3905:(e,t,n)=>{"use strict";n.d(t,{Zo:()=>u,kt:()=>f});var o=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function c(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=o.createContext({}),s=function(e){var t=o.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},u=function(e){var t=s(e.components);return o.createElement(i.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},p=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,i=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=s(n),p=a,f=m["".concat(i,".").concat(p)]||m[p]||d[p]||r;return n?o.createElement(f,c(c({ref:t},u),{},{components:n})):o.createElement(f,c({ref:t},u))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,c=new Array(r);c[0]=p;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[m]="string"==typeof e?e:a,c[1]=l;for(var s=2;s{"use strict";n.d(t,{Z:()=>u});var o=n(7294),a=n(5999),r=n(5281),c=n(3117),l=n(4334);const i={iconEdit:"iconEdit_Z9Sw"};function s(e){let{className:t,...n}=e;return o.createElement("svg",(0,c.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,l.Z)(i.iconEdit,t),"aria-hidden":"true"},n),o.createElement("g",null,o.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function u(e){let{editUrl:t}=e;return o.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:r.k.common.editThisPage},o.createElement(s,null),o.createElement(a.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},2503:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var o=n(3117),a=n(7294),r=n(4334),c=n(5999),l=n(6668),i=n(9960);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};function u(e){let{as:t,id:n,...u}=e;const{navbar:{hideOnScroll:m}}=(0,l.L)();if("h1"===t||!n)return a.createElement(t,(0,o.Z)({},u,{id:void 0}));const d=(0,c.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return a.createElement(t,(0,o.Z)({},u,{className:(0,r.Z)("anchor",m?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,u.className),id:n}),u.children,a.createElement(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":d,title:d},"\u200b"))}},1506:(e,t,n)=>{"use strict";n.d(t,{Z:()=>be});var o=n(7294),a=n(3905),r=n(3117),c=n(5742);var l=n(2389),i=n(4334),s=n(2949),u=n(6668);function m(){const{prism:e}=(0,u.L)(),{colorMode:t}=(0,s.I)(),n=e.theme,o=e.darkTheme||n;return"dark"===t?o:n}var d=n(5281),p=n(7594),f=n.n(p);const g=/title=(?["'])(?.*?)\1/,h=/\{(?<range>[\d,-]+)\}/,y={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function b(e,t){const n=e.map((e=>{const{start:n,end:o}=y[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${o})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function v(e,t){let n=e.replace(/\n$/,"");const{language:o,magicComments:a,metastring:r}=t;if(r&&h.test(r)){const e=r.match(h).groups.range;if(0===a.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${r}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=a[0].className,o=f()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(o),code:n}}if(void 0===o)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return b(["js","jsBlock"],t);case"jsx":case"tsx":return b(["js","jsBlock","jsx"],t);case"html":return b(["js","jsBlock","html"],t);case"python":case"py":case"bash":return b(["bash"],t);case"markdown":case"md":return b(["html","jsx","bash"],t);default:return b(Object.keys(y),t)}}(o,a),l=n.split("\n"),i=Object.fromEntries(a.map((e=>[e.className,{start:0,range:""}]))),s=Object.fromEntries(a.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),u=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),m=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let p=0;p<l.length;){const e=l[p].match(c);if(!e){p+=1;continue}const t=e.slice(1).find((e=>void 0!==e));s[t]?i[s[t]].range+=`${p},`:u[t]?i[u[t]].start=p:m[t]&&(i[m[t]].range+=`${i[m[t]].start}-${p-1},`),l.splice(p,1)}n=l.join("\n");const d={};return Object.entries(i).forEach((e=>{let[t,{range:n}]=e;f()(n).forEach((e=>{d[e]??=[],d[e].push(t)}))})),{lineClassNames:d,code:n}}const E={codeBlockContainer:"codeBlockContainer_Ckt0"};function k(e){let{as:t,...n}=e;const a=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[o,a]=e;const r=t[o];r&&"string"==typeof a&&(n[r]=a)})),n}(m());return o.createElement(t,(0,r.Z)({},n,{style:a,className:(0,i.Z)(n.className,E.codeBlockContainer,d.k.common.codeBlock)}))}const N={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function C(e){let{children:t,className:n}=e;return o.createElement(k,{as:"pre",tabIndex:0,className:(0,i.Z)(N.codeBlockStandalone,"thin-scrollbar",n)},o.createElement("code",{className:N.codeBlockLines},t))}var w=n(902);const B={attributes:!0,characterData:!0,childList:!0,subtree:!0};function Z(e,t){const[n,a]=(0,o.useState)(),r=(0,o.useCallback)((()=>{a(e.current?.closest("[role=tabpanel][hidden]"))}),[e,a]);(0,o.useEffect)((()=>{r()}),[r]),function(e,t,n){void 0===n&&(n=B);const a=(0,w.zX)(t),r=(0,w.Ql)(n);(0,o.useEffect)((()=>{const t=new MutationObserver(a);return e&&t.observe(e,r),()=>t.disconnect()}),[e,a,r])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),r())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}const T={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]};var L={Prism:n(7410).Z,theme:T};function j(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _(){return _=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},_.apply(this,arguments)}var x=/\r\n|\r|\n/,O=function(e){0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},S=function(e,t){var n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)};function z(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&-1===t.indexOf(o)&&(n[o]=e[o]);return n}var P=function(e){function t(){for(var t=this,n=[],o=arguments.length;o--;)n[o]=arguments[o];e.apply(this,n),j(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?function(e,t){var n=e.plain,o=Object.create(null),a=e.styles.reduce((function(e,n){var o=n.languages,a=n.style;return o&&!o.includes(t)||n.types.forEach((function(t){var n=_({},e[t],a);e[t]=n})),e}),o);return a.root=n,a.plain=_({},n,{backgroundColor:null}),a}(e.theme,e.language):void 0;return t.themeDict=n})),j(this,"getLineProps",(function(e){var n=e.key,o=e.className,a=e.style,r=_({},z(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),c=t.getThemeDict(t.props);return void 0!==c&&(r.style=c.plain),void 0!==a&&(r.style=void 0!==r.style?_({},r.style,a):a),void 0!==n&&(r.key=n),o&&(r.className+=" "+o),r})),j(this,"getStyleForToken",(function(e){var n=e.types,o=e.empty,a=n.length,r=t.getThemeDict(t.props);if(void 0!==r){if(1===a&&"plain"===n[0])return o?{display:"inline-block"}:void 0;if(1===a&&!o)return r[n[0]];var c=o?{display:"inline-block"}:{},l=n.map((function(e){return r[e]}));return Object.assign.apply(Object,[c].concat(l))}})),j(this,"getTokenProps",(function(e){var n=e.key,o=e.className,a=e.style,r=e.token,c=_({},z(e,["key","className","style","token"]),{className:"token "+r.types.join(" "),children:r.content,style:t.getStyleForToken(r),key:void 0});return void 0!==a&&(c.style=void 0!==c.style?_({},c.style,a):a),void 0!==n&&(c.key=n),o&&(c.className+=" "+o),c})),j(this,"tokenize",(function(e,t,n,o){var a={code:t,grammar:n,language:o,tokens:[]};e.hooks.run("before-tokenize",a);var r=a.tokens=e.tokenize(a.code,a.grammar,a.language);return e.hooks.run("after-tokenize",a),r}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,o=e.code,a=e.children,r=this.getThemeDict(this.props),c=t.languages[n];return a({tokens:function(e){for(var t=[[]],n=[e],o=[0],a=[e.length],r=0,c=0,l=[],i=[l];c>-1;){for(;(r=o[c]++)<a[c];){var s=void 0,u=t[c],m=n[c][r];if("string"==typeof m?(u=c>0?u:["plain"],s=m):(u=S(u,m.type),m.alias&&(u=S(u,m.alias)),s=m.content),"string"==typeof s){var d=s.split(x),p=d.length;l.push({types:u,content:d[0]});for(var f=1;f<p;f++)O(l),i.push(l=[]),l.push({types:u,content:d[f]})}else c++,t.push(u),n.push(s),o.push(0),a.push(s.length)}c--,t.pop(),n.pop(),o.pop(),a.pop()}return O(l),i}(void 0!==c?this.tokenize(t,o,c,n):[o]),className:"prism-code language-"+n,style:void 0!==r?r.root:{},getLineProps:this.getLineProps,getTokenProps:this.getTokenProps})},t}(o.Component);const A=P,I={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function W(e){let{line:t,classNames:n,showLineNumbers:a,getLineProps:c,getTokenProps:l}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const s=c({line:t,className:(0,i.Z)(n,a&&I.codeLine)}),u=t.map(((e,t)=>o.createElement("span",(0,r.Z)({key:t},l({token:e,key:t})))));return o.createElement("span",s,a?o.createElement(o.Fragment,null,o.createElement("span",{className:I.codeLineNumber}),o.createElement("span",{className:I.codeLineContent},u)):u,o.createElement("br",null))}var M=n(5999);function H(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"}))}function D(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))}const V={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function R(e){let{code:t,className:n}=e;const[a,r]=(0,o.useState)(!1),c=(0,o.useRef)(void 0),l=(0,o.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const o=document.createElement("textarea"),a=document.activeElement;o.value=e,o.setAttribute("readonly",""),o.style.contain="strict",o.style.position="absolute",o.style.left="-9999px",o.style.fontSize="12pt";const r=document.getSelection(),c=r.rangeCount>0&&r.getRangeAt(0);n.append(o),o.select(),o.selectionStart=0,o.selectionEnd=e.length;let l=!1;try{l=document.execCommand("copy")}catch{}o.remove(),c&&(r.removeAllRanges(),r.addRange(c)),a&&a.focus()}(t),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[t]);return(0,o.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),o.createElement("button",{type:"button","aria-label":a?(0,M.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,M.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,M.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,V.copyButton,a&&V.copyButtonCopied),onClick:l},o.createElement("span",{className:V.copyButtonIcons,"aria-hidden":"true"},o.createElement(H,{className:V.copyButtonIcon}),o.createElement(D,{className:V.copyButtonSuccessIcon})))}function $(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"}))}const F={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function q(e){let{className:t,onClick:n,isEnabled:a}=e;const r=(0,M.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return o.createElement("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",t,a&&F.wordWrapButtonEnabled),"aria-label":r,title:r},o.createElement($,{className:F.wordWrapButtonIcon,"aria-hidden":"true"}))}function G(e){let{children:t,className:n="",metastring:a,title:c,showLineNumbers:l,language:s}=e;const{prism:{defaultLanguage:d,magicComments:p}}=(0,u.L)(),f=s??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??d,h=m(),y=function(){const[e,t]=(0,o.useState)(!1),[n,a]=(0,o.useState)(!1),r=(0,o.useRef)(null),c=(0,o.useCallback)((()=>{const n=r.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[r,e]),l=(0,o.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=r.current,n=e>t||r.current.querySelector("code").hasAttribute("style");a(n)}),[r]);return Z(r,l),(0,o.useEffect)((()=>{l()}),[e,l]),(0,o.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:r,isEnabled:e,isCodeScrollable:n,toggle:c}}(),b=function(e){return e?.match(g)?.groups.title??""}(a)||c,{lineClassNames:E,code:C}=v(t,{metastring:a,language:f,magicComments:p}),w=l??function(e){return Boolean(e?.includes("showLineNumbers"))}(a);return o.createElement(k,{as:"div",className:(0,i.Z)(n,f&&!n.includes(`language-${f}`)&&`language-${f}`)},b&&o.createElement("div",{className:N.codeBlockTitle},b),o.createElement("div",{className:N.codeBlockContent},o.createElement(A,(0,r.Z)({},L,{theme:h,code:C,language:f??"text"}),(e=>{let{className:t,tokens:n,getLineProps:a,getTokenProps:r}=e;return o.createElement("pre",{tabIndex:0,ref:y.codeBlockRef,className:(0,i.Z)(t,N.codeBlock,"thin-scrollbar")},o.createElement("code",{className:(0,i.Z)(N.codeBlockLines,w&&N.codeBlockLinesWithNumbering)},n.map(((e,t)=>o.createElement(W,{key:t,line:e,getLineProps:a,getTokenProps:r,classNames:E[t],showLineNumbers:w})))))})),o.createElement("div",{className:N.buttonGroup},(y.isEnabled||y.isCodeScrollable)&&o.createElement(q,{className:N.codeButton,onClick:()=>y.toggle(),isEnabled:y.isEnabled}),o.createElement(R,{className:N.codeButton,code:C}))))}function U(e){let{children:t,...n}=e;const a=(0,l.Z)(),c=function(e){return o.Children.toArray(e).some((e=>(0,o.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof c?G:C;return o.createElement(i,(0,r.Z)({key:String(a)},n),c)}var Q=n(9960);var X=n(7459),Y=n(6043);const J={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function K(e){return!!e&&("SUMMARY"===e.tagName||K(e.parentElement))}function ee(e,t){return!!e&&(e===t||ee(e.parentElement,t))}function te(e){let{summary:t,children:n,...a}=e;const c=(0,l.Z)(),i=(0,o.useRef)(null),{collapsed:s,setCollapsed:u}=(0,Y.u)({initialState:!a.open}),[m,d]=(0,o.useState)(a.open),p=o.isValidElement(t)?t:o.createElement("summary",null,t??"Details");return o.createElement("details",(0,r.Z)({},a,{ref:i,open:m,"data-collapsed":s,className:(0,X.Z)(J.details,c&&J.isBrowser,a.className),onMouseDown:e=>{K(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;K(t)&&ee(t,i.current)&&(e.preventDefault(),s?(u(!1),d(!0)):u(!0))}}),p,o.createElement(Y.z,{lazy:!1,collapsed:s,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{u(e),d(!e)}},o.createElement("div",{className:J.collapsibleContent},n)))}const ne={details:"details_b_Ee"},oe="alert alert--info";function ae(e){let{...t}=e;return o.createElement(te,(0,r.Z)({},t,{className:(0,i.Z)(oe,ne.details,t.className)}))}var re=n(2503);function ce(e){return o.createElement(re.Z,e)}const le={containsTaskList:"containsTaskList_mC6p"};function ie(e){if(void 0!==e)return(0,i.Z)(e,e?.includes("contains-task-list")&&le.containsTaskList)}const se={img:"img_ev3q"};const ue="admonition_LlT9",me="admonitionHeading_tbUL",de="admonitionIcon_kALy",pe="admonitionContent_S0QG";const fe={note:{infimaClassName:"secondary",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 14 16"},o.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:o.createElement(M.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 12 16"},o.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:o.createElement(M.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 12 16"},o.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:o.createElement(M.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 14 16"},o.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:o.createElement(M.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 16 16"},o.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:o.createElement(M.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},ge={secondary:"note",important:"info",success:"tip",warning:"danger"};function he(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=o.Children.toArray(e),n=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),a=o.createElement(o.Fragment,null,t.filter((e=>e!==n)));return{mdxAdmonitionTitle:n,rest:a}}(e.children);return{...e,title:e.title??t,children:n}}const ye={head:function(e){const t=o.Children.map(e.children,(e=>o.isValidElement(e)?function(e){if(e.props?.mdxType&&e.props.originalType){const{mdxType:t,originalType:n,...a}=e.props;return o.createElement(e.props.originalType,a)}return e}(e):e));return o.createElement(c.Z,e,t)},code:function(e){const t=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return o.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")||(0,o.isValidElement)(e)&&t.includes(e.props?.mdxType)))?o.createElement("code",e):o.createElement(U,e)},a:function(e){return o.createElement(Q.Z,e)},pre:function(e){return o.createElement(U,(0,o.isValidElement)(e.children)&&"code"===e.children.props?.originalType?e.children.props:{...e})},details:function(e){const t=o.Children.toArray(e.children),n=t.find((e=>o.isValidElement(e)&&"summary"===e.props?.mdxType)),a=o.createElement(o.Fragment,null,t.filter((e=>e!==n)));return o.createElement(ae,(0,r.Z)({},e,{summary:n}),a)},ul:function(e){return o.createElement("ul",(0,r.Z)({},e,{className:ie(e.className)}))},img:function(e){return o.createElement("img",(0,r.Z)({loading:"lazy"},e,{className:(t=e.className,(0,i.Z)(t,se.img))}));var t},h1:e=>o.createElement(ce,(0,r.Z)({as:"h1"},e)),h2:e=>o.createElement(ce,(0,r.Z)({as:"h2"},e)),h3:e=>o.createElement(ce,(0,r.Z)({as:"h3"},e)),h4:e=>o.createElement(ce,(0,r.Z)({as:"h4"},e)),h5:e=>o.createElement(ce,(0,r.Z)({as:"h5"},e)),h6:e=>o.createElement(ce,(0,r.Z)({as:"h6"},e)),admonition:function(e){const{children:t,type:n,title:a,icon:r}=he(e),c=function(e){const t=ge[e]??e,n=fe[t];return n||(console.warn(`No admonition config found for admonition type "${t}". Using Info as fallback.`),fe.info)}(n),l=a??c.label,{iconComponent:s}=c,u=r??o.createElement(s,null);return o.createElement("div",{className:(0,i.Z)(d.k.common.admonition,d.k.common.admonitionType(e.type),"alert",`alert--${c.infimaClassName}`,ue)},o.createElement("div",{className:me},o.createElement("span",{className:de},u),l),o.createElement("div",{className:pe},t))},mermaid:n(1875).Z};function be(e){let{children:t}=e;return o.createElement(a.Zo,{components:ye},t)}},2244:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var o=n(7294),a=n(4334),r=n(9960);function c(e){const{permalink:t,title:n,subLabel:c,isNext:l}=e;return o.createElement(r.Z,{className:(0,a.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},c&&o.createElement("div",{className:"pagination-nav__sublabel"},c),o.createElement("div",{className:"pagination-nav__label"},n))}},3008:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var o=n(7294),a=n(4334),r=n(9960);const c={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function l(e){let{permalink:t,label:n,count:l}=e;return o.createElement(r.Z,{href:t,className:(0,a.Z)(c.tag,l?c.tagWithCount:c.tagRegular)},n,l&&o.createElement("span",null,l))}},1526:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var o=n(7294),a=n(4334),r=n(5999),c=n(3008);const l={tags:"tags_jXut",tag:"tag_QGVx"};function i(e){let{tags:t}=e;return o.createElement(o.Fragment,null,o.createElement("b",null,o.createElement(r.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),o.createElement("ul",{className:(0,a.Z)(l.tags,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:n}=e;return o.createElement("li",{key:n,className:l.tag},o.createElement(c.Z,{label:t,permalink:n}))}))))}},7594:(e,t)=>{function n(e){let t,n=[];for(let o of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(o))n.push(parseInt(o,10));else if(t=o.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,o,a,r]=t;if(o&&r){o=parseInt(o),r=parseInt(r);const e=o<r?1:-1;"-"!==a&&".."!==a&&"\u2025"!==a||(r+=e);for(let t=o;t!==r;t+=e)n.push(t)}}return n}t.default=n,e.exports=n}}]); \ No newline at end of file diff --git a/en/assets/js/9968.84c0a0fd.js b/en/assets/js/9968.84c0a0fd.js new file mode 100755 index 000000000..8057127aa --- /dev/null +++ b/en/assets/js/9968.84c0a0fd.js @@ -0,0 +1 @@ +(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9968],{30304:(e,t,n)=>{"use strict";n.d(t,{c:()=>_});var s=n(11504),a=n(17624);function c(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find((e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),c=t.filter((e=>e!==n)),o=n?.props.children;return{mdxAdmonitionTitle:o,rest:c.length>0?(0,a.jsx)(a.Fragment,{children:c}):null}}(e.children),c=e.title??t;return{...e,...c&&{title:c},children:n}}var o=n(34064),i=n(84357),r=n(45864);const l={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function d(e){let{type:t,className:n,children:s}=e;return(0,a.jsx)("div",{className:(0,o.c)(r.W.common.admonition,r.W.common.admonitionType(t),l.admonition,n),children:s})}function u(e){let{icon:t,title:n}=e;return(0,a.jsxs)("div",{className:l.admonitionHeading,children:[(0,a.jsx)("span",{className:l.admonitionIcon,children:t}),n]})}function m(e){let{children:t}=e;return t?(0,a.jsx)("div",{className:l.admonitionContent,children:t}):null}function h(e){const{type:t,icon:n,title:s,children:c,className:o}=e;return(0,a.jsxs)(d,{type:t,className:o,children:[(0,a.jsx)(u,{title:s,icon:n}),(0,a.jsx)(m,{children:c})]})}function p(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const f={icon:(0,a.jsx)(p,{}),title:(0,a.jsx)(i.c,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function g(e){return(0,a.jsx)(h,{...f,...e,className:(0,o.c)("alert alert--secondary",e.className),children:e.children})}function x(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const j={icon:(0,a.jsx)(x,{}),title:(0,a.jsx)(i.c,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function b(e){return(0,a.jsx)(h,{...j,...e,className:(0,o.c)("alert alert--success",e.className),children:e.children})}function v(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const y={icon:(0,a.jsx)(v,{}),title:(0,a.jsx)(i.c,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function N(e){return(0,a.jsx)(h,{...y,...e,className:(0,o.c)("alert alert--info",e.className),children:e.children})}function k(e){return(0,a.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const B={icon:(0,a.jsx)(k,{}),title:(0,a.jsx)(i.c,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function C(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const w={icon:(0,a.jsx)(C,{}),title:(0,a.jsx)(i.c,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const L={icon:(0,a.jsx)(k,{}),title:(0,a.jsx)(i.c,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const E={...{note:g,tip:b,info:N,warning:function(e){return(0,a.jsx)(h,{...B,...e,className:(0,o.c)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,a.jsx)(h,{...w,...e,className:(0,o.c)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,a.jsx)(g,{title:"secondary",...e}),important:e=>(0,a.jsx)(N,{title:"important",...e}),success:e=>(0,a.jsx)(b,{title:"success",...e}),caution:function(e){return(0,a.jsx)(h,{...L,...e,className:(0,o.c)("alert alert--warning",e.className),children:e.children})}}};function _(e){const t=c(e),n=(s=t.type,E[s]||(console.warn(`No admonition component found for admonition type "${s}". Using Info as fallback.`),E.info));var s;return(0,a.jsx)(n,{...t})}},43092:(e,t,n)=>{"use strict";n.d(t,{c:()=>g});n(11504);var s=n(34064),a=n(84357),c=n(45864),o=n(10867);const i={iconEdit:"iconEdit_Z9Sw"};var r=n(17624);function l(e){let{className:t,...n}=e;return(0,r.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.c)(i.iconEdit,t),"aria-hidden":"true",...n,children:(0,r.jsx)("g",{children:(0,r.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function d(e){let{editUrl:t}=e;return(0,r.jsxs)(o.c,{to:t,className:c.W.common.editThisPage,children:[(0,r.jsx)(l,{}),(0,r.jsx)(a.c,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var u=n(93852);function m(e){let{lastUpdatedAt:t}=e;const n=new Date(t),s=(0,u.y)({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(n);return(0,r.jsx)(a.c,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,r.jsx)("b",{children:(0,r.jsx)("time",{dateTime:n.toISOString(),itemProp:"dateModified",children:s})})},children:" on {date}"})}function h(e){let{lastUpdatedBy:t}=e;return(0,r.jsx)(a.c,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,r.jsx)("b",{children:t})},children:" by {user}"})}function p(e){let{lastUpdatedAt:t,lastUpdatedBy:n}=e;return(0,r.jsxs)("span",{className:c.W.common.lastUpdated,children:[(0,r.jsx)(a.c,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t?(0,r.jsx)(m,{lastUpdatedAt:t}):"",byUser:n?(0,r.jsx)(h,{lastUpdatedBy:n}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const f={lastUpdated:"lastUpdated_JAkA"};function g(e){let{className:t,editUrl:n,lastUpdatedAt:a,lastUpdatedBy:c}=e;return(0,r.jsxs)("div",{className:(0,s.c)("row",t),children:[(0,r.jsx)("div",{className:"col",children:n&&(0,r.jsx)(d,{editUrl:n})}),(0,r.jsx)("div",{className:(0,s.c)("col",f.lastUpdated),children:(a||c)&&(0,r.jsx)(p,{lastUpdatedAt:a,lastUpdatedBy:c})})]})}},15216:(e,t,n)=>{"use strict";n.d(t,{c:()=>ue});var s=n(11504);const a={},c=s.createContext(a);function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:function(e){const t=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}(e.components),s.createElement(c.Provider,{value:t},e.children)}var i=n(56952),r=n(93664),l=n(34064),d=n(66528),u=n(21824);function m(){const{prism:e}=(0,u.y)(),{colorMode:t}=(0,d.U)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}var h=n(45864),p=n(46504),f=n.n(p);const g=/title=(?<quote>["'])(?<title>.*?)\1/,x=/\{(?<range>[\d,-]+)\}/,j={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},b={...j,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},v=Object.keys(j);function y(e,t){const n=e.map((e=>{const{start:n,end:s}=b[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${s})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function N(e,t){let n=e.replace(/\n$/,"");const{language:s,magicComments:a,metastring:c}=t;if(c&&x.test(c)){const e=c.match(x).groups.range;if(0===a.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${c}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=a[0].className,s=f()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(s),code:n}}if(void 0===s)return{lineClassNames:{},code:n};const o=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return y(["js","jsBlock"],t);case"jsx":case"tsx":return y(["js","jsBlock","jsx"],t);case"html":return y(["js","jsBlock","html"],t);case"python":case"py":case"bash":return y(["bash"],t);case"markdown":case"md":return y(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return y(["tex"],t);case"lua":case"haskell":case"sql":return y(["lua"],t);case"wasm":return y(["wasm"],t);case"vb":case"vba":case"visual-basic":return y(["vb","rem"],t);case"vbnet":return y(["vbnet","rem"],t);case"batch":return y(["rem"],t);case"basic":return y(["rem","f90"],t);case"fsharp":return y(["js","ml"],t);case"ocaml":case"sml":return y(["ml"],t);case"fortran":return y(["f90"],t);case"cobol":return y(["cobol"],t);default:return y(v,t)}}(s,a),i=n.split("\n"),r=Object.fromEntries(a.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(a.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),d=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),u=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let h=0;h<i.length;){const e=i[h].match(o);if(!e){h+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?r[l[t]].range+=`${h},`:d[t]?r[d[t]].start=h:u[t]&&(r[u[t]].range+=`${r[u[t]].start}-${h-1},`),i.splice(h,1)}n=i.join("\n");const m={};return Object.entries(r).forEach((e=>{let[t,{range:n}]=e;f()(n).forEach((e=>{m[e]??=[],m[e].push(t)}))})),{lineClassNames:m,code:n}}const k={codeBlockContainer:"codeBlockContainer_Ckt0"};var B=n(17624);function C(e){let{as:t,...n}=e;const s=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[s,a]=e;const c=t[s];c&&"string"==typeof a&&(n[c]=a)})),n}(m());return(0,B.jsx)(t,{...n,style:s,className:(0,l.c)(n.className,k.codeBlockContainer,h.W.common.codeBlock)})}const w={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function L(e){let{children:t,className:n}=e;return(0,B.jsx)(C,{as:"pre",tabIndex:0,className:(0,l.c)(w.codeBlockStandalone,"thin-scrollbar",n),children:(0,B.jsx)("code",{className:w.codeBlockLines,children:t})})}var E=n(91100);const _={attributes:!0,characterData:!0,childList:!0,subtree:!0};function T(e,t){const[n,a]=(0,s.useState)(),c=(0,s.useCallback)((()=>{a(e.current?.closest("[role=tabpanel][hidden]"))}),[e,a]);(0,s.useEffect)((()=>{c()}),[c]),function(e,t,n){void 0===n&&(n=_);const a=(0,E.yA)(t),c=(0,E.Mh)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(a);return e&&t.observe(e,c),()=>t.disconnect()}),[e,a,c])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),c())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var A=n(46756);const S={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function U(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:a,getTokenProps:c}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const o=a({line:t,className:(0,l.c)(n,s&&S.codeLine)}),i=t.map(((e,t)=>(0,B.jsx)("span",{...c({token:e,key:t})},t)));return(0,B.jsxs)("span",{...o,children:[s?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)("span",{className:S.codeLineNumber}),(0,B.jsx)("span",{className:S.codeLineContent,children:i})]}):i,(0,B.jsx)("br",{})]})}var z=n(84357);function M(e){return(0,B.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,B.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function I(e){return(0,B.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,B.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const H={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function W(e){let{code:t,className:n}=e;const[a,c]=(0,s.useState)(!1),o=(0,s.useRef)(void 0),i=(0,s.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const s=document.createElement("textarea"),a=document.activeElement;s.value=e,s.setAttribute("readonly",""),s.style.contain="strict",s.style.position="absolute",s.style.left="-9999px",s.style.fontSize="12pt";const c=document.getSelection(),o=c.rangeCount>0&&c.getRangeAt(0);n.append(s),s.select(),s.selectionStart=0,s.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}s.remove(),o&&(c.removeAllRanges(),c.addRange(o)),a&&a.focus()}(t),c(!0),o.current=window.setTimeout((()=>{c(!1)}),1e3)}),[t]);return(0,s.useEffect)((()=>()=>window.clearTimeout(o.current)),[]),(0,B.jsx)("button",{type:"button","aria-label":a?(0,z.G)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,z.G)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,z.G)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,l.c)("clean-btn",n,H.copyButton,a&&H.copyButtonCopied),onClick:i,children:(0,B.jsxs)("span",{className:H.copyButtonIcons,"aria-hidden":"true",children:[(0,B.jsx)(M,{className:H.copyButtonIcon}),(0,B.jsx)(I,{className:H.copyButtonSuccessIcon})]})})}function R(e){return(0,B.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,B.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const V={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function $(e){let{className:t,onClick:n,isEnabled:s}=e;const a=(0,z.G)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,B.jsx)("button",{type:"button",onClick:n,className:(0,l.c)("clean-btn",t,s&&V.wordWrapButtonEnabled),"aria-label":a,title:a,children:(0,B.jsx)(R,{className:V.wordWrapButtonIcon,"aria-hidden":"true"})})}function D(e){let{children:t,className:n="",metastring:a,title:c,showLineNumbers:o,language:i}=e;const{prism:{defaultLanguage:r,magicComments:d}}=(0,u.y)(),h=function(e){return e?.toLowerCase()}(i??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??r),p=m(),f=function(){const[e,t]=(0,s.useState)(!1),[n,a]=(0,s.useState)(!1),c=(0,s.useRef)(null),o=(0,s.useCallback)((()=>{const n=c.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[c,e]),i=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=c.current,n=e>t||c.current.querySelector("code").hasAttribute("style");a(n)}),[c]);return T(c,i),(0,s.useEffect)((()=>{i()}),[e,i]),(0,s.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:c,isEnabled:e,isCodeScrollable:n,toggle:o}}(),x=function(e){return e?.match(g)?.groups.title??""}(a)||c,{lineClassNames:j,code:b}=N(t,{metastring:a,language:h,magicComments:d}),v=o??function(e){return Boolean(e?.includes("showLineNumbers"))}(a);return(0,B.jsxs)(C,{as:"div",className:(0,l.c)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[x&&(0,B.jsx)("div",{className:w.codeBlockTitle,children:x}),(0,B.jsxs)("div",{className:w.codeBlockContent,children:[(0,B.jsx)(A.gl,{theme:p,code:b,language:h??"text",children:e=>{let{className:t,style:n,tokens:s,getLineProps:a,getTokenProps:c}=e;return(0,B.jsx)("pre",{tabIndex:0,ref:f.codeBlockRef,className:(0,l.c)(t,w.codeBlock,"thin-scrollbar"),style:n,children:(0,B.jsx)("code",{className:(0,l.c)(w.codeBlockLines,v&&w.codeBlockLinesWithNumbering),children:s.map(((e,t)=>(0,B.jsx)(U,{line:e,getLineProps:a,getTokenProps:c,classNames:j[t],showLineNumbers:v},t)))})})}}),(0,B.jsxs)("div",{className:w.buttonGroup,children:[(f.isEnabled||f.isCodeScrollable)&&(0,B.jsx)($,{className:w.codeButton,onClick:()=>f.toggle(),isEnabled:f.isEnabled}),(0,B.jsx)(W,{className:w.codeButton,code:b})]})]})]})}function P(e){let{children:t,...n}=e;const a=(0,r.c)(),c=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),o="string"==typeof c?D:L;return(0,B.jsx)(o,{...n,children:c},String(a))}function F(e){return(0,B.jsx)("code",{...e})}var O=n(10867);var q=n(15420),G=n(5976),Z=n(58448);const J={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function Y(e){return!!e&&("SUMMARY"===e.tagName||Y(e.parentElement))}function K(e,t){return!!e&&(e===t||K(e.parentElement,t))}function Q(e){let{summary:t,children:n,...a}=e;(0,G.c)().collectAnchor(a.id);const c=(0,r.c)(),o=(0,s.useRef)(null),{collapsed:i,setCollapsed:l}=(0,Z.a)({initialState:!a.open}),[d,u]=(0,s.useState)(a.open),m=s.isValidElement(t)?t:(0,B.jsx)("summary",{children:t??"Details"});return(0,B.jsxs)("details",{...a,ref:o,open:d,"data-collapsed":i,className:(0,q.c)(J.details,c&&J.isBrowser,a.className),onMouseDown:e=>{Y(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;Y(t)&&K(t,o.current)&&(e.preventDefault(),i?(l(!1),u(!0)):l(!0))},children:[m,(0,B.jsx)(Z.U,{lazy:!1,collapsed:i,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{l(e),u(!e)},children:(0,B.jsx)("div",{className:J.collapsibleContent,children:n})})]})}const X={details:"details_b_Ee"},ee="alert alert--info";function te(e){let{...t}=e;return(0,B.jsx)(Q,{...t,className:(0,l.c)(ee,X.details,t.className)})}function ne(e){const t=s.Children.toArray(e.children),n=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),a=(0,B.jsx)(B.Fragment,{children:t.filter((e=>e!==n))});return(0,B.jsx)(te,{...e,summary:n,children:a})}var se=n(56448);function ae(e){return(0,B.jsx)(se.c,{...e})}const ce={containsTaskList:"containsTaskList_mC6p"};function oe(e){if(void 0!==e)return(0,l.c)(e,e?.includes("contains-task-list")&&ce.containsTaskList)}const ie={img:"img_ev3q"};var re=n(30304),le=n(82944);const de={Head:i.c,details:ne,Details:ne,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,B.jsx)(F,{...e}):(0,B.jsx)(P,{...e})},a:function(e){return(0,B.jsx)(O.c,{...e})},pre:function(e){return(0,B.jsx)(B.Fragment,{children:e.children})},ul:function(e){return(0,B.jsx)("ul",{...e,className:oe(e.className)})},li:function(e){return(0,G.c)().collectAnchor(e.id),(0,B.jsx)("li",{...e})},img:function(e){return(0,B.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,l.c)(t,ie.img))});var t},h1:e=>(0,B.jsx)(ae,{as:"h1",...e}),h2:e=>(0,B.jsx)(ae,{as:"h2",...e}),h3:e=>(0,B.jsx)(ae,{as:"h3",...e}),h4:e=>(0,B.jsx)(ae,{as:"h4",...e}),h5:e=>(0,B.jsx)(ae,{as:"h5",...e}),h6:e=>(0,B.jsx)(ae,{as:"h6",...e}),admonition:re.c,mermaid:le.c};function ue(e){let{children:t}=e;return(0,B.jsx)(o,{components:de,children:t})}},70308:(e,t,n)=>{"use strict";n.d(t,{c:()=>o});n(11504);var s=n(34064),a=n(10867),c=n(17624);function o(e){const{permalink:t,title:n,subLabel:o,isNext:i}=e;return(0,c.jsxs)(a.c,{className:(0,s.c)("pagination-nav__link",i?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[o&&(0,c.jsx)("div",{className:"pagination-nav__sublabel",children:o}),(0,c.jsx)("div",{className:"pagination-nav__label",children:n})]})}},83020:(e,t,n)=>{"use strict";n.d(t,{c:()=>i});n(11504);var s=n(34064),a=n(10867);const c={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var o=n(17624);function i(e){let{permalink:t,label:n,count:i}=e;return(0,o.jsxs)(a.c,{href:t,className:(0,s.c)(c.tag,i?c.tagWithCount:c.tagRegular),children:[n,i&&(0,o.jsx)("span",{children:i})]})}},1096:(e,t,n)=>{"use strict";n.d(t,{c:()=>r});n(11504);var s=n(34064),a=n(84357),c=n(83020);const o={tags:"tags_jXut",tag:"tag_QGVx"};var i=n(17624);function r(e){let{tags:t}=e;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("b",{children:(0,i.jsx)(a.c,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,i.jsx)("ul",{className:(0,s.c)(o.tags,"padding--none","margin-left--sm"),children:t.map((e=>{let{label:t,permalink:n}=e;return(0,i.jsx)("li",{className:o.tag,children:(0,i.jsx)(c.c,{label:t,permalink:n})},n)}))})]})}},93852:(e,t,n)=>{"use strict";n.d(t,{y:()=>a});var s=n(28264);function a(e){void 0===e&&(e={});const{i18n:{currentLocale:t}}=(0,s.c)(),n=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,s.c)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:n,...e})}},46504:(e,t)=>{function n(e){let t,n=[];for(let s of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,a,c]=t;if(s&&c){s=parseInt(s),c=parseInt(c);const e=s<c?1:-1;"-"!==a&&".."!==a&&"\u2025"!==a||(c+=e);for(let t=s;t!==c;t+=e)n.push(t)}}return n}t.default=n,e.exports=n}}]); \ No newline at end of file diff --git a/en/assets/js/9bdd22eb.90691daf.js b/en/assets/js/9bdd22eb.5af0da87.js similarity index 83% rename from en/assets/js/9bdd22eb.90691daf.js rename to en/assets/js/9bdd22eb.5af0da87.js index a8f1ffa0a..b195fdc76 100755 --- a/en/assets/js/9bdd22eb.90691daf.js +++ b/en/assets/js/9bdd22eb.5af0da87.js @@ -1 +1 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2253],{5803:l=>{l.exports=JSON.parse('[{"label":"facebook","permalink":"/en/blog/tags/facebook","count":1},{"label":"hello","permalink":"/en/blog/tags/hello","count":2},{"label":"docusaurus","permalink":"/en/blog/tags/docusaurus","count":3},{"label":"hola","permalink":"/en/blog/tags/hola","count":1}]')}}]); \ No newline at end of file +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7824],{4358:l=>{l.exports=JSON.parse('[{"label":"facebook","permalink":"/en/blog/tags/facebook","count":1},{"label":"hello","permalink":"/en/blog/tags/hello","count":2},{"label":"docusaurus","permalink":"/en/blog/tags/docusaurus","count":3},{"label":"hola","permalink":"/en/blog/tags/hola","count":1}]')}}]); \ No newline at end of file diff --git a/en/assets/js/9ccd4375.4dec6de8.js b/en/assets/js/9ccd4375.4dec6de8.js new file mode 100755 index 000000000..e7cda190b --- /dev/null +++ b/en/assets/js/9ccd4375.4dec6de8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4640],{97192:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var a=o(17624),i=o(95788);const r={id:"montagem",title:"Montagem da Franzininho DIY",slug:"/franzininho-diy/montagem",description:"Passo a passo da montagem da Franzininho DIY"},s=void 0,t={id:"FranzininhoDIY/montagem",title:"Montagem da Franzininho DIY",description:"Passo a passo da montagem da Franzininho DIY",source:"@site/docs/FranzininhoDIY/montagem.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/montagem",permalink:"/en/docs/franzininho-diy/montagem",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/montagem.md",tags:[],version:"current",frontMatter:{id:"montagem",title:"Montagem da Franzininho DIY",slug:"/franzininho-diy/montagem",description:"Passo a passo da montagem da Franzininho DIY"},sidebar:"docs",previous:{title:"Identificando os componentes",permalink:"/en/docs/franzininho-diy/identificando-componentes"},next:{title:"Bootloader",permalink:"/en/docs/franzininho-diy/bootloader"}},d={},c=[{value:"Antes de colocar a m\xe3o na massa",id:"antes-de-colocar-a-m\xe3o-na-massa",level:3},{value:"Montando a sua Franzininho DIY",id:"montando-a-sua-franzininho-diy",level:3},{value:"Diodo 1N1448",id:"diodo-1n1448",level:3},{value:"Diodos Zener (3V6)",id:"diodos-zener-3v6",level:3},{value:"Resistores de 68R",id:"resistores-de-68r",level:3},{value:"Resistor 1k5",id:"resistor-1k5",level:3},{value:"Resistores 1k",id:"resistores-1k",level:3},{value:"Soquete 8 pinos",id:"soquete-8-pinos",level:3},{value:"Chave t\xe1ctil",id:"chave-t\xe1ctil",level:3},{value:"Capacitor Cer\xe2mico",id:"capacitor-cer\xe2mico",level:3},{value:"LED Verde",id:"led-verde",level:3},{value:"LED Amarelo",id:"led-amarelo",level:3},{value:"Regulador de tens\xe3o",id:"regulador-de-tens\xe3o",level:3},{value:"Barra de 3 pinos",id:"barra-de-3-pinos",level:3},{value:"Barra de 8 pinos",id:"barra-de-8-pinos",level:3},{value:"Capacitor eletrol\xedtico",id:"capacitor-eletrol\xedtico",level:3},{value:"Conector USB",id:"conector-usb",level:3},{value:"ATtiny85",id:"attiny85",level:3}];function l(e){const n={a:"a",admonition:"admonition",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"Passo a passo da montagem da Franzininho DIY V2RV2"}),"\n",(0,a.jsx)(n.h3,{id:"antes-de-colocar-a-m\xe3o-na-massa",children:"Antes de colocar a m\xe3o na massa"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(58388).c+"",width:"571",height:"370"})}),"\n",(0,a.jsx)(n.p,{children:"Antes de tudo voc\xea deve preparar o ambiente, separando as ferramentas necess\xe1rias para a soldagem. Vamos precisar de:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Ferro de solda;"}),"\n",(0,a.jsx)(n.li,{children:"Estanho;"}),"\n",(0,a.jsx)(n.li,{children:"Alicate de corte diagonal para eletr\xf4nica;"}),"\n",(0,a.jsx)(n.li,{children:"\xd3culos de prote\xe7\xe3o;"}),"\n"]}),"\n",(0,a.jsxs)(n.p,{children:["Voc\xea tamb\xe9m deve separar os componentes para facilitar na hora de soldar. Voc\xea encontra os componentes na ",(0,a.jsx)(n.a,{href:"/en/docs/franzininho-diy/lista-de-materiais",children:"lista de materiais"}),". Tudo organizado? Ent\xe3o vamos l\xe1?!"]}),"\n",(0,a.jsx)(n.h3,{id:"montando-a-sua-franzininho-diy",children:"Montando a sua Franzininho DIY"}),"\n",(0,a.jsx)(n.p,{children:"De in\xedcio voc\xea ter\xe1 uma placa sem componentes, conforme a imagem abaixo:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(8460).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.admonition,{title:"Sequ\xeancia de montagem",type:"tip",children:(0,a.jsx)(n.p,{children:"Voc\xea deve sempre come\xe7ar pelos componentes baixos. Siga a sequ\xeancia recomendada abaixo."})}),"\n",(0,a.jsx)(n.h3,{id:"diodo-1n1448",children:"Diodo 1N1448"}),"\n",(0,a.jsxs)(n.p,{children:["O primeiro componente a ser colocado \xe9 o diodo 1N4148 no ",(0,a.jsx)(n.strong,{children:"D3"}),"."]}),"\n",(0,a.jsx)(n.admonition,{title:"Aten\xe7\xe3o",type:"caution",children:(0,a.jsx)(n.p,{children:"Cuidando com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa."})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(48800).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"diodos-zener-3v6",children:"Diodos Zener (3V6)"}),"\n",(0,a.jsxs)(n.p,{children:["Temos dois diodos zeners que dever\xe3o ser colocados nas refer\xeancias ",(0,a.jsx)(n.strong,{children:"D1"})," e ",(0,a.jsx)(n.strong,{children:"D2"}),"."]}),"\n",(0,a.jsx)(n.admonition,{title:"Aten\xe7\xe3o",type:"caution",children:(0,a.jsx)(n.p,{children:"Cuidado com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa."})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(9580).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"resistores-de-68r",children:"Resistores de 68R"}),"\n",(0,a.jsxs)(n.p,{children:["Nas refer\xeancias ",(0,a.jsx)(n.strong,{children:"R1"})," e ",(0,a.jsx)(n.strong,{children:"R2"})," voc\xea ir\xe1 colocar os resistores de 68R que s\xe3o representado pelas cores (azul, cinza, preto e dourado)."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(20444).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"resistor-1k5",children:"Resistor 1k5"}),"\n",(0,a.jsxs)(n.p,{children:["Em ",(0,a.jsx)(n.strong,{children:"R3"})," deve-se colocar o resistor de ",(0,a.jsx)(n.strong,{children:"1k5"})," que \xe9 representado nas cores (marrom, verde, vermelho e dourado)."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(588).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"resistores-1k",children:"Resistores 1k"}),"\n",(0,a.jsxs)(n.p,{children:["Resistores de ",(0,a.jsx)(n.strong,{children:"1k"})," que s\xe3o representados nas cores (marrom, preto, vermelho e dourado) devem ser colocados em ",(0,a.jsx)(n.strong,{children:"R4"})," e ",(0,a.jsx)(n.strong,{children:"R5"}),"."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(26736).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"soquete-8-pinos",children:"Soquete 8 pinos"}),"\n",(0,a.jsxs)(n.p,{children:["O soquete deve ser colocado no ",(0,a.jsx)(n.strong,{children:"IC1"})," que traz a facilidade do encaixe do ATtiny85."]}),"\n",(0,a.jsx)(n.admonition,{title:"Aten\xe7\xe3o",type:"caution",children:(0,a.jsx)(n.p,{children:"Verifique a posi\xe7\xe3o do soquete a meia lua deve ficar virada para o lado do barramento de pinos da placa."})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(88088).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"chave-t\xe1ctil",children:"Chave t\xe1ctil"}),"\n",(0,a.jsxs)(n.p,{children:["A chave voc\xea consegue colocar apenas em uma posi\xe7\xe3o, ent\xe3o \xe9 s\xf3 encaix\xe1-la onde est\xe1 localizada como ",(0,a.jsx)(n.strong,{children:"RESET"}),"."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(83036).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"capacitor-cer\xe2mico",children:"Capacitor Cer\xe2mico"}),"\n",(0,a.jsxs)(n.p,{children:["No ",(0,a.jsx)(n.strong,{children:"C1"})," voc\xea ir\xe1 colocar o capacitor cer\xe2mico."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(78452).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"led-verde",children:"LED Verde"}),"\n",(0,a.jsxs)(n.p,{children:["O LED verde deve ser colocado no ",(0,a.jsx)(n.strong,{children:"ON"}),"."]}),"\n",(0,a.jsx)(n.admonition,{title:"Cuidado com polaridade dos terminais dos LED.",type:"caution",children:(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Terminal maior (positivo) - Terminal menor (negativo)"})})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(9180).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"led-amarelo",children:"LED Amarelo"}),"\n",(0,a.jsxs)(n.p,{children:["O LED amarelo deve ser colocado no ",(0,a.jsx)(n.strong,{children:"LED"}),"."]}),"\n",(0,a.jsx)(n.admonition,{title:"Cuidado com polaridade dos terminais dos LED.",type:"caution",children:(0,a.jsx)(n.p,{children:(0,a.jsx)(n.strong,{children:"Terminal maior (positivo) - Terminal menor (negativo)"})})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(42424).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"regulador-de-tens\xe3o",children:"Regulador de tens\xe3o"}),"\n",(0,a.jsxs)(n.p,{children:["No ",(0,a.jsx)(n.strong,{children:"IC2"})," voc\xea deve colocar o regulador. Ele tem 3 terminais e deve ser colocado conforme o desenho na placa."]}),"\n",(0,a.jsx)(n.admonition,{title:"Siga o desenho do componente na placa para se orientar no encaixe.",type:"tip"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(13212).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"barra-de-3-pinos",children:"Barra de 3 pinos"}),"\n",(0,a.jsxs)(n.p,{children:["Em ",(0,a.jsx)(n.strong,{children:"J1"}),", onde est\xe1 indicado com ",(0,a.jsx)(n.strong,{children:"VIN, GND, VCC"}),", voc\xea ir\xe1 colocar a barra com tr\xeas pinos."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(9776).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"barra-de-8-pinos",children:"Barra de 8 pinos"}),"\n",(0,a.jsxs)(n.p,{children:["Dever\xe1 ser colocada onde est\xe3o indicados ",(0,a.jsx)(n.strong,{children:"(GND, VCC, P6, ..., P1,P0)"})]}),"\n",(0,a.jsx)(n.admonition,{title:"Apoie bem a barra. Solde apenas um terminal e verifique se ela ficou alinhada.",type:"tip"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(57008).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"capacitor-eletrol\xedtico",children:"Capacitor eletrol\xedtico"}),"\n",(0,a.jsxs)(n.p,{children:["Agora vamos colocar o capacitor eletrol\xedtico em ",(0,a.jsx)(n.strong,{children:"C2"}),"."]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(63232).c+"",width:"510",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"conector-usb",children:"Conector USB"}),"\n",(0,a.jsx)(n.p,{children:"Quase l\xe1! Iremos agora colocar o conector USB, conforme o encaixe dele."}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(77416).c+"",width:"635",height:"301"})}),"\n",(0,a.jsx)(n.h3,{id:"attiny85",children:"ATtiny85"}),"\n",(0,a.jsx)(n.p,{children:"Por \xfaltimo iremos colocar o microcontrolador ATtiny85 no soquete de 8 pinos."}),"\n",(0,a.jsx)(n.admonition,{title:"Tome cuidado com a posi\xe7\xe3o de encaixe do microcontrolador. Se oriente pelo desenho do soquete e fa\xe7a uma dupla checagem antes de ligar a placa.",type:"caution"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"montagem Franzininho DIY",src:o(68699).c+"",width:"635",height:"301"})}),"\n",(0,a.jsx)(n.p,{children:"Pronto!"}),"\n",(0,a.jsx)(n.p,{children:"Sua Franzininho vers\xe3o V2RV2 est\xe1 montada, agora \xe9 s\xf3 programar e criar v\xe1rios projetos."})]})}function m(e={}){const{wrapper:n}={...(0,i.MN)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},95788:(e,n,o)=>{o.d(n,{MN:()=>c});var a=o(11504);function i(e,n,o){return n in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o,e}function r(e,n){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),o.push.apply(o,a)}return o}function s(e){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?r(Object(o),!0).forEach((function(n){i(e,n,o[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(o,n))}))}return e}function t(e,n){if(null==e)return{};var o,a,i=function(e,n){if(null==e)return{};var o,a,i={},r=Object.keys(e);for(a=0;a<r.length;a++)o=r[a],n.indexOf(o)>=0||(i[o]=e[o]);return i}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)o=r[a],n.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var d=a.createContext({}),c=function(e){var n=a.useContext(d),o=n;return e&&(o="function"==typeof e?e(n):s(s({},n),e)),o},l={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var o=e.components,i=e.mdxType,r=e.originalType,d=e.parentName,m=t(e,["components","mdxType","originalType","parentName"]),h=c(o),p=i,g=h["".concat(d,".").concat(p)]||h[p]||l[p]||r;return o?a.createElement(g,s(s({ref:n},m),{},{components:o})):a.createElement(g,s({ref:n},m))}));m.displayName="MDXCreateElement"},8460:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/00-pcb-82f9ed3365c7b53a5a09ce31390b9aad.png"},48800:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/01-diodo1N4148-b2575456f360ea73761834e767d72c90.png"},9580:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/02-diodos-zenners-945b4e54e78a4e6a5e051b27b8587e56.png"},20444:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/03-resistores68R-168a34f8fe2ec11adc19adbf84255ac7.png"},588:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/04-resistor1k5-4b971ee05a02090bfb70dc89fcd8fe6b.png"},26736:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/05-resistores1k-1cfbefa2c32dbfcf52a48a6f886d6795.png"},88088:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/06-soquete-26bf7fe45959f19875edf8486ad5a9f3.png"},83036:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/07-chave-t\xe1ctil-97aa74515ede9e2c5f3777f089820d70.png"},78452:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/08-capacitor-cer\xe2mico-d06f66e30230ef812e368518847be12b.png"},9180:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/09-led-verde-4fc27b760643f55b71ea8f8e146fce89.png"},42424:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/10-led-amarelo-ae1af4a364a24d972d5650d7359e4139.png"},13212:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/11-regulador-de-tens\xe3o-c63a573030e85e90c5d1df41a455d703.png"},9776:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/12-barra-de-3-pinos-0d84ec73f936b9295267a4e5965bd110.png"},57008:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/13-barra-de-8-pinos-56009deec589f751a95aa31550079bd5.png"},63232:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/14-capacitor-eletrolitico-4fbeebf62e259e5a3bcffcede9505afe.png"},77416:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/15-conector-usb-5ff829b25a93b25a5aedf3162622b78e.png"},68699:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/16-attiny85-e7ad18a24acc40ef1b94c343390b3cc6.png"},58388:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/prepare-ambiente-7a1cd5b66f251000b207872ec322a3e2.png"}}]); \ No newline at end of file diff --git a/en/assets/js/9ccd4375.843161ea.js b/en/assets/js/9ccd4375.843161ea.js deleted file mode 100755 index c8951177c..000000000 --- a/en/assets/js/9ccd4375.843161ea.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4123],{3905:(e,a,o)=>{o.d(a,{Zo:()=>c,kt:()=>g});var t=o(7294);function n(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function i(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,t)}return o}function r(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?i(Object(o),!0).forEach((function(a){n(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function s(e,a){if(null==e)return{};var o,t,n=function(e,a){if(null==e)return{};var o,t,n={},i=Object.keys(e);for(t=0;t<i.length;t++)o=i[t],a.indexOf(o)>=0||(n[o]=e[o]);return n}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t<i.length;t++)o=i[t],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var d=t.createContext({}),l=function(e){var a=t.useContext(d),o=a;return e&&(o="function"==typeof e?e(a):r(r({},a),e)),o},c=function(e){var a=l(e.components);return t.createElement(d.Provider,{value:a},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},u=t.forwardRef((function(e,a){var o=e.components,n=e.mdxType,i=e.originalType,d=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=l(o),u=n,g=p["".concat(d,".").concat(u)]||p[u]||m[u]||i;return o?t.createElement(g,r(r({ref:a},c),{},{components:o})):t.createElement(g,r({ref:a},c))}));function g(e,a){var o=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var i=o.length,r=new Array(i);r[0]=u;var s={};for(var d in a)hasOwnProperty.call(a,d)&&(s[d]=a[d]);s.originalType=e,s[p]="string"==typeof e?e:n,r[1]=s;for(var l=2;l<i;l++)r[l]=o[l];return t.createElement.apply(null,r)}return t.createElement.apply(null,o)}u.displayName="MDXCreateElement"},7620:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>d,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var t=o(3117),n=(o(7294),o(3905));const i={id:"montagem",title:"Montagem da Franzininho DIY",slug:"/franzininho-diy/montagem",description:"Passo a passo da montagem da Franzininho DIY"},r=void 0,s={unversionedId:"FranzininhoDIY/montagem",id:"FranzininhoDIY/montagem",title:"Montagem da Franzininho DIY",description:"Passo a passo da montagem da Franzininho DIY",source:"@site/docs/FranzininhoDIY/montagem.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/montagem",permalink:"/en/docs/franzininho-diy/montagem",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/montagem.md",tags:[],version:"current",frontMatter:{id:"montagem",title:"Montagem da Franzininho DIY",slug:"/franzininho-diy/montagem",description:"Passo a passo da montagem da Franzininho DIY"},sidebar:"docs",previous:{title:"Identificando os componentes",permalink:"/en/docs/franzininho-diy/identificando-componentes"},next:{title:"Bootloader",permalink:"/en/docs/franzininho-diy/bootloader"}},d={},l=[{value:"Antes de colocar a m\xe3o na massa",id:"antes-de-colocar-a-m\xe3o-na-massa",level:3},{value:"Montando a sua Franzininho DIY",id:"montando-a-sua-franzininho-diy",level:3},{value:"Diodo 1N1448",id:"diodo-1n1448",level:3},{value:"Diodos Zener (3V6)",id:"diodos-zener-3v6",level:3},{value:"Resistores de 68R",id:"resistores-de-68r",level:3},{value:"Resistor 1k5",id:"resistor-1k5",level:3},{value:"Resistores 1k",id:"resistores-1k",level:3},{value:"Soquete 8 pinos",id:"soquete-8-pinos",level:3},{value:"Chave t\xe1ctil",id:"chave-t\xe1ctil",level:3},{value:"Capacitor Cer\xe2mico",id:"capacitor-cer\xe2mico",level:3},{value:"LED Verde",id:"led-verde",level:3},{value:"LED Amarelo",id:"led-amarelo",level:3},{value:"Regulador de tens\xe3o",id:"regulador-de-tens\xe3o",level:3},{value:"Barra de 3 pinos",id:"barra-de-3-pinos",level:3},{value:"Barra de 8 pinos",id:"barra-de-8-pinos",level:3},{value:"Capacitor eletrol\xedtico",id:"capacitor-eletrol\xedtico",level:3},{value:"Conector USB",id:"conector-usb",level:3},{value:"ATtiny85",id:"attiny85",level:3}],c={toc:l},p="wrapper";function m(e){let{components:a,...i}=e;return(0,n.kt)(p,(0,t.Z)({},c,i,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Passo a passo da montagem da Franzininho DIY V2RV2"),(0,n.kt)("h3",{id:"antes-de-colocar-a-m\xe3o-na-massa"},"Antes de colocar a m\xe3o na massa"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(831).Z,width:"571",height:"370"})),(0,n.kt)("p",null,"Antes de tudo voc\xea deve preparar o ambiente, separando as ferramentas necess\xe1rias para a soldagem. Vamos precisar de:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Ferro de solda;"),(0,n.kt)("li",{parentName:"ul"},"Estanho;"),(0,n.kt)("li",{parentName:"ul"},"Alicate de corte diagonal para eletr\xf4nica;"),(0,n.kt)("li",{parentName:"ul"},"\xd3culos de prote\xe7\xe3o;")),(0,n.kt)("p",null,"Voc\xea tamb\xe9m deve separar os componentes para facilitar na hora de soldar. Voc\xea encontra os componentes na ",(0,n.kt)("a",{parentName:"p",href:"/en/docs/franzininho-diy/lista-de-materiais"},"lista de materiais"),". Tudo organizado? Ent\xe3o vamos l\xe1?!"),(0,n.kt)("h3",{id:"montando-a-sua-franzininho-diy"},"Montando a sua Franzininho DIY"),(0,n.kt)("p",null,"De in\xedcio voc\xea ter\xe1 uma placa sem componentes, conforme a imagem abaixo:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(7473).Z,width:"510",height:"301"})),(0,n.kt)("admonition",{title:"Sequ\xeancia de montagem",type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"Voc\xea deve sempre come\xe7ar pelos componentes baixos. Siga a sequ\xeancia recomendada abaixo.")),(0,n.kt)("h3",{id:"diodo-1n1448"},"Diodo 1N1448"),(0,n.kt)("p",null,"O primeiro componente a ser colocado \xe9 o diodo 1N4148 no ",(0,n.kt)("strong",{parentName:"p"},"D3"),"."),(0,n.kt)("admonition",{title:"Aten\xe7\xe3o",type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"Cuidando com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(2804).Z,width:"510",height:"301"})),(0,n.kt)("h3",{id:"diodos-zener-3v6"},"Diodos Zener (3V6)"),(0,n.kt)("p",null,"Temos dois diodos zeners que dever\xe3o ser colocados nas refer\xeancias ",(0,n.kt)("strong",{parentName:"p"},"D1")," e ",(0,n.kt)("strong",{parentName:"p"},"D2"),"."),(0,n.kt)("admonition",{title:"Aten\xe7\xe3o",type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"Cuidado com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(1920).Z,width:"510",height:"301"})),(0,n.kt)("h3",{id:"resistores-de-68r"},"Resistores de 68R"),(0,n.kt)("p",null,"Nas refer\xeancias ",(0,n.kt)("strong",{parentName:"p"},"R1")," e ",(0,n.kt)("strong",{parentName:"p"},"R2")," voc\xea ir\xe1 colocar os resistores de 68R que s\xe3o representado pelas cores (azul, cinza, preto e dourado)."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(1739).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"resistor-1k5"},"Resistor 1k5"),(0,n.kt)("p",null,"Em ",(0,n.kt)("strong",{parentName:"p"},"R3")," deve-se colocar o resistor de ",(0,n.kt)("strong",{parentName:"p"},"1k5")," que \xe9 representado nas cores (marrom, verde, vermelho e dourado)."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(4301).Z,width:"510",height:"301"})),(0,n.kt)("h3",{id:"resistores-1k"},"Resistores 1k"),(0,n.kt)("p",null,"Resistores de ",(0,n.kt)("strong",{parentName:"p"},"1k")," que s\xe3o representados nas cores (marrom, preto, vermelho e dourado) devem ser colocados em ",(0,n.kt)("strong",{parentName:"p"},"R4")," e ",(0,n.kt)("strong",{parentName:"p"},"R5"),"."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(7070).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"soquete-8-pinos"},"Soquete 8 pinos"),(0,n.kt)("p",null,"O soquete deve ser colocado no ",(0,n.kt)("strong",{parentName:"p"},"IC1")," que traz a facilidade do encaixe do ATtiny85."),(0,n.kt)("admonition",{title:"Aten\xe7\xe3o",type:"caution"},(0,n.kt)("p",{parentName:"admonition"},"Verifique a posi\xe7\xe3o do soquete a meia lua deve ficar virada para o lado do barramento de pinos da placa.")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(2914).Z,width:"510",height:"301"})),(0,n.kt)("h3",{id:"chave-t\xe1ctil"},"Chave t\xe1ctil"),(0,n.kt)("p",null," A chave voc\xea consegue colocar apenas em uma posi\xe7\xe3o, ent\xe3o \xe9 s\xf3 encaix\xe1-la onde est\xe1 localizada como ",(0,n.kt)("strong",{parentName:"p"},"RESET"),"."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(5691).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"capacitor-cer\xe2mico"},"Capacitor Cer\xe2mico"),(0,n.kt)("p",null,"No ",(0,n.kt)("strong",{parentName:"p"},"C1")," voc\xea ir\xe1 colocar o capacitor cer\xe2mico. "),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(9974).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"led-verde"},"LED Verde"),(0,n.kt)("p",null,"O LED verde deve ser colocado no ",(0,n.kt)("strong",{parentName:"p"},"ON"),". "),(0,n.kt)("admonition",{title:"Cuidado com polaridade dos terminais dos LED.",type:"caution"},(0,n.kt)("p",{parentName:"admonition"},(0,n.kt)("strong",{parentName:"p"},"Terminal maior (positivo) - Terminal menor (negativo)"))),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(1e3).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"led-amarelo"},"LED Amarelo"),(0,n.kt)("p",null,"O LED amarelo deve ser colocado no ",(0,n.kt)("strong",{parentName:"p"},"LED"),"."),(0,n.kt)("admonition",{title:"Cuidado com polaridade dos terminais dos LED.",type:"caution"},(0,n.kt)("p",{parentName:"admonition"},(0,n.kt)("strong",{parentName:"p"},"Terminal maior (positivo) - Terminal menor (negativo)"))),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(4262).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"regulador-de-tens\xe3o"},"Regulador de tens\xe3o"),(0,n.kt)("p",null,"No ",(0,n.kt)("strong",{parentName:"p"},"IC2")," voc\xea deve colocar o regulador. Ele tem 3 terminais e deve ser colocado conforme o desenho na placa."),(0,n.kt)("admonition",{title:"Siga o desenho do componente na placa para se orientar no encaixe.",type:"tip"}),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(9499).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"barra-de-3-pinos"},"Barra de 3 pinos"),(0,n.kt)("p",null,"Em ",(0,n.kt)("strong",{parentName:"p"},"J1"),", onde est\xe1 indicado com ",(0,n.kt)("strong",{parentName:"p"},"VIN, GND, VCC"),", voc\xea ir\xe1 colocar a barra com tr\xeas pinos."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(137).Z,width:"510",height:"301"})," "),(0,n.kt)("h3",{id:"barra-de-8-pinos"},"Barra de 8 pinos"),(0,n.kt)("p",null,"Dever\xe1 ser colocada onde est\xe3o indicados ",(0,n.kt)("strong",{parentName:"p"},"(GND, VCC, P6, ..., P1,P0)")),(0,n.kt)("admonition",{title:"Apoie bem a barra. Solde apenas um terminal e verifique se ela ficou alinhada.",type:"tip"}),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(8178).Z,width:"510",height:"301"})),(0,n.kt)("h3",{id:"capacitor-eletrol\xedtico"},"Capacitor eletrol\xedtico"),(0,n.kt)("p",null,"Agora vamos colocar o capacitor eletrol\xedtico em ",(0,n.kt)("strong",{parentName:"p"},"C2"),"."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(761).Z,width:"510",height:"301"})),(0,n.kt)("h3",{id:"conector-usb"},"Conector USB"),(0,n.kt)("p",null,"Quase l\xe1! Iremos agora colocar o conector USB, conforme o encaixe dele."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(1889).Z,width:"635",height:"301"})),(0,n.kt)("h3",{id:"attiny85"},"ATtiny85"),(0,n.kt)("p",null,"Por \xfaltimo iremos colocar o microcontrolador ATtiny85 no soquete de 8 pinos."),(0,n.kt)("admonition",{title:"Tome cuidado com a posi\xe7\xe3o de encaixe do microcontrolador. Se oriente pelo desenho do soquete e fa\xe7a uma dupla checagem antes de ligar a placa.",type:"caution"}),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"montagem Franzininho DIY",src:o(7686).Z,width:"635",height:"301"})),(0,n.kt)("p",null,"Pronto!"),(0,n.kt)("p",null,"Sua Franzininho vers\xe3o V2RV2 est\xe1 montada, agora \xe9 s\xf3 programar e criar v\xe1rios projetos."))}m.isMDXComponent=!0},7473:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/00-pcb-82f9ed3365c7b53a5a09ce31390b9aad.png"},2804:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/01-diodo1N4148-b2575456f360ea73761834e767d72c90.png"},1920:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/02-diodos-zenners-945b4e54e78a4e6a5e051b27b8587e56.png"},1739:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/03-resistores68R-168a34f8fe2ec11adc19adbf84255ac7.png"},4301:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/04-resistor1k5-4b971ee05a02090bfb70dc89fcd8fe6b.png"},7070:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/05-resistores1k-1cfbefa2c32dbfcf52a48a6f886d6795.png"},2914:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/06-soquete-26bf7fe45959f19875edf8486ad5a9f3.png"},5691:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/07-chave-t\xe1ctil-97aa74515ede9e2c5f3777f089820d70.png"},9974:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/08-capacitor-cer\xe2mico-d06f66e30230ef812e368518847be12b.png"},1e3:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/09-led-verde-4fc27b760643f55b71ea8f8e146fce89.png"},4262:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/10-led-amarelo-ae1af4a364a24d972d5650d7359e4139.png"},9499:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/11-regulador-de-tens\xe3o-c63a573030e85e90c5d1df41a455d703.png"},137:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/12-barra-de-3-pinos-0d84ec73f936b9295267a4e5965bd110.png"},8178:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/13-barra-de-8-pinos-56009deec589f751a95aa31550079bd5.png"},761:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/14-capacitor-eletrolitico-4fbeebf62e259e5a3bcffcede9505afe.png"},1889:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/15-conector-usb-5ff829b25a93b25a5aedf3162622b78e.png"},7686:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/16-attiny85-e7ad18a24acc40ef1b94c343390b3cc6.png"},831:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/prepare-ambiente-7a1cd5b66f251000b207872ec322a3e2.png"}}]); \ No newline at end of file diff --git a/en/assets/js/9cf82e51.76235cef.js b/en/assets/js/9cf82e51.76235cef.js deleted file mode 100755 index 50f653545..000000000 --- a/en/assets/js/9cf82e51.76235cef.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9966],{3905:(n,e,r)=>{r.d(e,{Zo:()=>s,kt:()=>m});var i=r(7294);function o(n,e,r){return e in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function t(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(n);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.push.apply(r,i)}return r}function a(n){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?t(Object(r),!0).forEach((function(e){o(n,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):t(Object(r)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))}))}return n}function l(n,e){if(null==n)return{};var r,i,o=function(n,e){if(null==n)return{};var r,i,o={},t=Object.keys(n);for(i=0;i<t.length;i++)r=t[i],e.indexOf(r)>=0||(o[r]=n[r]);return o}(n,e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);for(i=0;i<t.length;i++)r=t[i],e.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(n,r)&&(o[r]=n[r])}return o}var c=i.createContext({}),p=function(n){var e=i.useContext(c),r=e;return n&&(r="function"==typeof n?n(e):a(a({},e),n)),r},s=function(n){var e=p(n.components);return i.createElement(c.Provider,{value:e},n.children)},u="mdxType",d={inlineCode:"code",wrapper:function(n){var e=n.children;return i.createElement(i.Fragment,{},e)}},f=i.forwardRef((function(n,e){var r=n.components,o=n.mdxType,t=n.originalType,c=n.parentName,s=l(n,["components","mdxType","originalType","parentName"]),u=p(r),f=o,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||t;return r?i.createElement(m,a(a({ref:e},s),{},{components:r})):i.createElement(m,a({ref:e},s))}));function m(n,e){var r=arguments,o=e&&e.mdxType;if("string"==typeof n||o){var t=r.length,a=new Array(t);a[0]=f;var l={};for(var c in e)hasOwnProperty.call(e,c)&&(l[c]=e[c]);l.originalType=n,l[u]="string"==typeof n?n:o,a[1]=l;for(var p=2;p<t;p++)a[p]=r[p];return i.createElement.apply(null,a)}return i.createElement.apply(null,r)}f.displayName="MDXCreateElement"},4404:(n,e,r)=>{r.r(e),r.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>t,metadata:()=>l,toc:()=>p});var i=r(3117),o=(r(7294),r(3905));const t={id:"arduino-blink",title:"Blink",slug:"/franzininho-wifi/exemplos-arduino/blink",description:"Primeiro Hello World com a Franzininho WiFi no Arduino IDE",author:"Diana Santos"},a=void 0,l={unversionedId:"FranzininhoWifi/exemplos-arduino/arduino-blink",id:"FranzininhoWifi/exemplos-arduino/arduino-blink",title:"Blink",description:"Primeiro Hello World com a Franzininho WiFi no Arduino IDE",source:"@site/docs/FranzininhoWifi/exemplos-arduino/blink.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/blink",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/blink",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/blink.md",tags:[],version:"current",frontMatter:{id:"arduino-blink",title:"Blink",slug:"/franzininho-wifi/exemplos-arduino/blink",description:"Primeiro Hello World com a Franzininho WiFi no Arduino IDE",author:"Diana Santos"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos"},next:{title:"Neopixel RGB LED Onboard",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard"}},c={},p=[],s={toc:p},u="wrapper";function d(n){let{components:e,...r}=n;return(0,o.kt)(u,(0,i.Z)({},s,r,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("admonition",{type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"TBD")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/9cf82e51.fdd4846e.js b/en/assets/js/9cf82e51.fdd4846e.js new file mode 100755 index 000000000..e5785a2dc --- /dev/null +++ b/en/assets/js/9cf82e51.fdd4846e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4608],{16560:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>t,metadata:()=>l,toc:()=>s});var r=i(17624),o=i(95788);const t={id:"arduino-blink",title:"Blink",slug:"/franzininho-wifi/exemplos-arduino/blink",description:"Primeiro Hello World com a Franzininho WiFi no Arduino IDE",author:"Diana Santos"},a=void 0,l={id:"FranzininhoWifi/exemplos-arduino/arduino-blink",title:"Blink",description:"Primeiro Hello World com a Franzininho WiFi no Arduino IDE",source:"@site/docs/FranzininhoWifi/exemplos-arduino/blink.md",sourceDirName:"FranzininhoWifi/exemplos-arduino",slug:"/franzininho-wifi/exemplos-arduino/blink",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/blink",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-arduino/blink.md",tags:[],version:"current",frontMatter:{id:"arduino-blink",title:"Blink",slug:"/franzininho-wifi/exemplos-arduino/blink",description:"Primeiro Hello World com a Franzininho WiFi no Arduino IDE",author:"Diana Santos"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos"},next:{title:"Neopixel RGB LED Onboard",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard"}},c={},s=[];function u(n){const e={admonition:"admonition",p:"p",...(0,o.MN)(),...n.components};return(0,r.jsx)(e.admonition,{type:"warning",children:(0,r.jsx)(e.p,{children:"TBD"})})}function p(n={}){const{wrapper:e}={...(0,o.MN)(),...n.components};return e?(0,r.jsx)(e,{...n,children:(0,r.jsx)(u,{...n})}):u(n)}},95788:(n,e,i)=>{i.d(e,{MN:()=>s});var r=i(11504);function o(n,e,i){return e in n?Object.defineProperty(n,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):n[e]=i,n}function t(n,e){var i=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),i.push.apply(i,r)}return i}function a(n){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?t(Object(i),!0).forEach((function(e){o(n,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(i)):t(Object(i)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(i,e))}))}return n}function l(n,e){if(null==n)return{};var i,r,o=function(n,e){if(null==n)return{};var i,r,o={},t=Object.keys(n);for(r=0;r<t.length;r++)i=t[r],e.indexOf(i)>=0||(o[i]=n[i]);return o}(n,e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);for(r=0;r<t.length;r++)i=t[r],e.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(n,i)&&(o[i]=n[i])}return o}var c=r.createContext({}),s=function(n){var e=r.useContext(c),i=e;return n&&(i="function"==typeof n?n(e):a(a({},e),n)),i},u={inlineCode:"code",wrapper:function(n){var e=n.children;return r.createElement(r.Fragment,{},e)}},p=r.forwardRef((function(n,e){var i=n.components,o=n.mdxType,t=n.originalType,c=n.parentName,p=l(n,["components","mdxType","originalType","parentName"]),d=s(i),f=o,m=d["".concat(c,".").concat(f)]||d[f]||u[f]||t;return i?r.createElement(m,a(a({ref:e},p),{},{components:i})):r.createElement(m,a({ref:e},p))}));p.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/9e4087bc.8937d11c.js b/en/assets/js/9e4087bc.8937d11c.js new file mode 100755 index 000000000..4f531b3fa --- /dev/null +++ b/en/assets/js/9e4087bc.8937d11c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7028],{56140:(e,r,t)=>{t.r(r),t.d(r,{default:()=>m});t(11504);var a=t(10867),n=t(84357),s=t(68900),i=t(93852),c=t(99012),l=t(56448),o=t(17624);function d(e){let{year:r,posts:t}=e;const n=(0,i.y)({day:"numeric",month:"long",timeZone:"UTC"});return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(l.c,{as:"h3",id:r,children:r}),(0,o.jsx)("ul",{children:t.map((e=>{return(0,o.jsx)("li",{children:(0,o.jsxs)(a.c,{to:e.metadata.permalink,children:[(r=e.metadata.date,n.format(new Date(r)))," - ",e.metadata.title]})},e.metadata.date);var r}))})]})}function h(e){let{years:r}=e;return(0,o.jsx)("section",{className:"margin-vert--lg",children:(0,o.jsx)("div",{className:"container",children:(0,o.jsx)("div",{className:"row",children:r.map(((e,r)=>(0,o.jsx)("div",{className:"col col--4 margin-vert--lg",children:(0,o.jsx)(d,{...e})},r)))})})})}function m(e){let{archive:r}=e;const t=(0,n.G)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),a=(0,n.G)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),i=function(e){const r=e.reduce(((e,r)=>{const t=r.metadata.date.split("-")[0],a=e.get(t)??[];return e.set(t,[r,...a])}),new Map);return Array.from(r,(e=>{let[r,t]=e;return{year:r,posts:t}}))}(r.blogPosts);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.U7,{title:t,description:a}),(0,o.jsxs)(c.c,{children:[(0,o.jsx)("header",{className:"hero hero--primary",children:(0,o.jsxs)("div",{className:"container",children:[(0,o.jsx)(l.c,{as:"h1",className:"hero__title",children:t}),(0,o.jsx)("p",{className:"hero__subtitle",children:a})]})}),(0,o.jsx)("main",{children:i.length>0&&(0,o.jsx)(h,{years:i})})]})]})}},93852:(e,r,t)=>{t.d(r,{y:()=>n});var a=t(28264);function n(e){void 0===e&&(e={});const{i18n:{currentLocale:r}}=(0,a.c)(),t=function(){const{i18n:{currentLocale:e,localeConfigs:r}}=(0,a.c)();return r[e].calendar}();return new Intl.DateTimeFormat(r,{calendar:t,...e})}}}]); \ No newline at end of file diff --git a/en/assets/js/9e4087bc.9685659e.js b/en/assets/js/9e4087bc.9685659e.js deleted file mode 100755 index 0a407af96..000000000 --- a/en/assets/js/9e4087bc.9685659e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3608],{3169:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var r=a(7294),n=a(9960),l=a(5999),c=a(1944),i=a(7961);function m(e){let{year:t,posts:a}=e;return r.createElement(r.Fragment,null,r.createElement("h3",null,t),r.createElement("ul",null,a.map((e=>r.createElement("li",{key:e.metadata.date},r.createElement(n.Z,{to:e.metadata.permalink},e.metadata.formattedDate," - ",e.metadata.title))))))}function s(e){let{years:t}=e;return r.createElement("section",{className:"margin-vert--lg"},r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},t.map(((e,t)=>r.createElement("div",{key:t,className:"col col--4 margin-vert--lg"},r.createElement(m,e)))))))}function o(e){let{archive:t}=e;const a=(0,l.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),n=(0,l.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),m=function(e){const t=e.reduceRight(((e,t)=>{const a=t.metadata.date.split("-")[0],r=e.get(a)??[];return e.set(a,[t,...r])}),new Map);return Array.from(t,(e=>{let[t,a]=e;return{year:t,posts:a}}))}(t.blogPosts);return r.createElement(r.Fragment,null,r.createElement(c.d,{title:a,description:n}),r.createElement(i.Z,null,r.createElement("header",{className:"hero hero--primary"},r.createElement("div",{className:"container"},r.createElement("h1",{className:"hero__title"},a),r.createElement("p",{className:"hero__subtitle"},n))),r.createElement("main",null,m.length>0&&r.createElement(s,{years:m}))))}}}]); \ No newline at end of file diff --git a/en/assets/js/a1db8d77.3fb52011.js b/en/assets/js/a1db8d77.3fb52011.js deleted file mode 100755 index 3272a3cf4..000000000 --- a/en/assets/js/a1db8d77.3fb52011.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6269],{4919:e=>{e.exports=JSON.parse('{"label":"hello","permalink":"/en/blog/tags/hello","allTagsPath":"/en/blog/tags","count":2}')}}]); \ No newline at end of file diff --git a/en/assets/js/a1db8d77.a197cf66.js b/en/assets/js/a1db8d77.a197cf66.js new file mode 100755 index 000000000..db624266f --- /dev/null +++ b/en/assets/js/a1db8d77.a197cf66.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2720],{33788:e=>{e.exports=JSON.parse('{"label":"hello","permalink":"/en/blog/tags/hello","allTagsPath":"/en/blog/tags","count":2,"unlisted":false}')}}]); \ No newline at end of file diff --git a/en/assets/js/a34fb63a.47c2e9af.js b/en/assets/js/a34fb63a.47c2e9af.js new file mode 100755 index 000000000..81e9f2a08 --- /dev/null +++ b/en/assets/js/a34fb63a.47c2e9af.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8336],{70676:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>a,metadata:()=>t,toc:()=>c});var o=i(17624),r=i(95788);const a={id:"picsimlab-intro",title:"Franzininho DIY no PICSimLab",slug:"/franzininho-diy/picsimlab/primeiros-passos",description:"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY"},s=void 0,t={id:"FranzininhoDIY/picsimlab/picsimlab-intro",title:"Franzininho DIY no PICSimLab",description:"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY",source:"@site/docs/FranzininhoDIY/picsimlab/franzininho-picsimlab.md",sourceDirName:"FranzininhoDIY/picsimlab",slug:"/franzininho-diy/picsimlab/primeiros-passos",permalink:"/en/docs/franzininho-diy/picsimlab/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/picsimlab/franzininho-picsimlab.md",tags:[],version:"current",frontMatter:{id:"picsimlab-intro",title:"Franzininho DIY no PICSimLab",slug:"/franzininho-diy/picsimlab/primeiros-passos",description:"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY"},sidebar:"docs",previous:{title:"Como simular a Franzininho DIY no Wokwi",permalink:"/en/docs/franzininho-diy/wokwi/primeiros-passos"},next:{title:"Placa FranzMakey",permalink:"/en/docs/FranzMakey/franzmakey"}},l={},c=[{value:"Timeline do video",id:"timeline-do-video",level:3},{value:"Links",id:"links",level:2},{value:"Observa\xe7\xe3o",id:"observa\xe7\xe3o",level:2},{value:"Downloads",id:"downloads",level:2}];function d(e){const n={a:"a",admonition:"admonition",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"PICSimLab \xe9 um emulador em tempo real de placas de desenvolvimento com depurador MPLABX/avr-gdb integrado. O PICSimLab suporta alguns microcontroladores PIC e AVR (outros em breve)."}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsxs)(n.p,{children:["Fa\xe7a o Download do PICSimLab: ",(0,o.jsx)(n.a,{href:"https://github.com/lcgamboa/picsimlab/releases",children:"https://github.com/lcgamboa/picsimlab/releases"})]})}),"\n",(0,o.jsx)(n.p,{children:"A placa Franzininho DIY est\xe1 dispon\xedvel para simula\xe7\xe3o no PICSimLab,"}),"\n",(0,o.jsx)(n.p,{children:"Veja no video abaixo os passos para grava\xe7\xe3o e depura\xe7\xe3o da Franzininho DIY no PICSimLab:"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"480",src:"https://www.youtube.com/embed/OemWGwXNxE4",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,o.jsx)(n.h3,{id:"timeline-do-video",children:"Timeline do video"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"00:00 Introdu\xe7\xe3o"}),"\n",(0,o.jsx)(n.li,{children:"02:23 Arduino IDE (grava\xe7\xe3o)"}),"\n",(0,o.jsx)(n.li,{children:"05:45 Arduino IDE tinyDebug (mensagens pela serial virtual)"}),"\n",(0,o.jsx)(n.li,{children:"11:20 Sloeber IDE (eclipse) (grava\xe7\xe3o/depura\xe7\xe3o)"}),"\n",(0,o.jsx)(n.li,{children:"27:55 avr gcc e gdb no terminal (grava\xe7\xe3o/depura\xe7\xe3o)"}),"\n",(0,o.jsx)(n.li,{children:"37:52 MPLABX IDE (grava\xe7\xe3o/depura\xe7\xe3o)"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"links",children:"Links"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Adicionar suporte da placa Franzininho na IDE Arduino (e Sloeber): ",(0,o.jsx)(n.a,{href:"https://raw.githubusercontent.com/lcgamboa/franzininho-arduino-package/master/package_franzininho_lcgamboa_index.json",children:"https://raw.githubusercontent.com/lcgamboa/franzininho-arduino-package/master/package_franzininho_lcgamboa_index.json"})]}),"\n",(0,o.jsxs)(n.li,{children:["Exemplos AVR libc: ",(0,o.jsx)(n.a,{href:"https://github.com/Franzininho/exemplos-avr-libc",children:"https://github.com/Franzininho/exemplos-avr-libc"})]}),"\n",(0,o.jsxs)(n.li,{children:["Donwload do Sloeber IDE (Eclipse): ",(0,o.jsx)(n.a,{href:"https://eclipse.baeyens.it/",children:"https://eclipse.baeyens.it/"})]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"observa\xe7\xe3o",children:"Observa\xe7\xe3o"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:'Para instalar o suporte ao GDB instalar o suporte ao "arduino megaAVR boards" no Sloeber (passo que deu errado no v\xeddeo)'}),"\n",(0,o.jsxs)(n.li,{children:["O caminho do GDB dentro da pasta do Sloeber: ",(0,o.jsx)(n.strong,{children:"Sloeber/arduinoPlugin/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-gdb"})]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"downloads",children:"Downloads"}),"\n",(0,o.jsxs)(n.p,{children:["Download do PICSimLab: ",(0,o.jsx)(n.a,{href:"https://github.com/lcgamboa/picsimlab/releases",children:"https://github.com/lcgamboa/picsimlab/releases"}),"\nDownload do MPLABX: ",(0,o.jsx)(n.a,{href:"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide",children:"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide"}),"\nDownload do XC8:",(0,o.jsx)(n.a,{href:"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers",children:"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers"})]})]})}function p(e={}){const{wrapper:n}={...(0,r.MN)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},95788:(e,n,i)=>{i.d(n,{MN:()=>c});var o=i(11504);function r(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function a(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,o)}return i}function s(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?a(Object(i),!0).forEach((function(n){r(e,n,i[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):a(Object(i)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(i,n))}))}return e}function t(e,n){if(null==e)return{};var i,o,r=function(e,n){if(null==e)return{};var i,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)i=a[o],n.indexOf(i)>=0||(r[i]=e[i]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)i=a[o],n.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var l=o.createContext({}),c=function(e){var n=o.useContext(l),i=n;return e&&(i="function"==typeof e?e(n):s(s({},n),e)),i},d={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},p=o.forwardRef((function(e,n){var i=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),m=c(i),h=r,u=m["".concat(l,".").concat(h)]||m[h]||d[h]||a;return i?o.createElement(u,s(s({ref:n},p),{},{components:i})):o.createElement(u,s({ref:n},p))}));p.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/a34fb63a.f1a6284b.js b/en/assets/js/a34fb63a.f1a6284b.js deleted file mode 100755 index e763e8f9e..000000000 --- a/en/assets/js/a34fb63a.f1a6284b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1982],{3905:(e,a,n)=>{n.d(a,{Zo:()=>m,kt:()=>b});var o=n(7294);function r(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function i(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);a&&(o=o.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,o)}return n}function t(e){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{};a%2?i(Object(n),!0).forEach((function(a){r(e,a,n[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(n,a))}))}return e}function l(e,a){if(null==e)return{};var n,o,r=function(e,a){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],a.indexOf(n)>=0||(r[n]=e[n]);return r}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],a.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var a=o.useContext(s),n=a;return e&&(n="function"==typeof e?e(a):t(t({},a),e)),n},m=function(e){var a=p(e.components);return o.createElement(s.Provider,{value:a},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return o.createElement(o.Fragment,{},a)}},d=o.forwardRef((function(e,a){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),c=p(n),d=r,b=c["".concat(s,".").concat(d)]||c[d]||u[d]||i;return n?o.createElement(b,t(t({ref:a},m),{},{components:n})):o.createElement(b,t({ref:a},m))}));function b(e,a){var n=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var i=n.length,t=new Array(i);t[0]=d;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[c]="string"==typeof e?e:r,t[1]=l;for(var p=2;p<i;p++)t[p]=n[p];return o.createElement.apply(null,t)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},4553:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>s,contentTitle:()=>t,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var o=n(3117),r=(n(7294),n(3905));const i={id:"picsimlab-intro",title:"Franzininho DIY no PICSimLab",slug:"/franzininho-diy/picsimlab/primeiros-passos",description:"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY"},t=void 0,l={unversionedId:"FranzininhoDIY/picsimlab/picsimlab-intro",id:"FranzininhoDIY/picsimlab/picsimlab-intro",title:"Franzininho DIY no PICSimLab",description:"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY",source:"@site/docs/FranzininhoDIY/picsimlab/franzininho-picsimlab.md",sourceDirName:"FranzininhoDIY/picsimlab",slug:"/franzininho-diy/picsimlab/primeiros-passos",permalink:"/en/docs/franzininho-diy/picsimlab/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/picsimlab/franzininho-picsimlab.md",tags:[],version:"current",frontMatter:{id:"picsimlab-intro",title:"Franzininho DIY no PICSimLab",slug:"/franzininho-diy/picsimlab/primeiros-passos",description:"Nesse exemplos vamos ver como usar o PICSimLab para simular e depurar a Franzininho DIY"},sidebar:"docs",previous:{title:"Como simular a Franzininho DIY no Wokwi",permalink:"/en/docs/franzininho-diy/wokwi/primeiros-passos"},next:{title:"Placa FranzMakey",permalink:"/en/docs/FranzMakey/franzmakey"}},s={},p=[{value:"Timeline do video",id:"timeline-do-video",level:3},{value:"Links",id:"links",level:2},{value:"Observa\xe7\xe3o",id:"observa\xe7\xe3o",level:2},{value:"Downloads",id:"downloads",level:2}],m={toc:p},c="wrapper";function u(e){let{components:a,...n}=e;return(0,r.kt)(c,(0,o.Z)({},m,n,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"PICSimLab \xe9 um emulador em tempo real de placas de desenvolvimento com depurador MPLABX/avr-gdb integrado. O PICSimLab suporta alguns microcontroladores PIC e AVR (outros em breve). "),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Fa\xe7a o Download do PICSimLab: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/lcgamboa/picsimlab/releases"},"https://github.com/lcgamboa/picsimlab/releases"))),(0,r.kt)("p",null,"A placa Franzininho DIY est\xe1 dispon\xedvel para simula\xe7\xe3o no PICSimLab,"),(0,r.kt)("p",null,"Veja no video abaixo os passos para grava\xe7\xe3o e depura\xe7\xe3o da Franzininho DIY no PICSimLab:"),(0,r.kt)("iframe",{width:"100%",height:"480",src:"https://www.youtube.com/embed/OemWGwXNxE4",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,r.kt)("h3",{id:"timeline-do-video"},"Timeline do video"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"00:00 Introdu\xe7\xe3o"),(0,r.kt)("li",{parentName:"ul"},"02:23 Arduino IDE (grava\xe7\xe3o)"),(0,r.kt)("li",{parentName:"ul"},"05:45 Arduino IDE tinyDebug (mensagens pela serial virtual)"),(0,r.kt)("li",{parentName:"ul"},"11:20 Sloeber IDE (eclipse) (grava\xe7\xe3o/depura\xe7\xe3o)"),(0,r.kt)("li",{parentName:"ul"},"27:55 avr gcc e gdb no terminal (grava\xe7\xe3o/depura\xe7\xe3o) "),(0,r.kt)("li",{parentName:"ul"},"37:52 MPLABX IDE (grava\xe7\xe3o/depura\xe7\xe3o)")),(0,r.kt)("h2",{id:"links"},"Links"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Adicionar suporte da placa Franzininho na IDE Arduino (e Sloeber): ",(0,r.kt)("a",{parentName:"li",href:"https://raw.githubusercontent.com/lcgamboa/franzininho-arduino-package/master/package_franzininho_lcgamboa_index.json"},"https://raw.githubusercontent.com/lcgamboa/franzininho-arduino-package/master/package_franzininho_lcgamboa_index.json")),(0,r.kt)("li",{parentName:"ul"},"Exemplos AVR libc: ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/exemplos-avr-libc"},"https://github.com/Franzininho/exemplos-avr-libc")),(0,r.kt)("li",{parentName:"ul"},"Donwload do Sloeber IDE (Eclipse): ",(0,r.kt)("a",{parentName:"li",href:"https://eclipse.baeyens.it/"},"https://eclipse.baeyens.it/"))),(0,r.kt)("h2",{id:"observa\xe7\xe3o"},"Observa\xe7\xe3o"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'Para instalar o suporte ao GDB instalar o suporte ao "arduino megaAVR boards" no Sloeber (passo que deu errado no v\xeddeo)'),(0,r.kt)("li",{parentName:"ul"},"O caminho do GDB dentro da pasta do Sloeber: ",(0,r.kt)("strong",{parentName:"li"},"Sloeber/arduinoPlugin/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-gdb"))),(0,r.kt)("h2",{id:"downloads"},"Downloads"),(0,r.kt)("p",null,"Download do PICSimLab: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/lcgamboa/picsimlab/releases"},"https://github.com/lcgamboa/picsimlab/releases"),"\nDownload do MPLABX: ",(0,r.kt)("a",{parentName:"p",href:"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide"},"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide"),"\nDownload do XC8:",(0,r.kt)("a",{parentName:"p",href:"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers"},"https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/a47310cc.696c3c6d.js b/en/assets/js/a47310cc.696c3c6d.js new file mode 100755 index 000000000..d5096290a --- /dev/null +++ b/en/assets/js/a47310cc.696c3c6d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2976],{38568:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>m,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var i=r(17624),o=r(95788);const t={id:"semaforo",title:"Sem\xe1foro",slug:"/franzininho-diy/semaforo",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},a=void 0,l={id:"FranzininhoDIY/exemplos-arduino/semaforo",title:"Sem\xe1foro",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/semaforo.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/semaforo",permalink:"/en/docs/franzininho-diy/semaforo",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/semaforo.md",tags:[],version:"current",frontMatter:{id:"semaforo",title:"Sem\xe1foro",slug:"/franzininho-diy/semaforo",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},sidebar:"docs",previous:{title:"Sensor de luz com LDR",permalink:"/en/docs/franzininho-diy/sensor-luz-ldr"},next:{title:"Theremim",permalink:"/en/docs/franzininho-diy/theremim"}},s={},d=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function c(e){const n={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY."}),"\n",(0,i.jsx)(n.h2,{id:"materiais",children:"Materiais"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Placa Franzininho;"}),"\n",(0,i.jsx)(n.li,{children:"Protoboard;"}),"\n",(0,i.jsx)(n.li,{children:"LED vermelho"}),"\n",(0,i.jsx)(n.li,{children:"LED amarelo"}),"\n",(0,i.jsx)(n.li,{children:"LED verde"}),"\n",(0,i.jsx)(n.li,{children:"3 Resistores 330 R"}),"\n",(0,i.jsx)(n.li,{children:"Jumpers"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,i.jsx)(n.p,{children:"Fa\xe7a a seguinte liga\xe7\xe3o no protoboard:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"circuito semaforo",src:r(64344).c+"",width:"573",height:"242"})}),"\n",(0,i.jsx)(n.p,{children:"Sketch"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-cpp",children:"/*\n Franzininho\n Exemplo: Sem\xe1foro\nNesse exemplo vamos fazer um sem\xe1foro de uma via.\n*/\nint vermelho = 2; //LED Vermelho\nint amarelo = 1; //LED Amarelo\nint verde = 0; //LED Verde\n\nvoid setup() {\n pinMode(vermelho,OUTPUT); //define LED vermelho como Sa\xedda\n pinMode(verde,OUTPUT); //define LED verde como Sa\xedda\n pinMode(amarelo,OUTPUT); //define LED Amarelo como Sa\xedda\n}\n\nvoid loop() {\n //fase 1\n digitalWrite(vermelho,HIGH);\n digitalWrite(amarelo,LOW);\n digitalWrite(verde,LOW);\n delay(5000);\n //fase 2\n digitalWrite(vermelho,LOW);\n digitalWrite(amarelo,HIGH);\n digitalWrite(verde,LOW);\n delay(1000);\n //fase 3\n digitalWrite(vermelho,LOW);\n digitalWrite(amarelo,LOW);\n digitalWrite(verde,HIGH);\n delay(5000);\n}\n"})}),"\n",(0,i.jsx)(n.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311444144703668800?view=diagram"}),"\n",(0,i.jsx)(n.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/jdFRHqfmzik",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function m(e={}){const{wrapper:n}={...(0,o.MN)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},95788:(e,n,r)=>{r.d(n,{MN:()=>d});var i=r(11504);function o(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function t(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,i)}return r}function a(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?t(Object(r),!0).forEach((function(n){o(e,n,r[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):t(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))}))}return e}function l(e,n){if(null==e)return{};var r,i,o=function(e,n){if(null==e)return{};var r,i,o={},t=Object.keys(e);for(i=0;i<t.length;i++)r=t[i],n.indexOf(r)>=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(i=0;i<t.length;i++)r=t[i],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=i.createContext({}),d=function(e){var n=i.useContext(s),r=n;return e&&(r="function"==typeof e?e(n):a(a({},n),e)),r},c={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},m=i.forwardRef((function(e,n){var r=e.components,o=e.mdxType,t=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=d(r),p=o,f=u["".concat(s,".").concat(p)]||u[p]||c[p]||t;return r?i.createElement(f,a(a({ref:n},m),{},{components:r})):i.createElement(f,a({ref:n},m))}));m.displayName="MDXCreateElement"},64344:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/semaforo-circuito-ad8d502f56ebf8aee34751edba36b634.png"}}]); \ No newline at end of file diff --git a/en/assets/js/a47310cc.6f99f760.js b/en/assets/js/a47310cc.6f99f760.js deleted file mode 100755 index 6032aca0f..000000000 --- a/en/assets/js/a47310cc.6f99f760.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8615],{3905:(e,r,n)=>{n.d(r,{Zo:()=>d,kt:()=>f});var o=n(7294);function t(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function i(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?i(Object(n),!0).forEach((function(r){t(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function l(e,r){if(null==e)return{};var n,o,t=function(e,r){if(null==e)return{};var n,o,t={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],r.indexOf(n)>=0||(t[n]=e[n]);return t}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(t[n]=e[n])}return t}var m=o.createContext({}),s=function(e){var r=o.useContext(m),n=r;return e&&(n="function"==typeof e?e(r):a(a({},r),e)),n},d=function(e){var r=s(e.components);return o.createElement(m.Provider,{value:r},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},p=o.forwardRef((function(e,r){var n=e.components,t=e.mdxType,i=e.originalType,m=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=s(n),p=t,f=c["".concat(m,".").concat(p)]||c[p]||u[p]||i;return n?o.createElement(f,a(a({ref:r},d),{},{components:n})):o.createElement(f,a({ref:r},d))}));function f(e,r){var n=arguments,t=r&&r.mdxType;if("string"==typeof e||t){var i=n.length,a=new Array(i);a[0]=p;var l={};for(var m in r)hasOwnProperty.call(r,m)&&(l[m]=r[m]);l.originalType=e,l[c]="string"==typeof e?e:t,a[1]=l;for(var s=2;s<i;s++)a[s]=n[s];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}p.displayName="MDXCreateElement"},101:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>m,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var o=n(3117),t=(n(7294),n(3905));const i={id:"semaforo",title:"Sem\xe1foro",slug:"/franzininho-diy/semaforo",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},a=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/semaforo",id:"FranzininhoDIY/exemplos-arduino/semaforo",title:"Sem\xe1foro",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/semaforo.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/semaforo",permalink:"/en/docs/franzininho-diy/semaforo",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/semaforo.md",tags:[],version:"current",frontMatter:{id:"semaforo",title:"Sem\xe1foro",slug:"/franzininho-diy/semaforo",description:"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY"},sidebar:"docs",previous:{title:"Sensor de luz com LDR",permalink:"/en/docs/franzininho-diy/sensor-luz-ldr"},next:{title:"Theremim",permalink:"/en/docs/franzininho-diy/theremim"}},m={},s=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],d={toc:s},c="wrapper";function u(e){let{components:r,...i}=e;return(0,t.kt)(c,(0,o.Z)({},d,i,{components:r,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Nesse exemplo vamos fazer um sem\xe1foro de uma via com Franzininho DIY."),(0,t.kt)("h2",{id:"materiais"},"Materiais"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Placa Franzininho;"),(0,t.kt)("li",{parentName:"ul"},"Protoboard;"),(0,t.kt)("li",{parentName:"ul"},"LED vermelho"),(0,t.kt)("li",{parentName:"ul"},"LED amarelo"),(0,t.kt)("li",{parentName:"ul"},"LED verde"),(0,t.kt)("li",{parentName:"ul"},"3 Resistores 330 R"),(0,t.kt)("li",{parentName:"ul"},"Jumpers")),(0,t.kt)("h2",{id:"circuito"},"Circuito"),(0,t.kt)("p",null,"Fa\xe7a a seguinte liga\xe7\xe3o no protoboard:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"circuito semaforo",src:n(8787).Z,width:"573",height:"242"})),(0,t.kt)("p",null,"Sketch"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-cpp"},"/*\n Franzininho\n Exemplo: Sem\xe1foro\nNesse exemplo vamos fazer um sem\xe1foro de uma via.\n*/\nint vermelho = 2; //LED Vermelho\nint amarelo = 1; //LED Amarelo\nint verde = 0; //LED Verde\n\nvoid setup() {\n pinMode(vermelho,OUTPUT); //define LED vermelho como Sa\xedda\n pinMode(verde,OUTPUT); //define LED verde como Sa\xedda\n pinMode(amarelo,OUTPUT); //define LED Amarelo como Sa\xedda\n}\n\nvoid loop() {\n //fase 1\n digitalWrite(vermelho,HIGH);\n digitalWrite(amarelo,LOW);\n digitalWrite(verde,LOW);\n delay(5000);\n //fase 2\n digitalWrite(vermelho,LOW);\n digitalWrite(amarelo,HIGH);\n digitalWrite(verde,LOW);\n delay(1000);\n //fase 3\n digitalWrite(vermelho,LOW);\n digitalWrite(amarelo,LOW);\n digitalWrite(verde,HIGH);\n delay(5000);\n}\n")),(0,t.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,t.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311444144703668800?view=diagram"}),(0,t.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,t.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/jdFRHqfmzik",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}u.isMDXComponent=!0},8787:(e,r,n)=>{n.d(r,{Z:()=>o});const o=n.p+"assets/images/semaforo-circuito-ad8d502f56ebf8aee34751edba36b634.png"}}]); \ No newline at end of file diff --git a/en/assets/js/a6aa9e1f.15a76870.js b/en/assets/js/a6aa9e1f.15a76870.js deleted file mode 100755 index e86bbf88a..000000000 --- a/en/assets/js/a6aa9e1f.15a76870.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3089],{46:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var n=a(7294),r=a(4334),l=a(2263),i=a(1944),o=a(5281),s=a(9058),m=a(9703),c=a(197),g=a(9985);function p(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,l.Z)(),{blogDescription:r,blogTitle:o,permalink:s}=t,m="/"===s?a:o;return n.createElement(n.Fragment,null,n.createElement(i.d,{title:m,description:r}),n.createElement(c.Z,{tag:"blog_posts_list"}))}function d(e){const{metadata:t,items:a,sidebar:r}=e;return n.createElement(s.Z,{sidebar:r},n.createElement(g.Z,{items:a}),n.createElement(m.Z,{metadata:t}))}function u(e){return n.createElement(i.FG,{className:(0,r.Z)(o.k.wrapper.blogPages,o.k.page.blogListPage)},n.createElement(p,e),n.createElement(d,e))}},9703:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(7294),r=a(5999),l=a(2244);function i(e){const{metadata:t}=e,{previousPage:a,nextPage:i}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,r.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(l.Z,{permalink:a,title:n.createElement(r.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),i&&n.createElement(l.Z,{permalink:i,title:n.createElement(r.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},9985:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(7294),r=a(9460),l=a(390);function i(e){let{items:t,component:a=l.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(r.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}}}]); \ No newline at end of file diff --git a/en/assets/js/a6aa9e1f.d18b185f.js b/en/assets/js/a6aa9e1f.d18b185f.js new file mode 100755 index 000000000..8518d281a --- /dev/null +++ b/en/assets/js/a6aa9e1f.d18b185f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4976],{16960:(e,t,a)=>{a.r(t),a.d(t,{default:()=>f});a(11504);var n=a(34064),i=a(28264),r=a(68900),o=a(45864),s=a(9452),l=a(22687),c=a(48712),d=a(60992),g=a(56952),p=a(35388),u=a(17624);function m(e){const t=(0,p.Q)(e);return(0,u.jsx)(g.c,{children:(0,u.jsx)("script",{type:"application/ld+json",children:JSON.stringify(t)})})}function h(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,i.c)(),{blogDescription:n,blogTitle:o,permalink:s}=t,l="/"===s?a:o;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(r.U7,{title:l,description:n}),(0,u.jsx)(c.c,{tag:"blog_posts_list"})]})}function b(e){const{metadata:t,items:a,sidebar:n}=e;return(0,u.jsxs)(s.c,{sidebar:n,children:[(0,u.jsx)(d.c,{items:a}),(0,u.jsx)(l.c,{metadata:t})]})}function f(e){return(0,u.jsxs)(r.cr,{className:(0,n.c)(o.W.wrapper.blogPages,o.W.page.blogListPage),children:[(0,u.jsx)(h,{...e}),(0,u.jsx)(m,{...e}),(0,u.jsx)(b,{...e})]})}},22687:(e,t,a)=>{a.d(t,{c:()=>o});a(11504);var n=a(84357),i=a(70308),r=a(17624);function o(e){const{metadata:t}=e,{previousPage:a,nextPage:o}=t;return(0,r.jsxs)("nav",{className:"pagination-nav","aria-label":(0,n.G)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[a&&(0,r.jsx)(i.c,{permalink:a,title:(0,r.jsx)(n.c,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),o&&(0,r.jsx)(i.c,{permalink:o,title:(0,r.jsx)(n.c,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},60992:(e,t,a)=>{a.d(t,{c:()=>o});a(11504);var n=a(83152),i=a(47590),r=a(17624);function o(e){let{items:t,component:a=i.c}=e;return(0,r.jsx)(r.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,r.jsx)(n.E,{content:t,children:(0,r.jsx)(a,{children:(0,r.jsx)(t,{})})},t.metadata.permalink)}))})}},35388:(e,t,a)=>{a.d(t,{Q:()=>d,C:()=>g});var n=a(70964),i=a(28264),r=a(85308);var o=a(83152);const s=e=>new Date(e).toISOString();function l(e){const t=e.map(p);return{author:1===t.length?t[0]:t}}function c(e,t,a){return e?{image:u({imageUrl:t(e,{absolute:!0}),caption:`title image for the blog post: ${a}`})}:{}}function d(e){const{siteConfig:t}=(0,i.c)(),{withBaseUrl:a}=(0,n.E)(),{metadata:{blogDescription:r,blogTitle:o,permalink:d}}=e,g=`${t.url}${d}`;return{"@context":"https://schema.org","@type":"Blog","@id":g,mainEntityOfPage:g,headline:o,description:r,blogPost:e.items.map((e=>function(e,t,a){const{assets:n,frontMatter:i,metadata:r}=e,{date:o,title:d,description:g,lastUpdatedAt:p}=r,u=n.image??i.image,m=i.keywords??[],h=`${t.url}${r.permalink}`,b=p?s(p):void 0;return{"@type":"BlogPosting","@id":h,mainEntityOfPage:h,url:h,headline:d,name:d,description:g,datePublished:o,...b?{dateModified:b}:{},...l(r.authors),...c(u,a,d),...m?{keywords:m}:{}}}(e.content,t,a)))}}function g(){const e=function(){const e=(0,r.c)(),t=e?.data?.blogMetadata;if(!t)throw new Error("useBlogMetadata() can't be called on the current route because the blog metadata could not be found in route context");return t}(),{assets:t,metadata:a}=(0,o.g)(),{siteConfig:d}=(0,i.c)(),{withBaseUrl:g}=(0,n.E)(),{date:p,title:u,description:m,frontMatter:h,lastUpdatedAt:b}=a,f=t.image??h.image,x=h.keywords??[],j=b?s(b):void 0,k=`${d.url}${a.permalink}`;return{"@context":"https://schema.org","@type":"BlogPosting","@id":k,mainEntityOfPage:k,url:k,headline:u,name:u,description:m,datePublished:p,...j?{dateModified:j}:{},...l(a.authors),...c(f,g,u),...x?{keywords:x}:{},isPartOf:{"@type":"Blog","@id":`${d.url}${e.blogBasePath}`,name:e.blogTitle}}}function p(e){return{"@type":"Person",...e.name?{name:e.name}:{},...e.title?{description:e.title}:{},...e.url?{url:e.url}:{},...e.email?{email:e.email}:{},...e.imageURL?{image:e.imageURL}:{}}}function u(e){let{imageUrl:t,caption:a}=e;return{"@type":"ImageObject","@id":t,url:t,contentUrl:t,caption:a}}}}]); \ No newline at end of file diff --git a/en/assets/js/a7bd4aaa.65a9f5e3.js b/en/assets/js/a7bd4aaa.65a9f5e3.js new file mode 100755 index 000000000..720dda4ea --- /dev/null +++ b/en/assets/js/a7bd4aaa.65a9f5e3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6500],{22e3:(n,e,s)=>{s.r(e),s.d(e,{default:()=>x});s(11504);var r=s(68900),o=s(14456),i=s(69920),t=s(85464),c=s(48712),a=s(17624);function u(n){const{version:e}=n;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.c,{version:e.version,tag:(0,o.SE)(e.pluginId,e.version)}),(0,a.jsx)(r.U7,{children:e.noIndex&&(0,a.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(n){const{version:e,route:s}=n;return(0,a.jsx)(r.cr,{className:e.className,children:(0,a.jsx)(i.Q,{version:e,children:(0,t.k)(s.routes)})})}function x(n){return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(u,{...n}),(0,a.jsx)(l,{...n})]})}}}]); \ No newline at end of file diff --git a/en/assets/js/a94703ab.7519b2d0.js b/en/assets/js/a94703ab.7519b2d0.js new file mode 100755 index 000000000..244d0cf34 --- /dev/null +++ b/en/assets/js/a94703ab.7519b2d0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4666],{20996:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(11504),o=n(34064),i=n(68900),s=n(45864),c=n(79940),l=n(46192),r=n(84357),d=n(53943),u=n(27124);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(17624);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:c}=(0,d.yI)();return(0,d.SM)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(c(),o(!1)):a<t?o(!1):a+window.innerHeight<document.documentElement.scrollHeight&&o(!0))})),(0,u.c)((e=>{e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,r.G)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.c)("clean-btn",s.W.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(13856),x=n(55592),j=n(11432),f=n(21824),v=n(68164);function _(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const g={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function S(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,r.G)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,r.G)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.c)("button button--secondary button--outline",g.collapseSidebarButton),onClick:t,children:(0,b.jsx)(_,{className:g.collapseSidebarButtonIcon})})}var k=n(43868),C=n(91100);const I=Symbol("EmptyContext"),N=a.createContext(I);function T(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(N.Provider,{value:i,children:t})}var B=n(58448),y=n(13376),A=n(10867),W=n(93664);function w(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,r.G)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,r.G)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),"aria-expanded":!t,type:"button",className:"clean-btn menu__caret",onClick:a})}function L(e){let{item:t,onItemClick:n,activePath:i,level:l,index:r,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:j}}}=(0,f.y)(),v=function(e){const t=(0,W.c)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,c.Gw)(e):void 0),[e,t])}(t),_=(0,c.Md)(t,i),g=(0,y.Sc)(x,i),{collapsed:S,setCollapsed:k}=(0,B.a)({initialState:()=>!!h&&(!_&&t.collapsed)}),{expandedItem:T,setExpandedItem:L}=function(){const e=(0,a.useContext)(N);if(e===I)throw new C.AH("DocSidebarItemsExpandedStateProvider");return e}(),E=function(e){void 0===e&&(e=!S),L(e?null:r),k(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,C.i0)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:_,collapsed:S,updateCollapsed:E}),(0,a.useEffect)((()=>{h&&null!=T&&T!==r&&j&&k(!0)}),[h,T,r,k,j]),(0,b.jsxs)("li",{className:(0,o.c)(s.W.docs.docSidebarItemCategory,s.W.docs.docSidebarItemCategoryLevel(l),"menu__list-item",{"menu__list-item--collapsed":S},p),children:[(0,b.jsxs)("div",{className:(0,o.c)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":g}),children:[(0,b.jsx)(A.c,{className:(0,o.c)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":_}),onClick:h?e=>{n?.(t),x?E(!1):(e.preventDefault(),E())}:()=>{n?.(t)},"aria-current":g?"page":void 0,role:h&&!x?"button":void 0,"aria-expanded":h&&!x?!S:void 0,href:h?v??"#":v,...d,children:m}),x&&h&&(0,b.jsx)(w,{collapsed:S,categoryLabel:m,onClick:e=>{e.preventDefault(),E()}})]}),(0,b.jsx)(B.U,{lazy:!0,as:"ul",className:"menu__list",collapsed:S,children:(0,b.jsx)(U,{items:u,tabIndex:S?-1:0,onItemClick:n,activePath:i,level:l+1})})]})}var E=n(18136),M=n(3232);const H={menuExternalLink:"menuExternalLink_NmtK"};function P(e){let{item:t,onItemClick:n,activePath:a,level:i,index:l,...r}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,c.Md)(t,a),x=(0,E.c)(d);return(0,b.jsx)("li",{className:(0,o.c)(s.W.docs.docSidebarItemLink,s.W.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(A.c,{className:(0,o.c)("menu__link",!x&&H.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...r,children:[u,!x&&(0,b.jsx)(M.c,{})]})},u)}const R={menuHtmlItem:"menuHtmlItem_M9Kj"};function G(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:c,className:l}=t;return(0,b.jsx)("li",{className:(0,o.c)(s.W.docs.docSidebarItemLink,s.W.docs.docSidebarItemLinkLevel(n),c&&[R.menuHtmlItem,"menu__list-item"],l),dangerouslySetInnerHTML:{__html:i}},a)}function D(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(L,{item:t,...n});case"html":return(0,b.jsx)(G,{item:t,...n});default:return(0,b.jsx)(P,{item:t,...n})}}function F(e){let{items:t,...n}=e;const a=(0,c.mg)(t,n.activePath);return(0,b.jsx)(T,{children:a.map(((e,t)=>(0,b.jsx)(D,{item:e,index:t,...n},t)))})}const U=(0,a.memo)(F),z={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function K(e){let{path:t,sidebar:n,className:i}=e;const c=function(){const{isActive:e}=(0,k.el)(),[t,n]=(0,a.useState)(e);return(0,d.SM)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,r.G)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.c)("menu thin-scrollbar",z.menu,c&&z.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.c)(s.W.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(U,{items:n,activePath:t,level:1})})})}const V="sidebar_njMd",Y="sidebarWithHideableNavbar_wUlq",q="sidebarHidden_VK0M",O="sidebarLogo_isFc";function J(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:c}}}=(0,f.y)();return(0,b.jsxs)("div",{className:(0,o.c)(V,s&&Y,i&&q),children:[s&&(0,b.jsx)(v.c,{tabIndex:-1,className:O}),(0,b.jsx)(K,{path:t,sidebar:n}),c&&(0,b.jsx)(S,{onClick:a})]})}const Q=a.memo(J);var X=n(45168),Z=n(41336);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,Z.q)();return(0,b.jsx)("ul",{className:(0,o.c)(s.W.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(U,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(X.Mx,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,j.U)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(Q,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,r.G)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,r.G)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(_,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function se(e){let{children:t}=e;const n=(0,l.m)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function ce(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:c}=(0,x.IT)(),[l,r]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{l&&r(!1),!l&&(0,p.I)()&&r(!0),i((e=>!e))}),[i,l]);return(0,b.jsx)("aside",{className:(0,o.c)(s.W.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&r(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.c)(ie.sidebarViewport,l&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:c,onCollapse:d,isHidden:l}),l&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const le={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function re(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,l.m)();return(0,b.jsx)("main",{className:(0,o.c)(le.docMainContainer,(t||!a)&&le.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.c)("container padding-top--md padding-bottom--lg",le.docItemWrapper,t&&le.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function ue(e){let{children:t}=e;const n=(0,l.m)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(ce,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(re,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(96592);function be(e){const t=(0,c.Uj)(e);if(!t)return(0,b.jsx)(me.c,{});const{docElement:n,sidebarName:a,sidebarItems:r}=t;return(0,b.jsx)(i.cr,{className:(0,o.c)(s.W.page.docsDocPage),children:(0,b.jsx)(l.y,{name:a,items:r,children:(0,b.jsx)(ue,{children:n})})})}},96592:(e,t,n)=>{n.d(t,{c:()=>c});n(11504);var a=n(34064),o=n(84357),i=n(56448),s=n(17624);function c(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.c)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.c,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.c,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.c,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.c,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/en/assets/js/acecf23e.1c5039b4.js b/en/assets/js/acecf23e.1c5039b4.js new file mode 100755 index 000000000..1e2c8fde6 --- /dev/null +++ b/en/assets/js/acecf23e.1c5039b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6360],{81112:e=>{e.exports=JSON.parse('{"blogBasePath":"/en/blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/en/assets/js/af172acd.3799f580.js b/en/assets/js/af172acd.3799f580.js deleted file mode 100755 index a42ece218..000000000 --- a/en/assets/js/af172acd.3799f580.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1449],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),i=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=i(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=i(r),m=o,f=p["".concat(c,".").concat(m)]||p[m]||g[m]||a;return r?n.createElement(f,l(l({ref:t},s),{},{components:r})):n.createElement(f,l({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var u={};for(var c in t)hasOwnProperty.call(t,c)&&(u[c]=t[c]);u.originalType=e,u[p]="string"==typeof e?e:o,l[1]=u;for(var i=2;i<a;i++)l[i]=r[i];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},7498:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>g,frontMatter:()=>a,metadata:()=>u,toc:()=>i});var n=r(3117),o=(r(7294),r(3905));const a={slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},l=void 0,u={permalink:"/en/blog/welcome",source:"@site/blog/2019-05-30-welcome.md",title:"Welcome",description:"Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!",date:"2019-05-30T00:00:00.000Z",formattedDate:"May 30, 2019",tags:[{label:"facebook",permalink:"/en/blog/tags/facebook"},{label:"hello",permalink:"/en/blog/tags/hello"},{label:"docusaurus",permalink:"/en/blog/tags/docusaurus"}],readingTime:.175,hasTruncateMarker:!1,authors:[{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4"}],frontMatter:{slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},nextItem:{title:"Hello",permalink:"/en/blog/hello-world"}},c={authorsImageUrls:[void 0]},i=[],s={toc:i},p="wrapper";function g(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Blog features are powered by the blog plugin. Simply add files to the ",(0,o.kt)("inlineCode",{parentName:"p"},"blog")," directory. It supports tags as well!"),(0,o.kt)("p",null,"Delete the whole directory if you don't want the blog features. As simple as that!"))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/af172acd.8bd12bba.js b/en/assets/js/af172acd.8bd12bba.js new file mode 100755 index 000000000..777182c1b --- /dev/null +++ b/en/assets/js/af172acd.8bd12bba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1560],{92368:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>u});var n=r(17624),o=r(95788);const a={slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},l=void 0,c={permalink:"/en/blog/welcome",source:"@site/blog/2019-05-30-welcome.md",title:"Welcome",description:"Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!",date:"2019-05-30T00:00:00.000Z",tags:[{label:"facebook",permalink:"/en/blog/tags/facebook"},{label:"hello",permalink:"/en/blog/tags/hello"},{label:"docusaurus",permalink:"/en/blog/tags/docusaurus"}],readingTime:.175,hasTruncateMarker:!1,authors:[{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4"}],frontMatter:{slug:"welcome",title:"Welcome",author:"Yangshun Tay",author_title:"Front End Engineer @ Facebook",author_url:"https://github.com/yangshun",author_image_url:"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4",tags:["facebook","hello","docusaurus"]},unlisted:!1,nextItem:{title:"Hello",permalink:"/en/blog/hello-world"}},s={authorsImageUrls:[void 0]},u=[];function i(e){const t={code:"code",p:"p",...(0,o.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["Blog features are powered by the blog plugin. Simply add files to the ",(0,n.jsx)(t.code,{children:"blog"})," directory. It supports tags as well!"]}),"\n",(0,n.jsx)(t.p,{children:"Delete the whole directory if you don't want the blog features. As simple as that!"})]})}function p(e={}){const{wrapper:t}={...(0,o.MN)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(i,{...e})}):i(e)}},95788:(e,t,r)=>{r.d(t,{MN:()=>u});var n=r(11504);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},i={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),g=u(r),h=o,b=g["".concat(s,".").concat(h)]||g[h]||i[h]||a;return r?n.createElement(b,l(l({ref:t},p),{},{components:r})):n.createElement(b,l({ref:t},p))}));p.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/af2b9553.06f3c6b2.js b/en/assets/js/af2b9553.06f3c6b2.js deleted file mode 100755 index c107b159e..000000000 --- a/en/assets/js/af2b9553.06f3c6b2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8560],{3905:(e,a,o)=>{o.d(a,{Zo:()=>l,kt:()=>f});var i=o(7294);function t(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function n(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,i)}return o}function r(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?n(Object(o),!0).forEach((function(a){t(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function s(e,a){if(null==e)return{};var o,i,t=function(e,a){if(null==e)return{};var o,i,t={},n=Object.keys(e);for(i=0;i<n.length;i++)o=n[i],a.indexOf(o)>=0||(t[o]=e[o]);return t}(e,a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i<n.length;i++)o=n[i],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var p=i.createContext({}),c=function(e){var a=i.useContext(p),o=a;return e&&(o="function"==typeof e?e(a):r(r({},a),e)),o},l=function(e){var a=c(e.components);return i.createElement(p.Provider,{value:a},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return i.createElement(i.Fragment,{},a)}},u=i.forwardRef((function(e,a){var o=e.components,t=e.mdxType,n=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),m=c(o),u=t,f=m["".concat(p,".").concat(u)]||m[u]||d[u]||n;return o?i.createElement(f,r(r({ref:a},l),{},{components:o})):i.createElement(f,r({ref:a},l))}));function f(e,a){var o=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var n=o.length,r=new Array(n);r[0]=u;var s={};for(var p in a)hasOwnProperty.call(a,p)&&(s[p]=a[p]);s.originalType=e,s[m]="string"==typeof e?e:t,r[1]=s;for(var c=2;c<n;c++)r[c]=o[c];return i.createElement.apply(null,r)}return i.createElement.apply(null,o)}u.displayName="MDXCreateElement"},641:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>p,contentTitle:()=>r,default:()=>d,frontMatter:()=>n,metadata:()=>s,toc:()=>c});var i=o(3117),t=(o(7294),o(3905));const n={id:"franzininho-wifi-espidf-05",title:"Primeiros passos com a AWS",slug:"/franzininho-wifi/exemplos-espidf/aws",description:"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.",author:"Ana Carolina Cabral (ana.cpmelo95@gmail.com)"},r=void 0,s={unversionedId:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05",id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05",title:"Primeiros passos com a AWS",description:"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x05-AWS-IoT-Core.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/aws",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/aws",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x05-AWS-IoT-Core.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-05",title:"Primeiros passos com a AWS",slug:"/franzininho-wifi/exemplos-espidf/aws",description:"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.",author:"Ana Carolina Cabral (ana.cpmelo95@gmail.com)"},sidebar:"docs",previous:{title:"PWM com LEDC",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/ledc"},next:{title:"Primeiros Passos",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos"}},p={},c=[{value:"Introdu\xe7\xe3o",id:"introdu\xe7\xe3o",level:3},{value:"AWS IOT Core",id:"aws-iot-core",level:3},{value:"Parte 1 - Criando a Franzininho na AWS",id:"parte-1---criando-a-franzininho-na-aws",level:3},{value:"Parte 2 - Conectando a Franzininho com ESP-IDF",id:"parte-2---conectando-a-franzininho-com-esp-idf",level:3},{value:"Parte 3 - Monitorando a Franzininho",id:"parte-3---monitorando-a-franzininho",level:3}],l={toc:c},m="wrapper";function d(e){let{components:a,...n}=e;return(0,t.kt)(m,(0,i.Z)({},l,n,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("h3",{id:"introdu\xe7\xe3o"},"Introdu\xe7\xe3o"),(0,t.kt)("p",null,"Neste tutorial exploraremos a utiliza\xe7\xe3o do AWS IoT Core para conectar a placa Franzininho WiFi \xe0 nuvem utilizando o ESP-IDF. Al\xe9m do IoT Core, a AWS oferece v\xe1rias outras formas de conectar um dispositivo, como AWS IoT Greengrass Stream Manager ou AWS IoT SiteWise. Esses outros servi\xe7os para ingest\xe3o e visualiza\xe7\xe3o de dados podem ser vistos nesse ",(0,t.kt)("a",{parentName:"p",href:"https://aws.amazon.com/pt/blogs/iot/7-patterns-for-iot-data-ingestion-and-visualization-how-to-decide-what-works-best-for-your-use-case/"},"link"),"."),(0,t.kt)("h3",{id:"aws-iot-core"},"AWS IOT Core"),(0,t.kt)("p",null,"O AWS IoT Core \xe9 o broker de mensagens que permite conectar dispositivos IoT com a nuvem AWS e seus diversos servi\xe7os. Atrav\xe9s dele, podemos criar, configurar e gerenciar nossos dispositivos."),(0,t.kt)("p",null,"Atualmente suporta os seguintes protocolos de comunica\xe7\xe3o:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"MQTT"),(0,t.kt)("li",{parentName:"ul"},"MQTT over WSS (Websockets Secure)"),(0,t.kt)("li",{parentName:"ul"},"HTTPS"),(0,t.kt)("li",{parentName:"ul"},"LoRaWAN")),(0,t.kt)("p",null,"Resumidamente, o servi\xe7o se baseia em:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Things:")," Dispositivos (\u201ccoisas\u201d) que queremos conectar;"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Jobs:")," A\xe7\xf5es remotas que voc\xea pode agendar para realizar opera\xe7\xf5es nos seus dispositivos, como atualiza\xe7\xf5es de firmware;"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Rules:")," Regras atrav\xe9s das quais podemos direcionar as mensagens recebidas pelo broker para outros servi\xe7os da AWS, por exemplo, para armazenar dados no DynamoDB."),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Seguran\xe7a:")," onde \xe9 poss\xedvel gerenciar os certificados de autoriza\xe7\xe3o, pol\xedticas (policies) e papeis (roles) de autentica\xe7\xe3o.")),(0,t.kt)("h3",{id:"parte-1---criando-a-franzininho-na-aws"},"Parte 1 - Criando a Franzininho na AWS"),(0,t.kt)("p",null,"Para seguir o tutorial, voc\xea deve ter acesso ao console da AWS. Para come\xe7ar, vamos criar uma nova \u201ccoisa\u201d (thing) para representar nossa Franzininho na nuvem. Certifique-se que voc\xea est\xe1 na regi\xe3o mais pr\xf3xima antes de come\xe7ar, selecionando-a no menu do canto superior direito. Para o Brasil, a regi\xe3o \xe9 sa-east-1."),(0,t.kt)("ol",null,(0,t.kt)("li",{parentName:"ol"},(0,t.kt)("p",{parentName:"li"},"Na AWS, procure pelo servi\xe7o IoT Core (",(0,t.kt)("inlineCode",{parentName:"p"},"Service > Internet of Things > IoT core"),") e crie uma nova \u201ccoisa\u201d em ",(0,t.kt)("inlineCode",{parentName:"p"},"Manage > All devices > Things > Create new thing"),".")),(0,t.kt)("li",{parentName:"ol"},(0,t.kt)("p",{parentName:"li"},"Vamos criar apenas um dispositivo (",(0,t.kt)("em",{parentName:"p"},"Create a single thing"),"), mas saiba que tamb\xe9m \xe9 poss\xedvel criar v\xe1rios de uma vez (",(0,t.kt)("em",{parentName:"p"},"Create many things"),"). Voc\xea precisar\xe1 especificar as propriedades desse dispositivo:"))),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Thing name: o nome do seu dispositivo para identific\xe1-lo de forma \xfanica. Escolha sabiamente, pois essa propriedade n\xe3o pode ser alterada depois que o dispositivo \xe9 criado."),(0,t.kt)("li",{parentName:"ul"},"Configura\xe7\xf5es adicionais: podem ser utilizadas para detalhar, organizar, gerenciar e pesquisar os dispositivos, como tipo, atributos ou grupos."),(0,t.kt)("li",{parentName:"ul"},"Device shadow permite que o estado do seu dispositivo fique dispon\xedvel para outros servi\xe7os mesmo que ele n\xe3o esteja conectado.")),(0,t.kt)("p",null,"Por enquanto, basta preencher o nome e prosseguir. Chamarei o meu carinhosamente de Franz."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Criar thing",src:o(34).Z,width:"808",height:"808"})),(0,t.kt)("ol",{start:3},(0,t.kt)("li",{parentName:"ol"},(0,t.kt)("p",{parentName:"li"},"Para conseguir se autenticar ao seriv\xe7o da AWS, cada dispositivo deve ter um certificado. Utilizaremos o gerado automaticamente (",(0,t.kt)("em",{parentName:"p"},"Auto-generate a new certificate"),"), mas voc\xea tamb\xe9m tem a op\xe7\xe3o de utilizar certificados pr\xf3prios.")),(0,t.kt)("li",{parentName:"ol"},(0,t.kt)("p",{parentName:"li"},"Para gerenciar o n\xedvel de acesso desse certificado aos recursos, \xe9 preciso criar uma pol\xedtica de autoriza\xe7\xe3o (",(0,t.kt)("em",{parentName:"p"},"policy"),"), que \xe9 uma lista de a\xe7\xf5es permitidas ou proibidas para aquele certificado. Voc\xea pode criar uma pol\xedtica direto dessa aba, em ",(0,t.kt)("em",{parentName:"p"},"Create policy"),", ou pela barra de navega\xe7\xe3o do IoT Core em ",(0,t.kt)("em",{parentName:"p"},"Security > Policies"),"."))),(0,t.kt)("p",null,"Uma ",(0,t.kt)("em",{parentName:"p"},"policy")," deve ter um nome e uma ou mais declara\xe7\xf5es (",(0,t.kt)("em",{parentName:"p"},"statements"),"). Cada declara\xe7\xe3o \xe9 composta por um ",(0,t.kt)("strong",{parentName:"p"},"efeito")," de uma ",(0,t.kt)("strong",{parentName:"p"},"a\xe7\xe3o")," \xe0 um ",(0,t.kt)("strong",{parentName:"p"},"recurso"),"."),(0,t.kt)("p",null,"O ",(0,t.kt)("strong",{parentName:"p"},"efeito")," pode ser de permiss\xe3o (",(0,t.kt)("em",{parentName:"p"},"allow"),") ou proibi\xe7\xe3o (",(0,t.kt)("em",{parentName:"p"},"deny"),")."),(0,t.kt)("p",null,"As poss\xedveis ",(0,t.kt)("strong",{parentName:"p"},"a\xe7\xf5es")," desse servi\xe7o s\xe3o v\xe1rias, mas utilizaremos as seguintes principais:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("em",{parentName:"li"},"iot:Connect:")," permite a conex\xe3o do dispositivo ao servi\xe7o;"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("em",{parentName:"li"},"iot:Publish:")," permite que o dispositivo publique mensagens no broker;"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("em",{parentName:"li"},"iot:Receive:")," permite que o dispositivo receba mensagem do broker;"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("em",{parentName:"li"},"iot:Subscribe:")," permite que o dispositivo se inscreva nos t\xf3picos do broker.")),(0,t.kt)("p",null,"E o ",(0,t.kt)("strong",{parentName:"p"},"recurso")," \xe9 o nome do servi\xe7o da AWS que a a\xe7\xe3o vai se utilizar, neste caso ",(0,t.kt)("em",{parentName:"p"},"arn:aws:iot:",(0,t.kt)("strong",{parentName:"em"},"region"),":",(0,t.kt)("strong",{parentName:"em"},"account-id")),"."),(0,t.kt)("p",null,"Voc\xea pode adicionar policies j\xe1 existentes utilizando a aba ",(0,t.kt)("em",{parentName:"p"},"Policy Examples")," ou cri\xe1-las manualmente. Para este exemplo, utilizei as seguintes pol\xedticas:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-bash"},'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Effect": "Allow",\n "Action": "iot:Connect",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Publish",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Subscribe",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:topicfilter/${iot:Connection.Thing.ThingName}/*"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Publish",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Receive",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"\n }\n ]\n}\n')),(0,t.kt)("p",null,"Altere o ",(0,t.kt)("inlineCode",{parentName:"p"},"<account-id>")," para o n\xfamero da sua conta, dispon\xedvel no menu do canto superior direito."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Account ID",src:o(1118).Z,width:"317",height:"423"})),(0,t.kt)("ol",{start:5},(0,t.kt)("li",{parentName:"ol"},"Por fim, baixe os arquivos de certificados e chaves que a AWS criou automaticamente para autenticar esse dispositivo. Este \xe9 o \xfanico momento que voc\xea conseguir\xe1 baixar as chaves para esse certificado, ent\xe3o guarde-as com carinho para utiliz\xe1-los no pr\xf3ximo passo.")),(0,t.kt)("h3",{id:"parte-2---conectando-a-franzininho-com-esp-idf"},"Parte 2 - Conectando a Franzininho com ESP-IDF"),(0,t.kt)("p",null,"Agora que temos nosso dispositivo configurado, precisamos escrever o firmware para conect\xe1-lo. A pr\xf3pria Espressif disponibiliza um SDK para comunica\xe7\xe3o com AWS IoT baseada no FreeRTOS. Para utilizar, basta clonar o reposit\xf3rio, preferencialmente direto na pasta de componentes do seu diret\xf3rio de instala\xe7\xe3o."),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/espressif/esp-aws-iot <esp-dir-path>/esp-idf/components\n")),(0,t.kt)("p",null,"Dentro desse componente, j\xe1 s\xe3o disponibilizados alguns exemplos para utilizar com a AWS. Vamos come\xe7ar utilizando o exemplo b\xe1sico de MQTT em ",(0,t.kt)("inlineCode",{parentName:"p"},"examples/mqtt/tls_mutual_auth"),"."),(0,t.kt)("p",null,"Para configurar, utilizaremos o ",(0,t.kt)("em",{parentName:"p"},"menuconfig"),":"),(0,t.kt)("ol",null,(0,t.kt)("li",{parentName:"ol"},"Nas configura\xe7\xf5es do exemplo (",(0,t.kt)("em",{parentName:"li"},"Example Configuration"),"), insira o nome do dispositivo exatamente como foi criado na AWS (Franz, no meu caso) e o endpoint do broker MQTT, que est\xe1 dispon\xedvel no menu ",(0,t.kt)("inlineCode",{parentName:"li"},"AWS IoT > Settings > Device endpoint")," na sua conta do AWS. As demais configura\xe7\xf5es podem ser deixadas como padr\xe3o.")),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Device Endpoint",src:o(6749).Z,width:"1136",height:"919"}),"\n",(0,t.kt)("img",{alt:"Menuconfig",src:o(7964).Z,width:"719",height:"146"})),(0,t.kt)("ol",{start:2},(0,t.kt)("li",{parentName:"ol"},(0,t.kt)("p",{parentName:"li"},"Nas configura\xe7\xf5es de rede (",(0,t.kt)("em",{parentName:"p"},"Example Connection Configuration"),"), insira as configura\xe7\xf5es da sua rede Wi-Fi (SSID e senha)")),(0,t.kt)("li",{parentName:"ol"},(0,t.kt)("p",{parentName:"li"},"O m\xe9todo padr\xe3o de autentica\xe7\xe3o com a AWS \xe9 utilizando credenciais PKI embarcadas no diret\xf3rio certs/. Lembra dos certificados que foram gerados automaticamente ao criar um dispositivo? \xc9 aqui que voc\xea vai coloc\xe1-los para embarcar no dispositivo. Copie o certificado, a chave ",(0,t.kt)("strong",{parentName:"p"},"privada")," e um dos certificados de root que voc\xea tinha armazenado anteriormente."))),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-bash"},"cp certificate.pem.crt main/certs/client.crt\ncp private.pem.key main/certs/client.key\ncp AmazonRootCAx.pem main/certs/root_cert_auth.pem\n")),(0,t.kt)("p",null,"Com tudo configurado, \xe9 s\xf3 buildar e passar pra placa (siga o tutorial em ",(0,t.kt)("a",{parentName:"p",href:"https://docs.franzininho.com.br/docs/franzininho-wifi/exemplos-espidf/primeiros-passos"},"Primeiros passos"),"). Este exemplo se conecta ao broker MQTT, se sobrescreve no t\xf3pico ",(0,t.kt)("inlineCode",{parentName:"p"},'CLIENT_IDENTIFIER "/example/topic\u201d')," (Franz/example/topic, por exemplo) e publica mensagens de Hello World."),(0,t.kt)("p",null,"Sua conex\xe3o foi estabelecida com sucesso caso receba a mensagem a seguir:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-bash"},"I (7329) coreMQTT: Connection accepted.\nI (7339) coreMQTT: Received MQTT CONNACK successfully from broker.\nI (7349) coreMQTT: MQTT connection established with the broker.\nI (7349) coreMQTT: MQTT connection successfully established with broker.\n")),(0,t.kt)("h3",{id:"parte-3---monitorando-a-franzininho"},"Parte 3 - Monitorando a Franzininho"),(0,t.kt)("p",null,"Agora que a Franzininho est\xe1 conectado, podemos monitorar sua atividade pelo console da AWS."),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Voc\xea pode ver as mensagens mais recentes em ",(0,t.kt)("inlineCode",{parentName:"li"},"Manage > Things > Nome do seu dispositivo > Activity"),".")),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Menu Activity",src:o(3135).Z,width:"1847",height:"858"})),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"E voc\xea tamb\xe9m pode interagir atrav\xe9s do MQTT Test Client, por exemplo, publicando no t\xf3pico ",(0,t.kt)("inlineCode",{parentName:"li"},'CLIENT_IDENTIFIER "/example/topic\u201d')," que estamos inscritos.")),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"MQTT Test Client",src:o(7316).Z,width:"1486",height:"818"})),(0,t.kt)("p",null,"A mensagem recebida pode ser vista na Franzininho:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-bash"},'I (17668) coreMQTT: Packet received. ReceivedBytes=66.\nI (17668) coreMQTT: De-serialized incoming PUBLISH packet: DeserializerResult=MQTTSuccess.\nI (17668) coreMQTT: State record updated. New state=MQTTPublishDone.\nI (17678) coreMQTT: Incoming QOS : 0.\nI (17678) coreMQTT: Incoming Publish Topic Name: Franz/example/topic matches subscribed topic.\nIncoming Publish message Packet Id is 0.\nIncoming Publish Message : {\n "message": "Hello from AWS IoT console"\n}.\n')),(0,t.kt)("p",null,"E \xe9 isso, agora voc\xea pode brincar de Internet das Coisas com sua Franzininho WiFi utilizando a AWS!"),(0,t.kt)("table",null,(0,t.kt)("thead",{parentName:"table"},(0,t.kt)("tr",{parentName:"thead"},(0,t.kt)("th",{parentName:"tr",align:null},"Autora"),(0,t.kt)("th",{parentName:"tr",align:null},(0,t.kt)("a",{parentName:"th",href:"https://github.com/carolcabral"},"Ana Carolina Cabral ")))),(0,t.kt)("tbody",{parentName:"table"},(0,t.kt)("tr",{parentName:"tbody"},(0,t.kt)("td",{parentName:"tr",align:null},"Data:"),(0,t.kt)("td",{parentName:"tr",align:null},"07/01/2023")))))}d.isMDXComponent=!0},34:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/1-Create-thing-38ca8a9bbe949f6fd7bb29c1746f3175.png"},1118:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/2-Account-id-4ac0bcea28543803571a6f1211af4495.png"},6749:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/3.1-Device-endpoint-7109151e8d06555b5a4e706dc26d9d2f.png"},7964:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/3.2-Menuconfig-49a52cb36a4edc9b1e00093697627052.png"},3135:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/4-MenuActivity-37174ab453b4c48389ee792525762a0f.png"},7316:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/5-MQTTTestClient-921841744c6883b3a1f1f80db1081d19.png"}}]); \ No newline at end of file diff --git a/en/assets/js/af2b9553.818e776f.js b/en/assets/js/af2b9553.818e776f.js new file mode 100755 index 000000000..a3683f36f --- /dev/null +++ b/en/assets/js/af2b9553.818e776f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2660],{68240:(e,i,o)=>{o.r(i),o.d(i,{assets:()=>t,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var n=o(17624),s=o(95788);const a={id:"franzininho-wifi-espidf-05",title:"Primeiros passos com a AWS",slug:"/franzininho-wifi/exemplos-espidf/aws",description:"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.",author:"Ana Carolina Cabral (ana.cpmelo95@gmail.com)"},r=void 0,c={id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05",title:"Primeiros passos com a AWS",description:"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x05-AWS-IoT-Core.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/aws",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/aws",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x05-AWS-IoT-Core.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-05",title:"Primeiros passos com a AWS",slug:"/franzininho-wifi/exemplos-espidf/aws",description:"Primeiros passos para conectar a Franzininho WiFi na AWS via MQTT pelo AWS IoT Core.",author:"Ana Carolina Cabral (ana.cpmelo95@gmail.com)"},sidebar:"docs",previous:{title:"PWM com LEDC",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/ledc"},next:{title:"Primeiros Passos",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos"}},t={},d=[{value:"Introdu\xe7\xe3o",id:"introdu\xe7\xe3o",level:3},{value:"AWS IOT Core",id:"aws-iot-core",level:3},{value:"Parte 1 - Criando a Franzininho na AWS",id:"parte-1---criando-a-franzininho-na-aws",level:3},{value:"Parte 2 - Conectando a Franzininho com ESP-IDF",id:"parte-2---conectando-a-franzininho-com-esp-idf",level:3},{value:"Parte 3 - Monitorando a Franzininho",id:"parte-3---monitorando-a-franzininho",level:3}];function l(e){const i={a:"a",code:"code",em:"em",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h3,{id:"introdu\xe7\xe3o",children:"Introdu\xe7\xe3o"}),"\n",(0,n.jsxs)(i.p,{children:["Neste tutorial exploraremos a utiliza\xe7\xe3o do AWS IoT Core para conectar a placa Franzininho WiFi \xe0 nuvem utilizando o ESP-IDF. Al\xe9m do IoT Core, a AWS oferece v\xe1rias outras formas de conectar um dispositivo, como AWS IoT Greengrass Stream Manager ou AWS IoT SiteWise. Esses outros servi\xe7os para ingest\xe3o e visualiza\xe7\xe3o de dados podem ser vistos nesse ",(0,n.jsx)(i.a,{href:"https://aws.amazon.com/pt/blogs/iot/7-patterns-for-iot-data-ingestion-and-visualization-how-to-decide-what-works-best-for-your-use-case/",children:"link"}),"."]}),"\n",(0,n.jsx)(i.h3,{id:"aws-iot-core",children:"AWS IOT Core"}),"\n",(0,n.jsx)(i.p,{children:"O AWS IoT Core \xe9 o broker de mensagens que permite conectar dispositivos IoT com a nuvem AWS e seus diversos servi\xe7os. Atrav\xe9s dele, podemos criar, configurar e gerenciar nossos dispositivos."}),"\n",(0,n.jsx)(i.p,{children:"Atualmente suporta os seguintes protocolos de comunica\xe7\xe3o:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"MQTT"}),"\n",(0,n.jsx)(i.li,{children:"MQTT over WSS (Websockets Secure)"}),"\n",(0,n.jsx)(i.li,{children:"HTTPS"}),"\n",(0,n.jsx)(i.li,{children:"LoRaWAN"}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"Resumidamente, o servi\xe7o se baseia em:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Things:"})," Dispositivos (\u201ccoisas\u201d) que queremos conectar;"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Jobs:"})," A\xe7\xf5es remotas que voc\xea pode agendar para realizar opera\xe7\xf5es nos seus dispositivos, como atualiza\xe7\xf5es de firmware;"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Rules:"})," Regras atrav\xe9s das quais podemos direcionar as mensagens recebidas pelo broker para outros servi\xe7os da AWS, por exemplo, para armazenar dados no DynamoDB."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Seguran\xe7a:"})," onde \xe9 poss\xedvel gerenciar os certificados de autoriza\xe7\xe3o, pol\xedticas (policies) e papeis (roles) de autentica\xe7\xe3o."]}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"parte-1---criando-a-franzininho-na-aws",children:"Parte 1 - Criando a Franzininho na AWS"}),"\n",(0,n.jsx)(i.p,{children:"Para seguir o tutorial, voc\xea deve ter acesso ao console da AWS. Para come\xe7ar, vamos criar uma nova \u201ccoisa\u201d (thing) para representar nossa Franzininho na nuvem. Certifique-se que voc\xea est\xe1 na regi\xe3o mais pr\xf3xima antes de come\xe7ar, selecionando-a no menu do canto superior direito. Para o Brasil, a regi\xe3o \xe9 sa-east-1."}),"\n",(0,n.jsxs)(i.ol,{children:["\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Na AWS, procure pelo servi\xe7o IoT Core (",(0,n.jsx)(i.code,{children:"Service > Internet of Things > IoT core"}),") e crie uma nova \u201ccoisa\u201d em ",(0,n.jsx)(i.code,{children:"Manage > All devices > Things > Create new thing"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Vamos criar apenas um dispositivo (",(0,n.jsx)(i.em,{children:"Create a single thing"}),"), mas saiba que tamb\xe9m \xe9 poss\xedvel criar v\xe1rios de uma vez (",(0,n.jsx)(i.em,{children:"Create many things"}),"). Voc\xea precisar\xe1 especificar as propriedades desse dispositivo:"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"Thing name: o nome do seu dispositivo para identific\xe1-lo de forma \xfanica. Escolha sabiamente, pois essa propriedade n\xe3o pode ser alterada depois que o dispositivo \xe9 criado."}),"\n",(0,n.jsx)(i.li,{children:"Configura\xe7\xf5es adicionais: podem ser utilizadas para detalhar, organizar, gerenciar e pesquisar os dispositivos, como tipo, atributos ou grupos."}),"\n",(0,n.jsx)(i.li,{children:"Device shadow permite que o estado do seu dispositivo fique dispon\xedvel para outros servi\xe7os mesmo que ele n\xe3o esteja conectado."}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"Por enquanto, basta preencher o nome e prosseguir. Chamarei o meu carinhosamente de Franz."}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"Criar thing",src:o(49976).c+"",width:"808",height:"808"})}),"\n",(0,n.jsxs)(i.ol,{start:"3",children:["\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Para conseguir se autenticar ao seriv\xe7o da AWS, cada dispositivo deve ter um certificado. Utilizaremos o gerado automaticamente (",(0,n.jsx)(i.em,{children:"Auto-generate a new certificate"}),"), mas voc\xea tamb\xe9m tem a op\xe7\xe3o de utilizar certificados pr\xf3prios."]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Para gerenciar o n\xedvel de acesso desse certificado aos recursos, \xe9 preciso criar uma pol\xedtica de autoriza\xe7\xe3o (",(0,n.jsx)(i.em,{children:"policy"}),"), que \xe9 uma lista de a\xe7\xf5es permitidas ou proibidas para aquele certificado. Voc\xea pode criar uma pol\xedtica direto dessa aba, em ",(0,n.jsx)(i.em,{children:"Create policy"}),", ou pela barra de navega\xe7\xe3o do IoT Core em ",(0,n.jsx)(i.em,{children:"Security > Policies"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:["Uma ",(0,n.jsx)(i.em,{children:"policy"})," deve ter um nome e uma ou mais declara\xe7\xf5es (",(0,n.jsx)(i.em,{children:"statements"}),"). Cada declara\xe7\xe3o \xe9 composta por um ",(0,n.jsx)(i.strong,{children:"efeito"})," de uma ",(0,n.jsx)(i.strong,{children:"a\xe7\xe3o"})," \xe0 um ",(0,n.jsx)(i.strong,{children:"recurso"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["O ",(0,n.jsx)(i.strong,{children:"efeito"})," pode ser de permiss\xe3o (",(0,n.jsx)(i.em,{children:"allow"}),") ou proibi\xe7\xe3o (",(0,n.jsx)(i.em,{children:"deny"}),")."]}),"\n",(0,n.jsxs)(i.p,{children:["As poss\xedveis ",(0,n.jsx)(i.strong,{children:"a\xe7\xf5es"})," desse servi\xe7o s\xe3o v\xe1rias, mas utilizaremos as seguintes principais:"]}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.em,{children:"iot:Connect:"})," permite a conex\xe3o do dispositivo ao servi\xe7o;"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.em,{children:"iot:Publish:"})," permite que o dispositivo publique mensagens no broker;"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.em,{children:"iot:Receive:"})," permite que o dispositivo receba mensagem do broker;"]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.em,{children:"iot:Subscribe:"})," permite que o dispositivo se inscreva nos t\xf3picos do broker."]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:["E o ",(0,n.jsx)(i.strong,{children:"recurso"})," \xe9 o nome do servi\xe7o da AWS que a a\xe7\xe3o vai se utilizar, neste caso ",(0,n.jsxs)(i.em,{children:["arn:aws:iot:",(0,n.jsx)(i.strong,{children:"region"}),":",(0,n.jsx)(i.strong,{children:"account-id"})]}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["Voc\xea pode adicionar policies j\xe1 existentes utilizando a aba ",(0,n.jsx)(i.em,{children:"Policy Examples"})," ou cri\xe1-las manualmente. Para este exemplo, utilizei as seguintes pol\xedticas:"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Effect": "Allow",\n "Action": "iot:Connect",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Publish",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Subscribe",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:topicfilter/${iot:Connection.Thing.ThingName}/*"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Publish",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"\n },\n {\n "Effect": "Allow",\n "Action": "iot:Receive",\n "Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"\n }\n ]\n}\n'})}),"\n",(0,n.jsxs)(i.p,{children:["Altere o ",(0,n.jsx)(i.code,{children:"<account-id>"})," para o n\xfamero da sua conta, dispon\xedvel no menu do canto superior direito."]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"Account ID",src:o(74868).c+"",width:"317",height:"423"})}),"\n",(0,n.jsxs)(i.ol,{start:"5",children:["\n",(0,n.jsx)(i.li,{children:"Por fim, baixe os arquivos de certificados e chaves que a AWS criou automaticamente para autenticar esse dispositivo. Este \xe9 o \xfanico momento que voc\xea conseguir\xe1 baixar as chaves para esse certificado, ent\xe3o guarde-as com carinho para utiliz\xe1-los no pr\xf3ximo passo."}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"parte-2---conectando-a-franzininho-com-esp-idf",children:"Parte 2 - Conectando a Franzininho com ESP-IDF"}),"\n",(0,n.jsx)(i.p,{children:"Agora que temos nosso dispositivo configurado, precisamos escrever o firmware para conect\xe1-lo. A pr\xf3pria Espressif disponibiliza um SDK para comunica\xe7\xe3o com AWS IoT baseada no FreeRTOS. Para utilizar, basta clonar o reposit\xf3rio, preferencialmente direto na pasta de componentes do seu diret\xf3rio de instala\xe7\xe3o."}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:"git clone https://github.com/espressif/esp-aws-iot <esp-dir-path>/esp-idf/components\n"})}),"\n",(0,n.jsxs)(i.p,{children:["Dentro desse componente, j\xe1 s\xe3o disponibilizados alguns exemplos para utilizar com a AWS. Vamos come\xe7ar utilizando o exemplo b\xe1sico de MQTT em ",(0,n.jsx)(i.code,{children:"examples/mqtt/tls_mutual_auth"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["Para configurar, utilizaremos o ",(0,n.jsx)(i.em,{children:"menuconfig"}),":"]}),"\n",(0,n.jsxs)(i.ol,{children:["\n",(0,n.jsxs)(i.li,{children:["Nas configura\xe7\xf5es do exemplo (",(0,n.jsx)(i.em,{children:"Example Configuration"}),"), insira o nome do dispositivo exatamente como foi criado na AWS (Franz, no meu caso) e o endpoint do broker MQTT, que est\xe1 dispon\xedvel no menu ",(0,n.jsx)(i.code,{children:"AWS IoT > Settings > Device endpoint"})," na sua conta do AWS. As demais configura\xe7\xf5es podem ser deixadas como padr\xe3o."]}),"\n"]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.img,{alt:"Device Endpoint",src:o(57664).c+"",width:"1136",height:"919"}),"\n",(0,n.jsx)(i.img,{alt:"Menuconfig",src:o(51516).c+"",width:"719",height:"146"})]}),"\n",(0,n.jsxs)(i.ol,{start:"2",children:["\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Nas configura\xe7\xf5es de rede (",(0,n.jsx)(i.em,{children:"Example Connection Configuration"}),"), insira as configura\xe7\xf5es da sua rede Wi-Fi (SSID e senha)"]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["O m\xe9todo padr\xe3o de autentica\xe7\xe3o com a AWS \xe9 utilizando credenciais PKI embarcadas no diret\xf3rio certs/. Lembra dos certificados que foram gerados automaticamente ao criar um dispositivo? \xc9 aqui que voc\xea vai coloc\xe1-los para embarcar no dispositivo. Copie o certificado, a chave ",(0,n.jsx)(i.strong,{children:"privada"})," e um dos certificados de root que voc\xea tinha armazenado anteriormente."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:"cp certificate.pem.crt main/certs/client.crt\ncp private.pem.key main/certs/client.key\ncp AmazonRootCAx.pem main/certs/root_cert_auth.pem\n"})}),"\n",(0,n.jsxs)(i.p,{children:["Com tudo configurado, \xe9 s\xf3 buildar e passar pra placa (siga o tutorial em ",(0,n.jsx)(i.a,{href:"https://docs.franzininho.com.br/docs/franzininho-wifi/exemplos-espidf/primeiros-passos",children:"Primeiros passos"}),"). Este exemplo se conecta ao broker MQTT, se sobrescreve no t\xf3pico ",(0,n.jsx)(i.code,{children:'CLIENT_IDENTIFIER "/example/topic\u201d'})," (Franz/example/topic, por exemplo) e publica mensagens de Hello World."]}),"\n",(0,n.jsx)(i.p,{children:"Sua conex\xe3o foi estabelecida com sucesso caso receba a mensagem a seguir:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:"I (7329) coreMQTT: Connection accepted.\nI (7339) coreMQTT: Received MQTT CONNACK successfully from broker.\nI (7349) coreMQTT: MQTT connection established with the broker.\nI (7349) coreMQTT: MQTT connection successfully established with broker.\n"})}),"\n",(0,n.jsx)(i.h3,{id:"parte-3---monitorando-a-franzininho",children:"Parte 3 - Monitorando a Franzininho"}),"\n",(0,n.jsx)(i.p,{children:"Agora que a Franzininho est\xe1 conectado, podemos monitorar sua atividade pelo console da AWS."}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:["Voc\xea pode ver as mensagens mais recentes em ",(0,n.jsx)(i.code,{children:"Manage > Things > Nome do seu dispositivo > Activity"}),"."]}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"Menu Activity",src:o(6804).c+"",width:"1847",height:"858"})}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:["E voc\xea tamb\xe9m pode interagir atrav\xe9s do MQTT Test Client, por exemplo, publicando no t\xf3pico ",(0,n.jsx)(i.code,{children:'CLIENT_IDENTIFIER "/example/topic\u201d'})," que estamos inscritos."]}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"MQTT Test Client",src:o(24020).c+"",width:"1486",height:"818"})}),"\n",(0,n.jsx)(i.p,{children:"A mensagem recebida pode ser vista na Franzininho:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-bash",children:'I (17668) coreMQTT: Packet received. ReceivedBytes=66.\nI (17668) coreMQTT: De-serialized incoming PUBLISH packet: DeserializerResult=MQTTSuccess.\nI (17668) coreMQTT: State record updated. New state=MQTTPublishDone.\nI (17678) coreMQTT: Incoming QOS : 0.\nI (17678) coreMQTT: Incoming Publish Topic Name: Franz/example/topic matches subscribed topic.\nIncoming Publish message Packet Id is 0.\nIncoming Publish Message : {\n "message": "Hello from AWS IoT console"\n}.\n'})}),"\n",(0,n.jsx)(i.p,{children:"E \xe9 isso, agora voc\xea pode brincar de Internet das Coisas com sua Franzininho WiFi utilizando a AWS!"}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Autora"}),(0,n.jsx)(i.th,{children:(0,n.jsx)(i.a,{href:"https://github.com/carolcabral",children:"Ana Carolina Cabral "})})]})}),(0,n.jsx)(i.tbody,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"Data:"}),(0,n.jsx)(i.td,{children:"07/01/2023"})]})})]})]})}function p(e={}){const{wrapper:i}={...(0,s.MN)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},95788:(e,i,o)=>{o.d(i,{MN:()=>d});var n=o(11504);function s(e,i,o){return i in e?Object.defineProperty(e,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[i]=o,e}function a(e,i){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);i&&(n=n.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var i=1;i<arguments.length;i++){var o=null!=arguments[i]?arguments[i]:{};i%2?a(Object(o),!0).forEach((function(i){s(e,i,o[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):a(Object(o)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(o,i))}))}return e}function c(e,i){if(null==e)return{};var o,n,s=function(e,i){if(null==e)return{};var o,n,s={},a=Object.keys(e);for(n=0;n<a.length;n++)o=a[n],i.indexOf(o)>=0||(s[o]=e[o]);return s}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)o=a[n],i.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(s[o]=e[o])}return s}var t=n.createContext({}),d=function(e){var i=n.useContext(t),o=i;return e&&(o="function"==typeof e?e(i):r(r({},i),e)),o},l={inlineCode:"code",wrapper:function(e){var i=e.children;return n.createElement(n.Fragment,{},i)}},p=n.forwardRef((function(e,i){var o=e.components,s=e.mdxType,a=e.originalType,t=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),m=d(o),h=s,u=m["".concat(t,".").concat(h)]||m[h]||l[h]||a;return o?n.createElement(u,r(r({ref:i},p),{},{components:o})):n.createElement(u,r({ref:i},p))}));p.displayName="MDXCreateElement"},49976:(e,i,o)=>{o.d(i,{c:()=>n});const n=o.p+"assets/images/1-Create-thing-38ca8a9bbe949f6fd7bb29c1746f3175.png"},74868:(e,i,o)=>{o.d(i,{c:()=>n});const n=o.p+"assets/images/2-Account-id-4ac0bcea28543803571a6f1211af4495.png"},57664:(e,i,o)=>{o.d(i,{c:()=>n});const n=o.p+"assets/images/3.1-Device-endpoint-7109151e8d06555b5a4e706dc26d9d2f.png"},51516:(e,i,o)=>{o.d(i,{c:()=>n});const n=o.p+"assets/images/3.2-Menuconfig-49a52cb36a4edc9b1e00093697627052.png"},6804:(e,i,o)=>{o.d(i,{c:()=>n});const n=o.p+"assets/images/4-MenuActivity-37174ab453b4c48389ee792525762a0f.png"},24020:(e,i,o)=>{o.d(i,{c:()=>n});const n=o.p+"assets/images/5-MQTTTestClient-921841744c6883b3a1f1f80db1081d19.png"}}]); \ No newline at end of file diff --git a/en/assets/js/b0d3cd30.56b3a1fd.js b/en/assets/js/b0d3cd30.56b3a1fd.js new file mode 100755 index 000000000..9f70d46e8 --- /dev/null +++ b/en/assets/js/b0d3cd30.56b3a1fd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5632],{73412:(e,i,o)=>{o.r(i),o.d(i,{assets:()=>l,contentTitle:()=>a,default:()=>p,frontMatter:()=>t,metadata:()=>s,toc:()=>c});var n=o(17624),r=o(95788);const t={id:"circuitpython-hello-world",title:"Hello World!",slug:"/franzininho-wifi/exemplos-circuitpython/hello-world",description:"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi",author:"Diana Santos"},a=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world",title:"Hello World!",description:"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/hello-world.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/hello-world",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/hello-world.md",tags:[],version:"current",frontMatter:{id:"circuitpython-hello-world",title:"Hello World!",slug:"/franzininho-wifi/exemplos-circuitpython/hello-world",description:"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Instalando as ferramentas",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas"},next:{title:"Serial Console",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console"}},l={},c=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function d(e){const i={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.p,{children:"Nesse primeiro exemplo faremos um blink LED, nosso \u201cHello, World!\u201d com a placa Franzininho WiFi programada em CircuitPython. Assim, aquecemos os motores para explorar diversas aplica\xe7\xf5es com CircuitPython na Franzininho WiFi."}),"\n",(0,n.jsx)(i.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"1 Placa Franzininho Wifi com CircuitPython;"}),"\n",(0,n.jsx)(i.li,{children:"1 Protoboard;"}),"\n",(0,n.jsx)(i.li,{children:"1 LED vermelho 3 mm;"}),"\n",(0,n.jsx)(i.li,{children:"1 resistor 330 \u03a9;"}),"\n",(0,n.jsx)(i.li,{children:"Jumpers."}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,n.jsx)(i.p,{children:"Nosso primeiro circuito \xe9 bem simples. Realize a seguinte montagem:"}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"franzininho-wifi-hello-world",src:o(8688).c+"",width:"1728",height:"702"})}),"\n",(0,n.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,n.jsx)(i.p,{children:"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 no diret\xf3rio CIRCUITPY e salve o arquivo:"}),"\n",(0,n.jsx)(i.p,{children:"Obs. Provavelmente voc\xea encontrar\xe1 outro c\xf3digo no arquivo code.py. Apague-o e insira o c\xf3digo novo."}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-python",children:'""" Hello, World! (Pisca LED)"""\nimport board\nimport time\nfrom digitalio import DigitalInOut, Direction\n\n# Configurando o pino do LED, o led que configurei foi o pino 4 = IO4\nled = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n\n#loop infinito - executando sempre\nwhile True: \n led.value = True\n time.sleep(0.5)\n led.value = False\n time.sleep(0.5)\n'})}),"\n",(0,n.jsx)(i.p,{children:"Finalizando a edi\xe7\xe3o do arquivo, salve-o.\nAp\xf3s salvar o arquivo o LED pisca em intervalos de 0,5 segundos. (Blink LED)"}),"\n",(0,n.jsx)(i.h2,{id:"an\xe1lise-do-c\xf3digo",children:"An\xe1lise do c\xf3digo"}),"\n",(0,n.jsx)(i.p,{children:"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-python",children:"import board\n"})}),"\n",(0,n.jsx)(i.p,{children:"Como precisaremos de intervalos de temporiza\xe7\xe3o importamos o m\xf3dulo sleep:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{children:"import time\n"})}),"\n",(0,n.jsx)(i.p,{children:"O LED foi conectado ao pino 4(IO4) da Franzininho WiFi. Como o LED \xe9 um atuador, preciamos configurar o pino como uma sa\xedda digital. Para isso, precisamos importar os seguintes m\xf3dulos:\nfrom digitalio import DigitalInOut, Direction"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{children:"from digitalio import DigitalInOut, Direction\n"})}),"\n",(0,n.jsx)(i.p,{children:"Com os m\xf3dulos importados podemos acessar as fun\xe7\xf5es de configura\xe7\xe3o do pino digital:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-python",children:"led = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n"})}),"\n",(0,n.jsx)(i.p,{children:"Note que primeiro mapeamos o pino e depois configuramos a dire\xe7\xe3o."}),"\n",(0,n.jsx)(i.p,{children:"Para que o LED fique piscando infinitamente em intervalos de 500 ms, fazemos um loop infinito com o la\xe7o while. O valor do LED \xe9 invertido a cada 0,5 s loop:"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-python",children:"while True: \n led.value = True\n time.sleep(0.5)\n led.value = False\n time.sleep(0.5)\n"})}),"\n",(0,n.jsx)(i.admonition,{title:"Sugest\xe3o",type:"tip",children:(0,n.jsx)(i.p,{children:"Altere o tempo de intervalo para 0.1 e 1 e observe o efeito."})}),"\n",(0,n.jsx)(i.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,n.jsx)(i.p,{children:"Neste primeiro exemplo de programa\xe7\xe3o da Franzininho WiFi com o CircuitPython fizemos um c\xf3digo simples em Python para piscar o LED em intervalos de 0,5 segundos. Esse exemplo serviu para nos ensinar como importar as bibliotecas, configurar o pino como sa\xedda digital e criar um loop infinito para piscar o LED. Voc\xea pode alterar o intervalo de tempo alterando o par\xe2metro na fun\xe7\xe3o sleep."}),"\n",(0,n.jsx)(i.p,{children:"Com esse exemplo dominado, podemos passar para a pr\xf3xima etapa."}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Autor"}),(0,n.jsx)(i.th,{children:"Diana Santos"})]})}),(0,n.jsxs)(i.tbody,{children:[(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"Autor"}),(0,n.jsx)(i.td,{children:(0,n.jsx)(i.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"Data:"}),(0,n.jsx)(i.td,{children:"16/09/2021"})]})]})]})]})}function p(e={}){const{wrapper:i}={...(0,r.MN)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},95788:(e,i,o)=>{o.d(i,{MN:()=>c});var n=o(11504);function r(e,i,o){return i in e?Object.defineProperty(e,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[i]=o,e}function t(e,i){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);i&&(n=n.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),o.push.apply(o,n)}return o}function a(e){for(var i=1;i<arguments.length;i++){var o=null!=arguments[i]?arguments[i]:{};i%2?t(Object(o),!0).forEach((function(i){r(e,i,o[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):t(Object(o)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(o,i))}))}return e}function s(e,i){if(null==e)return{};var o,n,r=function(e,i){if(null==e)return{};var o,n,r={},t=Object.keys(e);for(n=0;n<t.length;n++)o=t[n],i.indexOf(o)>=0||(r[o]=e[o]);return r}(e,i);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n<t.length;n++)o=t[n],i.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=n.createContext({}),c=function(e){var i=n.useContext(l),o=i;return e&&(o="function"==typeof e?e(i):a(a({},i),e)),o},d={inlineCode:"code",wrapper:function(e){var i=e.children;return n.createElement(n.Fragment,{},i)}},p=n.forwardRef((function(e,i){var o=e.components,r=e.mdxType,t=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=c(o),u=r,h=m["".concat(l,".").concat(u)]||m[u]||d[u]||t;return o?n.createElement(h,a(a({ref:i},p),{},{components:o})):n.createElement(h,a({ref:i},p))}));p.displayName="MDXCreateElement"},8688:(e,i,o)=>{o.d(i,{c:()=>n});const n=o.p+"assets/images/0x00-Hello_world-6a2d3444f01a16a485a1084d37794f5d.png"}}]); \ No newline at end of file diff --git a/en/assets/js/b0d3cd30.c019a2c7.js b/en/assets/js/b0d3cd30.c019a2c7.js deleted file mode 100755 index 186a6aaae..000000000 --- a/en/assets/js/b0d3cd30.c019a2c7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4669],{3905:(e,o,i)=>{i.d(o,{Zo:()=>c,kt:()=>f});var t=i(7294);function n(e,o,i){return o in e?Object.defineProperty(e,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[o]=i,e}function r(e,o){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),i.push.apply(i,t)}return i}function a(e){for(var o=1;o<arguments.length;o++){var i=null!=arguments[o]?arguments[o]:{};o%2?r(Object(i),!0).forEach((function(o){n(e,o,i[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):r(Object(i)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(i,o))}))}return e}function l(e,o){if(null==e)return{};var i,t,n=function(e,o){if(null==e)return{};var i,t,n={},r=Object.keys(e);for(t=0;t<r.length;t++)i=r[t],o.indexOf(i)>=0||(n[i]=e[i]);return n}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t<r.length;t++)i=r[t],o.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var s=t.createContext({}),p=function(e){var o=t.useContext(s),i=o;return e&&(i="function"==typeof e?e(o):a(a({},o),e)),i},c=function(e){var o=p(e.components);return t.createElement(s.Provider,{value:o},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var o=e.children;return t.createElement(t.Fragment,{},o)}},d=t.forwardRef((function(e,o){var i=e.components,n=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(i),d=n,f=u["".concat(s,".").concat(d)]||u[d]||m[d]||r;return i?t.createElement(f,a(a({ref:o},c),{},{components:i})):t.createElement(f,a({ref:o},c))}));function f(e,o){var i=arguments,n=o&&o.mdxType;if("string"==typeof e||n){var r=i.length,a=new Array(r);a[0]=d;var l={};for(var s in o)hasOwnProperty.call(o,s)&&(l[s]=o[s]);l.originalType=e,l[u]="string"==typeof e?e:n,a[1]=l;for(var p=2;p<r;p++)a[p]=i[p];return t.createElement.apply(null,a)}return t.createElement.apply(null,i)}d.displayName="MDXCreateElement"},7779:(e,o,i)=>{i.r(o),i.d(o,{assets:()=>s,contentTitle:()=>a,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var t=i(3117),n=(i(7294),i(3905));const r={id:"circuitpython-hello-world",title:"Hello World!",slug:"/franzininho-wifi/exemplos-circuitpython/hello-world",description:"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi",author:"Diana Santos"},a=void 0,l={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world",title:"Hello World!",description:"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/hello-world.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/hello-world",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/hello-world.md",tags:[],version:"current",frontMatter:{id:"circuitpython-hello-world",title:"Hello World!",slug:"/franzininho-wifi/exemplos-circuitpython/hello-world",description:"Neste texto vamos fazer nosso Blink - Pisca LED com a Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Instalando as ferramentas",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas"},next:{title:"Serial Console",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console"}},s={},p=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],c={toc:p},u="wrapper";function m(e){let{components:o,...r}=e;return(0,n.kt)(u,(0,t.Z)({},c,r,{components:o,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Nesse primeiro exemplo faremos um blink LED, nosso \u201cHello, World!\u201d com a placa Franzininho WiFi programada em CircuitPython. Assim, aquecemos os motores para explorar diversas aplica\xe7\xf5es com CircuitPython na Franzininho WiFi."),(0,n.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"1 Placa Franzininho Wifi com CircuitPython;"),(0,n.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,n.kt)("li",{parentName:"ul"},"1 LED vermelho 3 mm;"),(0,n.kt)("li",{parentName:"ul"},"1 resistor 330 \u03a9;"),(0,n.kt)("li",{parentName:"ul"},"Jumpers.")),(0,n.kt)("h2",{id:"circuito"},"Circuito"),(0,n.kt)("p",null,"Nosso primeiro circuito \xe9 bem simples. Realize a seguinte montagem:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"franzininho-wifi-hello-world",src:i(6129).Z,width:"1728",height:"702"})),(0,n.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,n.kt)("p",null,"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 no diret\xf3rio CIRCUITPY e salve o arquivo:"),(0,n.kt)("p",null,"Obs. Provavelmente voc\xea encontrar\xe1 outro c\xf3digo no arquivo code.py. Apague-o e insira o c\xf3digo novo."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},'""" Hello, World! (Pisca LED)"""\nimport board\nimport time\nfrom digitalio import DigitalInOut, Direction\n\n# Configurando o pino do LED, o led que configurei foi o pino 4 = IO4\nled = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n\n#loop infinito - executando sempre\nwhile True: \n led.value = True\n time.sleep(0.5)\n led.value = False\n time.sleep(0.5)\n')),(0,n.kt)("p",null,"Finalizando a edi\xe7\xe3o do arquivo, salve-o.\nAp\xf3s salvar o arquivo o LED pisca em intervalos de 0,5 segundos. (Blink LED)"),(0,n.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},"An\xe1lise do c\xf3digo"),(0,n.kt)("p",null,"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,n.kt)("p",null,"Como precisaremos de intervalos de temporiza\xe7\xe3o importamos o m\xf3dulo sleep:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"import time\n")),(0,n.kt)("p",null,"O LED foi conectado ao pino 4(IO4) da Franzininho WiFi. Como o LED \xe9 um atuador, preciamos configurar o pino como uma sa\xedda digital. Para isso, precisamos importar os seguintes m\xf3dulos:\nfrom digitalio import DigitalInOut, Direction"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"from digitalio import DigitalInOut, Direction\n")),(0,n.kt)("p",null,"Com os m\xf3dulos importados podemos acessar as fun\xe7\xf5es de configura\xe7\xe3o do pino digital:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"led = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n")),(0,n.kt)("p",null,"Note que primeiro mapeamos o pino e depois configuramos a dire\xe7\xe3o."),(0,n.kt)("p",null,"Para que o LED fique piscando infinitamente em intervalos de 500 ms, fazemos um loop infinito com o la\xe7o while. O valor do LED \xe9 invertido a cada 0,5 s loop:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-python"},"while True: \n led.value = True\n time.sleep(0.5)\n led.value = False\n time.sleep(0.5)\n")),(0,n.kt)("admonition",{title:"Sugest\xe3o",type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"Altere o tempo de intervalo para 0.1 e 1 e observe o efeito.")),(0,n.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,n.kt)("p",null,"Neste primeiro exemplo de programa\xe7\xe3o da Franzininho WiFi com o CircuitPython fizemos um c\xf3digo simples em Python para piscar o LED em intervalos de 0,5 segundos. Esse exemplo serviu para nos ensinar como importar as bibliotecas, configurar o pino como sa\xedda digital e criar um loop infinito para piscar o LED. Voc\xea pode alterar o intervalo de tempo alterando o par\xe2metro na fun\xe7\xe3o sleep."),(0,n.kt)("p",null,"Com esse exemplo dominado, podemos passar para a pr\xf3xima etapa."),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Autor"),(0,n.kt)("th",{parentName:"tr",align:null},"Diana Santos"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Autor"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Data:"),(0,n.kt)("td",{parentName:"tr",align:null},"16/09/2021")))))}m.isMDXComponent=!0},6129:(e,o,i)=>{i.d(o,{Z:()=>t});const t=i.p+"assets/images/0x00-Hello_world-6a2d3444f01a16a485a1084d37794f5d.png"}}]); \ No newline at end of file diff --git a/en/assets/js/b311b2c7.375b6d77.js b/en/assets/js/b311b2c7.375b6d77.js deleted file mode 100755 index f853c2d63..000000000 --- a/en/assets/js/b311b2c7.375b6d77.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6631],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var d=r.createContext({}),p=function(e){var t=r.useContext(d),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},c=function(e){var t=p(e.components);return r.createElement(d.Provider,{value:t},e.children)},l="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,d=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),l=p(a),u=n,k=l["".concat(d,".").concat(u)]||l[u]||m[u]||o;return a?r.createElement(k,i(i({ref:t},c),{},{components:a})):r.createElement(k,i({ref:t},c))}));function k(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,i=new Array(o);i[0]=u;var s={};for(var d in t)hasOwnProperty.call(t,d)&&(s[d]=t[d]);s.originalType=e,s[l]="string"==typeof e?e:n,i[1]=s;for(var p=2;p<o;p++)i[p]=a[p];return r.createElement.apply(null,i)}return r.createElement.apply(null,a)}u.displayName="MDXCreateElement"},1933:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var r=a(3117),n=(a(7294),a(3905));const o={id:"laboratorio-sistemas-iot",title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",slug:"LaboratorioSistemasIot",description:"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},i=void 0,s={unversionedId:"LaboratorioSistemasIot/laboratorio-sistemas-iot",id:"LaboratorioSistemasIot/laboratorio-sistemas-iot",title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",description:"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT",source:"@site/docs/LaboratorioSistemasIot/laboratorio-sistemas-iot.md",sourceDirName:"LaboratorioSistemasIot",slug:"/LaboratorioSistemasIot/LaboratorioSistemasIot",permalink:"/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/laboratorio-sistemas-iot.md",tags:[],version:"current",frontMatter:{id:"laboratorio-sistemas-iot",title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",slug:"LaboratorioSistemasIot",description:"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},sidebar:"docs",previous:{title:"Badge - Aprenda a soldar",permalink:"/en/docs/badge/badge"},next:{title:"Adaptador Arduino Uno",permalink:"/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno"}},d={},p=[{value:"Perif\xe9ricos dispon\xedveis na placa",id:"perif\xe9ricos-dispon\xedveis-na-placa",level:2},{value:"Ativa\xe7\xe3o dos perif\xe9ricos",id:"ativa\xe7\xe3o-dos-perif\xe9ricos",level:2},{value:"Perif\xe9ricos e pinos de ativa\xe7\xe3o",id:"perif\xe9ricos-e-pinos-de-ativa\xe7\xe3o",level:2}],c={toc:p},l="wrapper";function m(e){let{components:t,...o}=e;return(0,n.kt)(l,(0,r.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"placa Laborat\xf3rio de Sistemas Embarcados e IoT",src:a(6155).Z,width:"1055",height:"812"})),(0,n.kt)("p",null,"A placa ",(0,n.kt)("em",{parentName:"p"},"Laborat\xf3rio de Sistemas Embarcados e IoT"),' \xe9 uma placa de circuito impresso para o ensino de programa\xe7\xe3o em placas microcontroladas. Esta placa cont\xe9m uma s\xe9rie de perif\xe9ricos que permitem a explora\xe7\xe3o de conceitos relacionados ao uso de placas microcontroladas. A conex\xe3o desses perif\xe9ricos j\xe1 est\xe1 de certa forma "embutida" na placa sendo necess\xe1ria apenas a ativa\xe7\xe3o dos componentes atrav\xe9s da conex\xe3o de pinos de ativa\xe7\xe3o associados ao perif\xe9rico.'),(0,n.kt)("p",null,"Esta placa foi desevolvida para ser usada em conjunto com a placa Franzininho Wifi. Sendo assim, foram adicionadas na placa barras de pinos que permitam a conex\xe3o desta placa com facilidade. No entanto, \xe9 poss\xedvel tamb\xe9m utilizar a placa com outras placas microcontroladas, como a placa Arduino Uno atrav\xe9s de um adaptador."),(0,n.kt)("p",null,"Al\xe9m dos perif\xe9ricos padr\xe3o, tamb\xe9m est\xe3o dispon\xedveis na placa conectores extra que permitem a utiliza\xe7\xe3o das portas da Franzininho Wifi para fazer conex\xf5es externas caso os perif\xe9ricos da placa n\xe3o sejam satisfat\xf3rios."),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/laboratorio-SEIoT-Franzininho-Wifi"},"Clique aqui")," para acessar o projeto da placa de circuito impresso no Github."),(0,n.kt)("h2",{id:"perif\xe9ricos-dispon\xedveis-na-placa"},"Perif\xe9ricos dispon\xedveis na placa"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"4 LEDs coloridos difusos"),(0,n.kt)("li",{parentName:"ul"},"4 chaves t\xe1teis 6X6mm"),(0,n.kt)("li",{parentName:"ul"},"1 Teclado Matricial 4X4 (composto de chaves t\xe1teis 6X6mm)"),(0,n.kt)("li",{parentName:"ul"},"1 LED RGB Endere\xe7\xe1vel 5050"),(0,n.kt)("li",{parentName:"ul"},"1 Sensor DHT11"),(0,n.kt)("li",{parentName:"ul"},"1 Display de 7 segmentos c\xe1todo comum"),(0,n.kt)("li",{parentName:"ul"},"1 Sensor LDR de 5mm"),(0,n.kt)("li",{parentName:"ul"},"1 Joystick (tamb\xe9m conhecido como Thumb Joystick)"),(0,n.kt)("li",{parentName:"ul"},"1 LED RGB c\xe1todo comum"),(0,n.kt)("li",{parentName:"ul"},"1 Potenci\xf4metro"),(0,n.kt)("li",{parentName:"ul"},"1 Piezo Buzzer"),(0,n.kt)("li",{parentName:"ul"},"1 Display OLED 128X64 Pixels"),(0,n.kt)("li",{parentName:"ul"},"2 Conectores f\xeamea de 4 pinos para conex\xe3o de sensores externos"),(0,n.kt)("li",{parentName:"ul"},"2 Conectores Grove para conex\xe3o de sensores externos"),(0,n.kt)("li",{parentName:"ul"},"1 Transistor NPN")),(0,n.kt)("h2",{id:"ativa\xe7\xe3o-dos-perif\xe9ricos"},"Ativa\xe7\xe3o dos perif\xe9ricos"),(0,n.kt)("p",null,"Os pinos de ativa\xe7\xe3o dispon\xedveis na placa s\xe3o dois pinos macho localizados nas trilhas entre um pino de um componente e o pino onde este componente se conecta no socket da placa microcontrolada. Para ativar um pino de ativa\xe7\xe3o, basta fazer a liga\xe7\xe3o dos dois pinos macho atrav\xe9s de um conector, o que permite que as conex\xf5es corretas sejam realizadas rapidamente."),(0,n.kt)("p",null,"Estes pinos possuem uma codifica\xe7\xe3o baseada no sistema hexadecimal que se encontra do lado do pino de ativa\xe7\xe3o onde o primeiro algorismo indica a fun\xe7\xe3o do pino, e o segundo indica a numera\xe7\xe3o dele. A lista de pinos e fun\xe7\xf5es pode ser vista na tabela abaixo:"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"center"},"Letra"),(0,n.kt)("th",{parentName:"tr",align:"center"},"Significado"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"0"),(0,n.kt)("td",{parentName:"tr",align:"center"},"GND")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"3"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Alimenta\xe7\xe3o de 3.3V")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"5"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Alimenta\xe7\xe3o de 5V")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"A"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Pinos ligados em portas Anal\xf3gicas")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"B"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Pinos ligados nas mesmas portas que A")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"C"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Especiais")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"D"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Pinos ligados em portas Digitais")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"E"),(0,n.kt)("td",{parentName:"tr",align:"center"},"Pinos ligados nas mesmas portas que D")))),(0,n.kt)("p",null,"Devido \xe0 essa codifica\xe7\xe3o, os pinos de ativa\xe7\xe3o acabaram com numera\xe7\xf5es que n\xe3o possuem rela\xe7\xe3o com os pinos da Franzininho Wifi. Visando sanar eventuais problemas ligados a essa rela\xe7\xe3o, a correpond\xeancia entre os pinos de ativa\xe7\xe3o e os pinos da Franzininho Wifi se encontra impressa na PCB."),(0,n.kt)("p",null,"Al\xe9m disso, tamb\xe9m \xe9 poss\xedvel usar a biblioteca laboratorioFW, que faz o mapeamento dos pinos da placa Franzininho Wifi para os c\xf3digos dos pinos de ativa\xe7\xe3o, facilitando assim ainda mais o uso desta ferramenta."),(0,n.kt)("h2",{id:"perif\xe9ricos-e-pinos-de-ativa\xe7\xe3o"},"Perif\xe9ricos e pinos de ativa\xe7\xe3o"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"lab-numerado",src:a(5822).Z,width:"954",height:"681"})),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"center"},"Periferico"),(0,n.kt)("th",{parentName:"tr",align:"center"},"Pinos de Ativa\xe7\xe3o"),(0,n.kt)("th",{parentName:"tr",align:"center"},"C\xf3digo na imagem"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"LEDs difusos"),(0,n.kt)("td",{parentName:"tr",align:"center"},"A0, A1, A2, A3 (dependendo do LED escolhido)"),(0,n.kt)("td",{parentName:"tr",align:"center"},"1")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Bot\xf5es"),(0,n.kt)("td",{parentName:"tr",align:"center"},"A4 e 31, A5 e 32, A6 e 33, A7 e 34 (dependendo do bot\xe3o escolhido)"),(0,n.kt)("td",{parentName:"tr",align:"center"},"7")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Buzzer"),(0,n.kt)("td",{parentName:"tr",align:"center"},"E2"),(0,n.kt)("td",{parentName:"tr",align:"center"},"6")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"LED RGB"),(0,n.kt)("td",{parentName:"tr",align:"center"},"AC, AB, AA, 00"),(0,n.kt)("td",{parentName:"tr",align:"center"},"12")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Potenci\xf4metro"),(0,n.kt)("td",{parentName:"tr",align:"center"},"B8, 35"),(0,n.kt)("td",{parentName:"tr",align:"center"},"5")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Sensor de luminosidade"),(0,n.kt)("td",{parentName:"tr",align:"center"},"A8, 36"),(0,n.kt)("td",{parentName:"tr",align:"center"},"10")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Sensor de umidade e temperatura DTH11"),(0,n.kt)("td",{parentName:"tr",align:"center"},"A9, 51"),(0,n.kt)("td",{parentName:"tr",align:"center"},"14")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Display de 7 segmentos"),(0,n.kt)("td",{parentName:"tr",align:"center"},"D0, D1, D2, D3, D4, D5, D6, D7, 01"),(0,n.kt)("td",{parentName:"tr",align:"center"},"8")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Transistor NPN"),(0,n.kt)("td",{parentName:"tr",align:"center"},"E9"),(0,n.kt)("td",{parentName:"tr",align:"center"},"9")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Display OLED"),(0,n.kt)("td",{parentName:"tr",align:"center"},"C0, C1, 30"),(0,n.kt)("td",{parentName:"tr",align:"center"},"2")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Teclado Matricial"),(0,n.kt)("td",{parentName:"tr",align:"center"},"DA, DB, DC, DD, E6, E4, E3"),(0,n.kt)("td",{parentName:"tr",align:"center"},"3")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Conex\xe3o para Servo Motor"),(0,n.kt)("td",{parentName:"tr",align:"center"},"B5, 54, 02"),(0,n.kt)("td",{parentName:"tr",align:"center"},"11")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"LED RGB endere\xe7\xe1vel"),(0,n.kt)("td",{parentName:"tr",align:"center"},"D9, 37"),(0,n.kt)("td",{parentName:"tr",align:"center"},"13")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"M\xf3dulo Joystick"),(0,n.kt)("td",{parentName:"tr",align:"center"},"D8, B1, B0, 38"),(0,n.kt)("td",{parentName:"tr",align:"center"},"4")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Conectores f\xeamea de 4 pinos"),(0,n.kt)("td",{parentName:"tr",align:"center"},"(BA, BB, 3A) ou (B3, B2, 54) dependendo do conector escolhido"),(0,n.kt)("td",{parentName:"tr",align:"center"},"17 e 15")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Conectores Grove"),(0,n.kt)("td",{parentName:"tr",align:"center"},"(B7, 39) ou (52, B6) dependendo do conector escolhido"),(0,n.kt)("td",{parentName:"tr",align:"center"},"16 e 18")))),(0,n.kt)("admonition",{title:"Obs.",type:"info"},(0,n.kt)("p",{parentName:"admonition"},"A placa ",(0,n.kt)("em",{parentName:"p"},"Laborat\xf3rio de Sistemas Embarcados e IoT")," foi desenvolvida como o Trabalho de Conclus\xe3o de Curso de ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/LelePG"},"Let\xedcia Pegoraro Garcez"),".")))}m.isMDXComponent=!0},6155:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/3d-lab-9d288bc68d87ae585237ebe566c324ba.png"},5822:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/lab-numerado-19cab7ce05128fcd34f82dd6897dd1ff.png"}}]); \ No newline at end of file diff --git a/en/assets/js/b311b2c7.b4715336.js b/en/assets/js/b311b2c7.b4715336.js new file mode 100755 index 000000000..26722c95d --- /dev/null +++ b/en/assets/js/b311b2c7.b4715336.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3183],{70512:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>x,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var s=i(17624),n=i(95788);const r={id:"laboratorio-sistemas-iot",title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",slug:"LaboratorioSistemasIot",description:"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},o=void 0,a={id:"LaboratorioSistemasIot/laboratorio-sistemas-iot",title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",description:"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT",source:"@site/docs/LaboratorioSistemasIot/laboratorio-sistemas-iot.md",sourceDirName:"LaboratorioSistemasIot",slug:"/LaboratorioSistemasIot/LaboratorioSistemasIot",permalink:"/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/laboratorio-sistemas-iot.md",tags:[],version:"current",frontMatter:{id:"laboratorio-sistemas-iot",title:"Placa Laborat\xf3rio de Sistemas Embarcados e IoT",slug:"LaboratorioSistemasIot",description:"O que \xe9 a placa Laborat\xf3rio de Sistemas Embarcados e IoT"},sidebar:"docs",previous:{title:"Badge - Aprenda a soldar",permalink:"/en/docs/badge/badge"},next:{title:"Adaptador Arduino Uno",permalink:"/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno"}},l={},c=[{value:"Perif\xe9ricos dispon\xedveis na placa",id:"perif\xe9ricos-dispon\xedveis-na-placa",level:2},{value:"Ativa\xe7\xe3o dos perif\xe9ricos",id:"ativa\xe7\xe3o-dos-perif\xe9ricos",level:2},{value:"Perif\xe9ricos e pinos de ativa\xe7\xe3o",id:"perif\xe9ricos-e-pinos-de-ativa\xe7\xe3o",level:2}];function d(e){const t={a:"a",admonition:"admonition",em:"em",h2:"h2",img:"img",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.MN)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"placa Laborat\xf3rio de Sistemas Embarcados e IoT",src:i(61772).c+"",width:"1055",height:"812"})}),"\n",(0,s.jsxs)(t.p,{children:["A placa ",(0,s.jsx)(t.em,{children:"Laborat\xf3rio de Sistemas Embarcados e IoT"}),' \xe9 uma placa de circuito impresso para o ensino de programa\xe7\xe3o em placas microcontroladas. Esta placa cont\xe9m uma s\xe9rie de perif\xe9ricos que permitem a explora\xe7\xe3o de conceitos relacionados ao uso de placas microcontroladas. A conex\xe3o desses perif\xe9ricos j\xe1 est\xe1 de certa forma "embutida" na placa sendo necess\xe1ria apenas a ativa\xe7\xe3o dos componentes atrav\xe9s da conex\xe3o de pinos de ativa\xe7\xe3o associados ao perif\xe9rico.']}),"\n",(0,s.jsx)(t.p,{children:"Esta placa foi desevolvida para ser usada em conjunto com a placa Franzininho Wifi. Sendo assim, foram adicionadas na placa barras de pinos que permitam a conex\xe3o desta placa com facilidade. No entanto, \xe9 poss\xedvel tamb\xe9m utilizar a placa com outras placas microcontroladas, como a placa Arduino Uno atrav\xe9s de um adaptador."}),"\n",(0,s.jsx)(t.p,{children:"Al\xe9m dos perif\xe9ricos padr\xe3o, tamb\xe9m est\xe3o dispon\xedveis na placa conectores extra que permitem a utiliza\xe7\xe3o das portas da Franzininho Wifi para fazer conex\xf5es externas caso os perif\xe9ricos da placa n\xe3o sejam satisfat\xf3rios."}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://github.com/Franzininho/laboratorio-SEIoT-Franzininho-Wifi",children:"Clique aqui"})," para acessar o projeto da placa de circuito impresso no Github."]}),"\n",(0,s.jsx)(t.h2,{id:"perif\xe9ricos-dispon\xedveis-na-placa",children:"Perif\xe9ricos dispon\xedveis na placa"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"4 LEDs coloridos difusos"}),"\n",(0,s.jsx)(t.li,{children:"4 chaves t\xe1teis 6X6mm"}),"\n",(0,s.jsx)(t.li,{children:"1 Teclado Matricial 4X4 (composto de chaves t\xe1teis 6X6mm)"}),"\n",(0,s.jsx)(t.li,{children:"1 LED RGB Endere\xe7\xe1vel 5050"}),"\n",(0,s.jsx)(t.li,{children:"1 Sensor DHT11"}),"\n",(0,s.jsx)(t.li,{children:"1 Display de 7 segmentos c\xe1todo comum"}),"\n",(0,s.jsx)(t.li,{children:"1 Sensor LDR de 5mm"}),"\n",(0,s.jsx)(t.li,{children:"1 Joystick (tamb\xe9m conhecido como Thumb Joystick)"}),"\n",(0,s.jsx)(t.li,{children:"1 LED RGB c\xe1todo comum"}),"\n",(0,s.jsx)(t.li,{children:"1 Potenci\xf4metro"}),"\n",(0,s.jsx)(t.li,{children:"1 Piezo Buzzer"}),"\n",(0,s.jsx)(t.li,{children:"1 Display OLED 128X64 Pixels"}),"\n",(0,s.jsx)(t.li,{children:"2 Conectores f\xeamea de 4 pinos para conex\xe3o de sensores externos"}),"\n",(0,s.jsx)(t.li,{children:"2 Conectores Grove para conex\xe3o de sensores externos"}),"\n",(0,s.jsx)(t.li,{children:"1 Transistor NPN"}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"ativa\xe7\xe3o-dos-perif\xe9ricos",children:"Ativa\xe7\xe3o dos perif\xe9ricos"}),"\n",(0,s.jsx)(t.p,{children:"Os pinos de ativa\xe7\xe3o dispon\xedveis na placa s\xe3o dois pinos macho localizados nas trilhas entre um pino de um componente e o pino onde este componente se conecta no socket da placa microcontrolada. Para ativar um pino de ativa\xe7\xe3o, basta fazer a liga\xe7\xe3o dos dois pinos macho atrav\xe9s de um conector, o que permite que as conex\xf5es corretas sejam realizadas rapidamente."}),"\n",(0,s.jsx)(t.p,{children:"Estes pinos possuem uma codifica\xe7\xe3o baseada no sistema hexadecimal que se encontra do lado do pino de ativa\xe7\xe3o onde o primeiro algorismo indica a fun\xe7\xe3o do pino, e o segundo indica a numera\xe7\xe3o dele. A lista de pinos e fun\xe7\xf5es pode ser vista na tabela abaixo:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"Letra"}),(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"Significado"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"0"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"GND"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"3"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Alimenta\xe7\xe3o de 3.3V"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"5"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Alimenta\xe7\xe3o de 5V"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"A"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Pinos ligados em portas Anal\xf3gicas"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"B"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Pinos ligados nas mesmas portas que A"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"C"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Especiais"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"D"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Pinos ligados em portas Digitais"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"E"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Pinos ligados nas mesmas portas que D"})]})]})]}),"\n",(0,s.jsx)(t.p,{children:"Devido \xe0 essa codifica\xe7\xe3o, os pinos de ativa\xe7\xe3o acabaram com numera\xe7\xf5es que n\xe3o possuem rela\xe7\xe3o com os pinos da Franzininho Wifi. Visando sanar eventuais problemas ligados a essa rela\xe7\xe3o, a correpond\xeancia entre os pinos de ativa\xe7\xe3o e os pinos da Franzininho Wifi se encontra impressa na PCB."}),"\n",(0,s.jsx)(t.p,{children:"Al\xe9m disso, tamb\xe9m \xe9 poss\xedvel usar a biblioteca laboratorioFW, que faz o mapeamento dos pinos da placa Franzininho Wifi para os c\xf3digos dos pinos de ativa\xe7\xe3o, facilitando assim ainda mais o uso desta ferramenta."}),"\n",(0,s.jsx)(t.h2,{id:"perif\xe9ricos-e-pinos-de-ativa\xe7\xe3o",children:"Perif\xe9ricos e pinos de ativa\xe7\xe3o"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"lab-numerado",src:i(70812).c+"",width:"954",height:"681"})}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"Periferico"}),(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"Pinos de Ativa\xe7\xe3o"}),(0,s.jsx)(t.th,{style:{textAlign:"center"},children:"C\xf3digo na imagem"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"LEDs difusos"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"A0, A1, A2, A3 (dependendo do LED escolhido)"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"1"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Bot\xf5es"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"A4 e 31, A5 e 32, A6 e 33, A7 e 34 (dependendo do bot\xe3o escolhido)"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"7"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Buzzer"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"E2"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"6"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"LED RGB"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"AC, AB, AA, 00"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"12"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Potenci\xf4metro"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"B8, 35"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"5"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Sensor de luminosidade"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"A8, 36"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"10"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Sensor de umidade e temperatura DTH11"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"A9, 51"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"14"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Display de 7 segmentos"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"D0, D1, D2, D3, D4, D5, D6, D7, 01"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"8"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Transistor NPN"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"E9"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"9"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Display OLED"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"C0, C1, 30"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"2"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Teclado Matricial"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"DA, DB, DC, DD, E6, E4, E3"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"3"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Conex\xe3o para Servo Motor"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"B5, 54, 02"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"11"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"LED RGB endere\xe7\xe1vel"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"D9, 37"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"13"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"M\xf3dulo Joystick"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"D8, B1, B0, 38"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"4"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Conectores f\xeamea de 4 pinos"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"(BA, BB, 3A) ou (B3, B2, 54) dependendo do conector escolhido"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"17 e 15"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"Conectores Grove"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"(B7, 39) ou (52, B6) dependendo do conector escolhido"}),(0,s.jsx)(t.td,{style:{textAlign:"center"},children:"16 e 18"})]})]})]}),"\n",(0,s.jsx)(t.admonition,{title:"Obs.",type:"info",children:(0,s.jsxs)(t.p,{children:["A placa ",(0,s.jsx)(t.em,{children:"Laborat\xf3rio de Sistemas Embarcados e IoT"})," foi desenvolvida como o Trabalho de Conclus\xe3o de Curso de ",(0,s.jsx)(t.a,{href:"https://github.com/LelePG",children:"Let\xedcia Pegoraro Garcez"}),"."]})})]})}function x(e={}){const{wrapper:t}={...(0,n.MN)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},95788:(e,t,i)=>{i.d(t,{MN:()=>c});var s=i(11504);function n(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,s)}return i}function o(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?r(Object(i),!0).forEach((function(t){n(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):r(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function a(e,t){if(null==e)return{};var i,s,n=function(e,t){if(null==e)return{};var i,s,n={},r=Object.keys(e);for(s=0;s<r.length;s++)i=r[s],t.indexOf(i)>=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(s=0;s<r.length;s++)i=r[s],t.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var l=s.createContext({}),c=function(e){var t=s.useContext(l),i=t;return e&&(i="function"==typeof e?e(t):o(o({},t),e)),i},d={inlineCode:"code",wrapper:function(e){var t=e.children;return s.createElement(s.Fragment,{},t)}},x=s.forwardRef((function(e,t){var i=e.components,n=e.mdxType,r=e.originalType,l=e.parentName,x=a(e,["components","mdxType","originalType","parentName"]),h=c(i),p=n,m=h["".concat(l,".").concat(p)]||h[p]||d[p]||r;return i?s.createElement(m,o(o({ref:t},x),{},{components:i})):s.createElement(m,o({ref:t},x))}));x.displayName="MDXCreateElement"},61772:(e,t,i)=>{i.d(t,{c:()=>s});const s=i.p+"assets/images/3d-lab-9d288bc68d87ae585237ebe566c324ba.png"},70812:(e,t,i)=>{i.d(t,{c:()=>s});const s=i.p+"assets/images/lab-numerado-19cab7ce05128fcd34f82dd6897dd1ff.png"}}]); \ No newline at end of file diff --git a/en/assets/js/b55e0f56.03d6b58f.js b/en/assets/js/b55e0f56.03d6b58f.js new file mode 100755 index 000000000..a38f6aa52 --- /dev/null +++ b/en/assets/js/b55e0f56.03d6b58f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[576],{56068:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>t,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var r=n(17624),a=n(95788);const i={id:"hello-world",title:"Hello, World!",slug:"/franzininho-diy/exemplos-avr-libc/hello-world",description:"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},s=void 0,l={id:"FranzininhoDIY/exemplos-avr-libc/hello-world",title:"Hello, World!",description:"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/hello-world.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/hello-world",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/hello-world",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/hello-world.md",tags:[],version:"current",frontMatter:{id:"hello-world",title:"Hello, World!",slug:"/franzininho-diy/exemplos-avr-libc/hello-world",description:"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos"},next:{title:"Sa\xedda Digital",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital"}},t={},c=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Hello, World em linguagem C",id:"hello-world-em-linguagem-c",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o e upload",id:"compila\xe7\xe3o-e-upload",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function d(e){const o={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(o.p,{children:["Nesse exemplo vamos dar os nossos primeiros passos na programa\xe7\xe3o da Franzininho DIY usando a ",(0,r.jsx)(o.a,{href:"https://nongnu.org/avr-libc/",children:"AVR Libc"}),"."]}),"\n",(0,r.jsx)(o.p,{children:'Como de costume o nosso "Hello, World!" na eletr\xf4nica ser\xe1 um blink LED. Ao final desse experimento voc\xea ter\xe1 uma estrutura m\xednima para desenvolver aplica\xe7\xf5es para o ATtiny85 em C.'}),"\n",(0,r.jsx)(o.p,{children:"Bora, colocar em pr\xe1tica!"}),"\n",(0,r.jsx)(o.h2,{id:"recursos-necess\xe1rios",children:"Recursos Necess\xe1rios"}),"\n",(0,r.jsxs)(o.ul,{children:["\n",(0,r.jsx)(o.li,{children:"Placa Franzininho DIY(com Micronucleus)"}),"\n",(0,r.jsx)(o.li,{children:"Computador com as ferramentas de software instaladas(link)"}),"\n"]}),"\n",(0,r.jsx)(o.h2,{id:"hello-world-em-linguagem-c",children:"Hello, World em linguagem C"}),"\n",(0,r.jsx)(o.p,{children:"Esse exemplo b\xe1sico nos dar\xe1 estrutura para todos nossos exemplos daqui pra frente. Como j\xe1 mencionado, vamos usar a linguagem C em conjunto com a biblioteca AVR Libc. Para esse exemplo voc\xea s\xf3 precisar\xe1 da placa Franzininho DIY e as ferramentas de softwares."}),"\n",(0,r.jsx)(o.p,{children:"O c\xf3digo exibe a estrutura m\xednima de um programa em linguagem C para microcontroladores. Se voc\xea tem dificuldades com a linguagem C, recomendo que confira os seguintes materiais:"}),"\n",(0,r.jsxs)(o.ul,{children:["\n",(0,r.jsx)(o.li,{children:(0,r.jsx)(o.a,{href:"https://www.youtube.com/watch?v=l9ZdS8kph0A&list=PLqY1DITQ0sB_5yUBqhnm37J5PxsjrVPKT",children:"Playlist Linguagem C"})}),"\n",(0,r.jsx)(o.li,{children:(0,r.jsx)(o.a,{href:"https://www.slideshare.net/FabioSouza9/resumo-linguagem-c-para-microcontroladores-pic-usando-mikroc",children:"Slideshare"})}),"\n"]}),"\n",(0,r.jsx)(o.p,{children:"Nesse momento \xe9 importante que voc\xea se atente a estrutura do c\xf3digo. Vamos usar alguns registradores para acionar o LED, mas n\xe3o ser\xe3o o foco da explica\xe7\xe3o. Confira os coment\xe1rios no c\xf3digo a seguir:"}),"\n",(0,r.jsx)(o.h3,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,r.jsx)(o.pre,{children:(0,r.jsx)(o.code,{className:"language-c",children:"#include <avr/io.h> // Biblioteca para acesso aos registradores do MCU\n#include <util/delay.h> // Biblioteca para fun\xe7\xf5es de delay\n\n#define F_CPU 16500000L // Frequencia de clock que o mcu est\xe1 trabalhando\n\n/**\n Essa \xe9 a fun\xe7\xe3o principal onde \xe9 iniciada aplica\xe7\xe3o\n*/\nint main(void)\n{\n DDRB |= (1 << PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n // O programar ficar\xe1 nesse loop enquanto a placa estiver ligada\n while (1)\n {\n PORTB |= (1 << PB1); // Liga LED\n _delay_ms(500); // Aguarda 500 ms\n\n PORTB &= ~(1 << PB1); // Desliga LED\n _delay_ms(500); // Aguarda 500 ms\n }\n\n return (0); // Necess\xe1rio um retorno (pois a fun\xe7\xe3o retorna int) mesmo que a fun\xe7\xe3o nunca retornar\xe1\n}\n"})}),"\n",(0,r.jsx)(o.h3,{id:"compila\xe7\xe3o-e-upload",children:"Compila\xe7\xe3o e upload"}),"\n",(0,r.jsxs)(o.p,{children:["para compilar o programa, acesse a pasta do exemplo e em seguida o comando ",(0,r.jsx)(o.code,{children:"make"}),":"]}),"\n",(0,r.jsx)(o.pre,{children:(0,r.jsx)(o.code,{children:"exemplos-avr-libc/exemplos/hello$ make\n"})}),"\n",(0,r.jsx)(o.p,{children:"J\xe1 temos o makefile configurado na pasta, assim, ser\xe1 feita a compila\xe7\xe3o e em seguida aparecer\xe1 a mensagem para conectar a placa:"}),"\n",(0,r.jsx)(o.pre,{children:(0,r.jsx)(o.code,{className:"language-shell",children:"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n"})}),"\n",(0,r.jsx)(o.p,{children:"Conecte a placa no PC ou pressione o bot\xe3o de RESET se ela j\xe1 estiver conectada."}),"\n",(0,r.jsx)(o.p,{children:"Ser\xe1 iniciado o upload."}),"\n",(0,r.jsx)(o.h3,{id:"resultados",children:"Resultados"}),"\n",(0,r.jsx)(o.p,{children:"Nesse exemplo o LED ir\xe1 piscar em intervalos de 500 ms (on) e 500 ms (off)."}),"\n",(0,r.jsxs)(o.p,{children:["No pr\xf3ximo exemplo vamos detalhar sobre os registradores de IO. Nesse momento, al\xe9m da estrutura inicial \xe9 importante que voc\xea entenda como usar a fun\xe7\xe3o ",(0,r.jsx)(o.code,{children:"_delay_ms()"}),"."]}),"\n",(0,r.jsx)(o.p,{children:"Essa fun\xe7\xe3o espera o tempo passado em milissegundos."}),"\n",(0,r.jsx)(o.p,{children:"Altere o c\xf3digo para que o led fique 100 ms(on) e 1000 ms (off), veja o efeito."}),"\n",(0,r.jsx)(o.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,r.jsxs)(o.p,{children:["Nesse exemplo tivemos o primeiro contato com a programa\xe7\xe3o em linguagem C para microcontroladores. Notamos que devemos incluir as bibliotecas externas atrav\xe9s do ",(0,r.jsx)(o.code,{children:"#include"})," e que o programa precisa necessariamente ter a fun\xe7\xe3o ",(0,r.jsx)(o.code,{children:"int main(void)"}),"."]}),"\n",(0,r.jsx)(o.p,{children:"Dentro da fun\xe7\xe3o main temos um loop infinito onde os comandos se repetir\xe3o enquanto a placa estiver ligada."}),"\n",(0,r.jsxs)(o.table,{children:[(0,r.jsx)(o.thead,{children:(0,r.jsxs)(o.tr,{children:[(0,r.jsx)(o.th,{children:"Autor"}),(0,r.jsx)(o.th,{children:(0,r.jsx)(o.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]})}),(0,r.jsx)(o.tbody,{children:(0,r.jsxs)(o.tr,{children:[(0,r.jsx)(o.td,{children:"Data:"}),(0,r.jsx)(o.td,{children:"24/04/2021"})]})})]})]})}function m(e={}){const{wrapper:o}={...(0,a.MN)(),...e.components};return o?(0,r.jsx)(o,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},95788:(e,o,n)=>{n.d(o,{MN:()=>c});var r=n(11504);function a(e,o,n){return o in e?Object.defineProperty(e,o,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[o]=n,e}function i(e,o){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);o&&(r=r.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var o=1;o<arguments.length;o++){var n=null!=arguments[o]?arguments[o]:{};o%2?i(Object(n),!0).forEach((function(o){a(e,o,n[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(n,o))}))}return e}function l(e,o){if(null==e)return{};var n,r,a=function(e,o){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],o.indexOf(n)>=0||(a[n]=e[n]);return a}(e,o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],o.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var t=r.createContext({}),c=function(e){var o=r.useContext(t),n=o;return e&&(n="function"==typeof e?e(o):s(s({},o),e)),n},d={inlineCode:"code",wrapper:function(e){var o=e.children;return r.createElement(r.Fragment,{},o)}},m=r.forwardRef((function(e,o){var n=e.components,a=e.mdxType,i=e.originalType,t=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),p=c(n),u=a,h=p["".concat(t,".").concat(u)]||p[u]||d[u]||i;return n?r.createElement(h,s(s({ref:o},m),{},{components:n})):r.createElement(h,s({ref:o},m))}));m.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/b55e0f56.d9a05735.js b/en/assets/js/b55e0f56.d9a05735.js deleted file mode 100755 index 9061d6b88..000000000 --- a/en/assets/js/b55e0f56.d9a05735.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9821],{3905:(e,a,o)=>{o.d(a,{Zo:()=>p,kt:()=>g});var n=o(7294);function r(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function t(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?t(Object(o),!0).forEach((function(a){r(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):t(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function l(e,a){if(null==e)return{};var o,n,r=function(e,a){if(null==e)return{};var o,n,r={},t=Object.keys(e);for(n=0;n<t.length;n++)o=t[n],a.indexOf(o)>=0||(r[o]=e[o]);return r}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n<t.length;n++)o=t[n],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var s=n.createContext({}),m=function(e){var a=n.useContext(s),o=a;return e&&(o="function"==typeof e?e(a):i(i({},a),e)),o},p=function(e){var a=m(e.components);return n.createElement(s.Provider,{value:a},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},d=n.forwardRef((function(e,a){var o=e.components,r=e.mdxType,t=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=m(o),d=r,g=c["".concat(s,".").concat(d)]||c[d]||u[d]||t;return o?n.createElement(g,i(i({ref:a},p),{},{components:o})):n.createElement(g,i({ref:a},p))}));function g(e,a){var o=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var t=o.length,i=new Array(t);i[0]=d;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[c]="string"==typeof e?e:r,i[1]=l;for(var m=2;m<t;m++)i[m]=o[m];return n.createElement.apply(null,i)}return n.createElement.apply(null,o)}d.displayName="MDXCreateElement"},2403:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>t,metadata:()=>l,toc:()=>m});var n=o(3117),r=(o(7294),o(3905));const t={id:"hello-world",title:"Hello, World!",slug:"/franzininho-diy/exemplos-avr-libc/hello-world",description:"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},i=void 0,l={unversionedId:"FranzininhoDIY/exemplos-avr-libc/hello-world",id:"FranzininhoDIY/exemplos-avr-libc/hello-world",title:"Hello, World!",description:"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/hello-world.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/hello-world",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/hello-world",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/hello-world.md",tags:[],version:"current",frontMatter:{id:"hello-world",title:"Hello, World!",slug:"/franzininho-diy/exemplos-avr-libc/hello-world",description:"Nesse primeiros exemplo vamos dar os primeiros passos na programa\xe7\xe3o da Franzininho DIY",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Primeiros Passos",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos"},next:{title:"Sa\xedda Digital",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital"}},s={},m=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Hello, World em linguagem C",id:"hello-world-em-linguagem-c",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o e upload",id:"compila\xe7\xe3o-e-upload",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],p={toc:m},c="wrapper";function u(e){let{components:a,...o}=e;return(0,r.kt)(c,(0,n.Z)({},p,o,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Nesse exemplo vamos dar os nossos primeiros passos na programa\xe7\xe3o da Franzininho DIY usando a ",(0,r.kt)("a",{parentName:"p",href:"https://nongnu.org/avr-libc/"},"AVR Libc"),"."),(0,r.kt)("p",null,'Como de costume o nosso "Hello, World!" na eletr\xf4nica ser\xe1 um blink LED. Ao final desse experimento voc\xea ter\xe1 uma estrutura m\xednima para desenvolver aplica\xe7\xf5es para o ATtiny85 em C.'),(0,r.kt)("p",null,"Bora, colocar em pr\xe1tica!"),(0,r.kt)("h2",{id:"recursos-necess\xe1rios"},"Recursos Necess\xe1rios"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Placa Franzininho DIY(com Micronucleus)"),(0,r.kt)("li",{parentName:"ul"},"Computador com as ferramentas de software instaladas(link)")),(0,r.kt)("h2",{id:"hello-world-em-linguagem-c"},"Hello, World em linguagem C"),(0,r.kt)("p",null,"Esse exemplo b\xe1sico nos dar\xe1 estrutura para todos nossos exemplos daqui pra frente. Como j\xe1 mencionado, vamos usar a linguagem C em conjunto com a biblioteca AVR Libc. Para esse exemplo voc\xea s\xf3 precisar\xe1 da placa Franzininho DIY e as ferramentas de softwares."),(0,r.kt)("p",null,"O c\xf3digo exibe a estrutura m\xednima de um programa em linguagem C para microcontroladores. Se voc\xea tem dificuldades com a linguagem C, recomendo que confira os seguintes materiais:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=l9ZdS8kph0A&list=PLqY1DITQ0sB_5yUBqhnm37J5PxsjrVPKT"},"Playlist Linguagem C")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.slideshare.net/FabioSouza9/resumo-linguagem-c-para-microcontroladores-pic-usando-mikroc"},"Slideshare"))),(0,r.kt)("p",null,"Nesse momento \xe9 importante que voc\xea se atente a estrutura do c\xf3digo. Vamos usar alguns registradores para acionar o LED, mas n\xe3o ser\xe3o o foco da explica\xe7\xe3o. Confira os coment\xe1rios no c\xf3digo a seguir:"),(0,r.kt)("h3",{id:"c\xf3digo"},"C\xf3digo"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-c"},"#include <avr/io.h> // Biblioteca para acesso aos registradores do MCU\n#include <util/delay.h> // Biblioteca para fun\xe7\xf5es de delay\n\n#define F_CPU 16500000L // Frequencia de clock que o mcu est\xe1 trabalhando\n\n/**\n Essa \xe9 a fun\xe7\xe3o principal onde \xe9 iniciada aplica\xe7\xe3o\n*/\nint main(void)\n{\n DDRB |= (1 << PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n // O programar ficar\xe1 nesse loop enquanto a placa estiver ligada\n while (1)\n {\n PORTB |= (1 << PB1); // Liga LED\n _delay_ms(500); // Aguarda 500 ms\n\n PORTB &= ~(1 << PB1); // Desliga LED\n _delay_ms(500); // Aguarda 500 ms\n }\n\n return (0); // Necess\xe1rio um retorno (pois a fun\xe7\xe3o retorna int) mesmo que a fun\xe7\xe3o nunca retornar\xe1\n}\n")),(0,r.kt)("h3",{id:"compila\xe7\xe3o-e-upload"},"Compila\xe7\xe3o e upload"),(0,r.kt)("p",null,"para compilar o programa, acesse a pasta do exemplo e em seguida o comando ",(0,r.kt)("inlineCode",{parentName:"p"},"make"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"exemplos-avr-libc/exemplos/hello$ make\n")),(0,r.kt)("p",null,"J\xe1 temos o makefile configurado na pasta, assim, ser\xe1 feita a compila\xe7\xe3o e em seguida aparecer\xe1 a mensagem para conectar a placa:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n")),(0,r.kt)("p",null,"Conecte a placa no PC ou pressione o bot\xe3o de RESET se ela j\xe1 estiver conectada."),(0,r.kt)("p",null,"Ser\xe1 iniciado o upload."),(0,r.kt)("h3",{id:"resultados"},"Resultados"),(0,r.kt)("p",null,"Nesse exemplo o LED ir\xe1 piscar em intervalos de 500 ms (on) e 500 ms (off)."),(0,r.kt)("p",null,"No pr\xf3ximo exemplo vamos detalhar sobre os registradores de IO. Nesse momento, al\xe9m da estrutura inicial \xe9 importante que voc\xea entenda como usar a fun\xe7\xe3o ",(0,r.kt)("inlineCode",{parentName:"p"},"_delay_ms()"),"."),(0,r.kt)("p",null,"Essa fun\xe7\xe3o espera o tempo passado em milissegundos."),(0,r.kt)("p",null,"Altere o c\xf3digo para que o led fique 100 ms(on) e 1000 ms (off), veja o efeito."),(0,r.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,r.kt)("p",null,"Nesse exemplo tivemos o primeiro contato com a programa\xe7\xe3o em linguagem C para microcontroladores. Notamos que devemos incluir as bibliotecas externas atrav\xe9s do ",(0,r.kt)("inlineCode",{parentName:"p"},"#include")," e que o programa precisa necessariamente ter a fun\xe7\xe3o ",(0,r.kt)("inlineCode",{parentName:"p"},"int main(void)"),"."),(0,r.kt)("p",null,"Dentro da fun\xe7\xe3o main temos um loop infinito onde os comandos se repetir\xe3o enquanto a placa estiver ligada."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Autor"),(0,r.kt)("th",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"th",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data:"),(0,r.kt)("td",{parentName:"tr",align:null},"24/04/2021")))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/b677b176.24100e2e.js b/en/assets/js/b677b176.24100e2e.js new file mode 100755 index 000000000..568802c09 --- /dev/null +++ b/en/assets/js/b677b176.24100e2e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7296],{94024:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>s,toc:()=>l});var i=r(17624),o=r(95788);const t={id:"int-externa",title:"Interrup\xe7\xe3o externa",slug:"/franzininho-diy/exemplos-avr-libc/int-ext",description:"Exemplo para uso da interrup\xe7\xe3o externa",authors:"F\xe1bio Souza",date:"05/02/2023",some_url:"https://github.com/FBSeletronica"},a=void 0,s={id:"FranzininhoDIY/exemplos-avr-libc/int-externa",title:"Interrup\xe7\xe3o externa",description:"Exemplo para uso da interrup\xe7\xe3o externa",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/int-externa.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/int-ext",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/int-ext",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/int-externa.md",tags:[],version:"current",frontMatter:{id:"int-externa",title:"Interrup\xe7\xe3o externa",slug:"/franzininho-diy/exemplos-avr-libc/int-ext",description:"Exemplo para uso da interrup\xe7\xe3o externa",authors:"F\xe1bio Souza",date:"05/02/2023",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Instrumento musical com Buzzer",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/buzzer"},next:{title:"TODO",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/todo"}},c={},l=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Desafio",id:"desafio",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"As interrup\xe7\xf5es externas permitem que o microcontrolador interrompa sua execu\xe7\xe3o de tarefas regulares para executar uma tarefa de prioridade mais alta quando ocorre um evento externo. Isso pode ser \xfatil em aplica\xe7\xf5es que requerem resposta r\xe1pida a eventos externos, como pressionar um bot\xe3o ou receber um sinal de outro dispositivo."}),"\n",(0,i.jsx)(n.p,{children:"A configura\xe7\xe3o de uma interrup\xe7\xe3o externa no ATTINY85 envolve a defini\xe7\xe3o do pino que ser\xe1 usado como fonte de interrup\xe7\xe3o, a configura\xe7\xe3o do n\xedvel l\xf3gico que causar\xe1 a interrup\xe7\xe3o e a defini\xe7\xe3o da rotina de interrup\xe7\xe3o que ser\xe1 executada quando a interrup\xe7\xe3o for acionada."}),"\n",(0,i.jsx)(n.p,{children:"Ao programar a Franzininho DIY (ATTINY85) com a biblioteca avrlibc, voc\xea pode facilmente configurar interrup\xe7\xf5es externas usando fun\xe7\xf5es da biblioteca como sei() e cli(). Al\xe9m disso, a avrlibc oferece muitas outras bibliotecas \xfateis para o ATTINY85, tornando o processo de programa\xe7\xe3o mais f\xe1cil e eficiente."}),"\n",(0,i.jsx)(n.h2,{id:"recursos-necess\xe1rios",children:"Recursos Necess\xe1rios"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Placa Franzininho DIY(com Micronucleus)"}),"\n",(0,i.jsx)(n.li,{children:"Chave Tactil"}),"\n",(0,i.jsx)(n.li,{children:"Jumpers"}),"\n",(0,i.jsx)(n.li,{children:"Computador com as ferramentas de software instaladas"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"circuito",src:r(1293).c+"",width:"750",height:"432"})}),"\n",(0,i.jsx)(n.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-c",children:'/**\n * \n * @file main.c\n * @author F\xe1bio Souza\n * @brief Exemplo para leitura de bot\xe3o e acionamento de LED\n * @version 0.1\n * @date 2021-02-03\n * \n * @copyright Franzininho \n * This example code is in the Public Domain (or CC0 licensed, at your option.)\n * Unless required by applicable law or agreed to in writing, this\n * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied.\n * \n */\n\n#include <avr/io.h>\n#include <avr/interrupt.h>\n\n#define F_CPU 16500000L\n \t\n//Macro auxiliares para manipula\xe7\xe3o de bits \n#define setBit(valor,bit) (valor |= (1<<bit))\n#define clearBit(valor,bit) (valor &= ~(1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n#define testBit(valor,bit) (valor & (1<<bit))\n\n// define o pino que o bot\xe3o est\xe1 conectado\n#define BUTTON_PIN PB2\n// define o pino que o LED est\xe1 conectado\n#define LED_PIN PB1\n\n\nISR (INT0_vect) // Interrupt service routine \n{\n toogleBit(PORTB,LED_PIN);\n}\n\nint main()\n{\n setBit(DDRB,LED_PIN); \t // Configura Pino PB1 como sa\xedda (Pino do LED)\n clearBit(DDRB,BUTTON_PIN); //configura pino PB0 como entrada (pino do Bot\xe3o)\n setBit(PORTB,BUTTON_PIN); //habilita pull up para a entrada PB0 - garante nivel \n // l\xf3gico 1 quando bot\xe3o n\xe3o estiver pressionado\n \n setBit(GIMSK,INT0); // Ativa a interrup\xe7\xe3o externa INT0\n setBit(MCUCR,ISC01); //configura borda de descida\n sei(); // Habilita as interrup\xe7\xf5es globais\n\n while(1)\n {\n\n }\n \n return 0;\n}\n'})}),"\n",(0,i.jsx)(n.h1,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/projects/355838633796327425?view=diagram"}),"\n",(0,i.jsx)(n.h2,{id:"desafio",children:"Desafio"}),"\n",(0,i.jsx)(n.p,{children:"Fa\xe7a com com que o LED ligue ao pressionar o botao e desligue quando soltar. Para isso voc\xea preciar\xe1 configurar a interru\xe7\xe3o na borda de subinda."}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Autor"}),(0,i.jsx)(n.th,{children:(0,i.jsx)(n.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]})}),(0,i.jsx)(n.tbody,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Data:"}),(0,i.jsx)(n.td,{children:"05/02/2023"})]})})]})]})}function u(e={}){const{wrapper:n}={...(0,o.MN)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},95788:(e,n,r)=>{r.d(n,{MN:()=>l});var i=r(11504);function o(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function t(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,i)}return r}function a(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?t(Object(r),!0).forEach((function(n){o(e,n,r[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):t(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))}))}return e}function s(e,n){if(null==e)return{};var r,i,o=function(e,n){if(null==e)return{};var r,i,o={},t=Object.keys(e);for(i=0;i<t.length;i++)r=t[i],n.indexOf(r)>=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(i=0;i<t.length;i++)r=t[i],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=i.createContext({}),l=function(e){var n=i.useContext(c),r=n;return e&&(r="function"==typeof e?e(n):a(a({},n),e)),r},d={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},u=i.forwardRef((function(e,n){var r=e.components,o=e.mdxType,t=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(r),m=o,h=p["".concat(c,".").concat(m)]||p[m]||d[m]||t;return r?i.createElement(h,a(a({ref:n},u),{},{components:r})):i.createElement(h,a({ref:n},u))}));u.displayName="MDXCreateElement"},1293:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/circuito-int-externa-6910e6a2cd69b62f2f1f59385f317e32.png"}}]); \ No newline at end of file diff --git a/en/assets/js/b677b176.fce09528.js b/en/assets/js/b677b176.fce09528.js deleted file mode 100755 index 1b192cbee..000000000 --- a/en/assets/js/b677b176.fce09528.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[367],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>f});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),c=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},u=function(e){var n=c(e.components);return r.createElement(s.Provider,{value:n},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(t),m=o,f=p["".concat(s,".").concat(m)]||p[m]||d[m]||i;return t?r.createElement(f,a(a({ref:n},u),{},{components:t})):r.createElement(f,a({ref:n},u))}));function f(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,a=new Array(i);a[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[p]="string"==typeof e?e:o,a[1]=l;for(var c=2;c<i;c++)a[c]=t[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,t)}m.displayName="MDXCreateElement"},7255:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var r=t(3117),o=(t(7294),t(3905));const i={id:"int-externa",title:"Interrup\xe7\xe3o externa",slug:"/franzininho-diy/exemplos-avr-libc/int-ext",description:"Exemplo para uso da interrup\xe7\xe3o externa",authors:"F\xe1bio Souza",date:"05/02/2023",some_url:"https://github.com/FBSeletronica"},a=void 0,l={unversionedId:"FranzininhoDIY/exemplos-avr-libc/int-externa",id:"FranzininhoDIY/exemplos-avr-libc/int-externa",title:"Interrup\xe7\xe3o externa",description:"Exemplo para uso da interrup\xe7\xe3o externa",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/int-externa.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/int-ext",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/int-ext",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/int-externa.md",tags:[],version:"current",frontMatter:{id:"int-externa",title:"Interrup\xe7\xe3o externa",slug:"/franzininho-diy/exemplos-avr-libc/int-ext",description:"Exemplo para uso da interrup\xe7\xe3o externa",authors:"F\xe1bio Souza",date:"05/02/2023",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Instrumento musical com Buzzer",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/buzzer"},next:{title:"TODO",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/todo"}},s={},c=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Desafio",id:"desafio",level:2}],u={toc:c},p="wrapper";function d(e){let{components:n,...i}=e;return(0,o.kt)(p,(0,r.Z)({},u,i,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"As interrup\xe7\xf5es externas permitem que o microcontrolador interrompa sua execu\xe7\xe3o de tarefas regulares para executar uma tarefa de prioridade mais alta quando ocorre um evento externo. Isso pode ser \xfatil em aplica\xe7\xf5es que requerem resposta r\xe1pida a eventos externos, como pressionar um bot\xe3o ou receber um sinal de outro dispositivo."),(0,o.kt)("p",null,"A configura\xe7\xe3o de uma interrup\xe7\xe3o externa no ATTINY85 envolve a defini\xe7\xe3o do pino que ser\xe1 usado como fonte de interrup\xe7\xe3o, a configura\xe7\xe3o do n\xedvel l\xf3gico que causar\xe1 a interrup\xe7\xe3o e a defini\xe7\xe3o da rotina de interrup\xe7\xe3o que ser\xe1 executada quando a interrup\xe7\xe3o for acionada."),(0,o.kt)("p",null,"Ao programar a Franzininho DIY (ATTINY85) com a biblioteca avrlibc, voc\xea pode facilmente configurar interrup\xe7\xf5es externas usando fun\xe7\xf5es da biblioteca como sei() e cli(). Al\xe9m disso, a avrlibc oferece muitas outras bibliotecas \xfateis para o ATTINY85, tornando o processo de programa\xe7\xe3o mais f\xe1cil e eficiente."),(0,o.kt)("h2",{id:"recursos-necess\xe1rios"},"Recursos Necess\xe1rios"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Placa Franzininho DIY(com Micronucleus)"),(0,o.kt)("li",{parentName:"ul"},"Chave Tactil"),(0,o.kt)("li",{parentName:"ul"},"Jumpers"),(0,o.kt)("li",{parentName:"ul"},"Computador com as ferramentas de software instaladas")),(0,o.kt)("h2",{id:"circuito"},"Circuito"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"circuito",src:t(4089).Z,width:"750",height:"432"})),(0,o.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-c"},'/**\n * \n * @file main.c\n * @author F\xe1bio Souza\n * @brief Exemplo para leitura de bot\xe3o e acionamento de LED\n * @version 0.1\n * @date 2021-02-03\n * \n * @copyright Franzininho \n * This example code is in the Public Domain (or CC0 licensed, at your option.)\n * Unless required by applicable law or agreed to in writing, this\n * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied.\n * \n */\n\n#include <avr/io.h>\n#include <avr/interrupt.h>\n\n#define F_CPU 16500000L\n \n//Macro auxiliares para manipula\xe7\xe3o de bits \n#define setBit(valor,bit) (valor |= (1<<bit))\n#define clearBit(valor,bit) (valor &= ~(1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n#define testBit(valor,bit) (valor & (1<<bit))\n\n// define o pino que o bot\xe3o est\xe1 conectado\n#define BUTTON_PIN PB2\n// define o pino que o LED est\xe1 conectado\n#define LED_PIN PB1\n\n\nISR (INT0_vect) // Interrupt service routine \n{\n toogleBit(PORTB,LED_PIN);\n}\n\nint main()\n{\n setBit(DDRB,LED_PIN); // Configura Pino PB1 como sa\xedda (Pino do LED)\n clearBit(DDRB,BUTTON_PIN); //configura pino PB0 como entrada (pino do Bot\xe3o)\n setBit(PORTB,BUTTON_PIN); //habilita pull up para a entrada PB0 - garante nivel \n // l\xf3gico 1 quando bot\xe3o n\xe3o estiver pressionado\n \n setBit(GIMSK,INT0); // Ativa a interrup\xe7\xe3o externa INT0\n setBit(MCUCR,ISC01); //configura borda de descida\n sei(); // Habilita as interrup\xe7\xf5es globais\n\n while(1)\n {\n\n }\n \n return 0;\n}\n')),(0,o.kt)("h1",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,o.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/projects/355838633796327425?view=diagram"}),(0,o.kt)("h2",{id:"desafio"},"Desafio"),(0,o.kt)("p",null,"Fa\xe7a com com que o LED ligue ao pressionar o botao e desligue quando soltar. Para isso voc\xea preciar\xe1 configurar a interru\xe7\xe3o na borda de subinda."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Autor"),(0,o.kt)("th",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"th",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza")))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Data:"),(0,o.kt)("td",{parentName:"tr",align:null},"05/02/2023")))))}d.isMDXComponent=!0},4089:(e,n,t)=>{t.d(n,{Z:()=>r});const r=t.p+"assets/images/circuito-int-externa-6910e6a2cd69b62f2f1f59385f317e32.png"}}]); \ No newline at end of file diff --git a/assets/js/096bfee4.87a706e1.js b/en/assets/js/bb62ac18.34c905bc.js similarity index 51% rename from assets/js/096bfee4.87a706e1.js rename to en/assets/js/bb62ac18.34c905bc.js index 300ec64ce..531c88f04 100755 --- a/assets/js/096bfee4.87a706e1.js +++ b/en/assets/js/bb62ac18.34c905bc.js @@ -1 +1 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7178],{5010:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/facebook","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4772],{69264:e=>{e.exports=JSON.parse('{"permalink":"/en/blog/tags/hola","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/en/assets/js/bb62ac18.f8e4ee0c.js b/en/assets/js/bb62ac18.f8e4ee0c.js deleted file mode 100755 index d7e34e306..000000000 --- a/en/assets/js/bb62ac18.f8e4ee0c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9702],{1815:e=>{e.exports=JSON.parse('{"permalink":"/en/blog/tags/hola","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/en/assets/js/bb7fee19.02b58abf.js b/en/assets/js/bb7fee19.02b58abf.js new file mode 100755 index 000000000..e72b15801 --- /dev/null +++ b/en/assets/js/bb7fee19.02b58abf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1392],{6567:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>t,metadata:()=>s,toc:()=>c});var o=n(17624),i=n(95788);const t={id:"timer0-int",title:"Timer 0 - Interrup\xe7\xe3o",slug:"/franzininho-diy/exemplos-avr-libc/timer0-int",description:"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},a=void 0,s={id:"FranzininhoDIY/exemplos-avr-libc/timer0-int",title:"Timer 0 - Interrup\xe7\xe3o",description:"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0-int.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/timer0-int",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/timer0-int.md",tags:[],version:"current",frontMatter:{id:"timer0-int",title:"Timer 0 - Interrup\xe7\xe3o",slug:"/franzininho-diy/exemplos-avr-libc/timer0-int",description:"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Timer 0",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0"},next:{title:"Contador de pulsos externos",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/contadores"}},l={},c=[{value:"Interrup\xe7\xe3o do Timer0",id:"interrup\xe7\xe3o-do-timer0",level:2},{value:"Usando o Timer0 como temporizador com sua interrup\xe7\xe3o",id:"usando-o-timer0-como-temporizador-com-sua-interrup\xe7\xe3o",level:2},{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:3},{value:"C\xf3digo exemplo",id:"c\xf3digo-exemplo",level:3},{value:"Simula\xe7\xe3o do exemplo",id:"simula\xe7\xe3o-do-exemplo",level:3}];function d(e){const r={admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.p,{children:"Nesse exemplo vamos entender como usar a interrup\xe7\xe3o do Timer0 para verificar o seu overflow. Dessa forma n\xe3o precisaremos ficar monitorando o flag de overflow no loop principal da aplica\xe7\xe3o."}),"\n",(0,o.jsx)(r.h2,{id:"interrup\xe7\xe3o-do-timer0",children:"Interrup\xe7\xe3o do Timer0"}),"\n",(0,o.jsx)(r.p,{children:"No exemplo anterior configuramos o Timer0 para operar no modo normal. Para monitora a sua contagem monitoramos o flag TOV0 dentro do loop. Como o Timer \xe9 um perif\xe9rico que funciona independente da CPU podemos habilitar a sua contagem e verificar o overflow atrav\xe9s da sua interrup\xe7\xe3o."}),"\n",(0,o.jsxs)(r.p,{children:["Para habilitar a interrup\xe7\xe3o do Timer0 devermos colocar 1 no bit ",(0,o.jsx)(r.strong,{children:"TOIE0"})," no registrador ",(0,o.jsx)(r.strong,{children:"TIMSK"}),":"]}),"\n",(0,o.jsx)(r.p,{children:(0,o.jsx)(r.img,{alt:"TIMSK",src:n(62336).c+"",width:"836",height:"158"})}),"\n",(0,o.jsx)(r.p,{children:"Ap\xf3s isso, para que a interrup\xe7\xe3o realmente ocorra, devemos habilitar a chave global de interrup\xe7\xe3o atrav\xe9s da fun\xe7\xe3o sei();"}),"\n",(0,o.jsx)(r.h2,{id:"usando-o-timer0-como-temporizador-com-sua-interrup\xe7\xe3o",children:"Usando o Timer0 como temporizador com sua interrup\xe7\xe3o"}),"\n",(0,o.jsx)(r.p,{children:"Vamos fazer a mesma aplica\xe7\xe3o do exemplo anterior, que \xe9 inverter o estado lo LED em intervalos de 1 s. A diferen\xe7a aqui \xe9 que vamos monitorar os overflows do timer atrav\xe9s da rotina de interrup\xe7\xe3o."}),"\n",(0,o.jsx)(r.p,{children:"A configura\xe7\xe3o do timer segue a mesma, j\xe1 que queremos gerar um delay de 1 segundo."}),"\n",(0,o.jsx)(r.p,{children:"Assim, precisaremos contar a quantidade de interrup\xe7\xf5es e quando atingir 63, inverteremos o estado do LED."}),"\n",(0,o.jsx)(r.h3,{id:"recursos-necess\xe1rios",children:"Recursos necess\xe1rios"}),"\n",(0,o.jsxs)(r.ul,{children:["\n",(0,o.jsx)(r.li,{children:"Placa Franzininho DIY(com Micronucleus);"}),"\n",(0,o.jsx)(r.li,{children:"LED;"}),"\n",(0,o.jsx)(r.li,{children:"Resistor de 470 Ohm;"}),"\n",(0,o.jsx)(r.li,{children:"Jumpers;"}),"\n",(0,o.jsx)(r.li,{children:"Computador com as ferramentas de software instaladas."}),"\n"]}),"\n",(0,o.jsx)(r.h3,{id:"c\xf3digo-exemplo",children:"C\xf3digo exemplo"}),"\n",(0,o.jsx)(r.pre,{children:(0,o.jsx)(r.code,{className:"language-c",children:'/**\n * \n * @file main.c\n * @author F\xe1bio Souza\n * @brief Exibe como usar a interrup\xe7\xe3o do timer 0 para temporiza\xe7\xe3o\n * @version 0.1\n * @date 2021-02-13\n * \n * @copyright Franzininho \n * This example code is in the Public Domain (or CC0 licensed, at your option.)\n * Unless required by applicable law or agreed to in writing, this\n * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied.\n * \n */\n\n#include <avr/io.h>\n#include <util/delay.h> \n#include <avr/interrupt.h>\n\n#define F_CPU 16500000L\n\n \t\n#define setBit(valor,bit) (valor |= (1<<bit))\n#define clearBit(valor,bit) (valor &= ~(1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n#define testBit(valor,bit) (valor & (1<<bit))\n\nunsigned char tempo = 0; //contador auxiliar\n\n\nISR (TIMER0_OVF_vect) //vetor de interrup\xe7\xe3o para o timer 0\n{\n tempo++; //incrementa contador auxiliar\n if(tempo >=63) //se passaram-se 63 x 15,89 ms = 1 s\n {\n toogleBit(PORTB,PB1); //inverte LED\n tempo = 0; //reinicia contador\n }\n}\n\n/**\n * @brief Fun\xe7\xe3o main\n * \n * @return int \n */\nint main(void) \n{\n \n setBit(DDRB,PB1); \t// Configura Pino PB1 como sa\xedda (Pino do LED)\n\n //configura\xe7\xe3o do timer0 para overflow a aproximadamente 15,89 ms\n //t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms\n TCCR0A=0x00; //Modo Normal\n TCCR0B=0x00;\n TCCR0B |= (1<<CS00)|(1<<CS02); //prescaler de 1024\n TCNT0=0; //inicia timer com 0\n setBit(TIMSK,TOIE0); //habilita interrup\xe7\xe3o do timer0 \n sei(); //habilita interrup\xe7\xe3o global\n \n /**\n * @brief loop infinito\n * \n */\n while (1)\n {\n //n\xe3o faz nada no loop \n } \n return (0); \n}\n'})}),"\n",(0,o.jsx)(r.admonition,{title:"Informa\xe7\xe3o",type:"note",children:(0,o.jsx)(r.p,{children:"Note que no loop principal n\xe3o fizemos nada. Todo o tratamento ficou na interrup\xe7\xe3o do Timer0."})}),"\n",(0,o.jsx)(r.h3,{id:"simula\xe7\xe3o-do-exemplo",children:"Simula\xe7\xe3o do exemplo"}),"\n",(0,o.jsxs)(r.ul,{children:["\n",(0,o.jsx)(r.li,{children:"**Wokwi: **"}),"\n"]}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/306143631949955648?view=diagram"})]})}function m(e={}){const{wrapper:r}={...(0,i.MN)(),...e.components};return r?(0,o.jsx)(r,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},95788:(e,r,n)=>{n.d(r,{MN:()=>c});var o=n(11504);function i(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function t(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?t(Object(n),!0).forEach((function(r){i(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):t(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function s(e,r){if(null==e)return{};var n,o,i=function(e,r){if(null==e)return{};var n,o,i={},t=Object.keys(e);for(o=0;o<t.length;o++)n=t[o],r.indexOf(n)>=0||(i[n]=e[n]);return i}(e,r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(o=0;o<t.length;o++)n=t[o],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=o.createContext({}),c=function(e){var r=o.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):a(a({},r),e)),n},d={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},m=o.forwardRef((function(e,r){var n=e.components,i=e.mdxType,t=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),p=c(n),u=i,h=p["".concat(l,".").concat(u)]||p[u]||d[u]||t;return n?o.createElement(h,a(a({ref:r},m),{},{components:n})):o.createElement(h,a({ref:r},m))}));m.displayName="MDXCreateElement"},62336:(e,r,n)=>{n.d(r,{c:()=>o});const o=n.p+"assets/images/TIMSK-a059550570192a069297e5ea900b71ef.png"}}]); \ No newline at end of file diff --git a/en/assets/js/bb7fee19.93fc6619.js b/en/assets/js/bb7fee19.93fc6619.js deleted file mode 100755 index bfbb13c1a..000000000 --- a/en/assets/js/bb7fee19.93fc6619.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1832],{3905:(e,r,o)=>{o.d(r,{Zo:()=>p,kt:()=>f});var n=o(7294);function t(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}function i(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,n)}return o}function a(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?i(Object(o),!0).forEach((function(r){t(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}function l(e,r){if(null==e)return{};var o,n,t=function(e,r){if(null==e)return{};var o,n,t={},i=Object.keys(e);for(n=0;n<i.length;n++)o=i[n],r.indexOf(o)>=0||(t[o]=e[o]);return t}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)o=i[n],r.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var s=n.createContext({}),m=function(e){var r=n.useContext(s),o=r;return e&&(o="function"==typeof e?e(r):a(a({},r),e)),o},p=function(e){var r=m(e.components);return n.createElement(s.Provider,{value:r},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},d=n.forwardRef((function(e,r){var o=e.components,t=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=m(o),d=t,f=u["".concat(s,".").concat(d)]||u[d]||c[d]||i;return o?n.createElement(f,a(a({ref:r},p),{},{components:o})):n.createElement(f,a({ref:r},p))}));function f(e,r){var o=arguments,t=r&&r.mdxType;if("string"==typeof e||t){var i=o.length,a=new Array(i);a[0]=d;var l={};for(var s in r)hasOwnProperty.call(r,s)&&(l[s]=r[s]);l.originalType=e,l[u]="string"==typeof e?e:t,a[1]=l;for(var m=2;m<i;m++)a[m]=o[m];return n.createElement.apply(null,a)}return n.createElement.apply(null,o)}d.displayName="MDXCreateElement"},3386:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>s,contentTitle:()=>a,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>m});var n=o(3117),t=(o(7294),o(3905));const i={id:"timer0-int",title:"Timer 0 - Interrup\xe7\xe3o",slug:"/franzininho-diy/exemplos-avr-libc/timer0-int",description:"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},a=void 0,l={unversionedId:"FranzininhoDIY/exemplos-avr-libc/timer0-int",id:"FranzininhoDIY/exemplos-avr-libc/timer0-int",title:"Timer 0 - Interrup\xe7\xe3o",description:"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0-int.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/timer0-int",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/timer0-int.md",tags:[],version:"current",frontMatter:{id:"timer0-int",title:"Timer 0 - Interrup\xe7\xe3o",slug:"/franzininho-diy/exemplos-avr-libc/timer0-int",description:"Vamos aprender usar o timer 0 como temporizador e usando sua interrup\xe7\xe3o",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Timer 0",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0"},next:{title:"Contador de pulsos externos",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/contadores"}},s={},m=[{value:"Interrup\xe7\xe3o do Timer0",id:"interrup\xe7\xe3o-do-timer0",level:2},{value:"Usando o Timer0 como temporizador com sua interrup\xe7\xe3o",id:"usando-o-timer0-como-temporizador-com-sua-interrup\xe7\xe3o",level:2},{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:3},{value:"C\xf3digo exemplo",id:"c\xf3digo-exemplo",level:3},{value:"Simula\xe7\xe3o do exemplo",id:"simula\xe7\xe3o-do-exemplo",level:3}],p={toc:m},u="wrapper";function c(e){let{components:r,...i}=e;return(0,t.kt)(u,(0,n.Z)({},p,i,{components:r,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Nesse exemplo vamos entender como usar a interrup\xe7\xe3o do Timer0 para verificar o seu overflow. Dessa forma n\xe3o precisaremos ficar monitorando o flag de overflow no loop principal da aplica\xe7\xe3o."),(0,t.kt)("h2",{id:"interrup\xe7\xe3o-do-timer0"},"Interrup\xe7\xe3o do Timer0"),(0,t.kt)("p",null,"No exemplo anterior configuramos o Timer0 para operar no modo normal. Para monitora a sua contagem monitoramos o flag TOV0 dentro do loop. Como o Timer \xe9 um perif\xe9rico que funciona independente da CPU podemos habilitar a sua contagem e verificar o overflow atrav\xe9s da sua interrup\xe7\xe3o. "),(0,t.kt)("p",null,"Para habilitar a interrup\xe7\xe3o do Timer0 devermos colocar 1 no bit ",(0,t.kt)("strong",{parentName:"p"},"TOIE0")," no registrador ",(0,t.kt)("strong",{parentName:"p"},"TIMSK"),":"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"TIMSK",src:o(1827).Z,width:"836",height:"158"})),(0,t.kt)("p",null,"Ap\xf3s isso, para que a interrup\xe7\xe3o realmente ocorra, devemos habilitar a chave global de interrup\xe7\xe3o atrav\xe9s da fun\xe7\xe3o sei();"),(0,t.kt)("h2",{id:"usando-o-timer0-como-temporizador-com-sua-interrup\xe7\xe3o"},"Usando o Timer0 como temporizador com sua interrup\xe7\xe3o"),(0,t.kt)("p",null,"Vamos fazer a mesma aplica\xe7\xe3o do exemplo anterior, que \xe9 inverter o estado lo LED em intervalos de 1 s. A diferen\xe7a aqui \xe9 que vamos monitorar os overflows do timer atrav\xe9s da rotina de interrup\xe7\xe3o. "),(0,t.kt)("p",null,"A configura\xe7\xe3o do timer segue a mesma, j\xe1 que queremos gerar um delay de 1 segundo. "),(0,t.kt)("p",null,"Assim, precisaremos contar a quantidade de interrup\xe7\xf5es e quando atingir 63, inverteremos o estado do LED."),(0,t.kt)("h3",{id:"recursos-necess\xe1rios"},"Recursos necess\xe1rios"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Placa Franzininho DIY(com Micronucleus);"),(0,t.kt)("li",{parentName:"ul"},"LED;"),(0,t.kt)("li",{parentName:"ul"},"Resistor de 470 Ohm;"),(0,t.kt)("li",{parentName:"ul"},"Jumpers;"),(0,t.kt)("li",{parentName:"ul"},"Computador com as ferramentas de software instaladas.")),(0,t.kt)("h3",{id:"c\xf3digo-exemplo"},"C\xf3digo exemplo"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},'/**\n * \n * @file main.c\n * @author F\xe1bio Souza\n * @brief Exibe como usar a interrup\xe7\xe3o do timer 0 para temporiza\xe7\xe3o\n * @version 0.1\n * @date 2021-02-13\n * \n * @copyright Franzininho \n * This example code is in the Public Domain (or CC0 licensed, at your option.)\n * Unless required by applicable law or agreed to in writing, this\n * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied.\n * \n */\n\n#include <avr/io.h>\n#include <util/delay.h> \n#include <avr/interrupt.h>\n\n#define F_CPU 16500000L\n\n \n#define setBit(valor,bit) (valor |= (1<<bit))\n#define clearBit(valor,bit) (valor &= ~(1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n#define testBit(valor,bit) (valor & (1<<bit))\n\nunsigned char tempo = 0; //contador auxiliar\n\n\nISR (TIMER0_OVF_vect) //vetor de interrup\xe7\xe3o para o timer 0\n{\n tempo++; //incrementa contador auxiliar\n if(tempo >=63) //se passaram-se 63 x 15,89 ms = 1 s\n {\n toogleBit(PORTB,PB1); //inverte LED\n tempo = 0; //reinicia contador\n }\n}\n\n/**\n * @brief Fun\xe7\xe3o main\n * \n * @return int \n */\nint main(void) \n{\n \n setBit(DDRB,PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n //configura\xe7\xe3o do timer0 para overflow a aproximadamente 15,89 ms\n //t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms\n TCCR0A=0x00; //Modo Normal\n TCCR0B=0x00;\n TCCR0B |= (1<<CS00)|(1<<CS02); //prescaler de 1024\n TCNT0=0; //inicia timer com 0\n setBit(TIMSK,TOIE0); //habilita interrup\xe7\xe3o do timer0 \n sei(); //habilita interrup\xe7\xe3o global\n \n /**\n * @brief loop infinito\n * \n */\n while (1)\n {\n //n\xe3o faz nada no loop \n } \n return (0); \n}\n')),(0,t.kt)("admonition",{title:"Informa\xe7\xe3o",type:"note"},(0,t.kt)("p",{parentName:"admonition"},"Note que no loop principal n\xe3o fizemos nada. Todo o tratamento ficou na interrup\xe7\xe3o do Timer0.")),(0,t.kt)("h3",{id:"simula\xe7\xe3o-do-exemplo"},"Simula\xe7\xe3o do exemplo"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Wokwi: "))),(0,t.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/306143631949955648?view=diagram"}))}c.isMDXComponent=!0},1827:(e,r,o)=>{o.d(r,{Z:()=>n});const n=o.p+"assets/images/TIMSK-a059550570192a069297e5ea900b71ef.png"}}]); \ No newline at end of file diff --git a/en/assets/js/bc0ca366.4212a0f5.js b/en/assets/js/bc0ca366.4212a0f5.js deleted file mode 100755 index b381b0b2f..000000000 --- a/en/assets/js/bc0ca366.4212a0f5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4679],{3905:(e,a,r)=>{r.d(a,{Zo:()=>l,kt:()=>f});var n=r(7294);function t(e,a,r){return a in e?Object.defineProperty(e,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[a]=r,e}function o(e,a){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var a=1;a<arguments.length;a++){var r=null!=arguments[a]?arguments[a]:{};a%2?o(Object(r),!0).forEach((function(a){t(e,a,r[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(r,a))}))}return e}function i(e,a){if(null==e)return{};var r,n,t=function(e,a){if(null==e)return{};var r,n,t={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],a.indexOf(r)>=0||(t[r]=e[r]);return t}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],a.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(t[r]=e[r])}return t}var c=n.createContext({}),p=function(e){var a=n.useContext(c),r=a;return e&&(r="function"==typeof e?e(a):s(s({},a),e)),r},l=function(e){var a=p(e.components);return n.createElement(c.Provider,{value:a},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},m=n.forwardRef((function(e,a){var r=e.components,t=e.mdxType,o=e.originalType,c=e.parentName,l=i(e,["components","mdxType","originalType","parentName"]),u=p(r),m=t,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||o;return r?n.createElement(f,s(s({ref:a},l),{},{components:r})):n.createElement(f,s({ref:a},l))}));function f(e,a){var r=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var o=r.length,s=new Array(o);s[0]=m;var i={};for(var c in a)hasOwnProperty.call(a,c)&&(i[c]=a[c]);i.originalType=e,i[u]="string"==typeof e?e:t,s[1]=i;for(var p=2;p<o;p++)s[p]=r[p];return n.createElement.apply(null,s)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},9991:(e,a,r)=>{r.r(a),r.d(a,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=r(3117),t=(r(7294),r(3905));const o={id:"primeiros-passos",title:"Primeiros Passos",slug:"/FranzMakey/primeiros-passos",description:"Primeiros passos com a placa FranzMakey"},s=void 0,i={unversionedId:"FranzMakey/primeiros-passos",id:"FranzMakey/primeiros-passos",title:"Primeiros Passos",description:"Primeiros passos com a placa FranzMakey",source:"@site/docs/FranzMakey/primeiros-passos.md",sourceDirName:"FranzMakey",slug:"/FranzMakey/primeiros-passos",permalink:"/en/docs/FranzMakey/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzMakey/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"primeiros-passos",title:"Primeiros Passos",slug:"/FranzMakey/primeiros-passos",description:"Primeiros passos com a placa FranzMakey"},sidebar:"docs",previous:{title:"Placa FranzMakey",permalink:"/en/docs/FranzMakey/franzmakey"},next:{title:"Placa Franzininho Tiny",permalink:"/en/docs/franzininho-tiny/franzininho-tiny"}},c={},p=[{value:"Teste de funcionamento da placa",id:"teste-de-funcionamento-da-placa",level:2}],l={toc:p},u="wrapper";function d(e){let{components:a,...o}=e;return(0,t.kt)(u,(0,n.Z)({},l,o,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Plaquinha em m\xe3o, agora chegou a hora de conhec\xea-la!"),(0,t.kt)("p",null,"Os pinos do FRANZmakey equivalem as setas do nosso computador, confira na imagem:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzmakey Pinos",src:r(8515).Z,width:"2384",height:"884"})),(0,t.kt)("h2",{id:"teste-de-funcionamento-da-placa"},"Teste de funcionamento da placa"),(0,t.kt)("p",null,"Pegue duas garrinhas de jacar\xe9 e fa\xe7a as seguintes liga\xe7\xf5es:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"GND = Terra"),(0,t.kt)("li",{parentName:"ul"},"Pino 0 = Tecla espa\xe7o")),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzmakey Pinos",src:r(27).Z,width:"1578",height:"1000"})),(0,t.kt)("p",null,"Agora ligue o cabo USB A/B no FranzMakey e a outro conector no USB do computador."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzmakey Pinos",src:r(3425).Z,width:"2520",height:"1245"})),(0,t.kt)("p",null,"*por op\xe7\xe3o voc\xea pode inserir frutas nas pontas das garrinhas para o teste."),(0,t.kt)("p",null,"Agora abra seu navegador e deixe o cursos piscando, conforme a imagem abaixo:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzmakey Pinos",src:r(9920).Z,width:"4257",height:"102"})),(0,t.kt)("p",null,"Fa\xe7a o teste: Segure as duas garrinhas de jacar\xe9, mantenha seu dedo enconstado na parte met\xe1lica da garrinha no GND segurando sempre e a outra garrinha voc\xea deve tocar e tirar, como se voc\xea estivesse dando input do teclado."),(0,t.kt)("p",null,"Se o cursor come\xe7ou a andar na barra do seu navegador, sua placa FranzMakey est\xe1 prontinho!"))}d.isMDXComponent=!0},3425:(e,a,r)=>{r.d(a,{Z:()=>n});const n=r.p+"assets/images/computador-franzmakey-d1756f35220008b39fab12cadf0f7285.png"},9920:(e,a,r)=>{r.d(a,{Z:()=>n});const n=r.p+"assets/images/cursor-67c2d27acc98d2f3404f03e2dd3d829c.gif"},27:(e,a,r)=>{r.d(a,{Z:()=>n});const n=r.p+"assets/images/franzmakey-m\xe3os-4ee757cacfdff3d8fc20e249dfff106a.png"},8515:(e,a,r)=>{r.d(a,{Z:()=>n});const n=r.p+"assets/images/franzmakey-pinos-8f6fd90b39fb1007b76b175a896533a1.png"}}]); \ No newline at end of file diff --git a/en/assets/js/bc0ca366.cac396cd.js b/en/assets/js/bc0ca366.cac396cd.js new file mode 100755 index 000000000..a52b5a141 --- /dev/null +++ b/en/assets/js/bc0ca366.cac396cd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9628],{60108:(e,a,r)=>{r.r(a),r.d(a,{assets:()=>c,contentTitle:()=>t,default:()=>l,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=r(17624),s=r(95788);const o={id:"primeiros-passos",title:"Primeiros Passos",slug:"/FranzMakey/primeiros-passos",description:"Primeiros passos com a placa FranzMakey"},t=void 0,i={id:"FranzMakey/primeiros-passos",title:"Primeiros Passos",description:"Primeiros passos com a placa FranzMakey",source:"@site/docs/FranzMakey/primeiros-passos.md",sourceDirName:"FranzMakey",slug:"/FranzMakey/primeiros-passos",permalink:"/en/docs/FranzMakey/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzMakey/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"primeiros-passos",title:"Primeiros Passos",slug:"/FranzMakey/primeiros-passos",description:"Primeiros passos com a placa FranzMakey"},sidebar:"docs",previous:{title:"Placa FranzMakey",permalink:"/en/docs/FranzMakey/franzmakey"},next:{title:"Placa Franzininho Tiny",permalink:"/en/docs/franzininho-tiny/franzininho-tiny"}},c={},p=[{value:"Teste de funcionamento da placa",id:"teste-de-funcionamento-da-placa",level:2}];function d(e){const a={h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,s.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"Plaquinha em m\xe3o, agora chegou a hora de conhec\xea-la!"}),"\n",(0,n.jsx)(a.p,{children:"Os pinos do FRANZmakey equivalem as setas do nosso computador, confira na imagem:"}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Franzmakey Pinos",src:r(32724).c+"",width:"2384",height:"884"})}),"\n",(0,n.jsx)(a.h2,{id:"teste-de-funcionamento-da-placa",children:"Teste de funcionamento da placa"}),"\n",(0,n.jsx)(a.p,{children:"Pegue duas garrinhas de jacar\xe9 e fa\xe7a as seguintes liga\xe7\xf5es:"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"GND = Terra"}),"\n",(0,n.jsx)(a.li,{children:"Pino 0 = Tecla espa\xe7o"}),"\n"]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Franzmakey Pinos",src:r(76200).c+"",width:"1578",height:"1000"})}),"\n",(0,n.jsx)(a.p,{children:"Agora ligue o cabo USB A/B no FranzMakey e a outro conector no USB do computador."}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Franzmakey Pinos",src:r(37823).c+"",width:"2520",height:"1245"})}),"\n",(0,n.jsx)(a.p,{children:"*por op\xe7\xe3o voc\xea pode inserir frutas nas pontas das garrinhas para o teste."}),"\n",(0,n.jsx)(a.p,{children:"Agora abra seu navegador e deixe o cursos piscando, conforme a imagem abaixo:"}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Franzmakey Pinos",src:r(71192).c+"",width:"4257",height:"102"})}),"\n",(0,n.jsx)(a.p,{children:"Fa\xe7a o teste: Segure as duas garrinhas de jacar\xe9, mantenha seu dedo enconstado na parte met\xe1lica da garrinha no GND segurando sempre e a outra garrinha voc\xea deve tocar e tirar, como se voc\xea estivesse dando input do teclado."}),"\n",(0,n.jsx)(a.p,{children:"Se o cursor come\xe7ou a andar na barra do seu navegador, sua placa FranzMakey est\xe1 prontinho!"})]})}function l(e={}){const{wrapper:a}={...(0,s.MN)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},95788:(e,a,r)=>{r.d(a,{MN:()=>p});var n=r(11504);function s(e,a,r){return a in e?Object.defineProperty(e,a,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[a]=r,e}function o(e,a){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),r.push.apply(r,n)}return r}function t(e){for(var a=1;a<arguments.length;a++){var r=null!=arguments[a]?arguments[a]:{};a%2?o(Object(r),!0).forEach((function(a){s(e,a,r[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(r,a))}))}return e}function i(e,a){if(null==e)return{};var r,n,s=function(e,a){if(null==e)return{};var r,n,s={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],a.indexOf(r)>=0||(s[r]=e[r]);return s}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],a.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}var c=n.createContext({}),p=function(e){var a=n.useContext(c),r=a;return e&&(r="function"==typeof e?e(a):t(t({},a),e)),r},d={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},l=n.forwardRef((function(e,a){var r=e.components,s=e.mdxType,o=e.originalType,c=e.parentName,l=i(e,["components","mdxType","originalType","parentName"]),m=p(r),u=s,f=m["".concat(c,".").concat(u)]||m[u]||d[u]||o;return r?n.createElement(f,t(t({ref:a},l),{},{components:r})):n.createElement(f,t({ref:a},l))}));l.displayName="MDXCreateElement"},37823:(e,a,r)=>{r.d(a,{c:()=>n});const n=r.p+"assets/images/computador-franzmakey-d1756f35220008b39fab12cadf0f7285.png"},71192:(e,a,r)=>{r.d(a,{c:()=>n});const n=r.p+"assets/images/cursor-67c2d27acc98d2f3404f03e2dd3d829c.gif"},76200:(e,a,r)=>{r.d(a,{c:()=>n});const n=r.p+"assets/images/franzmakey-m\xe3os-4ee757cacfdff3d8fc20e249dfff106a.png"},32724:(e,a,r)=>{r.d(a,{c:()=>n});const n=r.p+"assets/images/franzmakey-pinos-8f6fd90b39fb1007b76b175a896533a1.png"}}]); \ No newline at end of file diff --git a/en/assets/js/bc0f2708.1998f002.js b/en/assets/js/bc0f2708.1998f002.js deleted file mode 100755 index c6a87c6d5..000000000 --- a/en/assets/js/bc0f2708.1998f002.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7835],{3905:(r,n,e)=>{e.d(n,{Zo:()=>p,kt:()=>f});var o=e(7294);function t(r,n,e){return n in r?Object.defineProperty(r,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):r[n]=e,r}function a(r,n){var e=Object.keys(r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(r);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable}))),e.push.apply(e,o)}return e}function i(r){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?a(Object(e),!0).forEach((function(n){t(r,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(e)):a(Object(e)).forEach((function(n){Object.defineProperty(r,n,Object.getOwnPropertyDescriptor(e,n))}))}return r}function c(r,n){if(null==r)return{};var e,o,t=function(r,n){if(null==r)return{};var e,o,t={},a=Object.keys(r);for(o=0;o<a.length;o++)e=a[o],n.indexOf(e)>=0||(t[e]=r[e]);return t}(r,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(r);for(o=0;o<a.length;o++)e=a[o],n.indexOf(e)>=0||Object.prototype.propertyIsEnumerable.call(r,e)&&(t[e]=r[e])}return t}var u=o.createContext({}),d=function(r){var n=o.useContext(u),e=n;return r&&(e="function"==typeof r?r(n):i(i({},n),r)),e},p=function(r){var n=d(r.components);return o.createElement(u.Provider,{value:n},r.children)},l="mdxType",s={inlineCode:"code",wrapper:function(r){var n=r.children;return o.createElement(o.Fragment,{},n)}},m=o.forwardRef((function(r,n){var e=r.components,t=r.mdxType,a=r.originalType,u=r.parentName,p=c(r,["components","mdxType","originalType","parentName"]),l=d(e),m=t,f=l["".concat(u,".").concat(m)]||l[m]||s[m]||a;return e?o.createElement(f,i(i({ref:n},p),{},{components:e})):o.createElement(f,i({ref:n},p))}));function f(r,n){var e=arguments,t=n&&n.mdxType;if("string"==typeof r||t){var a=e.length,i=new Array(a);i[0]=m;var c={};for(var u in n)hasOwnProperty.call(n,u)&&(c[u]=n[u]);c.originalType=r,c[l]="string"==typeof r?r:t,i[1]=c;for(var d=2;d<a;d++)i[d]=e[d];return o.createElement.apply(null,i)}return o.createElement.apply(null,e)}m.displayName="MDXCreateElement"},3887:(r,n,e)=>{e.r(n),e.d(n,{assets:()=>u,contentTitle:()=>i,default:()=>s,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var o=e(3117),t=(e(7294),e(3905));const a={id:"tutoriais-introducao",title:"Introdu\xe7\xe3o",slug:"/programacao/tutoriais-introducao",description:"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho"},i=void 0,c={unversionedId:"FranzininhoDIY/exemplos-arduino/tutoriais-introducao",id:"FranzininhoDIY/exemplos-arduino/tutoriais-introducao",title:"Introdu\xe7\xe3o",description:"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho",source:"@site/docs/FranzininhoDIY/exemplos-arduino/introducao.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/programacao/tutoriais-introducao",permalink:"/en/docs/programacao/tutoriais-introducao",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/introducao.md",tags:[],version:"current",frontMatter:{id:"tutoriais-introducao",title:"Introdu\xe7\xe3o",slug:"/programacao/tutoriais-introducao",description:"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho"}},u={},d=[{value:"Configura\xe7\xe3o da Arduino IDE",id:"configura\xe7\xe3o-da-arduino-ide",level:2}],p={toc:d},l="wrapper";function s(r){let{components:n,...e}=r;return(0,t.kt)(l,(0,o.Z)({},p,e,{components:n,mdxType:"MDXLayout"}),(0,t.kt)("h2",{id:"configura\xe7\xe3o-da-arduino-ide"},"Configura\xe7\xe3o da Arduino IDE"),(0,t.kt)("p",null,"Para a correta compila\xe7\xe3o e grava\xe7\xe3o da placa Franzininho DIY na IDE do Arduino, \xe9 necess\xe1rio a correta configura\xe7\xe3o da IDE. "),(0,t.kt)("admonition",{type:"warning"},(0,t.kt)("p",{parentName:"admonition"},"TBD")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/bc0f2708.9f3404b4.js b/en/assets/js/bc0f2708.9f3404b4.js new file mode 100755 index 000000000..16e049ce2 --- /dev/null +++ b/en/assets/js/bc0f2708.9f3404b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[148],{37092:(r,n,o)=>{o.r(n),o.d(n,{assets:()=>u,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var e=o(17624),t=o(95788);const a={id:"tutoriais-introducao",title:"Introdu\xe7\xe3o",slug:"/programacao/tutoriais-introducao",description:"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho"},i=void 0,c={id:"FranzininhoDIY/exemplos-arduino/tutoriais-introducao",title:"Introdu\xe7\xe3o",description:"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho",source:"@site/docs/FranzininhoDIY/exemplos-arduino/introducao.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/programacao/tutoriais-introducao",permalink:"/en/docs/programacao/tutoriais-introducao",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/introducao.md",tags:[],version:"current",frontMatter:{id:"tutoriais-introducao",title:"Introdu\xe7\xe3o",slug:"/programacao/tutoriais-introducao",description:"Introdu\xe7\xe3o a programa\xe7\xe3o Arduino com as placas Franzininho"}},u={},d=[{value:"Configura\xe7\xe3o da Arduino IDE",id:"configura\xe7\xe3o-da-arduino-ide",level:2}];function s(r){const n={admonition:"admonition",h2:"h2",p:"p",...(0,t.MN)(),...r.components};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(n.h2,{id:"configura\xe7\xe3o-da-arduino-ide",children:"Configura\xe7\xe3o da Arduino IDE"}),"\n",(0,e.jsx)(n.p,{children:"Para a correta compila\xe7\xe3o e grava\xe7\xe3o da placa Franzininho DIY na IDE do Arduino, \xe9 necess\xe1rio a correta configura\xe7\xe3o da IDE."}),"\n",(0,e.jsx)(n.admonition,{type:"warning",children:(0,e.jsx)(n.p,{children:"TBD"})})]})}function p(r={}){const{wrapper:n}={...(0,t.MN)(),...r.components};return n?(0,e.jsx)(n,{...r,children:(0,e.jsx)(s,{...r})}):s(r)}},95788:(r,n,o)=>{o.d(n,{MN:()=>d});var e=o(11504);function t(r,n,o){return n in r?Object.defineProperty(r,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[n]=o,r}function a(r,n){var o=Object.keys(r);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(r);n&&(e=e.filter((function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable}))),o.push.apply(o,e)}return o}function i(r){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?a(Object(o),!0).forEach((function(n){t(r,n,o[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):a(Object(o)).forEach((function(n){Object.defineProperty(r,n,Object.getOwnPropertyDescriptor(o,n))}))}return r}function c(r,n){if(null==r)return{};var o,e,t=function(r,n){if(null==r)return{};var o,e,t={},a=Object.keys(r);for(e=0;e<a.length;e++)o=a[e],n.indexOf(o)>=0||(t[o]=r[o]);return t}(r,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(r);for(e=0;e<a.length;e++)o=a[e],n.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(r,o)&&(t[o]=r[o])}return t}var u=e.createContext({}),d=function(r){var n=e.useContext(u),o=n;return r&&(o="function"==typeof r?r(n):i(i({},n),r)),o},s={inlineCode:"code",wrapper:function(r){var n=r.children;return e.createElement(e.Fragment,{},n)}},p=e.forwardRef((function(r,n){var o=r.components,t=r.mdxType,a=r.originalType,u=r.parentName,p=c(r,["components","mdxType","originalType","parentName"]),l=d(o),m=t,f=l["".concat(u,".").concat(m)]||l[m]||s[m]||a;return o?e.createElement(f,i(i({ref:n},p),{},{components:o})):e.createElement(f,i({ref:n},p))}));p.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/bc4100c0.2ead8c49.js b/en/assets/js/bc4100c0.2ead8c49.js deleted file mode 100755 index 62b633124..000000000 --- a/en/assets/js/bc4100c0.2ead8c49.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4447],{6448:e=>{e.exports=JSON.parse('{"permalink":"/en/blog/tags/hello","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/en/assets/js/bc4100c0.de902ad1.js b/en/assets/js/bc4100c0.de902ad1.js new file mode 100755 index 000000000..f9b1a7917 --- /dev/null +++ b/en/assets/js/bc4100c0.de902ad1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9404],{15808:e=>{e.exports=JSON.parse('{"permalink":"/en/blog/tags/hello","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/en/assets/js/bc475886.d5d36a72.js b/en/assets/js/bc475886.d5d36a72.js new file mode 100755 index 000000000..d25285b12 --- /dev/null +++ b/en/assets/js/bc475886.d5d36a72.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6974],{50308:(e,i,a)=>{a.r(i),a.d(i,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var n=a(17624),o=a(95788);const r={id:"primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-diy/exemplos-avr-libc/primeiros-passos",description:"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc"},s=void 0,t={id:"FranzininhoDIY/exemplos-avr-libc/primeiros-passos",title:"Primeiros Passos",description:"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/primeiros-passos.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/primeiros-passos",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-diy/exemplos-avr-libc/primeiros-passos",description:"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc"},sidebar:"docs",previous:{title:"Girassol Automatizado",permalink:"/en/docs/franzininho-diy/girassol-automatizado"},next:{title:"Hello, World!",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/hello-world"}},l={},c=[{value:"Ferramentas necess\xe1rias",id:"ferramentas-necess\xe1rias",level:2},{value:"Instala\xe7\xe3o das ferramentas necess\xe1rias (Linux):",id:"instala\xe7\xe3o-das-ferramentas-necess\xe1rias-linux",level:3},{value:"Compila\xe7\xe3o no Linux",id:"compila\xe7\xe3o-no-linux",level:3},{value:"Arduino IDE",id:"arduino-ide",level:3},{value:"wokwi_logo Wokwi",id:"wokwi_logo-wokwi",level:3},{value:"PICSimLab",id:"picsimlab",level:3},{value:"Reposit\xf3rios e materiais de apoio",id:"reposit\xf3rios-e-materiais-de-apoio",level:2},{value:"Saiba mais",id:"saiba-mais",level:2}];function d(e){const i={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(i.p,{children:["Esse material tem o objetivo de mostrar os primeiros passos para programa\xe7\xe3o de microcontroladores usando linguagem C e com abordagem mais pr\xf3xima ao hardware. Ser\xe3o apresentados uma s\xe9rie de exemplos (com explica\xe7\xe3o detalhadas sobre a Arquitetura do ATtiny85) para programa\xe7\xe3o da Franzininho DIY usando a ",(0,n.jsx)(i.a,{href:"https://nongnu.org/avr-libc/",children:"AVR Libc"}),"."]}),"\n",(0,n.jsxs)(i.p,{children:["\xc9 importante que voc\xea tenha o ",(0,n.jsx)(i.a,{href:"https://github.com/Franzininho/imagens-franzininho/blob/main/franzininho_diy/Pinagem-completa-Franzininho-DIY-V2RV2.png",children:"pinout da Franzininho DIY"})," para fazer as liga\xe7\xf5es conforme orienta\xe7\xf5es nos exemplos."]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"pinout Franzininho DIY",src:a(12296).c+"",width:"1630",height:"1122"})}),"\n",(0,n.jsx)(i.h2,{id:"ferramentas-necess\xe1rias",children:"Ferramentas necess\xe1rias"}),"\n",(0,n.jsx)(i.p,{children:"Voc\xea n\xe3o precisar\xe1 de um compilador espec\xedfico ou IDE para compilar os exemplos apresentados. Por\xe9m \xe9 importante que tenha as seguintes ferramentas instaladas na sua m\xe1quina:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"GCC AVR"}),"\n",(0,n.jsx)(i.li,{children:"avr libc"}),"\n",(0,n.jsx)(i.li,{children:"binutils-avr"}),"\n",(0,n.jsx)(i.li,{children:"make"}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"instala\xe7\xe3o-das-ferramentas-necess\xe1rias-linux",children:"Instala\xe7\xe3o das ferramentas necess\xe1rias (Linux):"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-shell",children:"sudo apt install gcc-avr\nsudo apt install avr-libc\nsudo apt install binutils-avr\nsudo apt install make\n"})}),"\n",(0,n.jsx)(i.p,{children:"A placa Franzininho deve estar com o bootloader Micronucleus( bootloader oficial para a Franzininho DIY)."}),"\n",(0,n.jsx)(i.h3,{id:"compila\xe7\xe3o-no-linux",children:"Compila\xe7\xe3o no Linux"}),"\n",(0,n.jsx)(i.pre,{children:(0,n.jsx)(i.code,{className:"language-shell",children:"cd ../exemplos-avr-libc/exemplos/01-hello\nmake all\n"})}),"\n",(0,n.jsx)(i.h3,{id:"arduino-ide",children:"Arduino IDE"}),"\n",(0,n.jsx)(i.p,{children:"Voc\xea tamb\xe9m poder\xe1 reproduzir todos os exemplos apresentados diretamente na IDE Arduino (sem usar o framework Arduino). Isso facilitar\xe1 no processo de instala\xe7\xe3o e configura\xe7\xe3o das ferramentas e tamb\xe9m no upload."}),"\n",(0,n.jsxs)(i.h3,{id:"wokwi_logo-wokwi",children:[(0,n.jsx)(i.img,{alt:"wokwi_logo",src:a(92356).c+"",width:"58",height:"48"})," Wokwi"]}),"\n",(0,n.jsxs)(i.p,{children:["Voc\xea tamb\xe9m pode usar o ",(0,n.jsx)(i.a,{href:"https://wokwi.com/arduino/new?template=franzininho",children:"Simulador Online do Wokwi"})," para reproduzir os projetos apresentados nessa s\xe9rie."]}),"\n",(0,n.jsx)(i.h3,{id:"picsimlab",children:"PICSimLab"}),"\n",(0,n.jsxs)(i.p,{children:["Caso n\xe3o tenha acesso a Internet ou uma boa conex\xe3o, uma outra op\xe7\xe3o dispon\xedvel para reproduzir os exemplos na sua m\xe1quina \xe9 o simulador ",(0,n.jsx)(i.a,{href:"https://github.com/lcgamboa/picsimlab/releases",children:"PICSimLab"})," que possu\xed suporte ao Franzininho DIY."]}),"\n",(0,n.jsx)(i.h2,{id:"reposit\xf3rios-e-materiais-de-apoio",children:"Reposit\xf3rios e materiais de apoio"}),"\n",(0,n.jsxs)(i.p,{children:["Todos os exemplos ser\xe3o hospedados no ",(0,n.jsx)(i.a,{href:"https://github.com/Franzininho/exemplos-avr-libc/",children:"github do projeto Franzininho"}),". \xc9 importante que voc\xea use o datasheet do Attiny85 como material de apoio, assim como a documenta\xe7\xe3o da ",(0,n.jsx)(i.a,{href:"https://nongnu.org/avr-libc/",children:"AVR Libc"})]}),"\n",(0,n.jsx)(i.p,{children:"Aproveite essa jornada."}),"\n",(0,n.jsx)(i.h2,{id:"saiba-mais",children:"Saiba mais"}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.a,{href:"https://www.embarcados.com.br/franzininho/",children:"Franzininho \u2013 Um Arduino para todos"})}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Autor"}),(0,n.jsx)(i.th,{children:(0,n.jsx)(i.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]})}),(0,n.jsx)(i.tbody,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"Data:"}),(0,n.jsx)(i.td,{children:"24/04/2021"})]})})]})]})}function p(e={}){const{wrapper:i}={...(0,o.MN)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},95788:(e,i,a)=>{a.d(i,{MN:()=>c});var n=a(11504);function o(e,i,a){return i in e?Object.defineProperty(e,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[i]=a,e}function r(e,i){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);i&&(n=n.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var i=1;i<arguments.length;i++){var a=null!=arguments[i]?arguments[i]:{};i%2?r(Object(a),!0).forEach((function(i){o(e,i,a[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))}))}return e}function t(e,i){if(null==e)return{};var a,n,o=function(e,i){if(null==e)return{};var a,n,o={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],i.indexOf(a)>=0||(o[a]=e[a]);return o}(e,i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],i.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),c=function(e){var i=n.useContext(l),a=i;return e&&(a="function"==typeof e?e(i):s(s({},i),e)),a},d={inlineCode:"code",wrapper:function(e){var i=e.children;return n.createElement(n.Fragment,{},i)}},p=n.forwardRef((function(e,i){var a=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),m=c(a),h=o,u=m["".concat(l,".").concat(h)]||m[h]||d[h]||r;return a?n.createElement(u,s(s({ref:i},p),{},{components:a})):n.createElement(u,s({ref:i},p))}));p.displayName="MDXCreateElement"},12296:(e,i,a)=>{a.d(i,{c:()=>n});const n=a.p+"assets/images/Pinagem-Franzininho-DIY-V2RV2-42a18903012c4dc223f9d4c774730625.png"},92356:(e,i,a)=>{a.d(i,{c:()=>n});const n="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAAAwCAYAAABAIGlOAAAEsmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjU4IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iNDgiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSI1OCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iNDgiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjEtMDct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"}}]); \ No newline at end of file diff --git a/en/assets/js/bc475886.de62e6e8.js b/en/assets/js/bc475886.de62e6e8.js deleted file mode 100755 index 6173e5de8..000000000 --- a/en/assets/js/bc475886.de62e6e8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5534],{3905:(e,a,o)=>{o.d(a,{Zo:()=>m,kt:()=>g});var i=o(7294);function n(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function r(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,i)}return o}function t(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?r(Object(o),!0).forEach((function(a){n(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function s(e,a){if(null==e)return{};var o,i,n=function(e,a){if(null==e)return{};var o,i,n={},r=Object.keys(e);for(i=0;i<r.length;i++)o=r[i],a.indexOf(o)>=0||(n[o]=e[o]);return n}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i<r.length;i++)o=r[i],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var l=i.createContext({}),p=function(e){var a=i.useContext(l),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},m=function(e){var a=p(e.components);return i.createElement(l.Provider,{value:a},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return i.createElement(i.Fragment,{},a)}},u=i.forwardRef((function(e,a){var o=e.components,n=e.mdxType,r=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=p(o),u=n,g=c["".concat(l,".").concat(u)]||c[u]||d[u]||r;return o?i.createElement(g,t(t({ref:a},m),{},{components:o})):i.createElement(g,t({ref:a},m))}));function g(e,a){var o=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var r=o.length,t=new Array(r);t[0]=u;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[c]="string"==typeof e?e:n,t[1]=s;for(var p=2;p<r;p++)t[p]=o[p];return i.createElement.apply(null,t)}return i.createElement.apply(null,o)}u.displayName="MDXCreateElement"},9908:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>l,contentTitle:()=>t,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var i=o(3117),n=(o(7294),o(3905));const r={id:"primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-diy/exemplos-avr-libc/primeiros-passos",description:"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc"},t=void 0,s={unversionedId:"FranzininhoDIY/exemplos-avr-libc/primeiros-passos",id:"FranzininhoDIY/exemplos-avr-libc/primeiros-passos",title:"Primeiros Passos",description:"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/primeiros-passos.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/primeiros-passos",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-diy/exemplos-avr-libc/primeiros-passos",description:"Primeiros passos para programa\xe7\xe3o da Franzininho DIY usando usando a AVR Libc"},sidebar:"docs",previous:{title:"Girassol Automatizado",permalink:"/en/docs/franzininho-diy/girassol-automatizado"},next:{title:"Hello, World!",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/hello-world"}},l={},p=[{value:"Ferramentas necess\xe1rias",id:"ferramentas-necess\xe1rias",level:2},{value:"Instala\xe7\xe3o das ferramentas necess\xe1rias (Linux):",id:"instala\xe7\xe3o-das-ferramentas-necess\xe1rias-linux",level:3},{value:"Compila\xe7\xe3o no Linux",id:"compila\xe7\xe3o-no-linux",level:3},{value:"Arduino IDE",id:"arduino-ide",level:3},{value:"wokwi_logo Wokwi",id:"wokwi_logo-wokwi",level:3},{value:"PICSimLab",id:"picsimlab",level:3},{value:"Reposit\xf3rios e materiais de apoio",id:"reposit\xf3rios-e-materiais-de-apoio",level:2},{value:"Saiba mais",id:"saiba-mais",level:2}],m={toc:p},c="wrapper";function d(e){let{components:a,...r}=e;return(0,n.kt)(c,(0,i.Z)({},m,r,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Esse material tem o objetivo de mostrar os primeiros passos para programa\xe7\xe3o de microcontroladores usando linguagem C e com abordagem mais pr\xf3xima ao hardware. Ser\xe3o apresentados uma s\xe9rie de exemplos (com explica\xe7\xe3o detalhadas sobre a Arquitetura do ATtiny85) para programa\xe7\xe3o da Franzininho DIY usando a ",(0,n.kt)("a",{parentName:"p",href:"https://nongnu.org/avr-libc/"},"AVR Libc"),"."),(0,n.kt)("p",null,"\xc9 importante que voc\xea tenha o ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/imagens-franzininho/blob/main/franzininho_diy/Pinagem-completa-Franzininho-DIY-V2RV2.png"},"pinout da Franzininho DIY")," para fazer as liga\xe7\xf5es conforme orienta\xe7\xf5es nos exemplos."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"pinout Franzininho DIY",src:o(8706).Z,width:"1630",height:"1122"})),(0,n.kt)("h2",{id:"ferramentas-necess\xe1rias"},"Ferramentas necess\xe1rias"),(0,n.kt)("p",null,"Voc\xea n\xe3o precisar\xe1 de um compilador espec\xedfico ou IDE para compilar os exemplos apresentados. Por\xe9m \xe9 importante que tenha as seguintes ferramentas instaladas na sua m\xe1quina:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"GCC AVR"),(0,n.kt)("li",{parentName:"ul"},"avr libc"),(0,n.kt)("li",{parentName:"ul"},"binutils-avr"),(0,n.kt)("li",{parentName:"ul"},"make")),(0,n.kt)("h3",{id:"instala\xe7\xe3o-das-ferramentas-necess\xe1rias-linux"},"Instala\xe7\xe3o das ferramentas necess\xe1rias (Linux):"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"sudo apt install gcc-avr\nsudo apt install avr-libc\nsudo apt install binutils-avr\nsudo apt install make\n")),(0,n.kt)("p",null,"A placa Franzininho deve estar com o bootloader Micronucleus( bootloader oficial para a Franzininho DIY)."),(0,n.kt)("h3",{id:"compila\xe7\xe3o-no-linux"},"Compila\xe7\xe3o no Linux"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"cd ../exemplos-avr-libc/exemplos/01-hello\nmake all\n")),(0,n.kt)("h3",{id:"arduino-ide"},"Arduino IDE"),(0,n.kt)("p",null,"Voc\xea tamb\xe9m poder\xe1 reproduzir todos os exemplos apresentados diretamente na IDE Arduino (sem usar o framework Arduino). Isso facilitar\xe1 no processo de instala\xe7\xe3o e configura\xe7\xe3o das ferramentas e tamb\xe9m no upload."),(0,n.kt)("h3",{id:"wokwi_logo-wokwi"},(0,n.kt)("img",{alt:"wokwi_logo",src:o(2558).Z,width:"58",height:"48"})," Wokwi"),(0,n.kt)("p",null,"Voc\xea tamb\xe9m pode usar o ",(0,n.kt)("a",{parentName:"p",href:"https://wokwi.com/arduino/new?template=franzininho"},"Simulador Online do Wokwi")," para reproduzir os projetos apresentados nessa s\xe9rie."),(0,n.kt)("h3",{id:"picsimlab"},"PICSimLab"),(0,n.kt)("p",null,"Caso n\xe3o tenha acesso a Internet ou uma boa conex\xe3o, uma outra op\xe7\xe3o dispon\xedvel para reproduzir os exemplos na sua m\xe1quina \xe9 o simulador ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/lcgamboa/picsimlab/releases"},"PICSimLab")," que possu\xed suporte ao Franzininho DIY."),(0,n.kt)("h2",{id:"reposit\xf3rios-e-materiais-de-apoio"},"Reposit\xf3rios e materiais de apoio"),(0,n.kt)("p",null,"Todos os exemplos ser\xe3o hospedados no ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/exemplos-avr-libc/"},"github do projeto Franzininho"),". \xc9 importante que voc\xea use o datasheet do Attiny85 como material de apoio, assim como a documenta\xe7\xe3o da ",(0,n.kt)("a",{parentName:"p",href:"https://nongnu.org/avr-libc/"},"AVR Libc")),(0,n.kt)("p",null,"Aproveite essa jornada."),(0,n.kt)("h2",{id:"saiba-mais"},"Saiba mais"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.embarcados.com.br/franzininho/"},"Franzininho \u2013 Um Arduino para todos")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Autor"),(0,n.kt)("th",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"th",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza")))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Data:"),(0,n.kt)("td",{parentName:"tr",align:null},"24/04/2021")))))}d.isMDXComponent=!0},8706:(e,a,o)=>{o.d(a,{Z:()=>i});const i=o.p+"assets/images/Pinagem-Franzininho-DIY-V2RV2-42a18903012c4dc223f9d4c774730625.png"},2558:(e,a,o)=>{o.d(a,{Z:()=>i});const i="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAAAwCAYAAABAIGlOAAAEsmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjU4IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iNDgiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSI1OCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iNDgiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjEtMDct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"}}]); \ No newline at end of file diff --git a/en/assets/js/bdb4d3e5.79af0a42.js b/en/assets/js/bdb4d3e5.79af0a42.js deleted file mode 100755 index a24856409..000000000 --- a/en/assets/js/bdb4d3e5.79af0a42.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1524],{3905:(e,o,a)=>{a.d(o,{Zo:()=>m,kt:()=>g});var n=a(7294);function t(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function r(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?r(Object(a),!0).forEach((function(o){t(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function s(e,o){if(null==e)return{};var a,n,t=function(e,o){if(null==e)return{};var a,n,t={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],o.indexOf(a)>=0||(t[a]=e[a]);return t}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(t[a]=e[a])}return t}var d=n.createContext({}),l=function(e){var o=n.useContext(d),a=o;return e&&(a="function"==typeof e?e(o):i(i({},o),e)),a},m=function(e){var o=l(e.components);return n.createElement(d.Provider,{value:o},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var o=e.children;return n.createElement(n.Fragment,{},o)}},p=n.forwardRef((function(e,o){var a=e.components,t=e.mdxType,r=e.originalType,d=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=l(a),p=t,g=c["".concat(d,".").concat(p)]||c[p]||u[p]||r;return a?n.createElement(g,i(i({ref:o},m),{},{components:a})):n.createElement(g,i({ref:o},m))}));function g(e,o){var a=arguments,t=o&&o.mdxType;if("string"==typeof e||t){var r=a.length,i=new Array(r);i[0]=p;var s={};for(var d in o)hasOwnProperty.call(o,d)&&(s[d]=o[d]);s.originalType=e,s[c]="string"==typeof e?e:t,i[1]=s;for(var l=2;l<r;l++)i[l]=a[l];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}p.displayName="MDXCreateElement"},417:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var n=a(3117),t=(a(7294),a(3905));const r={id:"contadores",title:"Contador de pulsos externos",slug:"/franzininho-diy/exemplos-avr-libc/contadores",description:"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/05/2021",some_url:"https://github.com/EduardoDuenas"},i=void 0,s={unversionedId:"FranzininhoDIY/exemplos-avr-libc/contadores",id:"FranzininhoDIY/exemplos-avr-libc/contadores",title:"Contador de pulsos externos",description:"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/contadores.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/contadores",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/contadores",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/contadores.md",tags:[],version:"current",frontMatter:{id:"contadores",title:"Contador de pulsos externos",slug:"/franzininho-diy/exemplos-avr-libc/contadores",description:"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/05/2021",some_url:"https://github.com/EduardoDuenas"},sidebar:"docs",previous:{title:"Timer 0 - Interrup\xe7\xe3o",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int"},next:{title:"Instrumento musical com Buzzer",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/buzzer"}},d={},l=[{value:"<strong>Recursos necess\xe1rios</strong>",id:"recursos-necess\xe1rios",level:2},{value:"<strong>Contadores</strong>",id:"contadores",level:2},{value:"<strong>Contador_v1</strong>",id:"contador_v1",level:3},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo",level:4},{value:"<strong>Montagem</strong>",id:"montagem",level:4},{value:"<strong>Compila\xe7\xe3o e upload</strong>",id:"compila\xe7\xe3o-e-upload",level:4},{value:"<strong>Resultado</strong>",id:"resultado",level:4},{value:"<strong>An\xe1lise</strong>",id:"an\xe1lise",level:4},{value:"<strong>Contador_v2</strong>",id:"contador_v2",level:3},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo-1",level:4},{value:"<strong>Montagem</strong>",id:"montagem-1",level:4},{value:"<strong>Compila\xe7\xe3o e upload</strong>",id:"compila\xe7\xe3o-e-upload-1",level:4},{value:"<strong>Resultado</strong>",id:"resultado-1",level:4},{value:"<strong>An\xe1lise</strong>",id:"an\xe1lise-1",level:4},{value:"<strong>Contador_v3</strong>",id:"contador_v3",level:3},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo-2",level:4},{value:"<strong>Montagem</strong>",id:"montagem-2",level:4},{value:"<strong>Compila\xe7\xe3o e upload</strong>",id:"compila\xe7\xe3o-e-upload-2",level:4},{value:"<strong>Resultado</strong>",id:"resultado-2",level:4},{value:"<strong>An\xe1lise</strong>",id:"an\xe1lise-2",level:4},{value:"<strong>Conclus\xe3o</strong>",id:"conclus\xe3o",level:2},{value:"Gloss\xe1rio",id:"gloss\xe1rio",level:2}],m={toc:l},c="wrapper";function u(e){let{components:o,...r}=e;return(0,t.kt)(c,(0,n.Z)({},m,r,{components:o,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY. Vamos explorar as formas mais simples e as mais complexas de contar eventos e as vantagens de cada uma. Nesses exemplos vamos aprender a usar o timer e a fazer debounce, necess\xe1rio para lermos apenas eventos v\xe1lidos e n\xe3o ler o mesmo evento mais de uma vez."),(0,t.kt)("p",null,"Boa pr\xe1tica!"),(0,t.kt)("h2",{id:"recursos-necess\xe1rios"},(0,t.kt)("strong",{parentName:"h2"},"Recursos necess\xe1rios")),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Franzininho DIY (com Micronucleos)"),(0,t.kt)("li",{parentName:"ul"},"4 LEDs de 3mm"),(0,t.kt)("li",{parentName:"ul"},"4 resistores de 200\u03a9"),(0,t.kt)("li",{parentName:"ul"},"1 resistor de 10k\u03a9"),(0,t.kt)("li",{parentName:"ul"},"1 chave tactil"),(0,t.kt)("li",{parentName:"ul"},"7 jumpers macho-f\xeamea"),(0,t.kt)("li",{parentName:"ul"},"7 jumpers macho-macho")),(0,t.kt)("h2",{id:"contadores"},(0,t.kt)("strong",{parentName:"h2"},"Contadores")),(0,t.kt)("p",null,"Temos tr\xeas exemplos de contadores da vers\xe3o 1 a 3, e aumentando a complexidade do c\xf3digo e dos recursos utilizados."),(0,t.kt)("h3",{id:"contador_v1"},(0,t.kt)("strong",{parentName:"h3"},"Contador_v1")),(0,t.kt)("p",null,"Nesse exemplo vamos utilizar loops para fazer a verifica\xe7\xe3o de eventos. Essa forma de se fazer a contagem, apesar de ser mais simples de se entender e criar, \xe9 pouco eficiente, tanto a n\xedvel de processamento, quanto ao de energia."),(0,t.kt)("p",null,"O programa \xe9 um c\xf3digo em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca ",(0,t.kt)("inlineCode",{parentName:"p"},"avr/io.h"),". Para melhor entendimento recomendo ler os coment\xe1rios do c\xf3digo e o datasheet do ATtiny85."),(0,t.kt)("h4",{id:"c\xf3digo"},(0,t.kt)("strong",{parentName:"h4"},"C\xf3digo")),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},"/**\n * @file main.c\n * @author Eduardo Due\xf1as\n * @brief Exemplo de contador de eventos\n * @version 1.0\n * @date 06/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 05/05/2021\n */\n#include <avr/io.h>\n\n#define F_CPU 16500000L // Frequ\xeancia de CLK\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\n// Debounce da chave t\xe1ctil para desconsiderarmos ru\xeddo e bouncing do bot\xe3o\nchar debounce(int pino) {\n unsigned int i;\n for (i = 0; i < 20000; i++) { // Testa o pino v\xe1rias vezes para evitar leituras erradas\n if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1\n return 0; // Se sim, retorna falso\n }\n }\n return 1; // Retorna verdadeiro\n}\n\nint main(void) {\n // Configura\xe7\xe3o de PORTB\n clearBit(DDRB, PB0); // Configura PB0 como entrada\n setBit(DDRB, PB1); // Configura PB1 como saida\n setBit(DDRB, PB2); // Configura PB2 como saida\n setBit(DDRB, PB3); // Configura PB3 como saida\n setBit(DDRB, PB4); // Configura PB4 como saida\n\n PORTB &= 0xE1; // Manda 0 para PB[4:1]\n\n unsigned char count = 0;\n\n for (;;) { // loop infinito\n if (testBit(PINB, PB0)) { // Testa se PB0 \xe9 1\n if (debounce(PB0)) { // Verifica se realmente foi um aperto de bot\xe3o\n count++; // Se sim, incrementa o contador\n while (testBit(PINB, PB0)) {} // Espera o bot\xe3o parar de ser pressionado\n }\n }\n count = count % 0x10; // Limpa o overflow do contador\n PORTB = ((PORTB & 0xE1) | (count << 1)); // Manda o contador para PB[4:1]\n }\n}\n")),(0,t.kt)("h4",{id:"montagem"},(0,t.kt)("strong",{parentName:"h4"},"Montagem")),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"circuito contador",src:a(1090).Z,width:"2589",height:"1152"})),(0,t.kt)("p",null,"Como mostrado na imagem, os LEDs s\xe3o ligados nas sa\xeddas PortB","[4:1]"," e o bot\xe3o no PortB","[0]","."),(0,t.kt)("h4",{id:"compila\xe7\xe3o-e-upload"},(0,t.kt)("strong",{parentName:"h4"},"Compila\xe7\xe3o e upload")),(0,t.kt)("p",null,"Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando ",(0,t.kt)("inlineCode",{parentName:"p"},"make"),":"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"exemplos-avr-libc/exemplos/contador$ make\n")),(0,t.kt)("p",null,"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n")),(0,t.kt)("p",null,"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."),(0,t.kt)("h4",{id:"resultado"},(0,t.kt)("strong",{parentName:"h4"},"Resultado")),(0,t.kt)("p",null,"Os LEDs devem mostrar a contagem de apertos do bot\xe3o de forma bin\xe1ria resetando em 0x10 ou quando resetada a placa."),(0,t.kt)("h4",{id:"an\xe1lise"},(0,t.kt)("strong",{parentName:"h4"},"An\xe1lise")),(0,t.kt)("p",null,"Esse c\xf3digo \xe9 de simples compreens\xe3o usando apenas um ",(0,t.kt)("inlineCode",{parentName:"p"},"for")," para checar continuamente se o bot\xe3o foi apertado, chamando uma fun\xe7\xe3o debounce caso a leitura seja 1, incrementando o contador se for confirmado que a leitura \xe9 v\xe1lida, esperando o bot\xe3o ser solto e mandando o valor para as sa\xeddas."),(0,t.kt)("p",null,"De forma geral esse c\xf3digo funciona, mas h\xe1 muito desperd\xedcio de processamento, pois h\xe1 muitos momentos que o processador n\xe3o est\xe1 fazendo nada, apenas esperando algo acontecer ou um certo tempo passar, nesse tempo ele poderia estar fazendo outra tarefas ou ficar em modo econ\xf4mico de energia, que veremos nos pr\xf3ximos exemplos."),(0,t.kt)("h3",{id:"contador_v2"},(0,t.kt)("strong",{parentName:"h3"},"Contador_v2")),(0,t.kt)("p",null,"Nesse exemplo vamos come\xe7ar a usar interrup\xe7\xf5es para ler os pulsos. Vamos ver quais s\xe3o as vantagens desse m\xe9todo e o que pode ser melhorado."),(0,t.kt)("p",null,"O programa \xe9 um c\xf3digo em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca ",(0,t.kt)("inlineCode",{parentName:"p"},"avr/io.h")," e a biblioteca ",(0,t.kt)("inlineCode",{parentName:"p"},"avr/interrupt.h"),". Para melhor entendimento recomendo ler os coment\xe1rios do c\xf3digo e o datasheet do ATtiny85."),(0,t.kt)("h4",{id:"c\xf3digo-1"},(0,t.kt)("strong",{parentName:"h4"},"C\xf3digo")),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},"/**\n * @file main.c\n * @author Eduardo Due\xf1as\n * @brief Exemplo de contador de eventos com tratamento por interrup\xe7\xe3o\n * @version 1.0\n * @date 19/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 05/05/2021\n *\n * O programa \xe9 um desenvolvimento em cima do contador uma com altera\xe7\xf5es na leitura do pulso para leitura por interrup\xe7\xe3o,\n * possibilitando o uso do microcontrolador para outras fun\xe7\xf5es junto do contador\n */\n#include <avr/io.h>\n#include <avr/interrupt.h>\n\n#define F_CPU 16500000L // Frequ\xeancia de CLK\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\nvolatile unsigned char count = 0; // Contador\n\nISR(INT0_vect) {\n cli(); // Desabilita interrup\xe7\xf5es globais durante o tratamento da interrup\xe7\xe3o\n if (debounce(PB2)) { // Se o bot\xe3o foi realmente apertado incrementa cont e manda para os LEDs\n count++; // Incrementa o contador\n count %= 0x10; // Limpa o excesso\n PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]\n PORTB = ((PORTB & 0xFC) | (count & 0x03)); // Manda os dois bits menos significativos de cont para PB[1:0]\n }\n sei(); // Reabilita interrup\xe7\xf5es globais\n}\n\n// Debounce da chave tactil para desconsiderarmos ru\xeddo e bouncing do bot\xe3o\nchar debounce(int pino) {\n unsigned int i;\n\n for (i = 0; i < 20000; i++) { // Testa o pino v\xe1rias vezes para evitar leituras erradas\n if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1\n return 0; // Se sim, retorna falso\n }\n }\n\n return 1; // Retorna verdadeiro\n}\n\nint main(void) {\n // Configura\xe7\xe3o de PORTB\n clearBit(DDRB, PB2); // Configura PB2 como entrada\n setBit(DDRB, PB0); // Configura PB0 como sa\xedda\n setBit(DDRB, PB1); // Configura PB1 como sa\xedda\n setBit(DDRB, PB3); // Configura PB3 como sa\xedda\n setBit(DDRB, PB4); // Configura PB4 como sa\xedda\n\n PORTB &= 0xE4; // Manda 0 para PB[4:3] e PB[1:0]\n\n //Configura\xe7\xe3o de Interrup\xe7\xe3o externa\n GIMSK |= (1 << INT0); // Habilita interrup\xe7\xf5es externas no INT0\n MCUCR |= 0x03; // Seta interrup\xe7\xf5es para borda de subida\n sei(); // Habilita interrup\xe7\xf5es globais\n\n\n for (;;) { // Loop infinito\n // Aqui voc\xea pode colocar outra aplica\xe7\xe3o para rodar simultaneamente ao contador\n }\n}\n")),(0,t.kt)("h4",{id:"montagem-1"},(0,t.kt)("strong",{parentName:"h4"},"Montagem")),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Circuito contador V2",src:a(7891).Z,width:"2589",height:"1185"})),(0,t.kt)("p",null,"Como mostrado na imagem, os LEDs s\xe3o ligados nas sa\xeddas PORTB","[4:3]"," e ","[1:0]"," e o bot\xe3o na entrada PORTB","[2]","."),(0,t.kt)("h4",{id:"compila\xe7\xe3o-e-upload-1"},(0,t.kt)("strong",{parentName:"h4"},"Compila\xe7\xe3o e upload")),(0,t.kt)("p",null,"Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando ",(0,t.kt)("inlineCode",{parentName:"p"},"make"),":"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"exemplos-avr-libc/exemplos/contador_v2$ make\n")),(0,t.kt)("p",null,"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n")),(0,t.kt)("p",null,"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."),(0,t.kt)("h4",{id:"resultado-1"},(0,t.kt)("strong",{parentName:"h4"},"Resultado")),(0,t.kt)("p",null,"Assim como no \xfaltimo exemplo, os LEDs devem mostrar a contagem de eventos, mostrando em bin\xe1rio at\xe9 15."),(0,t.kt)("h4",{id:"an\xe1lise-1"},(0,t.kt)("strong",{parentName:"h4"},"An\xe1lise")),(0,t.kt)("p",null,"Esse exemplo tem um c\xf3digo um pouco mais complexo, podendo fazer diferentes tarefas ao mesmo tempo com o uso de interrup\xe7\xf5es."),(0,t.kt)("p",null,"Interrup\xe7\xf5es s\xe3o, de forma simples, instru\xe7\xf5es de alta prioridade, que fazem o processador parar o que est\xe1 fazendo, guardar o estado atual, executar as instru\xe7\xf5es da interrup\xe7\xe3o e voltar para o estado anterior, continuando normalmente com o programa. Elas s\xe3o extremamente \xfateis para tarefas que precisam de uma precis\xe3o de tempo alta ou eventos ass\xedncronos."),(0,t.kt)("p",null,"Por\xe9m, apesar do exemplo dois fazer uso de interrup\xe7\xf5es, ele passa muito tempo nela, o que atrasa o andamento de um poss\xedvel outro programa que estaria rodando na ",(0,t.kt)("inlineCode",{parentName:"p"},"main"),". Por\xe9m, grande parte do tempo que \xe9 gasto na interrup\xe7\xe3o est\xe1 atrelado ao debounce, que consiste basicamente de checagens em certos per\xedodos de tempo. Podemos ent\xe3o otimizar o uso do processador saindo da interrup\xe7\xe3o entre as checagens, uma vez que ele est\xe1 apenas esperando para fazer o pr\xf3ximo teste. Veremos isso e o modo de economia de energia no contador_v3."),(0,t.kt)("h3",{id:"contador_v3"},(0,t.kt)("strong",{parentName:"h3"},"Contador_v3")),(0,t.kt)("p",null,"Nesse exemplo vamos otimizar o processamento no c\xf3digo utilizando interrup\xe7\xf5es para as esperas do debounce, tamb\xe9m veremos uma alternativa para diminuir o consumo de energia em momentos em que o processador est\xe1 esperando algum evento, caso voc\xea n\xe3o precise de outra rotina."),(0,t.kt)("p",null,"Esse programa \xe9 um c\xf3digo em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca ",(0,t.kt)("inlineCode",{parentName:"p"},"avr/io.h")," e a biblioteca ",(0,t.kt)("inlineCode",{parentName:"p"},"avr/interrupt.h"),". Para melhor entendimento recomendo ler os coment\xe1rios do c\xf3digo e o datasheet do ATtiny85."),(0,t.kt)("h4",{id:"c\xf3digo-2"},(0,t.kt)("strong",{parentName:"h4"},"C\xf3digo")),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},"/**\n * @file main.c\n * @author Eduardo Due\xf1as\n * @brief Exemplo de contador de eventos com tratamento por interrup\xe7\xe3o\n * @version 1.0\n * @date 20/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 05/05/2021\n *\n * O programa \xe9 um desenvolvimento em cima do contador_v2 uma com altera\xe7\xf5es no loop infinito que\n * havia ficado em aberto para outras aplica\xe7\xf5es para o modo sleep para diminuir o gasto de energia e\n * alterar o debounce para interrup\xe7\xe3o, aumentando a efici\xeancia do c\xf3digo. O c\xf3digo pode ser usado com\n * outras aplica\xe7\xf5es no lugar do sleep.\n */\n\n#include <avr/io.h>\n#include <avr/interrupt.h>\n#include <avr/sleep.h>\n\n#define F_CPU 16500000L // Frequ\xeancia de CLK\n\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\nvolatile unsigned char count = 0; // Contador\nvolatile unsigned char test = 0; // Quantidade de testes do debounce\n\nunsigned int pin = 0; // Pino do debounce\n\n// Debounce da chave tactil para desconsiderarmos ruido e bouncing do bot\xe3o\nchar debounce(int pino) {\n pin = pino;\n // Coloca um timer para cada 1000 ciclos de clk para testar a chave tactil\n TCNT0 = 131; // Overflow-(ciclos/Prescaler)=256-(1000/8)=131\n setBit(TIMSK, TOIE0); // Habilita interrup\xe7\xf5es por timer overflow\n test = 0; // Limpa test\n}\n\nISR(INT0_vect) { // Tratamento de interrup\xe7\xf5es de pulso externo\n clearBit(GIMSK, INT0); // Desabilita interrup\xe7\xf5es do INT0 durante o tratamento da interrup\xe7\xe3o\n debounce(PB2);\n}\n\nISR(TIMER0_OVF_vect) { // Tratamento de interrup\xe7\xf5es de timer overflow\n TCNT0 = 131; // Seta denovo o timer para 131\n if (testBit(PINB, pin)) { // Se o bot\xe3o continua apertado\n test++; // Incrementa test\n if (test >= 20) { // Se testou o suficiente (no caso 20 vezes)\n count++; // Incrementa o contador\n count %= 0x10; // Limpa o excesso\n PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]\n PORTB = ((PORTB & 0xFC) | (count & 0x03)); // Manda os dois bits menos significativos de cont para PB[1:0]\n clearBit(TIMSK, TOIE0); // Desabilita interrup\xe7\xf5es por timer overflow\n setBit(GIMSK, INT0); // Reabilita interrup\xe7\xf5es externas no INT0\n }\n }\n else {\n clearBit(TIMSK, TOIE0); // Desabilita interrup\xe7\xf5es por timer overflow\n setBit(GIMSK, INT0); // Reabilita interrup\xe7\xf5es externas no INT0\n }\n}\n\nint main(void) {\n // Configura\xe7\xe3o de PORTB\n clearBit(DDRB, PB2); // Configura PB2 como entrada\n setBit(DDRB, PB0); // Configura PB0 como saida\n setBit(DDRB, PB1); // Configura PB1 como saida\n setBit(DDRB, PB3); // Configura PB3 como saida\n setBit(DDRB, PB4); // Configura PB4 como saida\n\n PORTB &= 0xE4; // Manda 0 para PB[4:3] e PB[1:0]\n\n // Configura\xe7\xe3o do timer\n TCCR0A = 0x00; // Modo Normal\n TCCR0B = 0x00;\n TCCR0B |= 0x02; // Prescaler de 8\n\n\n // Configura\xe7\xe3o do modo sleep\n clearBit(MCUCR, SM0); // Configura sleep mode como idle\n clearBit(MCUCR, SM1);\n\n // Configura\xe7\xe3o de Interrup\xe7\xe3o externa\n setBit(GIMSK, INT0); // Habilita interrup\xe7\xf5es externas no INT0\n MCUCR |= 0x03; // Seta interrup\xe7\xf5es para borda de subida\n sei(); // Habilita interrup\xe7\xf5es globais\n\n for (;;) { // Loop infinito\n // Aqui voc\xea pode colocar outra aplica\xe7\xe3o para rodar simultaneamente ao contador no lugar do sleep\n sleep_mode(); // Entra no sleep mode\n }\n}\n")),(0,t.kt)("h4",{id:"montagem-2"},(0,t.kt)("strong",{parentName:"h4"},"Montagem")),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Circuito contador V3",src:a(6713).Z,width:"2589",height:"1185"})),(0,t.kt)("p",null,"Como mostrado na imagem, os LEDs s\xe3o ligados nas sa\xeddas PORTB","[4:3]"," e ","[1:0]"," e o bot\xe3o na entrada PORTB","[2]",", assim como no exemplo dois."),(0,t.kt)("h4",{id:"compila\xe7\xe3o-e-upload-2"},(0,t.kt)("strong",{parentName:"h4"},"Compila\xe7\xe3o e upload")),(0,t.kt)("p",null,"Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando ",(0,t.kt)("inlineCode",{parentName:"p"},"make"),":"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"exemplos-avr-libc/exemplos/contador_v3$ make\n")),(0,t.kt)("p",null,"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n")),(0,t.kt)("p",null,"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."),(0,t.kt)("h4",{id:"resultado-2"},(0,t.kt)("strong",{parentName:"h4"},"Resultado")),(0,t.kt)("p",null,"Assim como nos exemplos anteriores, os LEDs do circuito devem mostrar a contagem de pulsos at\xe9 15 em bin\xe1rio."),(0,t.kt)("h4",{id:"an\xe1lise-2"},(0,t.kt)("strong",{parentName:"h4"},"An\xe1lise")),(0,t.kt)("p",null,"Neste c\xf3digo adicionamos um pouco mais de complexidade, aumentando o uso de interrup\xe7\xf5es, al\xe9m do uso do timer e do modo Sleep."),(0,t.kt)("p",null,"O modo Sleep \xe9 um mode de opera\xe7\xe3o no qual, de forma b\xe1sica, se desliga alguns m\xf3dulos do microcontrolador at\xe9 que alguma interrup\xe7\xe3o ocorra, o que pode diminuir o consumo de energia de forma dr\xe1stica. No caso do c\xf3digo do exemplo, utilizamos o modo Idle que no ATtiny85 desliga os CLKs da CPU e FLASH, podendo se desligar opcionalmente o CLK do ADC."),(0,t.kt)("p",null,"O timer nesse exemplo est\xe1 configurado como em modo normal, com prescaler de 8, o que faz ele incrementar o timer uma vez a cada 8 ciclos de CLK. A forma adotada para a contagem do tempo foi a interrup\xe7\xe3o por timer overflow, ou seja, sempre que o valor m\xe1ximo do timer for atingido ele gera uma interrup\xe7\xe3o. Para conseguirmos os 1000 ciclos que queremos calculamos ",(0,t.kt)("inlineCode",{parentName:"p"},"overflow -(ciclos/Prescaler)"),", que nos d\xe1 ",(0,t.kt)("inlineCode",{parentName:"p"},"256 -(1000/8) = 131"),", e setamos o valor do timer nesse valor para que falte o tempo que desejamos para a interrup\xe7\xe3o."),(0,t.kt)("p",null,"O uso de interrup\xe7\xf5es do timer para o debounce diminui consideravelmente o tempo que o processador consome em execu\xe7\xe3o do tratamento do evento, o que melhora o processamento das rotinas paralelas, ou no caso, permite que o processador fique mais tempo no modo Sleep, diminuindo o consumo de energia ou em caso de alimenta\xe7\xe3o por baterias, aumenta a vida \xfatil da da fonte."),(0,t.kt)("h2",{id:"conclus\xe3o"},(0,t.kt)("strong",{parentName:"h2"},"Conclus\xe3o")),(0,t.kt)("p",null,"De forma geral, todas as tr\xeas formas de se fazer o c\xf3digo funcionam, e ao servirem seu prop\xf3sito n\xe3o est\xe3o erradas. Por\xe9m, como programadores, principalmente de sistemas embarcados, \xe9 uma \xf3tima pr\xe1tica conseguirmos fazer um c\xf3digo eficiente, de forma a n\xe3o se tornar um empecilho no futuro, seja por usarmos muita mem\xf3ria ou deixarmos o processador muito lento e termos que refazer algo pronto do zero. Por isso \xe9 importante saber quais s\xe3o as vantagens e desvantagens de cada m\xe9todo para podermos sempre utilizar o que melhor se adequa \xe0s nossas necessidades."),(0,t.kt)("h2",{id:"gloss\xe1rio"},"Gloss\xe1rio"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Setar: colocar um novo valor em um registrador. Para um bit \xe9 convencionado setar, muda-lo para valor 1, e clear (limpar), muda-lo para valor 0"),(0,t.kt)("li",{parentName:"ul"},"Chave tactil/Push button: bot\xe3o"),(0,t.kt)("li",{parentName:"ul"},"Debounce: corre\xe7\xe3o do efeito de bouncing (efeito que ocorre em chaves que fazem r\xe1pidas conex\xf5es e desconex\xf5es antes de se estabilizar)"),(0,t.kt)("li",{parentName:"ul"},"Resetar: reiniciar"),(0,t.kt)("li",{parentName:"ul"},"Timer: circuito eletr\xf4nico dedicado a contagem de tempo")),(0,t.kt)("table",null,(0,t.kt)("thead",{parentName:"table"},(0,t.kt)("tr",{parentName:"thead"},(0,t.kt)("th",{parentName:"tr",align:null},"Autor"),(0,t.kt)("th",{parentName:"tr",align:null},(0,t.kt)("a",{parentName:"th",href:"https://github.com/EduardoDuenas"},"Eduardo Due\xf1as")))),(0,t.kt)("tbody",{parentName:"table"},(0,t.kt)("tr",{parentName:"tbody"},(0,t.kt)("td",{parentName:"tr",align:null},"Data:"),(0,t.kt)("td",{parentName:"tr",align:null},"05/05/2020")))))}u.isMDXComponent=!0},1090:(e,o,a)=>{a.d(o,{Z:()=>n});const n=a.p+"assets/images/Exemplo_Contador_Circuito-a726ec616f1978417fe735405b5dadd9.png"},7891:(e,o,a)=>{a.d(o,{Z:()=>n});const n=a.p+"assets/images/Exemplo_Contador_Circuito_v2-cb27b793816afd0d2a3b33b95b9e734f.png"},6713:(e,o,a)=>{a.d(o,{Z:()=>n});const n=a.p+"assets/images/Exemplo_Contador_Circuito_v3-cb27b793816afd0d2a3b33b95b9e734f.png"}}]); \ No newline at end of file diff --git a/en/assets/js/bdb4d3e5.f2625fa4.js b/en/assets/js/bdb4d3e5.f2625fa4.js new file mode 100755 index 000000000..77fdfffe1 --- /dev/null +++ b/en/assets/js/bdb4d3e5.f2625fa4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9484],{41828:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>t,toc:()=>c});var a=n(17624),r=n(95788);const i={id:"contadores",title:"Contador de pulsos externos",slug:"/franzininho-diy/exemplos-avr-libc/contadores",description:"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/05/2021",some_url:"https://github.com/EduardoDuenas"},s=void 0,t={id:"FranzininhoDIY/exemplos-avr-libc/contadores",title:"Contador de pulsos externos",description:"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/contadores.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/contadores",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/contadores",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/contadores.md",tags:[],version:"current",frontMatter:{id:"contadores",title:"Contador de pulsos externos",slug:"/franzininho-diy/exemplos-avr-libc/contadores",description:"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY",authors:"Eduardo Due\xf1as",date:"05/05/2021",some_url:"https://github.com/EduardoDuenas"},sidebar:"docs",previous:{title:"Timer 0 - Interrup\xe7\xe3o",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int"},next:{title:"Instrumento musical com Buzzer",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/buzzer"}},d={},c=[{value:"<strong>Recursos necess\xe1rios</strong>",id:"recursos-necess\xe1rios",level:2},{value:"<strong>Contadores</strong>",id:"contadores",level:2},{value:"<strong>Contador_v1</strong>",id:"contador_v1",level:3},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo",level:4},{value:"<strong>Montagem</strong>",id:"montagem",level:4},{value:"<strong>Compila\xe7\xe3o e upload</strong>",id:"compila\xe7\xe3o-e-upload",level:4},{value:"<strong>Resultado</strong>",id:"resultado",level:4},{value:"<strong>An\xe1lise</strong>",id:"an\xe1lise",level:4},{value:"<strong>Contador_v2</strong>",id:"contador_v2",level:3},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo-1",level:4},{value:"<strong>Montagem</strong>",id:"montagem-1",level:4},{value:"<strong>Compila\xe7\xe3o e upload</strong>",id:"compila\xe7\xe3o-e-upload-1",level:4},{value:"<strong>Resultado</strong>",id:"resultado-1",level:4},{value:"<strong>An\xe1lise</strong>",id:"an\xe1lise-1",level:4},{value:"<strong>Contador_v3</strong>",id:"contador_v3",level:3},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo-2",level:4},{value:"<strong>Montagem</strong>",id:"montagem-2",level:4},{value:"<strong>Compila\xe7\xe3o e upload</strong>",id:"compila\xe7\xe3o-e-upload-2",level:4},{value:"<strong>Resultado</strong>",id:"resultado-2",level:4},{value:"<strong>An\xe1lise</strong>",id:"an\xe1lise-2",level:4},{value:"<strong>Conclus\xe3o</strong>",id:"conclus\xe3o",level:2},{value:"Gloss\xe1rio",id:"gloss\xe1rio",level:2}];function l(e){const o={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.p,{children:"Nesses tr\xeas exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY. Vamos explorar as formas mais simples e as mais complexas de contar eventos e as vantagens de cada uma. Nesses exemplos vamos aprender a usar o timer e a fazer debounce, necess\xe1rio para lermos apenas eventos v\xe1lidos e n\xe3o ler o mesmo evento mais de uma vez."}),"\n",(0,a.jsx)(o.p,{children:"Boa pr\xe1tica!"}),"\n",(0,a.jsx)(o.h2,{id:"recursos-necess\xe1rios",children:(0,a.jsx)(o.strong,{children:"Recursos necess\xe1rios"})}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"Franzininho DIY (com Micronucleos)"}),"\n",(0,a.jsx)(o.li,{children:"4 LEDs de 3mm"}),"\n",(0,a.jsx)(o.li,{children:"4 resistores de 200\u03a9"}),"\n",(0,a.jsx)(o.li,{children:"1 resistor de 10k\u03a9"}),"\n",(0,a.jsx)(o.li,{children:"1 chave tactil"}),"\n",(0,a.jsx)(o.li,{children:"7 jumpers macho-f\xeamea"}),"\n",(0,a.jsx)(o.li,{children:"7 jumpers macho-macho"}),"\n"]}),"\n",(0,a.jsx)(o.h2,{id:"contadores",children:(0,a.jsx)(o.strong,{children:"Contadores"})}),"\n",(0,a.jsx)(o.p,{children:"Temos tr\xeas exemplos de contadores da vers\xe3o 1 a 3, e aumentando a complexidade do c\xf3digo e dos recursos utilizados."}),"\n",(0,a.jsx)(o.h3,{id:"contador_v1",children:(0,a.jsx)(o.strong,{children:"Contador_v1"})}),"\n",(0,a.jsx)(o.p,{children:"Nesse exemplo vamos utilizar loops para fazer a verifica\xe7\xe3o de eventos. Essa forma de se fazer a contagem, apesar de ser mais simples de se entender e criar, \xe9 pouco eficiente, tanto a n\xedvel de processamento, quanto ao de energia."}),"\n",(0,a.jsxs)(o.p,{children:["O programa \xe9 um c\xf3digo em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca ",(0,a.jsx)(o.code,{children:"avr/io.h"}),". Para melhor entendimento recomendo ler os coment\xe1rios do c\xf3digo e o datasheet do ATtiny85."]}),"\n",(0,a.jsx)(o.h4,{id:"c\xf3digo",children:(0,a.jsx)(o.strong,{children:"C\xf3digo"})}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-c",children:"/**\n * @file main.c\n * @author Eduardo Due\xf1as\n * @brief Exemplo de contador de eventos\n * @version 1.0\n * @date 06/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 05/05/2021\n */\n#include <avr/io.h>\n\n#define F_CPU 16500000L // Frequ\xeancia de CLK\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\n// Debounce da chave t\xe1ctil para desconsiderarmos ru\xeddo e bouncing do bot\xe3o\nchar debounce(int pino) {\n unsigned int i;\n for (i = 0; i < 20000; i++) { // Testa o pino v\xe1rias vezes para evitar leituras erradas\n if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1\n return 0; // Se sim, retorna falso\n }\n }\n return 1; // Retorna verdadeiro\n}\n\nint main(void) {\n // Configura\xe7\xe3o de PORTB\n clearBit(DDRB, PB0); // Configura PB0 como entrada\n setBit(DDRB, PB1); // Configura PB1 como saida\n setBit(DDRB, PB2); // Configura PB2 como saida\n setBit(DDRB, PB3); // Configura PB3 como saida\n setBit(DDRB, PB4); // Configura PB4 como saida\n\n PORTB &= 0xE1; // Manda 0 para PB[4:1]\n\n unsigned char count = 0;\n\n for (;;) { // loop infinito\n if (testBit(PINB, PB0)) { // Testa se PB0 \xe9 1\n if (debounce(PB0)) { // Verifica se realmente foi um aperto de bot\xe3o\n count++; // Se sim, incrementa o contador\n while (testBit(PINB, PB0)) {} // Espera o bot\xe3o parar de ser pressionado\n }\n }\n count = count % 0x10; // Limpa o overflow do contador\n PORTB = ((PORTB & 0xE1) | (count << 1)); // Manda o contador para PB[4:1]\n }\n}\n"})}),"\n",(0,a.jsx)(o.h4,{id:"montagem",children:(0,a.jsx)(o.strong,{children:"Montagem"})}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"circuito contador",src:n(44663).c+"",width:"2589",height:"1152"})}),"\n",(0,a.jsx)(o.p,{children:"Como mostrado na imagem, os LEDs s\xe3o ligados nas sa\xeddas PortB[4:1] e o bot\xe3o no PortB[0]."}),"\n",(0,a.jsx)(o.h4,{id:"compila\xe7\xe3o-e-upload",children:(0,a.jsx)(o.strong,{children:"Compila\xe7\xe3o e upload"})}),"\n",(0,a.jsxs)(o.p,{children:["Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando ",(0,a.jsx)(o.code,{children:"make"}),":"]}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{children:"exemplos-avr-libc/exemplos/contador$ make\n"})}),"\n",(0,a.jsx)(o.p,{children:"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{children:"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n"})}),"\n",(0,a.jsx)(o.p,{children:"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."}),"\n",(0,a.jsx)(o.h4,{id:"resultado",children:(0,a.jsx)(o.strong,{children:"Resultado"})}),"\n",(0,a.jsx)(o.p,{children:"Os LEDs devem mostrar a contagem de apertos do bot\xe3o de forma bin\xe1ria resetando em 0x10 ou quando resetada a placa."}),"\n",(0,a.jsx)(o.h4,{id:"an\xe1lise",children:(0,a.jsx)(o.strong,{children:"An\xe1lise"})}),"\n",(0,a.jsxs)(o.p,{children:["Esse c\xf3digo \xe9 de simples compreens\xe3o usando apenas um ",(0,a.jsx)(o.code,{children:"for"})," para checar continuamente se o bot\xe3o foi apertado, chamando uma fun\xe7\xe3o debounce caso a leitura seja 1, incrementando o contador se for confirmado que a leitura \xe9 v\xe1lida, esperando o bot\xe3o ser solto e mandando o valor para as sa\xeddas."]}),"\n",(0,a.jsx)(o.p,{children:"De forma geral esse c\xf3digo funciona, mas h\xe1 muito desperd\xedcio de processamento, pois h\xe1 muitos momentos que o processador n\xe3o est\xe1 fazendo nada, apenas esperando algo acontecer ou um certo tempo passar, nesse tempo ele poderia estar fazendo outra tarefas ou ficar em modo econ\xf4mico de energia, que veremos nos pr\xf3ximos exemplos."}),"\n",(0,a.jsx)(o.h3,{id:"contador_v2",children:(0,a.jsx)(o.strong,{children:"Contador_v2"})}),"\n",(0,a.jsx)(o.p,{children:"Nesse exemplo vamos come\xe7ar a usar interrup\xe7\xf5es para ler os pulsos. Vamos ver quais s\xe3o as vantagens desse m\xe9todo e o que pode ser melhorado."}),"\n",(0,a.jsxs)(o.p,{children:["O programa \xe9 um c\xf3digo em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca ",(0,a.jsx)(o.code,{children:"avr/io.h"})," e a biblioteca ",(0,a.jsx)(o.code,{children:"avr/interrupt.h"}),". Para melhor entendimento recomendo ler os coment\xe1rios do c\xf3digo e o datasheet do ATtiny85."]}),"\n",(0,a.jsx)(o.h4,{id:"c\xf3digo-1",children:(0,a.jsx)(o.strong,{children:"C\xf3digo"})}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-c",children:"/**\n * @file main.c\n * @author Eduardo Due\xf1as\n * @brief Exemplo de contador de eventos com tratamento por interrup\xe7\xe3o\n * @version 1.0\n * @date 19/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 05/05/2021\n *\n * O programa \xe9 um desenvolvimento em cima do contador uma com altera\xe7\xf5es na leitura do pulso para leitura por interrup\xe7\xe3o,\n * possibilitando o uso do microcontrolador para outras fun\xe7\xf5es junto do contador\n */\n#include <avr/io.h>\n#include <avr/interrupt.h>\n\n#define F_CPU 16500000L // Frequ\xeancia de CLK\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\nvolatile unsigned char count = 0; // Contador\n\nISR(INT0_vect) {\n cli(); // Desabilita interrup\xe7\xf5es globais durante o tratamento da interrup\xe7\xe3o\n if (debounce(PB2)) { // Se o bot\xe3o foi realmente apertado incrementa cont e manda para os LEDs\n count++; // Incrementa o contador\n count %= 0x10; // Limpa o excesso\n PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]\n PORTB = ((PORTB & 0xFC) | (count & 0x03)); // Manda os dois bits menos significativos de cont para PB[1:0]\n }\n sei(); // Reabilita interrup\xe7\xf5es globais\n}\n\n// Debounce da chave tactil para desconsiderarmos ru\xeddo e bouncing do bot\xe3o\nchar debounce(int pino) {\n unsigned int i;\n\n for (i = 0; i < 20000; i++) { // Testa o pino v\xe1rias vezes para evitar leituras erradas\n if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1\n return 0; // Se sim, retorna falso\n }\n }\n\n return 1; // Retorna verdadeiro\n}\n\nint main(void) {\n // Configura\xe7\xe3o de PORTB\n clearBit(DDRB, PB2); // Configura PB2 como entrada\n setBit(DDRB, PB0); // Configura PB0 como sa\xedda\n setBit(DDRB, PB1); // Configura PB1 como sa\xedda\n setBit(DDRB, PB3); // Configura PB3 como sa\xedda\n setBit(DDRB, PB4); // Configura PB4 como sa\xedda\n\n PORTB &= 0xE4; // Manda 0 para PB[4:3] e PB[1:0]\n\n //Configura\xe7\xe3o de Interrup\xe7\xe3o externa\n GIMSK |= (1 << INT0); // Habilita interrup\xe7\xf5es externas no INT0\n MCUCR |= 0x03; // Seta interrup\xe7\xf5es para borda de subida\n sei(); // Habilita interrup\xe7\xf5es globais\n\n\n for (;;) { // Loop infinito\n // Aqui voc\xea pode colocar outra aplica\xe7\xe3o para rodar simultaneamente ao contador\n }\n}\n"})}),"\n",(0,a.jsx)(o.h4,{id:"montagem-1",children:(0,a.jsx)(o.strong,{children:"Montagem"})}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Circuito contador V2",src:n(1424).c+"",width:"2589",height:"1185"})}),"\n",(0,a.jsx)(o.p,{children:"Como mostrado na imagem, os LEDs s\xe3o ligados nas sa\xeddas PORTB[4:3] e [1:0] e o bot\xe3o na entrada PORTB[2]."}),"\n",(0,a.jsx)(o.h4,{id:"compila\xe7\xe3o-e-upload-1",children:(0,a.jsx)(o.strong,{children:"Compila\xe7\xe3o e upload"})}),"\n",(0,a.jsxs)(o.p,{children:["Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando ",(0,a.jsx)(o.code,{children:"make"}),":"]}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{children:"exemplos-avr-libc/exemplos/contador_v2$ make\n"})}),"\n",(0,a.jsx)(o.p,{children:"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{children:"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n"})}),"\n",(0,a.jsx)(o.p,{children:"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."}),"\n",(0,a.jsx)(o.h4,{id:"resultado-1",children:(0,a.jsx)(o.strong,{children:"Resultado"})}),"\n",(0,a.jsx)(o.p,{children:"Assim como no \xfaltimo exemplo, os LEDs devem mostrar a contagem de eventos, mostrando em bin\xe1rio at\xe9 15."}),"\n",(0,a.jsx)(o.h4,{id:"an\xe1lise-1",children:(0,a.jsx)(o.strong,{children:"An\xe1lise"})}),"\n",(0,a.jsx)(o.p,{children:"Esse exemplo tem um c\xf3digo um pouco mais complexo, podendo fazer diferentes tarefas ao mesmo tempo com o uso de interrup\xe7\xf5es."}),"\n",(0,a.jsx)(o.p,{children:"Interrup\xe7\xf5es s\xe3o, de forma simples, instru\xe7\xf5es de alta prioridade, que fazem o processador parar o que est\xe1 fazendo, guardar o estado atual, executar as instru\xe7\xf5es da interrup\xe7\xe3o e voltar para o estado anterior, continuando normalmente com o programa. Elas s\xe3o extremamente \xfateis para tarefas que precisam de uma precis\xe3o de tempo alta ou eventos ass\xedncronos."}),"\n",(0,a.jsxs)(o.p,{children:["Por\xe9m, apesar do exemplo dois fazer uso de interrup\xe7\xf5es, ele passa muito tempo nela, o que atrasa o andamento de um poss\xedvel outro programa que estaria rodando na ",(0,a.jsx)(o.code,{children:"main"}),". Por\xe9m, grande parte do tempo que \xe9 gasto na interrup\xe7\xe3o est\xe1 atrelado ao debounce, que consiste basicamente de checagens em certos per\xedodos de tempo. Podemos ent\xe3o otimizar o uso do processador saindo da interrup\xe7\xe3o entre as checagens, uma vez que ele est\xe1 apenas esperando para fazer o pr\xf3ximo teste. Veremos isso e o modo de economia de energia no contador_v3."]}),"\n",(0,a.jsx)(o.h3,{id:"contador_v3",children:(0,a.jsx)(o.strong,{children:"Contador_v3"})}),"\n",(0,a.jsx)(o.p,{children:"Nesse exemplo vamos otimizar o processamento no c\xf3digo utilizando interrup\xe7\xf5es para as esperas do debounce, tamb\xe9m veremos uma alternativa para diminuir o consumo de energia em momentos em que o processador est\xe1 esperando algum evento, caso voc\xea n\xe3o precise de outra rotina."}),"\n",(0,a.jsxs)(o.p,{children:["Esse programa \xe9 um c\xf3digo em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca ",(0,a.jsx)(o.code,{children:"avr/io.h"})," e a biblioteca ",(0,a.jsx)(o.code,{children:"avr/interrupt.h"}),". Para melhor entendimento recomendo ler os coment\xe1rios do c\xf3digo e o datasheet do ATtiny85."]}),"\n",(0,a.jsx)(o.h4,{id:"c\xf3digo-2",children:(0,a.jsx)(o.strong,{children:"C\xf3digo"})}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-c",children:"/**\n * @file main.c\n * @author Eduardo Due\xf1as\n * @brief Exemplo de contador de eventos com tratamento por interrup\xe7\xe3o\n * @version 1.0\n * @date 20/04/2021\n *\n * \xfaltima modifica\xe7\xe3o: 05/05/2021\n *\n * O programa \xe9 um desenvolvimento em cima do contador_v2 uma com altera\xe7\xf5es no loop infinito que\n * havia ficado em aberto para outras aplica\xe7\xf5es para o modo sleep para diminuir o gasto de energia e\n * alterar o debounce para interrup\xe7\xe3o, aumentando a efici\xeancia do c\xf3digo. O c\xf3digo pode ser usado com\n * outras aplica\xe7\xf5es no lugar do sleep.\n */\n\n#include <avr/io.h>\n#include <avr/interrupt.h>\n#include <avr/sleep.h>\n\n#define F_CPU 16500000L // Frequ\xeancia de CLK\n\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define clearBit(valor,bit) (valor &= ~(1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n#define testBit(valor,bit) (valor & (1 << bit))\n\nvolatile unsigned char count = 0; // Contador\nvolatile unsigned char test = 0; // Quantidade de testes do debounce\n\nunsigned int pin = 0; // Pino do debounce\n\n// Debounce da chave tactil para desconsiderarmos ruido e bouncing do bot\xe3o\nchar debounce(int pino) {\n pin = pino;\n // Coloca um timer para cada 1000 ciclos de clk para testar a chave tactil\n TCNT0 = 131; // Overflow-(ciclos/Prescaler)=256-(1000/8)=131\n setBit(TIMSK, TOIE0); // Habilita interrup\xe7\xf5es por timer overflow\n test = 0; // Limpa test\n}\n\nISR(INT0_vect) { // Tratamento de interrup\xe7\xf5es de pulso externo\n clearBit(GIMSK, INT0); // Desabilita interrup\xe7\xf5es do INT0 durante o tratamento da interrup\xe7\xe3o\n debounce(PB2);\n}\n\nISR(TIMER0_OVF_vect) { // Tratamento de interrup\xe7\xf5es de timer overflow\n TCNT0 = 131; // Seta denovo o timer para 131\n if (testBit(PINB, pin)) { // Se o bot\xe3o continua apertado\n test++; // Incrementa test\n if (test >= 20) { // Se testou o suficiente (no caso 20 vezes)\n count++; // Incrementa o contador\n count %= 0x10; // Limpa o excesso\n PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]\n PORTB = ((PORTB & 0xFC) | (count & 0x03)); // Manda os dois bits menos significativos de cont para PB[1:0]\n clearBit(TIMSK, TOIE0); // Desabilita interrup\xe7\xf5es por timer overflow\n setBit(GIMSK, INT0); // Reabilita interrup\xe7\xf5es externas no INT0\n }\n }\n else {\n clearBit(TIMSK, TOIE0); // Desabilita interrup\xe7\xf5es por timer overflow\n setBit(GIMSK, INT0); // Reabilita interrup\xe7\xf5es externas no INT0\n }\n}\n\nint main(void) {\n // Configura\xe7\xe3o de PORTB\n clearBit(DDRB, PB2); // Configura PB2 como entrada\n setBit(DDRB, PB0); // Configura PB0 como saida\n setBit(DDRB, PB1); // Configura PB1 como saida\n setBit(DDRB, PB3); // Configura PB3 como saida\n setBit(DDRB, PB4); // Configura PB4 como saida\n\n PORTB &= 0xE4; // Manda 0 para PB[4:3] e PB[1:0]\n\n // Configura\xe7\xe3o do timer\n TCCR0A = 0x00; // Modo Normal\n TCCR0B = 0x00;\n TCCR0B |= 0x02; // Prescaler de 8\n\n\n // Configura\xe7\xe3o do modo sleep\n clearBit(MCUCR, SM0); // Configura sleep mode como idle\n clearBit(MCUCR, SM1);\n\n // Configura\xe7\xe3o de Interrup\xe7\xe3o externa\n setBit(GIMSK, INT0); // Habilita interrup\xe7\xf5es externas no INT0\n MCUCR |= 0x03; // Seta interrup\xe7\xf5es para borda de subida\n sei(); // Habilita interrup\xe7\xf5es globais\n\n for (;;) { // Loop infinito\n // Aqui voc\xea pode colocar outra aplica\xe7\xe3o para rodar simultaneamente ao contador no lugar do sleep\n sleep_mode(); // Entra no sleep mode\n }\n}\n"})}),"\n",(0,a.jsx)(o.h4,{id:"montagem-2",children:(0,a.jsx)(o.strong,{children:"Montagem"})}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Circuito contador V3",src:n(48276).c+"",width:"2589",height:"1185"})}),"\n",(0,a.jsx)(o.p,{children:"Como mostrado na imagem, os LEDs s\xe3o ligados nas sa\xeddas PORTB[4:3] e [1:0] e o bot\xe3o na entrada PORTB[2], assim como no exemplo dois."}),"\n",(0,a.jsx)(o.h4,{id:"compila\xe7\xe3o-e-upload-2",children:(0,a.jsx)(o.strong,{children:"Compila\xe7\xe3o e upload"})}),"\n",(0,a.jsxs)(o.p,{children:["Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando ",(0,a.jsx)(o.code,{children:"make"}),":"]}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{children:"exemplos-avr-libc/exemplos/contador_v3$ make\n"})}),"\n",(0,a.jsx)(o.p,{children:"Como j\xe1 temos o makerfile configurado na pasta, ser\xe1 feita compila\xe7\xe3o e deve aparecer a seguinte mensagem:"}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{children:"../../micronucleus/2.0a4/launcher -cdigispark --timeout 60 -Uflash:w:main.hex:i\nRunning Digispark Uploader...\nPlug in device now... (will timeout in 60 seconds)\n> Please plug in the device (will time out in 60 seconds) ...\n"})}),"\n",(0,a.jsx)(o.p,{children:"Conecte a placa em uma entrada USB ou, caso a Franzininho j\xe1 esteja conectada, aperte o bot\xe3o de reset para iniciar o upload."}),"\n",(0,a.jsx)(o.h4,{id:"resultado-2",children:(0,a.jsx)(o.strong,{children:"Resultado"})}),"\n",(0,a.jsx)(o.p,{children:"Assim como nos exemplos anteriores, os LEDs do circuito devem mostrar a contagem de pulsos at\xe9 15 em bin\xe1rio."}),"\n",(0,a.jsx)(o.h4,{id:"an\xe1lise-2",children:(0,a.jsx)(o.strong,{children:"An\xe1lise"})}),"\n",(0,a.jsx)(o.p,{children:"Neste c\xf3digo adicionamos um pouco mais de complexidade, aumentando o uso de interrup\xe7\xf5es, al\xe9m do uso do timer e do modo Sleep."}),"\n",(0,a.jsx)(o.p,{children:"O modo Sleep \xe9 um mode de opera\xe7\xe3o no qual, de forma b\xe1sica, se desliga alguns m\xf3dulos do microcontrolador at\xe9 que alguma interrup\xe7\xe3o ocorra, o que pode diminuir o consumo de energia de forma dr\xe1stica. No caso do c\xf3digo do exemplo, utilizamos o modo Idle que no ATtiny85 desliga os CLKs da CPU e FLASH, podendo se desligar opcionalmente o CLK do ADC."}),"\n",(0,a.jsxs)(o.p,{children:["O timer nesse exemplo est\xe1 configurado como em modo normal, com prescaler de 8, o que faz ele incrementar o timer uma vez a cada 8 ciclos de CLK. A forma adotada para a contagem do tempo foi a interrup\xe7\xe3o por timer overflow, ou seja, sempre que o valor m\xe1ximo do timer for atingido ele gera uma interrup\xe7\xe3o. Para conseguirmos os 1000 ciclos que queremos calculamos ",(0,a.jsx)(o.code,{children:"overflow -(ciclos/Prescaler)"}),", que nos d\xe1 ",(0,a.jsx)(o.code,{children:"256 -(1000/8) = 131"}),", e setamos o valor do timer nesse valor para que falte o tempo que desejamos para a interrup\xe7\xe3o."]}),"\n",(0,a.jsx)(o.p,{children:"O uso de interrup\xe7\xf5es do timer para o debounce diminui consideravelmente o tempo que o processador consome em execu\xe7\xe3o do tratamento do evento, o que melhora o processamento das rotinas paralelas, ou no caso, permite que o processador fique mais tempo no modo Sleep, diminuindo o consumo de energia ou em caso de alimenta\xe7\xe3o por baterias, aumenta a vida \xfatil da da fonte."}),"\n",(0,a.jsx)(o.h2,{id:"conclus\xe3o",children:(0,a.jsx)(o.strong,{children:"Conclus\xe3o"})}),"\n",(0,a.jsx)(o.p,{children:"De forma geral, todas as tr\xeas formas de se fazer o c\xf3digo funcionam, e ao servirem seu prop\xf3sito n\xe3o est\xe3o erradas. Por\xe9m, como programadores, principalmente de sistemas embarcados, \xe9 uma \xf3tima pr\xe1tica conseguirmos fazer um c\xf3digo eficiente, de forma a n\xe3o se tornar um empecilho no futuro, seja por usarmos muita mem\xf3ria ou deixarmos o processador muito lento e termos que refazer algo pronto do zero. Por isso \xe9 importante saber quais s\xe3o as vantagens e desvantagens de cada m\xe9todo para podermos sempre utilizar o que melhor se adequa \xe0s nossas necessidades."}),"\n",(0,a.jsx)(o.h2,{id:"gloss\xe1rio",children:"Gloss\xe1rio"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"Setar: colocar um novo valor em um registrador. Para um bit \xe9 convencionado setar, muda-lo para valor 1, e clear (limpar), muda-lo para valor 0"}),"\n",(0,a.jsx)(o.li,{children:"Chave tactil/Push button: bot\xe3o"}),"\n",(0,a.jsx)(o.li,{children:"Debounce: corre\xe7\xe3o do efeito de bouncing (efeito que ocorre em chaves que fazem r\xe1pidas conex\xf5es e desconex\xf5es antes de se estabilizar)"}),"\n",(0,a.jsx)(o.li,{children:"Resetar: reiniciar"}),"\n",(0,a.jsx)(o.li,{children:"Timer: circuito eletr\xf4nico dedicado a contagem de tempo"}),"\n"]}),"\n",(0,a.jsxs)(o.table,{children:[(0,a.jsx)(o.thead,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.th,{children:"Autor"}),(0,a.jsx)(o.th,{children:(0,a.jsx)(o.a,{href:"https://github.com/EduardoDuenas",children:"Eduardo Due\xf1as"})})]})}),(0,a.jsx)(o.tbody,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"Data:"}),(0,a.jsx)(o.td,{children:"05/05/2020"})]})})]})]})}function m(e={}){const{wrapper:o}={...(0,r.MN)(),...e.components};return o?(0,a.jsx)(o,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},95788:(e,o,n)=>{n.d(o,{MN:()=>c});var a=n(11504);function r(e,o,n){return o in e?Object.defineProperty(e,o,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[o]=n,e}function i(e,o){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);o&&(a=a.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var o=1;o<arguments.length;o++){var n=null!=arguments[o]?arguments[o]:{};o%2?i(Object(n),!0).forEach((function(o){r(e,o,n[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(n,o))}))}return e}function t(e,o){if(null==e)return{};var n,a,r=function(e,o){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],o.indexOf(n)>=0||(r[n]=e[n]);return r}(e,o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],o.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var d=a.createContext({}),c=function(e){var o=a.useContext(d),n=o;return e&&(n="function"==typeof e?e(o):s(s({},o),e)),n},l={inlineCode:"code",wrapper:function(e){var o=e.children;return a.createElement(a.Fragment,{},o)}},m=a.forwardRef((function(e,o){var n=e.components,r=e.mdxType,i=e.originalType,d=e.parentName,m=t(e,["components","mdxType","originalType","parentName"]),u=c(n),p=r,g=u["".concat(d,".").concat(p)]||u[p]||l[p]||i;return n?a.createElement(g,s(s({ref:o},m),{},{components:n})):a.createElement(g,s({ref:o},m))}));m.displayName="MDXCreateElement"},44663:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/Exemplo_Contador_Circuito-a726ec616f1978417fe735405b5dadd9.png"},1424:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/Exemplo_Contador_Circuito_v2-cb27b793816afd0d2a3b33b95b9e734f.png"},48276:(e,o,n)=>{n.d(o,{c:()=>a});const a=n.p+"assets/images/Exemplo_Contador_Circuito_v3-cb27b793816afd0d2a3b33b95b9e734f.png"}}]); \ No newline at end of file diff --git a/en/assets/js/bdd709f1.571ab953.js b/en/assets/js/bdd709f1.571ab953.js new file mode 100755 index 000000000..cbc826959 --- /dev/null +++ b/en/assets/js/bdd709f1.571ab953.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2760],{59436:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>u,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var o=r(17624),n=r(95788);const a={slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},u=void 0,i={permalink:"/en/blog/hola",source:"@site/blog/2019-05-28-hola.md",title:"Hola",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet",date:"2019-05-28T00:00:00.000Z",tags:[{label:"hola",permalink:"/en/blog/tags/hola"},{label:"docusaurus",permalink:"/en/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!1,authors:[{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",imageURL:"https://avatars1.githubusercontent.com/u/2055384?v=4"}],frontMatter:{slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},unlisted:!1,prevItem:{title:"Hello",permalink:"/en/blog/hello-world"}},s={authorsImageUrls:[void 0]},l=[];function c(e){const t={p:"p",...(0,n.MN)(),...e.components};return(0,o.jsx)(t.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"})}function m(e={}){const{wrapper:t}={...(0,n.MN)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},95788:(e,t,r)=>{r.d(t,{MN:()=>l});var o=r(11504);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=o.createContext({}),l=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):u(u({},t),e)),r},c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),p=l(r),h=n,g=p["".concat(s,".").concat(h)]||p[h]||c[h]||a;return r?o.createElement(g,u(u({ref:t},m),{},{components:r})):o.createElement(g,u({ref:t},m))}));m.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/bdd709f1.6db3c8b2.js b/en/assets/js/bdd709f1.6db3c8b2.js deleted file mode 100755 index 08be6c3ed..000000000 --- a/en/assets/js/bdd709f1.6db3c8b2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4694],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function u(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),s=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):u(u({},t),e)),r},c=function(e){var t=s(e.components);return o.createElement(l.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},g=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=s(r),g=n,h=p["".concat(l,".").concat(g)]||p[g]||m[g]||a;return r?o.createElement(h,u(u({ref:t},c),{},{components:r})):o.createElement(h,u({ref:t},c))}));function h(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,u=new Array(a);u[0]=g;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[p]="string"==typeof e?e:n,u[1]=i;for(var s=2;s<a;s++)u[s]=r[s];return o.createElement.apply(null,u)}return o.createElement.apply(null,r)}g.displayName="MDXCreateElement"},6724:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>u,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var o=r(3117),n=(r(7294),r(3905));const a={slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},u=void 0,i={permalink:"/en/blog/hola",source:"@site/blog/2019-05-28-hola.md",title:"Hola",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet",date:"2019-05-28T00:00:00.000Z",formattedDate:"May 28, 2019",tags:[{label:"hola",permalink:"/en/blog/tags/hola"},{label:"docusaurus",permalink:"/en/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!1,authors:[{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",imageURL:"https://avatars1.githubusercontent.com/u/2055384?v=4"}],frontMatter:{slug:"hola",title:"Hola",author:"Gao Wei",author_title:"Docusaurus Core Team",author_url:"https://github.com/wgao19",author_image_url:"https://avatars1.githubusercontent.com/u/2055384?v=4",tags:["hola","docusaurus"]},prevItem:{title:"Hello",permalink:"/en/blog/hello-world"}},l={authorsImageUrls:[void 0]},s=[],c={toc:s},p="wrapper";function m(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,o.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/be54388e.3d89b74a.js b/en/assets/js/be54388e.3d89b74a.js new file mode 100755 index 000000000..135aa6f2c --- /dev/null +++ b/en/assets/js/be54388e.3d89b74a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8040],{24892:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var o=a(17624),i=a(95788);const r={id:"saidas-pwm",title:"Sa\xeddas PWM",slug:"/franzininho-diy/saidas-pwm",description:"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY"},s=void 0,t={id:"FranzininhoDIY/exemplos-arduino/saidas-pwm",title:"Sa\xeddas PWM",description:"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/pwm.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/saidas-pwm",permalink:"/en/docs/franzininho-diy/saidas-pwm",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/pwm.md",tags:[],version:"current",frontMatter:{id:"saidas-pwm",title:"Sa\xeddas PWM",slug:"/franzininho-diy/saidas-pwm",description:"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY"},sidebar:"docs",previous:{title:"Entradas Anal\xf3gicas",permalink:"/en/docs/franzininho-diy/entradas-analogicas"},next:{title:"Pisca LED",permalink:"/en/docs/franzininho-diy/pisca-led"}},d={},c=[{value:"O que \xe9 PWM?",id:"o-que-\xe9-pwm",level:2},{value:"Fun\xe7\xe3o",id:"fun\xe7\xe3o",level:2},{value:"Sintaxe:",id:"sintaxe",level:3},{value:"Par\xe2metros:",id:"par\xe2metros",level:3},{value:"Exemplo",id:"exemplo",level:3},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:3}];function l(e){const n={a:"a",blockquote:"blockquote",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h2,{id:"o-que-\xe9-pwm",children:"O que \xe9 PWM?"}),"\n",(0,o.jsx)(n.p,{children:"PWM, do ingl\xeas Pulse Width Modulation, \xe9 uma t\xe9cnica utilizada por sistemas digitais para varia\xe7\xe3o do valor m\xe9dio de uma forma de onda peri\xf3dica. A t\xe9cnica consiste em manter a frequ\xeancia de uma onda quadrada fixa e variar o tempo que o sinal fica em n\xedvel l\xf3gico alto. Esse tempo \xe9 chamado de duty cycle, ou seja, o ciclo ativo da forma de onda. No gr\xe1fico abaixo s\xe3o exibidas algumas modula\xe7\xf5es PWM:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Sinal PWM",src:a(87360).c+"",width:"400",height:"438"})}),"\n",(0,o.jsx)(n.p,{children:"Analisando as formas de onda nota-se que a frequ\xeancia da forma de onda tem o mesmo valor e varia-se o duty cycle da forma de onda. Quando o duty cicle est\xe1 em 0% o valor m\xe9dio da sa\xedda encontra-se em 0 V e consequentemente para um duty cycle de 100% a sa\xedda assume seu valor m\xe1ximo, que no caso \xe9 5V. Para um duty cycle de 50% a sa\xedda assumir\xe1 50% do valor da tens\xe3o, 2,5 V, e assim sucessivamente para cada varia\xe7\xe3o no duty cycle. Portanto, para calcular o valor m\xe9dio da tens\xe3o de sa\xedda de um sinal PWM pode-se utilizar a seguinte equa\xe7\xe3o:"}),"\n",(0,o.jsx)(n.p,{children:"Vout = (duty cycle/100)* Vcc"}),"\n",(0,o.jsx)(n.p,{children:"Onde:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Vout - tens\xe3o de sa\xedda em V;"}),"\n",(0,o.jsx)(n.li,{children:"duty cycle - valor do ciclo ativo do PWM em %;"}),"\n",(0,o.jsx)(n.li,{children:"Vcc - tens\xe3o de alimenta\xe7\xe3o em V."}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"PWM pode ser usada para diversas aplica\xe7\xf5es, como por exemplo:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"controle de velocidade de motores;"}),"\n",(0,o.jsx)(n.li,{children:"varia\xe7\xe3o da luminosidade de leds;"}),"\n",(0,o.jsx)(n.li,{children:"gera\xe7\xe3o de sinais anal\xf3gicos;"}),"\n",(0,o.jsx)(n.li,{children:"gera\xe7\xe3o de sinais de \xe1udio."}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Fonte: ",(0,o.jsx)(n.a,{href:"https://www.embarcados.com.br/pwm-do-arduino/",children:"Usando as sa\xeddas PWM do Arduino"})]}),"\n",(0,o.jsxs)(n.p,{children:["Na Franzininho temos ",(0,o.jsx)(n.strong,{children:"3 pinos"})," que pode ser usado como saidas PWM(PWM0,PWM1 e PWM4) conforme pinout:"]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Pinagem Franzininho DIY",src:a(4428).c+"",width:"1209",height:"869"})}),"\n",(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Verificar limita\xe7\xf5es de uso dos pinos"})}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"fun\xe7\xe3o",children:"Fun\xe7\xe3o"}),"\n",(0,o.jsx)(n.p,{children:"A fun\xe7\xe3o analogWrite() escreve um valor de PWM em um pino digital que possui a fun\xe7\xe3o PWM. Para usar o pino como sa\xedda PWM \xe9 necess\xe1rio configur\xe1-lo como sa\xedda digital."}),"\n",(0,o.jsx)(n.h3,{id:"sintaxe",children:"Sintaxe:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.code,{children:"analogWrite(pino, valor);"})}),"\n",(0,o.jsx)(n.h3,{id:"par\xe2metros",children:"Par\xe2metros:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"pino:"})," n\xfamero do pino onde ser\xe1 gerado o sinal PWM (0,1,4 na Franzininho);"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"valor:"})," valor m\xe9dio da tens\xe3o de sa\xedda que ser\xe1 gerado por PWM, entre 0 e 255, onde 0 representa 0V e 255, 5V."]}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"exemplo",children:"Exemplo"}),"\n",(0,o.jsx)(n.p,{children:"Vamos controlar o brilho do LED conforme o valor lido no potenci\xf4metro:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Circuito",src:a(90876).c+"",width:"1590",height:"1017"})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-cpp",children:"const byte LED = 1; //pino do LED\nconst byte POT = A1; //pino do Potenci\xf4metro\n\nvoid setup() {\n pinMode(LED,OUTPUT);\n}\n\nvoid loop() {\n\n int valor = analogRead(POT); // l\xea o valor do potenci\xf4metro\n analogWrite(LED,valor/4); //escreve no LED valor entre 0 e 255\n\n}\n"})}),"\n",(0,o.jsx)(n.h3,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310740273604854336?view=diagram"})]})}function m(e={}){const{wrapper:n}={...(0,i.MN)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},95788:(e,n,a)=>{a.d(n,{MN:()=>c});var o=a(11504);function i(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function r(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,o)}return a}function s(e){for(var n=1;n<arguments.length;n++){var a=null!=arguments[n]?arguments[n]:{};n%2?r(Object(a),!0).forEach((function(n){i(e,n,a[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))}))}return e}function t(e,n){if(null==e)return{};var a,o,i=function(e,n){if(null==e)return{};var a,o,i={},r=Object.keys(e);for(o=0;o<r.length;o++)a=r[o],n.indexOf(a)>=0||(i[a]=e[a]);return i}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)a=r[o],n.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var d=o.createContext({}),c=function(e){var n=o.useContext(d),a=n;return e&&(a="function"==typeof e?e(n):s(s({},n),e)),a},l={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},m=o.forwardRef((function(e,n){var a=e.components,i=e.mdxType,r=e.originalType,d=e.parentName,m=t(e,["components","mdxType","originalType","parentName"]),p=c(a),u=i,h=p["".concat(d,".").concat(u)]||p[u]||l[u]||r;return a?o.createElement(h,s(s({ref:n},m),{},{components:a})):o.createElement(h,s({ref:n},m))}));m.displayName="MDXCreateElement"},4428:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/pinagem-V2-7047a8d5930175670acc131497791fcc.png"},90876:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/circuito-a6a0591bc42320cbe29b14bd9332f3c2.png"},87360:(e,n,a)=>{a.d(n,{c:()=>o});const o=a.p+"assets/images/pwm-1a77c519e01b2cf6e365dd2e6e3a624e.jpg"}}]); \ No newline at end of file diff --git a/en/assets/js/be54388e.91b26e0a.js b/en/assets/js/be54388e.91b26e0a.js deleted file mode 100755 index dd08a8332..000000000 --- a/en/assets/js/be54388e.91b26e0a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[969],{3905:(e,a,n)=>{n.d(a,{Zo:()=>c,kt:()=>f});var o=n(7294);function t(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function r(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);a&&(o=o.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{};a%2?r(Object(n),!0).forEach((function(a){t(e,a,n[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(n,a))}))}return e}function s(e,a){if(null==e)return{};var n,o,t=function(e,a){if(null==e)return{};var n,o,t={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],a.indexOf(n)>=0||(t[n]=e[n]);return t}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],a.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(t[n]=e[n])}return t}var l=o.createContext({}),d=function(e){var a=o.useContext(l),n=a;return e&&(n="function"==typeof e?e(a):i(i({},a),e)),n},c=function(e){var a=d(e.components);return o.createElement(l.Provider,{value:a},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return o.createElement(o.Fragment,{},a)}},m=o.forwardRef((function(e,a){var n=e.components,t=e.mdxType,r=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=d(n),m=t,f=p["".concat(l,".").concat(m)]||p[m]||u[m]||r;return n?o.createElement(f,i(i({ref:a},c),{},{components:n})):o.createElement(f,i({ref:a},c))}));function f(e,a){var n=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var r=n.length,i=new Array(r);i[0]=m;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[p]="string"==typeof e?e:t,i[1]=s;for(var d=2;d<r;d++)i[d]=n[d];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},7535:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>d});var o=n(3117),t=(n(7294),n(3905));const r={id:"saidas-pwm",title:"Sa\xeddas PWM",slug:"/franzininho-diy/saidas-pwm",description:"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY"},i=void 0,s={unversionedId:"FranzininhoDIY/exemplos-arduino/saidas-pwm",id:"FranzininhoDIY/exemplos-arduino/saidas-pwm",title:"Sa\xeddas PWM",description:"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/pwm.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/saidas-pwm",permalink:"/en/docs/franzininho-diy/saidas-pwm",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/pwm.md",tags:[],version:"current",frontMatter:{id:"saidas-pwm",title:"Sa\xeddas PWM",slug:"/franzininho-diy/saidas-pwm",description:"Nesse exemplo vamos aprender trabalhar com as sa\xeddas PWM na Franzininho DIY"},sidebar:"docs",previous:{title:"Entradas Anal\xf3gicas",permalink:"/en/docs/franzininho-diy/entradas-analogicas"},next:{title:"Pisca LED",permalink:"/en/docs/franzininho-diy/pisca-led"}},l={},d=[{value:"O que \xe9 PWM?",id:"o-que-\xe9-pwm",level:2},{value:"Fun\xe7\xe3o",id:"fun\xe7\xe3o",level:2},{value:"Sintaxe:",id:"sintaxe",level:3},{value:"Par\xe2metros:",id:"par\xe2metros",level:3},{value:"Exemplo",id:"exemplo",level:3},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:3}],c={toc:d},p="wrapper";function u(e){let{components:a,...r}=e;return(0,t.kt)(p,(0,o.Z)({},c,r,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("h2",{id:"o-que-\xe9-pwm"},"O que \xe9 PWM?"),(0,t.kt)("p",null,"PWM, do ingl\xeas Pulse Width Modulation, \xe9 uma t\xe9cnica utilizada por sistemas digitais para varia\xe7\xe3o do valor m\xe9dio de uma forma de onda peri\xf3dica. A t\xe9cnica consiste em manter a frequ\xeancia de uma onda quadrada fixa e variar o tempo que o sinal fica em n\xedvel l\xf3gico alto. Esse tempo \xe9 chamado de duty cycle, ou seja, o ciclo ativo da forma de onda. No gr\xe1fico abaixo s\xe3o exibidas algumas modula\xe7\xf5es PWM:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Sinal PWM",src:n(7053).Z,width:"400",height:"438"})),(0,t.kt)("p",null,"Analisando as formas de onda nota-se que a frequ\xeancia da forma de onda tem o mesmo valor e varia-se o duty cycle da forma de onda. Quando o duty cicle est\xe1 em 0% o valor m\xe9dio da sa\xedda encontra-se em 0 V e consequentemente para um duty cycle de 100% a sa\xedda assume seu valor m\xe1ximo, que no caso \xe9 5V. Para um duty cycle de 50% a sa\xedda assumir\xe1 50% do valor da tens\xe3o, 2,5 V, e assim sucessivamente para cada varia\xe7\xe3o no duty cycle. Portanto, para calcular o valor m\xe9dio da tens\xe3o de sa\xedda de um sinal PWM pode-se utilizar a seguinte equa\xe7\xe3o:"),(0,t.kt)("p",null,"Vout = ","(","duty cycle/100",")","*"," Vcc"),(0,t.kt)("p",null,"Onde:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Vout - tens\xe3o de sa\xedda em V;"),(0,t.kt)("li",{parentName:"ul"},"duty cycle - valor do ciclo ativo do PWM em %;"),(0,t.kt)("li",{parentName:"ul"},"Vcc - tens\xe3o de alimenta\xe7\xe3o em V.")),(0,t.kt)("p",null,"PWM pode ser usada para diversas aplica\xe7\xf5es, como por exemplo:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"controle de velocidade de motores;"),(0,t.kt)("li",{parentName:"ul"},"varia\xe7\xe3o da luminosidade de leds;"),(0,t.kt)("li",{parentName:"ul"},"gera\xe7\xe3o de sinais anal\xf3gicos;"),(0,t.kt)("li",{parentName:"ul"},"gera\xe7\xe3o de sinais de \xe1udio.")),(0,t.kt)("p",null,"Fonte: ",(0,t.kt)("a",{parentName:"p",href:"https://www.embarcados.com.br/pwm-do-arduino/"},"Usando as sa\xeddas PWM do Arduino")),(0,t.kt)("p",null,"Na Franzininho temos ",(0,t.kt)("strong",{parentName:"p"},"3 pinos")," que pode ser usado como saidas PWM","(","PWM0,PWM1 e PWM4",")"," conforme pinout:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Pinagem Franzininho DIY",src:n(4648).Z,width:"1209",height:"869"})),(0,t.kt)("blockquote",null,(0,t.kt)("p",{parentName:"blockquote"},(0,t.kt)("strong",{parentName:"p"},"Verificar limita\xe7\xf5es de uso dos pinos"))),(0,t.kt)("h2",{id:"fun\xe7\xe3o"},"Fun\xe7\xe3o"),(0,t.kt)("p",null,"A fun\xe7\xe3o analogWrite","(",")"," escreve um valor de PWM em um pino digital que possui a fun\xe7\xe3o PWM. Para usar o pino como sa\xedda PWM \xe9 necess\xe1rio configur\xe1-lo como sa\xedda digital."),(0,t.kt)("h3",{id:"sintaxe"},"Sintaxe:"),(0,t.kt)("p",null,(0,t.kt)("inlineCode",{parentName:"p"},"analogWrite(pino, valor);")),(0,t.kt)("h3",{id:"par\xe2metros"},"Par\xe2metros:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"pino:")," n\xfamero do pino onde ser\xe1 gerado o sinal PWM ","(","0,1,4 na Franzininho",")",";"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"valor:")," valor m\xe9dio da tens\xe3o de sa\xedda que ser\xe1 gerado por PWM, entre 0 e 255, onde 0 representa 0V e 255, 5V.")),(0,t.kt)("h3",{id:"exemplo"},"Exemplo"),(0,t.kt)("p",null,"Vamos controlar o brilho do LED conforme o valor lido no potenci\xf4metro:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Circuito",src:n(1426).Z,width:"1590",height:"1017"})),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-cpp"},"const byte LED = 1; //pino do LED\nconst byte POT = A1; //pino do Potenci\xf4metro\n\nvoid setup() {\n pinMode(LED,OUTPUT);\n}\n\nvoid loop() {\n\n int valor = analogRead(POT); // l\xea o valor do potenci\xf4metro\n analogWrite(LED,valor/4); //escreve no LED valor entre 0 e 255\n\n}\n")),(0,t.kt)("h3",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,t.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310740273604854336?view=diagram"}))}u.isMDXComponent=!0},4648:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/pinagem-V2-7047a8d5930175670acc131497791fcc.png"},1426:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/circuito-a6a0591bc42320cbe29b14bd9332f3c2.png"},7053:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/pwm-1a77c519e01b2cf6e365dd2e6e3a624e.jpg"}}]); \ No newline at end of file diff --git a/en/assets/js/c397fa15.4b17e918.js b/en/assets/js/c397fa15.4b17e918.js deleted file mode 100755 index eaa05886a..000000000 --- a/en/assets/js/c397fa15.4b17e918.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4253],{3905:(e,o,r)=>{r.d(o,{Zo:()=>u,kt:()=>h});var i=r(7294);function a(e,o,r){return o in e?Object.defineProperty(e,o,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[o]=r,e}function t(e,o){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);o&&(i=i.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),r.push.apply(r,i)}return r}function n(e){for(var o=1;o<arguments.length;o++){var r=null!=arguments[o]?arguments[o]:{};o%2?t(Object(r),!0).forEach((function(o){a(e,o,r[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):t(Object(r)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(r,o))}))}return e}function s(e,o){if(null==e)return{};var r,i,a=function(e,o){if(null==e)return{};var r,i,a={},t=Object.keys(e);for(i=0;i<t.length;i++)r=t[i],o.indexOf(r)>=0||(a[r]=e[r]);return a}(e,o);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(i=0;i<t.length;i++)r=t[i],o.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=i.createContext({}),c=function(e){var o=i.useContext(p),r=o;return e&&(r="function"==typeof e?e(o):n(n({},o),e)),r},u=function(e){var o=c(e.components);return i.createElement(p.Provider,{value:o},e.children)},l="mdxType",m={inlineCode:"code",wrapper:function(e){var o=e.children;return i.createElement(i.Fragment,{},o)}},d=i.forwardRef((function(e,o){var r=e.components,a=e.mdxType,t=e.originalType,p=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),l=c(r),d=a,h=l["".concat(p,".").concat(d)]||l[d]||m[d]||t;return r?i.createElement(h,n(n({ref:o},u),{},{components:r})):i.createElement(h,n({ref:o},u))}));function h(e,o){var r=arguments,a=o&&o.mdxType;if("string"==typeof e||a){var t=r.length,n=new Array(t);n[0]=d;var s={};for(var p in o)hasOwnProperty.call(o,p)&&(s[p]=o[p]);s.originalType=e,s[l]="string"==typeof e?e:a,n[1]=s;for(var c=2;c<t;c++)n[c]=r[c];return i.createElement.apply(null,n)}return i.createElement.apply(null,r)}d.displayName="MDXCreateElement"},1365:(e,o,r)=>{r.r(o),r.d(o,{assets:()=>p,contentTitle:()=>n,default:()=>m,frontMatter:()=>t,metadata:()=>s,toc:()=>c});var i=r(3117),a=(r(7294),r(3905));const t={id:"circuitpython-primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-circuitpython/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi",author:"Diana Santos"},n=void 0,s={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos",title:"Primeiros Passos",description:"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/circuitpython.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/primeiros-passos",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/circuitpython.md",tags:[],version:"current",frontMatter:{id:"circuitpython-primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-circuitpython/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Primeiros passos com a AWS",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/aws"},next:{title:"Instalando as ferramentas",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas"}},p={},c=[{value:"O que \xe9 CircuitPython?",id:"o-que-\xe9-circuitpython",level:2},{value:"Instala\xe7\xe3o",id:"instala\xe7\xe3o",level:2},{value:"Grava\xe7\xe3o do CircuitPython na Franzininho WiFi",id:"grava\xe7\xe3o-do-circuitpython-na-franzininho-wifi",level:2}],u={toc:c},l="wrapper";function m(e){let{components:o,...r}=e;return(0,a.kt)(l,(0,i.Z)({},u,r,{components:o,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Este documento pretende ajud\xe1-lo a configurar a placa Franzininho WiFi para ser programada usando o CircuitPython."),(0,a.kt)("p",null,"O CircuitPython \xe9 um fork do projeto MicroPython, realizado pela empresa Adafruit. A Adafruit vem desenvolvendo diversas bibliotecas e recursos para programa\xe7\xe3o de microcontroladores com Python. Saiba mais sobre o projeto em: ",(0,a.kt)("a",{parentName:"p",href:"https://circuitpython.org/"},"CircuitPython"),"."),(0,a.kt)("p",null,"A seguir apresentamos os passos para grava\xe7\xe3o do CircuitPython na Franzininho WiFi e preparar o ambiente."),(0,a.kt)("h2",{id:"o-que-\xe9-circuitpython"},"O que \xe9 CircuitPython?"),(0,a.kt)("p",null,"CircuitPython \xe9 uma linguagem de programa\xe7\xe3o projetada para simplificar a experimenta\xe7\xe3o e o aprendizado de programa\xe7\xe3o em placas com microcontroladores de baixo custo. Isso torna os primeiros passos mais f\xe1ceis do que nunca, sem a necessidade de downloads iniciais no computador de trabalho. Assim, ap\xf3s configurar a placa, abra qualquer editor de texto e comece a editar o c\xf3digo."),(0,a.kt)("p",null,"O CircuitPython traz o Python para dentro dos microcontroladores. Voc\xea pode saber mais sobre o projeto CircuitPython aqui: ",(0,a.kt)("a",{parentName:"p",href:"http://learn.adafruit.com/welcome-to-circuitpython/what-is-circuitpython"},"learn.adafruit.com/circuitpython")),(0,a.kt)("p",null,"A placa Franzininho WiFi foi ",(0,a.kt)("a",{parentName:"p",href:"https://circuitpython.org/downloads?q=franzininho"},"adicionada ao CircuitPython")," e todas as releases do CircuitPyhton ser\xe3o compilados para ela. Esse foi um passo muito importante para o projeto e possibilitar\xe1 o desenvolvimento de aplica\xe7\xf5es com o ESP32-S2 usando a linguagem Python."),(0,a.kt)("h2",{id:"instala\xe7\xe3o"},"Instala\xe7\xe3o"),(0,a.kt)("p",null,"Antes de come\xe7ar a divers\xe3o de programar a Franzininho WIFI com o CircuitPython, precisamos realizar alguns passos para configura\xe7\xe3o. Nesta etapa gravaremos o firmware do CircuitPython na Franzininho WiFi e prepararemos o ambiente para voc\xea usar sua placa."),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Se sua placa j\xe1 est\xe1 com o CircuitPython, voc\xea n\xe3o precisa fazer essa etapa. Para verificar se sua placa est\xe1 com CircuitPython plugue-a no computador e veja se \xe9 criado um dispositivo de armazenamento chamado CIRCUITPY. Caso contr\xe1rio, fa\xe7a o procedimento abaixo.")),(0,a.kt)("p",null,"Nesse momento voc\xea precisar\xe1 apenas de um computador com o sistema operacional que voc\xea est\xe1 acostumado a usar e a placa Franzininho WiFi."),(0,a.kt)("p",null,"Bora! Colocar a m\xe3o na massa?"),(0,a.kt)("h2",{id:"grava\xe7\xe3o-do-circuitpython-na-franzininho-wifi"},"Grava\xe7\xe3o do CircuitPython na Franzininho WiFi"),(0,a.kt)("iframe",{width:"809",height:"455",src:"https://www.youtube.com/embed/wU7wvfxmcS0",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,a.kt)("p",null,"Ferramenta de grava\xe7\xe3o: ",(0,a.kt)("a",{parentName:"p",href:"https://franzininho.github.io/webdfu-franzininho-wifi/dfu-util/"},"https://franzininho.github.io/webdfu-franzininho-wifi/dfu-util/")),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Autor"),(0,a.kt)("th",{parentName:"tr",align:null},(0,a.kt)("a",{parentName:"th",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza")))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Data:"),(0,a.kt)("td",{parentName:"tr",align:null},"16/09/2021")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/c397fa15.630a00c3.js b/en/assets/js/c397fa15.630a00c3.js new file mode 100755 index 000000000..7b741980a --- /dev/null +++ b/en/assets/js/c397fa15.630a00c3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5280],{18276:(i,e,o)=>{o.r(e),o.d(e,{assets:()=>c,contentTitle:()=>t,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var r=o(17624),n=o(95788);const a={id:"circuitpython-primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-circuitpython/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi",author:"Diana Santos"},t=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos",title:"Primeiros Passos",description:"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/circuitpython.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/primeiros-passos",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/circuitpython.md",tags:[],version:"current",frontMatter:{id:"circuitpython-primeiros-passos",title:"Primeiros Passos",slug:"/franzininho-wifi/exemplos-circuitpython/primeiros-passos",description:"Aprenda dar os primeiros passo no uso do CircuitPython na Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Primeiros passos com a AWS",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/aws"},next:{title:"Instalando as ferramentas",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas"}},c={},p=[{value:"O que \xe9 CircuitPython?",id:"o-que-\xe9-circuitpython",level:2},{value:"Instala\xe7\xe3o",id:"instala\xe7\xe3o",level:2},{value:"Grava\xe7\xe3o do CircuitPython na Franzininho WiFi",id:"grava\xe7\xe3o-do-circuitpython-na-franzininho-wifi",level:2}];function d(i){const e={a:"a",admonition:"admonition",h2:"h2",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.MN)(),...i.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.p,{children:"Este documento pretende ajud\xe1-lo a configurar a placa Franzininho WiFi para ser programada usando o CircuitPython."}),"\n",(0,r.jsxs)(e.p,{children:["O CircuitPython \xe9 um fork do projeto MicroPython, realizado pela empresa Adafruit. A Adafruit vem desenvolvendo diversas bibliotecas e recursos para programa\xe7\xe3o de microcontroladores com Python. Saiba mais sobre o projeto em: ",(0,r.jsx)(e.a,{href:"https://circuitpython.org/",children:"CircuitPython"}),"."]}),"\n",(0,r.jsx)(e.p,{children:"A seguir apresentamos os passos para grava\xe7\xe3o do CircuitPython na Franzininho WiFi e preparar o ambiente."}),"\n",(0,r.jsx)(e.h2,{id:"o-que-\xe9-circuitpython",children:"O que \xe9 CircuitPython?"}),"\n",(0,r.jsx)(e.p,{children:"CircuitPython \xe9 uma linguagem de programa\xe7\xe3o projetada para simplificar a experimenta\xe7\xe3o e o aprendizado de programa\xe7\xe3o em placas com microcontroladores de baixo custo. Isso torna os primeiros passos mais f\xe1ceis do que nunca, sem a necessidade de downloads iniciais no computador de trabalho. Assim, ap\xf3s configurar a placa, abra qualquer editor de texto e comece a editar o c\xf3digo."}),"\n",(0,r.jsxs)(e.p,{children:["O CircuitPython traz o Python para dentro dos microcontroladores. Voc\xea pode saber mais sobre o projeto CircuitPython aqui: ",(0,r.jsx)(e.a,{href:"http://learn.adafruit.com/welcome-to-circuitpython/what-is-circuitpython",children:"learn.adafruit.com/circuitpython"})]}),"\n",(0,r.jsxs)(e.p,{children:["A placa Franzininho WiFi foi ",(0,r.jsx)(e.a,{href:"https://circuitpython.org/downloads?q=franzininho",children:"adicionada ao CircuitPython"})," e todas as releases do CircuitPyhton ser\xe3o compilados para ela. Esse foi um passo muito importante para o projeto e possibilitar\xe1 o desenvolvimento de aplica\xe7\xf5es com o ESP32-S2 usando a linguagem Python."]}),"\n",(0,r.jsx)(e.h2,{id:"instala\xe7\xe3o",children:"Instala\xe7\xe3o"}),"\n",(0,r.jsx)(e.p,{children:"Antes de come\xe7ar a divers\xe3o de programar a Franzininho WIFI com o CircuitPython, precisamos realizar alguns passos para configura\xe7\xe3o. Nesta etapa gravaremos o firmware do CircuitPython na Franzininho WiFi e prepararemos o ambiente para voc\xea usar sua placa."}),"\n",(0,r.jsx)(e.admonition,{type:"info",children:(0,r.jsx)(e.p,{children:"Se sua placa j\xe1 est\xe1 com o CircuitPython, voc\xea n\xe3o precisa fazer essa etapa. Para verificar se sua placa est\xe1 com CircuitPython plugue-a no computador e veja se \xe9 criado um dispositivo de armazenamento chamado CIRCUITPY. Caso contr\xe1rio, fa\xe7a o procedimento abaixo."})}),"\n",(0,r.jsx)(e.p,{children:"Nesse momento voc\xea precisar\xe1 apenas de um computador com o sistema operacional que voc\xea est\xe1 acostumado a usar e a placa Franzininho WiFi."}),"\n",(0,r.jsx)(e.p,{children:"Bora! Colocar a m\xe3o na massa?"}),"\n",(0,r.jsx)(e.h2,{id:"grava\xe7\xe3o-do-circuitpython-na-franzininho-wifi",children:"Grava\xe7\xe3o do CircuitPython na Franzininho WiFi"}),"\n",(0,r.jsx)("iframe",{width:"809",height:"455",src:"https://www.youtube.com/embed/wU7wvfxmcS0",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,r.jsxs)(e.p,{children:["Ferramenta de grava\xe7\xe3o: ",(0,r.jsx)(e.a,{href:"https://franzininho.github.io/webdfu-franzininho-wifi/dfu-util/",children:"https://franzininho.github.io/webdfu-franzininho-wifi/dfu-util/"})]}),"\n",(0,r.jsxs)(e.table,{children:[(0,r.jsx)(e.thead,{children:(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.th,{children:"Autor"}),(0,r.jsx)(e.th,{children:(0,r.jsx)(e.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]})}),(0,r.jsx)(e.tbody,{children:(0,r.jsxs)(e.tr,{children:[(0,r.jsx)(e.td,{children:"Data:"}),(0,r.jsx)(e.td,{children:"16/09/2021"})]})})]})]})}function u(i={}){const{wrapper:e}={...(0,n.MN)(),...i.components};return e?(0,r.jsx)(e,{...i,children:(0,r.jsx)(d,{...i})}):d(i)}},95788:(i,e,o)=>{o.d(e,{MN:()=>p});var r=o(11504);function n(i,e,o){return e in i?Object.defineProperty(i,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):i[e]=o,i}function a(i,e){var o=Object.keys(i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable}))),o.push.apply(o,r)}return o}function t(i){for(var e=1;e<arguments.length;e++){var o=null!=arguments[e]?arguments[e]:{};e%2?a(Object(o),!0).forEach((function(e){n(i,e,o[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(i,Object.getOwnPropertyDescriptors(o)):a(Object(o)).forEach((function(e){Object.defineProperty(i,e,Object.getOwnPropertyDescriptor(o,e))}))}return i}function s(i,e){if(null==i)return{};var o,r,n=function(i,e){if(null==i)return{};var o,r,n={},a=Object.keys(i);for(r=0;r<a.length;r++)o=a[r],e.indexOf(o)>=0||(n[o]=i[o]);return n}(i,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(i);for(r=0;r<a.length;r++)o=a[r],e.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(i,o)&&(n[o]=i[o])}return n}var c=r.createContext({}),p=function(i){var e=r.useContext(c),o=e;return i&&(o="function"==typeof i?i(e):t(t({},e),i)),o},d={inlineCode:"code",wrapper:function(i){var e=i.children;return r.createElement(r.Fragment,{},e)}},u=r.forwardRef((function(i,e){var o=i.components,n=i.mdxType,a=i.originalType,c=i.parentName,u=s(i,["components","mdxType","originalType","parentName"]),l=p(o),h=n,m=l["".concat(c,".").concat(h)]||l[h]||d[h]||a;return o?r.createElement(m,t(t({ref:e},u),{},{components:o})):r.createElement(m,t({ref:e},u))}));u.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/c4380c1f.2ba302e2.js b/en/assets/js/c4380c1f.2ba302e2.js new file mode 100755 index 000000000..7f102dff4 --- /dev/null +++ b/en/assets/js/c4380c1f.2ba302e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6776],{6580:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>l,contentTitle:()=>t,default:()=>m,frontMatter:()=>n,metadata:()=>s,toc:()=>d});var i=a(17624),r=a(95788);const n={id:"biblioteca-laboratorioFW",title:"laboratorioFW",slug:"biblioteca-laboratorioFW",description:"O que \xe9 a biblioteca laboratorioFW"},t=void 0,s={id:"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",title:"laboratorioFW",description:"O que \xe9 a biblioteca laboratorioFW",source:"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW.md",sourceDirName:"LaboratorioSistemasIot/bibliotecas",slug:"/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",permalink:"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW.md",tags:[],version:"current",frontMatter:{id:"biblioteca-laboratorioFW",title:"laboratorioFW",slug:"biblioteca-laboratorioFW",description:"O que \xe9 a biblioteca laboratorioFW"},sidebar:"docs",previous:{title:"Adaptador Arduino Uno",permalink:"/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno"},next:{title:"laboratorioFW_ARDUNO",permalink:"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO"}},l={},d=[{value:"Como instalar a biblioteca",id:"como-instalar-a-biblioteca",level:2},{value:"Como usar a biblioteca",id:"como-usar-a-biblioteca",level:2},{value:"Exemplo de utiliza\xe7\xe3o:",id:"exemplo-de-utiliza\xe7\xe3o",level:2},{value:"Exemplos implementados:",id:"exemplos-implementados",level:2},{value:"testes_completos.ino",id:"testes_completosino",level:3},{value:"adivinhe_a_senha.ino",id:"adivinhe_a_senhaino",level:3},{value:"ativar_led_RGB_com_potenciometro_e_botoes.ino",id:"ativar_led_rgb_com_potenciometro_e_botoesino",level:3},{value:"ativar_servo_motor_com_botoes.ino",id:"ativar_servo_motor_com_botoesino",level:3},{value:"contagem_display_7seg.ino",id:"contagem_display_7segino",level:3},{value:"controle_led_com_ldr.ino",id:"controle_led_com_ldrino",level:3},{value:"do_re_mi_fa.ino",id:"do_re_mi_faino",level:3},{value:"genio.ino",id:"genioino",level:3},{value:"leitura_do_teclado.ino",id:"leitura_do_tecladoino",level:3},{value:"leitura_sensores_externos.ino",id:"leitura_sensores_externosino",level:3},{value:"leitura_sensores_grove.ino",id:"leitura_sensores_groveino",level:3},{value:"leitura_umidade_temperatura_oled.ino",id:"leitura_umidade_temperatura_oledino",level:3},{value:"movimentar_elemento_oled_joystick.ino",id:"movimentar_elemento_oled_joystickino",level:3}];function c(e){const o={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,r.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(o.p,{children:["Nesta biblioteca \xe9 poss\xedvel encontrar o mapeamento entre a pinagem da placa ",(0,i.jsx)(o.strong,{children:"Franzininho Wifi"})," e a codifica\xe7\xe3o dos pinos de ativa\xe7\xe3o da placa Laborat\xf3rio de sistemas embarcados e IoT e exemplos de utiliza\xe7\xe3o dos perif\xe9ricos dispon\xedveis na placa."]}),"\n",(0,i.jsxs)(o.p,{children:[(0,i.jsx)(o.a,{href:"https://github.com/Franzininho/biblioteca-laboratorioFW",children:"Clique aqui"})," para acessar o reposit\xf3rio da biblioteca no Github."]}),"\n",(0,i.jsx)(o.h2,{id:"como-instalar-a-biblioteca",children:"Como instalar a biblioteca"}),"\n",(0,i.jsxs)(o.ol,{children:["\n",(0,i.jsxs)(o.li,{children:["Fa\xe7a o donwload da biblioteca em formato zip clicando em ",(0,i.jsx)(o.strong,{children:"Code"})," e depois em ",(0,i.jsx)(o.strong,{children:"Download ZIP"})]}),"\n"]}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{src:a(68160).c+"",width:"528",height:"398"})}),"\n",(0,i.jsxs)(o.ol,{start:"2",children:["\n",(0,i.jsx)(o.li,{children:"Abra a IDE do Arduino"}),"\n",(0,i.jsx)(o.li,{children:"V\xe1 em Sketch > Include Library > Add .ZIP Library"}),"\n"]}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{src:a(5056).c+"",width:"657",height:"378"})}),"\n",(0,i.jsxs)(o.ol,{start:"4",children:["\n",(0,i.jsx)(o.li,{children:"Selecione o arquivo zip baixado e clique em ok"}),"\n",(0,i.jsx)(o.li,{children:"Opcional: Procure pelos exemplos da biblioteca em File > Examples"}),"\n"]}),"\n",(0,i.jsx)(o.h2,{id:"como-usar-a-biblioteca",children:"Como usar a biblioteca"}),"\n",(0,i.jsxs)(o.p,{children:["Para utilizar a biblioteca basta inclu\xed-la no seu arquivo de c\xf3digo com a linha ",(0,i.jsx)(o.code,{children:"#include<laboratorioFW.h>"}),". Depois disso, voc\xea pode utilizar os c\xf3digos dos pinos de ativa\xe7\xe3o na placa dentro do seu c\xf3digo."]}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsxs)(o.strong,{children:["Importante : Os algorismos do c\xf3digo do pino de ativa\xe7\xe3o s\xe3o separados por um caractere de ",(0,i.jsx)(o.code,{children:"_"}),", ou seja o pino de ativa\xe7\xe3o C0 pode ser acessado no c\xf3digo atrav\xe9s do c\xf3digo C_0 e assim por diante."]})}),"\n",(0,i.jsx)(o.h2,{id:"exemplo-de-utiliza\xe7\xe3o",children:"Exemplo de utiliza\xe7\xe3o:"}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-c",children:"#include <laborarotioFW.h>\n\n#define led A_1\n\nvoid setup(){\n pinMode(led,OUTPUT);\n}\n\nvoid loop{\n digitalWrite(led,HIGH);\n delay(1000);\n digitalWrite(led,LOW);\n delay(1000);\n}\n"})}),"\n",(0,i.jsx)(o.h2,{id:"exemplos-implementados",children:"Exemplos implementados:"}),"\n",(0,i.jsx)(o.h3,{id:"testes_completosino",children:"testes_completos.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo temos todos os c\xf3digos necess\xe1rios para os testes de todos os perif\xe9ricos dispon\xedveis na placa. Este c\xf3digo \xe9 um c\xf3digo para a valida\xe7\xe3o da placa e n\xe3o para ser utilizado no cotidiano."}),"\n",(0,i.jsx)(o.h3,{id:"adivinhe_a_senhaino",children:"adivinhe_a_senha.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo implementamos um sistema de verifica\xe7\xe3o de senha utilizando o teclado matricial e a biblioteca ",(0,i.jsx)(o.code,{children:"Keypad"})," para fazer o mapeamento\ndo teclado. Neste sistema, o usu\xe1rio deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usu\xe1rio indica que terminou de digitar a senha apertando um o bot\xe3o correspondente ao caractere ",(0,i.jsx)(o.code,{children:"*"})," ou ",(0,i.jsx)(o.code,{children:"#"}),", essa sequ\xeancia \xe9 comparada com uma senha previamente definida no c\xf3digo. Um led \xe9 aceso para indicar se a senha est\xe1 correta ou n\xe3o e uma mensagem com essa informa\xe7\xe3o \xe9 impresso no monitor serial."]}),"\n",(0,i.jsx)(o.h3,{id:"ativar_led_rgb_com_potenciometro_e_botoesino",children:"ativar_led_RGB_com_potenciometro_e_botoes.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenci\xf4metro e tr\xeas bot\xf5es. Os tr\xeas bot\xf5es s\xe3o utilizados para selecionar qual cor do LED RGB ser\xe1 controlada (vermelho, verde e azul) e a leitura anal\xf3gica do potenci\xf4metro \xe9 usada para dosar a intensidade da cor do terminal."}),"\n",(0,i.jsx)(o.h3,{id:"ativar_servo_motor_com_botoesino",children:"ativar_servo_motor_com_botoes.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, utilizamos dois bot\xf5es para controlar a posi\xe7\xe3o de um servo motor. Os bot\xf5es s\xe3o associados no c\xf3digo \xe0s dire\xe7\xf5es esquerda e direita e alteram o \xe2ngulo do servo fazendo com que seja poss\xedvel moviment\xe1-lo nas duas dire\xe7\xf5es. Foi usada a biblioteca ESP32_S2_ISR_Servo."}),"\n",(0,i.jsx)(o.h3,{id:"contagem_display_7segino",children:"contagem_display_7seg.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos."}),"\n",(0,i.jsx)(o.h3,{id:"controle_led_com_ldrino",children:"controle_led_com_ldr.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura \xe9 mapeada e o valor resultante \xe9 usado para acender um LED. O exemplo tamb\xe9m conta com um bot\xe3o que controla um estado interno do programa e seleciona se a leitura ser\xe1 impressa como \xe9 lida ou com l\xf3gica complementar."}),"\n",(0,i.jsx)(o.h3,{id:"do_re_mi_faino",children:"do_re_mi_fa.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo uma m\xfasica \xe9 tocada pelo buzzer em conjunto com a ativa\xe7\xe3o\ndo LED RGB endere\xe7\xe1vel. O programa utiliza a biblioteca ",(0,i.jsx)(o.code,{children:"Adafruit_NeoPixel"})," para controlar o LED."]}),"\n",(0,i.jsx)(o.h3,{id:"genioino",children:"genio.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, implementamos o jogo Simon, tamb\xe9m conhecido como g\xeanio. Neste jogo, quatro LEDs s\xe3o ativados em uma sequ\xeancia gerada aleat\xf3riamente e essa sequ\xeancia \xe9 apresentada para o jogador, que deve repetir a sequ\xeancia na ordem correta pressionando os bot\xf5es correspondentes. Quando os LEDs acendem, um som correspondente \xe9 tocado no buzzer."}),"\n",(0,i.jsx)(o.h3,{id:"leitura_do_tecladoino",children:"leitura_do_teclado.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e\na imprimimos essa tecla no no monitor serial. A biblioteca ",(0,i.jsx)(o.code,{children:"Keypad"})," \xe9 utilizada para fazer o mapeamento do teclado."]}),"\n",(0,i.jsx)(o.h3,{id:"leitura_sensores_externosino",children:"leitura_sensores_externos.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets\npara conectores externos da placa e imprimimos os valores lidos no monitor serial."}),"\n",(0,i.jsx)(o.h3,{id:"leitura_sensores_groveino",children:"leitura_sensores_grove.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial."}),"\n",(0,i.jsx)(o.h3,{id:"leitura_umidade_temperatura_oledino",children:"leitura_umidade_temperatura_oled.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, s\xe3o utilizadas as bibliotecas ",(0,i.jsx)(o.code,{children:"DTH"})," e ",(0,i.jsx)(o.code,{children:"SSD1306Wire"}),"."]}),"\n",(0,i.jsx)(o.h3,{id:"movimentar_elemento_oled_joystickino",children:"movimentar_elemento_oled_joystick.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo utilizamos o display OLED para mostrar um asterisco que pode ser controlado pelo m\xf3dulo de joystick se movendo no display. Foi utilizada a biblioteca ",(0,i.jsx)(o.code,{children:"SSD1306Wire"}),"."]}),"\n",(0,i.jsx)(o.admonition,{title:"Obs.",type:"info",children:(0,i.jsxs)(o.p,{children:["Este projeto foi desenvolvido como parte do Trabalho de Conclus\xe3o de Curso de ",(0,i.jsx)(o.a,{href:"https://github.com/LelePG",children:"Let\xedcia Pegoraro Garcez"}),"."]})})]})}function m(e={}){const{wrapper:o}={...(0,r.MN)(),...e.components};return o?(0,i.jsx)(o,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},95788:(e,o,a)=>{a.d(o,{MN:()=>d});var i=a(11504);function r(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function n(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);o&&(i=i.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,i)}return a}function t(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?n(Object(a),!0).forEach((function(o){r(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function s(e,o){if(null==e)return{};var a,i,r=function(e,o){if(null==e)return{};var a,i,r={},n=Object.keys(e);for(i=0;i<n.length;i++)a=n[i],o.indexOf(a)>=0||(r[a]=e[a]);return r}(e,o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i<n.length;i++)a=n[i],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=i.createContext({}),d=function(e){var o=i.useContext(l),a=o;return e&&(a="function"==typeof e?e(o):t(t({},o),e)),a},c={inlineCode:"code",wrapper:function(e){var o=e.children;return i.createElement(i.Fragment,{},o)}},m=i.forwardRef((function(e,o){var a=e.components,r=e.mdxType,n=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),p=d(a),u=r,b=p["".concat(l,".").concat(u)]||p[u]||c[u]||n;return a?i.createElement(b,t(t({ref:o},m),{},{components:a})):i.createElement(b,t({ref:o},m))}));m.displayName="MDXCreateElement"},5056:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/add-zip-ce38fdcac233471a2c4ff935e87d70bd.png"},68160:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/download-zip-ba60fb48387d2208e3f003c8afe3db77.png"}}]); \ No newline at end of file diff --git a/en/assets/js/c4380c1f.95de43ef.js b/en/assets/js/c4380c1f.95de43ef.js deleted file mode 100755 index 9c943473a..000000000 --- a/en/assets/js/c4380c1f.95de43ef.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2976],{3905:(e,o,a)=>{a.d(o,{Zo:()=>c,kt:()=>b});var t=a(7294);function i(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function r(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,t)}return a}function n(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?r(Object(a),!0).forEach((function(o){i(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function l(e,o){if(null==e)return{};var a,t,i=function(e,o){if(null==e)return{};var a,t,i={},r=Object.keys(e);for(t=0;t<r.length;t++)a=r[t],o.indexOf(a)>=0||(i[a]=e[a]);return i}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t<r.length;t++)a=r[t],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=t.createContext({}),d=function(e){var o=t.useContext(s),a=o;return e&&(a="function"==typeof e?e(o):n(n({},o),e)),a},c=function(e){var o=d(e.components);return t.createElement(s.Provider,{value:o},e.children)},m="mdxType",p={inlineCode:"code",wrapper:function(e){var o=e.children;return t.createElement(t.Fragment,{},o)}},u=t.forwardRef((function(e,o){var a=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=d(a),u=i,b=m["".concat(s,".").concat(u)]||m[u]||p[u]||r;return a?t.createElement(b,n(n({ref:o},c),{},{components:a})):t.createElement(b,n({ref:o},c))}));function b(e,o){var a=arguments,i=o&&o.mdxType;if("string"==typeof e||i){var r=a.length,n=new Array(r);n[0]=u;var l={};for(var s in o)hasOwnProperty.call(o,s)&&(l[s]=o[s]);l.originalType=e,l[m]="string"==typeof e?e:i,n[1]=l;for(var d=2;d<r;d++)n[d]=a[d];return t.createElement.apply(null,n)}return t.createElement.apply(null,a)}u.displayName="MDXCreateElement"},2586:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>s,contentTitle:()=>n,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var t=a(3117),i=(a(7294),a(3905));const r={id:"biblioteca-laboratorioFW",title:"laboratorioFW",slug:"biblioteca-laboratorioFW",description:"O que \xe9 a biblioteca laboratorioFW"},n=void 0,l={unversionedId:"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",id:"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",title:"laboratorioFW",description:"O que \xe9 a biblioteca laboratorioFW",source:"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW.md",sourceDirName:"LaboratorioSistemasIot/bibliotecas",slug:"/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",permalink:"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW.md",tags:[],version:"current",frontMatter:{id:"biblioteca-laboratorioFW",title:"laboratorioFW",slug:"biblioteca-laboratorioFW",description:"O que \xe9 a biblioteca laboratorioFW"},sidebar:"docs",previous:{title:"Adaptador Arduino Uno",permalink:"/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno"},next:{title:"laboratorioFW_ARDUNO",permalink:"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO"}},s={},d=[{value:"Como instalar a biblioteca",id:"como-instalar-a-biblioteca",level:2},{value:"Como usar a biblioteca",id:"como-usar-a-biblioteca",level:2},{value:"Exemplo de utiliza\xe7\xe3o:",id:"exemplo-de-utiliza\xe7\xe3o",level:2},{value:"Exemplos implementados:",id:"exemplos-implementados",level:2},{value:"testes_completos.ino",id:"testes_completosino",level:3},{value:"adivinhe_a_senha.ino",id:"adivinhe_a_senhaino",level:3},{value:"ativar_led_RGB_com_potenciometro_e_botoes.ino",id:"ativar_led_rgb_com_potenciometro_e_botoesino",level:3},{value:"ativar_servo_motor_com_botoes.ino",id:"ativar_servo_motor_com_botoesino",level:3},{value:"contagem_display_7seg.ino",id:"contagem_display_7segino",level:3},{value:"controle_led_com_ldr.ino",id:"controle_led_com_ldrino",level:3},{value:"do_re_mi_fa.ino",id:"do_re_mi_faino",level:3},{value:"genio.ino",id:"genioino",level:3},{value:"leitura_do_teclado.ino",id:"leitura_do_tecladoino",level:3},{value:"leitura_sensores_externos.ino",id:"leitura_sensores_externosino",level:3},{value:"leitura_sensores_grove.ino",id:"leitura_sensores_groveino",level:3},{value:"leitura_umidade_temperatura_oled.ino",id:"leitura_umidade_temperatura_oledino",level:3},{value:"movimentar_elemento_oled_joystick.ino",id:"movimentar_elemento_oled_joystickino",level:3}],c={toc:d},m="wrapper";function p(e){let{components:o,...r}=e;return(0,i.kt)(m,(0,t.Z)({},c,r,{components:o,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Nesta biblioteca \xe9 poss\xedvel encontrar o mapeamento entre a pinagem da placa ",(0,i.kt)("strong",{parentName:"p"},"Franzininho Wifi")," e a codifica\xe7\xe3o dos pinos de ativa\xe7\xe3o da placa Laborat\xf3rio de sistemas embarcados e IoT e exemplos de utiliza\xe7\xe3o dos perif\xe9ricos dispon\xedveis na placa."),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/biblioteca-laboratorioFW"},"Clique aqui")," para acessar o reposit\xf3rio da biblioteca no Github."),(0,i.kt)("h2",{id:"como-instalar-a-biblioteca"},"Como instalar a biblioteca"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Fa\xe7a o donwload da biblioteca em formato zip clicando em ",(0,i.kt)("strong",{parentName:"li"},"Code")," e depois em ",(0,i.kt)("strong",{parentName:"li"},"Download ZIP"))),(0,i.kt)("p",null,(0,i.kt)("img",{src:a(2467).Z,width:"528",height:"398"})),(0,i.kt)("ol",{start:2},(0,i.kt)("li",{parentName:"ol"},"Abra a IDE do Arduino"),(0,i.kt)("li",{parentName:"ol"},"V\xe1 em Sketch > Include Library > Add .ZIP Library")),(0,i.kt)("p",null,(0,i.kt)("img",{src:a(3992).Z,width:"657",height:"378"})),(0,i.kt)("ol",{start:4},(0,i.kt)("li",{parentName:"ol"},"Selecione o arquivo zip baixado e clique em ok"),(0,i.kt)("li",{parentName:"ol"},"Opcional: Procure pelos exemplos da biblioteca em File > Examples")),(0,i.kt)("h2",{id:"como-usar-a-biblioteca"},"Como usar a biblioteca"),(0,i.kt)("p",null,"Para utilizar a biblioteca basta inclu\xed-la no seu arquivo de c\xf3digo com a linha ",(0,i.kt)("inlineCode",{parentName:"p"},"#include<laboratorioFW.h>"),". Depois disso, voc\xea pode utilizar os c\xf3digos dos pinos de ativa\xe7\xe3o na placa dentro do seu c\xf3digo."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Importante : Os algorismos do c\xf3digo do pino de ativa\xe7\xe3o s\xe3o separados por um caractere de ",(0,i.kt)("inlineCode",{parentName:"strong"},"_"),", ou seja o pino de ativa\xe7\xe3o C0 pode ser acessado no c\xf3digo atrav\xe9s do c\xf3digo C_0 e assim por diante.")),(0,i.kt)("h2",{id:"exemplo-de-utiliza\xe7\xe3o"},"Exemplo de utiliza\xe7\xe3o:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-c"},"#include <laborarotioFW.h>\n\n#define led A_1\n\nvoid setup(){\n pinMode(led,OUTPUT);\n}\n\nvoid loop{\n digitalWrite(led,HIGH);\n delay(1000);\n digitalWrite(led,LOW);\n delay(1000);\n}\n")),(0,i.kt)("h2",{id:"exemplos-implementados"},"Exemplos implementados:"),(0,i.kt)("h3",{id:"testes_completosino"},"testes_completos.ino"),(0,i.kt)("p",null,"Neste exemplo temos todos os c\xf3digos necess\xe1rios para os testes de todos os perif\xe9ricos dispon\xedveis na placa. Este c\xf3digo \xe9 um c\xf3digo para a valida\xe7\xe3o da placa e n\xe3o para ser utilizado no cotidiano."),(0,i.kt)("h3",{id:"adivinhe_a_senhaino"},"adivinhe_a_senha.ino"),(0,i.kt)("p",null,"Neste exemplo implementamos um sistema de verifica\xe7\xe3o de senha utilizando o teclado matricial e a biblioteca ",(0,i.kt)("inlineCode",{parentName:"p"},"Keypad")," para fazer o mapeamento\ndo teclado. Neste sistema, o usu\xe1rio deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usu\xe1rio indica que terminou de digitar a senha apertando um o bot\xe3o correspondente ao caractere ",(0,i.kt)("inlineCode",{parentName:"p"},"*")," ou ",(0,i.kt)("inlineCode",{parentName:"p"},"#"),", essa sequ\xeancia \xe9 comparada com uma senha previamente definida no c\xf3digo. Um led \xe9 aceso para indicar se a senha est\xe1 correta ou n\xe3o e uma mensagem com essa informa\xe7\xe3o \xe9 impresso no monitor serial."),(0,i.kt)("h3",{id:"ativar_led_rgb_com_potenciometro_e_botoesino"},"ativar_led_RGB_com_potenciometro_e_botoes.ino"),(0,i.kt)("p",null,"Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenci\xf4metro e tr\xeas bot\xf5es. Os tr\xeas bot\xf5es s\xe3o utilizados para selecionar qual cor do LED RGB ser\xe1 controlada (vermelho, verde e azul) e a leitura anal\xf3gica do potenci\xf4metro \xe9 usada para dosar a intensidade da cor do terminal."),(0,i.kt)("h3",{id:"ativar_servo_motor_com_botoesino"},"ativar_servo_motor_com_botoes.ino"),(0,i.kt)("p",null,"Neste exemplo, utilizamos dois bot\xf5es para controlar a posi\xe7\xe3o de um servo motor. Os bot\xf5es s\xe3o associados no c\xf3digo \xe0s dire\xe7\xf5es esquerda e direita e alteram o \xe2ngulo do servo fazendo com que seja poss\xedvel moviment\xe1-lo nas duas dire\xe7\xf5es. Foi usada a biblioteca ESP32_S2_ISR_Servo."),(0,i.kt)("h3",{id:"contagem_display_7segino"},"contagem_display_7seg.ino"),(0,i.kt)("p",null,"Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos."),(0,i.kt)("h3",{id:"controle_led_com_ldrino"},"controle_led_com_ldr.ino"),(0,i.kt)("p",null,"Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura \xe9 mapeada e o valor resultante \xe9 usado para acender um LED. O exemplo tamb\xe9m conta com um bot\xe3o que controla um estado interno do programa e seleciona se a leitura ser\xe1 impressa como \xe9 lida ou com l\xf3gica complementar."),(0,i.kt)("h3",{id:"do_re_mi_faino"},"do_re_mi_fa.ino"),(0,i.kt)("p",null,"Neste exemplo uma m\xfasica \xe9 tocada pelo buzzer em conjunto com a ativa\xe7\xe3o\ndo LED RGB endere\xe7\xe1vel. O programa utiliza a biblioteca ",(0,i.kt)("inlineCode",{parentName:"p"},"Adafruit_NeoPixel")," para controlar o LED."),(0,i.kt)("h3",{id:"genioino"},"genio.ino"),(0,i.kt)("p",null,"Neste exemplo, implementamos o jogo Simon, tamb\xe9m conhecido como g\xeanio. Neste jogo, quatro LEDs s\xe3o ativados em uma sequ\xeancia gerada aleat\xf3riamente e essa sequ\xeancia \xe9 apresentada para o jogador, que deve repetir a sequ\xeancia na ordem correta pressionando os bot\xf5es correspondentes. Quando os LEDs acendem, um som correspondente \xe9 tocado no buzzer."),(0,i.kt)("h3",{id:"leitura_do_tecladoino"},"leitura_do_teclado.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e\na imprimimos essa tecla no no monitor serial. A biblioteca ",(0,i.kt)("inlineCode",{parentName:"p"},"Keypad")," \xe9 utilizada para fazer o mapeamento do teclado."),(0,i.kt)("h3",{id:"leitura_sensores_externosino"},"leitura_sensores_externos.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets\npara conectores externos da placa e imprimimos os valores lidos no monitor serial."),(0,i.kt)("h3",{id:"leitura_sensores_groveino"},"leitura_sensores_grove.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial."),(0,i.kt)("h3",{id:"leitura_umidade_temperatura_oledino"},"leitura_umidade_temperatura_oled.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, s\xe3o utilizadas as bibliotecas ",(0,i.kt)("inlineCode",{parentName:"p"},"DTH")," e ",(0,i.kt)("inlineCode",{parentName:"p"},"SSD1306Wire"),"."),(0,i.kt)("h3",{id:"movimentar_elemento_oled_joystickino"},"movimentar_elemento_oled_joystick.ino"),(0,i.kt)("p",null,"Neste exemplo utilizamos o display OLED para mostrar um asterisco que pode ser controlado pelo m\xf3dulo de joystick se movendo no display. Foi utilizada a biblioteca ",(0,i.kt)("inlineCode",{parentName:"p"},"SSD1306Wire"),"."),(0,i.kt)("admonition",{title:"Obs.",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Este projeto foi desenvolvido como parte do Trabalho de Conclus\xe3o de Curso de ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/LelePG"},"Let\xedcia Pegoraro Garcez"),".")))}p.isMDXComponent=!0},3992:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/add-zip-ce38fdcac233471a2c4ff935e87d70bd.png"},2467:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/download-zip-ba60fb48387d2208e3f003c8afe3db77.png"}}]); \ No newline at end of file diff --git a/en/assets/js/c4f5d8e4.11f52a5e.js b/en/assets/js/c4f5d8e4.11f52a5e.js deleted file mode 100755 index 1a9e75384..000000000 --- a/en/assets/js/c4f5d8e4.11f52a5e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4195],{4338:(e,t,a)=>{a.r(t),a.d(t,{default:()=>f});var r=a(3117),n=a(7294);function o(e){var t,a,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(a=o(e[t]))&&(r&&(r+=" "),r+=a);else for(t in e)e[t]&&(r&&(r+=" "),r+=t);return r}function i(){for(var e,t,a=0,r="";a<arguments.length;)(e=arguments[a++])&&(t=o(e))&&(r&&(r+=" "),r+=t);return r}var s=a(7961),l=a(9960),c=a(2263),m=a(4996);const u={heroBanner:"heroBanner_UJJx",buttons:"buttons_pzbO",features:"features_keug",featureImage:"featureImage_yA8i"},d=[{title:"Open hardware",imageUrl:"img/openhardware_2.svg",description:n.createElement(n.Fragment,null,"Os projetos Franzininho s\xe3o open hardware, ou seja, s\xe3o disponibilizado ao p\xfablico de modo que qualquer um pode construir, modificar, distribuir e utilizar a partir dos arquivos.")},{title:"Open Source",imageUrl:"img/code_2.svg",description:n.createElement(n.Fragment,null,"Trabalhamos com softwares open source e todo os nossos materiais seguem esse formato.")},{title:"Educa\xe7\xe3o Aberta",imageUrl:"img/community_2.svg",description:n.createElement(n.Fragment,null,"Nossos materiais contribuem para uma educa\xe7\xe3o aberta e inclusiva. S\xe3o desenvolvidos de forma colaborativa e revisados pela comunidade.")}];function p(e){let{imageUrl:t,title:a,description:r}=e;const o=(0,m.Z)(t);return n.createElement("div",{className:i("col col--4",u.feature)},o&&n.createElement("div",{className:"text--center"},n.createElement("img",{className:u.featureImage,src:o,alt:a})),n.createElement("h3",null,a),n.createElement("p",null,r))}const f=function(){const e=(0,c.Z)(),{siteConfig:t={}}=e;return n.createElement(s.Z,{title:`Documenta\xe7\xe3o ${t.title}`,description:"Documenta\xe7\xe3o do projeto Franzininho <head />"},n.createElement("header",{className:i("hero hero--primary",u.heroBanner)},n.createElement("div",{className:"container"},n.createElement("h1",{className:"hero__title"},t.title),n.createElement("p",{className:"hero__subtitle"},t.tagline),n.createElement("div",{className:u.buttons},n.createElement(l.Z,{className:i("button button--secondary button--lg",u.getStarted),to:(0,m.Z)("docs/")},"Explore")))),n.createElement("main",null,d&&d.length>0&&n.createElement("section",{className:u.features},n.createElement("div",{className:"container"},n.createElement("div",{className:"row"},d.map(((e,t)=>n.createElement(p,(0,r.Z)({key:t},e)))))))))}}}]); \ No newline at end of file diff --git a/en/assets/js/c4f5d8e4.974a644b.js b/en/assets/js/c4f5d8e4.974a644b.js new file mode 100755 index 000000000..28d440ee2 --- /dev/null +++ b/en/assets/js/c4f5d8e4.974a644b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2632],{15908:(e,r,s)=>{s.r(r),s.d(r,{default:()=>h});s(11504);function a(e){var r,s,i="";if("string"==typeof e||"number"==typeof e)i+=e;else if("object"==typeof e)if(Array.isArray(e))for(r=0;r<e.length;r++)e[r]&&(s=a(e[r]))&&(i&&(i+=" "),i+=s);else for(r in e)e[r]&&(i&&(i+=" "),i+=r);return i}function i(){for(var e,r,s=0,i="";s<arguments.length;)(e=arguments[s++])&&(r=a(e))&&(i&&(i+=" "),i+=r);return i}var o=s(99012),t=s(10867),n=s(28264),c=s(70964);const l={heroBanner:"heroBanner_UJJx",buttons:"buttons_pzbO",features:"features_keug",featureImage:"featureImage_yA8i"};var d=s(17624);const u=[{title:"Open hardware",imageUrl:"img/openhardware_2.svg",description:(0,d.jsx)(d.Fragment,{children:"Os projetos Franzininho s\xe3o open hardware, ou seja, s\xe3o disponibilizado ao p\xfablico de modo que qualquer um pode construir, modificar, distribuir e utilizar a partir dos arquivos."})},{title:"Open Source",imageUrl:"img/code_2.svg",description:(0,d.jsx)(d.Fragment,{children:"Trabalhamos com softwares open source e todo os nossos materiais seguem esse formato."})},{title:"Educa\xe7\xe3o Aberta",imageUrl:"img/community_2.svg",description:(0,d.jsx)(d.Fragment,{children:"Nossos materiais contribuem para uma educa\xe7\xe3o aberta e inclusiva. S\xe3o desenvolvidos de forma colaborativa e revisados pela comunidade."})}];function m(e){let{imageUrl:r,title:s,description:a}=e;const o=(0,c.c)(r);return(0,d.jsxs)("div",{className:i("col col--4",l.feature),children:[o&&(0,d.jsx)("div",{className:"text--center",children:(0,d.jsx)("img",{className:l.featureImage,src:o,alt:s})}),(0,d.jsx)("h3",{children:s}),(0,d.jsx)("p",{children:a})]})}const h=function(){const e=(0,n.c)(),{siteConfig:r={}}=e;return(0,d.jsxs)(o.c,{title:`Documenta\xe7\xe3o ${r.title}`,description:"Documenta\xe7\xe3o do projeto Franzininho <head />",children:[(0,d.jsx)("header",{className:i("hero hero--primary",l.heroBanner),children:(0,d.jsxs)("div",{className:"container",children:[(0,d.jsx)("h1",{className:"hero__title",children:r.title}),(0,d.jsx)("p",{className:"hero__subtitle",children:r.tagline}),(0,d.jsx)("div",{className:l.buttons,children:(0,d.jsx)(t.c,{className:i("button button--secondary button--lg",l.getStarted),to:(0,c.c)("docs/"),children:"Explore"})})]})}),(0,d.jsx)("main",{children:u&&u.length>0&&(0,d.jsx)("section",{className:l.features,children:(0,d.jsx)("div",{className:"container",children:(0,d.jsx)("div",{className:"row",children:u.map(((e,r)=>(0,d.jsx)(m,{...e},r)))})})})})]})}}}]); \ No newline at end of file diff --git a/en/assets/js/c720cb85.7e4d61af.js b/en/assets/js/c720cb85.7e4d61af.js new file mode 100755 index 000000000..69c15cf5f --- /dev/null +++ b/en/assets/js/c720cb85.7e4d61af.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3916],{77584:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>d,contentTitle:()=>a,default:()=>m,frontMatter:()=>s,metadata:()=>t,toc:()=>l});var i=o(17624),n=o(95788);const s={id:"timer0",title:"Timer 0",slug:"/franzininho-diy/exemplos-avr-libc/timer0",description:"Vamos aprender usar o timer 0 como temporizador",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},a=void 0,t={id:"FranzininhoDIY/exemplos-avr-libc/timer0",title:"Timer 0",description:"Vamos aprender usar o timer 0 como temporizador",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/timer0",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/timer0.md",tags:[],version:"current",frontMatter:{id:"timer0",title:"Timer 0",slug:"/franzininho-diy/exemplos-avr-libc/timer0",description:"Vamos aprender usar o timer 0 como temporizador",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Entrada Digital",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital"},next:{title:"Timer 0 - Interrup\xe7\xe3o",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int"}},d={},l=[{value:"Caracter\xedsticas do Timer0",id:"caracter\xedsticas-do-timer0",level:2},{value:"Resumo de recursos do Timer0",id:"resumo-de-recursos-do-timer0",level:2},{value:"Usando o Timer0 como temporizador",id:"usando-o-timer0-como-temporizador",level:2},{value:"Passo para configurar o Timer0 como temporizador",id:"passo-para-configurar-o-timer0-como-temporizador",level:3},{value:"Calculo do Delay",id:"calculo-do-delay",level:3},{value:"Passos para monitorar o overflow do timer e gerar o delay de 1s",id:"passos-para-monitorar-o-overflow-do-timer-e-gerar-o-delay-de-1s",level:3},{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:3},{value:"C\xf3digo exemplo",id:"c\xf3digo-exemplo",level:3},{value:"Simula\xe7\xe3o do exemplo",id:"simula\xe7\xe3o-do-exemplo",level:3}];function c(e){const r={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,n.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.p,{children:"Os timers s\xe3o perif\xe9ricos muito importantes nos microcontroladores. Podemos us\xe1-los para temporiza\xe7\xe3o, contagem de eventos, PWM, medir pulsos externos, etc. O ATtiny85 possui 2 timers, chamados de Timer0 e Timer1. Nesse exemplos vamos focar no uso do Timer0 como temporizador."}),"\n",(0,i.jsx)(r.h2,{id:"caracter\xedsticas-do-timer0",children:"Caracter\xedsticas do Timer0"}),"\n",(0,i.jsx)(r.p,{children:"O Timer0 \xe9 um m\xf3dulo temporizador/contador de 8 bits de uso geral. Isso significa que ele pode contar de 0 a 255. A funcionalidade de temporiza\xe7\xe3o pode ser estendida ainda mais usando os perif\xe9ricos de compara\xe7\xe3o, que permitem que o temporizador conte eventos, gere sinais PWM e assim por diante. Assim \xe9 poss\xedvel gerar temporiza\xe7\xf5es precisas, ondas e sinais PWM independentes da CPU."}),"\n",(0,i.jsx)(r.p,{children:"A figura a seguir exibe o diagrama de blocos simplificado do Timer0:"}),"\n",(0,i.jsx)(r.p,{children:(0,i.jsx)(r.img,{alt:"Diagrama de blocos do Timer0",src:o(17712).c+"",width:"862",height:"668"})}),"\n",(0,i.jsx)(r.h2,{id:"resumo-de-recursos-do-timer0",children:"Resumo de recursos do Timer0"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:"Duas unidades de compara\xe7\xe3o de sa\xedda independentes;"}),"\n",(0,i.jsx)(r.li,{children:"Registradores de compara\xe7\xe3o de sa\xedda com buffer duplo;"}),"\n",(0,i.jsx)(r.li,{children:"Limpa cron\xf4metro na compara\xe7\xe3o de correspond\xeancia (recarregamento autom\xe1tico);"}),"\n",(0,i.jsx)(r.li,{children:"Modulador de largura de pulso com corre\xe7\xe3o de fase (PWM) livre de glitch;"}),"\n",(0,i.jsx)(r.li,{children:"Per\xedodo PWM vari\xe1vel;"}),"\n",(0,i.jsx)(r.li,{children:"Gerador de frequ\xeancia;"}),"\n",(0,i.jsx)(r.li,{children:"Tr\xeas fontes de interrup\xe7\xe3o independentes (TOV0, OCF0A e OCF0B);"}),"\n"]}),"\n",(0,i.jsx)(r.h2,{id:"usando-o-timer0-como-temporizador",children:"Usando o Timer0 como temporizador"}),"\n",(0,i.jsx)(r.p,{children:"Nesse exemplos vamos usar o Timer0 para gerar delay de 1s para piscar um LED."}),"\n",(0,i.jsx)(r.h3,{id:"passo-para-configurar-o-timer0-como-temporizador",children:"Passo para configurar o Timer0 como temporizador"}),"\n",(0,i.jsxs)(r.p,{children:[(0,i.jsx)(r.strong,{children:"Passo 1:"})," Configurar o Timer0 para trabalhar no modo normal. Nesse modo o timer iniciar\xe1 a contagem em 0 e ir\xe1 at\xe9 m\xe1ximo de 255. Quando atingido o m\xe1ximo \xe9 gerado um flag de sinaliza\xe7\xe3o de overflow e o timer volta a contar a partir do zero."]}),"\n",(0,i.jsxs)(r.p,{children:["Para configurar o modo de opera\xe7\xe3o normal, devemos configurar o registrador ",(0,i.jsx)(r.strong,{children:"TCCR0A \u2013 Timer/Counter Control Register A"})," da seguinte forma:"]}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:"COM0A[1:0] e COM0B[1:0] = 0"}),"\n"]}),"\n",(0,i.jsx)(r.p,{children:(0,i.jsx)(r.img,{src:o(37276).c+"",width:"840",height:"212"})}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:"WGM0[1:0] = 0 e TCCR0B \u2013 WGM02 = 0"}),"\n"]}),"\n",(0,i.jsx)(r.p,{children:(0,i.jsx)(r.img,{src:o(84640).c+"",width:"841",height:"333"})}),"\n",(0,i.jsxs)(r.p,{children:["Deve-se escrever os seguintes valores em ",(0,i.jsx)(r.strong,{children:"TCCR0A \u2013 Timer/Counter Control Register A"}),":"]}),"\n",(0,i.jsx)(r.p,{children:"TCCR0A = 0b00000000;"}),"\n",(0,i.jsxs)(r.p,{children:[(0,i.jsx)(r.strong,{children:"Passo 2:"})," Ajustar o prescaler do clock interno para 1024"]}),"\n",(0,i.jsx)(r.p,{children:"Para ajustar o prescale precisamos configurar os bits CS02,CS01 e CS00 do TCCR0B:"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:"TCCR0B \u2013 CS0[2:0]"}),"\n"]}),"\n",(0,i.jsx)(r.p,{children:(0,i.jsx)(r.img,{src:o(9264).c+"",width:"839",height:"315"})}),"\n",(0,i.jsxs)(r.p,{children:["Deve-se escrever os seguintes valores em ",(0,i.jsx)(r.strong,{children:"TCCR0B \u2013 Timer/Counter Control Register"})," B:"]}),"\n",(0,i.jsx)(r.p,{children:"TCCR0B = 0b00000101;"}),"\n",(0,i.jsx)(r.h3,{id:"calculo-do-delay",children:"Calculo do Delay"}),"\n",(0,i.jsx)(r.p,{children:"Estamos trabalhando com o clock interno do ATtiny85 em 16.5Mhz. Essa \xe9 a fonte de clock para o timer0 em modo de opera\xe7\xe3o normal. Como selecionamos o prescaler para dividir o clock por 1024, temos o incremento do timer0 em:"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsxs)(r.li,{children:["tempo por incremento do timer0 = 1/(16.5M/1024) = ",(0,i.jsx)(r.strong,{children:"62 us"})]}),"\n"]}),"\n",(0,i.jsx)(r.p,{children:"Assim, o tempo para o timer0 estourar(overflow) \xe9:"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsxs)(r.li,{children:["tempo para o timer0 estourar = 62us x 256 = ",(0,i.jsx)(r.strong,{children:"15,89ms"})]}),"\n"]}),"\n",(0,i.jsx)(r.p,{children:"Portanto, para ter um delay de 1 segundo precisamos ter:"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsxs)(r.li,{children:["quantidade de overflows do timer0 = 1/15,89ms \u2243 ",(0,i.jsx)(r.strong,{children:"63 vezes"})]}),"\n"]}),"\n",(0,i.jsx)(r.h3,{id:"passos-para-monitorar-o-overflow-do-timer-e-gerar-o-delay-de-1s",children:"Passos para monitorar o overflow do timer e gerar o delay de 1s"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.strong,{children:"Passo 0:"})," Colocar TCNT0 em zero"]}),"\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.strong,{children:"Passo 1:"})," Aguardar a contagem do timer verificando quando TOV0 vai para 1"]}),"\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.strong,{children:"Passo 2:"})," Limpar a flag TOV0 escrevendo 1 nela(Isso mesmo escrevendo 1)"]}),"\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.strong,{children:"Passo 3:"})," Repetir passos 1 e 2 63 vezes para atingir 1 segundo"]}),"\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.strong,{children:"Passo 4:"})," Passou um segundo \u2013 Inverter LED"]}),"\n"]}),"\n",(0,i.jsx)(r.h3,{id:"recursos-necess\xe1rios",children:"Recursos necess\xe1rios"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:"Placa Franzininho DIY(com Micronucleus)"}),"\n",(0,i.jsx)(r.li,{children:"LED"}),"\n",(0,i.jsx)(r.li,{children:"Resistor de 470 Ohm"}),"\n",(0,i.jsx)(r.li,{children:"Jumpers"}),"\n",(0,i.jsx)(r.li,{children:"Computador com as ferramentas de software instaladas"}),"\n"]}),"\n",(0,i.jsx)(r.h3,{id:"c\xf3digo-exemplo",children:"C\xf3digo exemplo"}),"\n",(0,i.jsx)(r.pre,{children:(0,i.jsx)(r.code,{className:"language-c",children:'/**\n * \n * @file main.c\n * @author F\xe1bio Souza\n * @brief Exibe como usar o timer zero para temporiza\xe7\xe3o\n * @version 0.1\n * @date 2021-02-13\n * \n * @copyright Franzininho \n * This example code is in the Public Domain (or CC0 licensed, at your option.)\n * Unless required by applicable law or agreed to in writing, this\n * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied.\n * \n */\n\n#include <avr/io.h>\n#include <util/delay.h> \n\n#define F_CPU 16500000L\n\n \t\n#define setBit(valor,bit) (valor |= (1<<bit))\n#define clearBit(valor,bit) (valor &= ~(1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n#define testBit(valor,bit) (valor & (1<<bit))\n\n/**\n * @brief Fun\xe7\xe3o main\n * \n * @return int \n */\nint main(void) \n{\n \n unsigned char tempo = 0; //contador auxiliar\n\n setBit(DDRB,PB1); \t// Configura Pino PB1 como sa\xedda (Pino do LED)\n\n //configura\xe7\xe3o do timer0 para overflow a aproximadamente 15,89 ms\n //t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms\n TCCR0A=0x00; //Modo Normal\n TCCR0B=0x00;\n TCCR0B |= (1<<CS00)|(1<<CS02); //prescaler de 1024\n TCNT0=0; //inicia timer com 0\n \n /**\n * @brief loop infinito\n * \n */\n while (1)\n {\n if(testBit(TIFR,TOV0)) //se timer estourou\n {\n setBit(TIFR,TOV0); //limpa flag\n tempo++; //incrementa contador auxiliar\n if(tempo >=63) //se passaram-se 63 x 15,89 ms = 1 s\n {\n toogleBit(PORTB,PB1); //inverte LED\n tempo = 0; //reinicia contador\n }\n }\n } \n return (0); \n}\n'})}),"\n",(0,i.jsx)(r.h3,{id:"simula\xe7\xe3o-do-exemplo",children:"Simula\xe7\xe3o do exemplo"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsx)(r.li,{children:"**Wokwi: **"}),"\n"]}),"\n",(0,i.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/305410400451560001?view=diagram"}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.strong,{children:"PICSimLab:"})," ",(0,i.jsx)(r.a,{href:"https://lcgamboa.github.io/picsimlab_examples/board_Franzininho_DIY.html#board_Franzininho_DIY_attiny85",children:"https://lcgamboa.github.io/picsimlab_examples/board_Franzininho_DIY.html#board_Franzininho_DIY_attiny85"})]}),"\n"]})]})}function m(e={}){const{wrapper:r}={...(0,n.MN)(),...e.components};return r?(0,i.jsx)(r,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},95788:(e,r,o)=>{o.d(r,{MN:()=>l});var i=o(11504);function n(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}function s(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);r&&(i=i.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,i)}return o}function a(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?s(Object(o),!0).forEach((function(r){n(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):s(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}function t(e,r){if(null==e)return{};var o,i,n=function(e,r){if(null==e)return{};var o,i,n={},s=Object.keys(e);for(i=0;i<s.length;i++)o=s[i],r.indexOf(o)>=0||(n[o]=e[o]);return n}(e,r);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(i=0;i<s.length;i++)o=s[i],r.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var d=i.createContext({}),l=function(e){var r=i.useContext(d),o=r;return e&&(o="function"==typeof e?e(r):a(a({},r),e)),o},c={inlineCode:"code",wrapper:function(e){var r=e.children;return i.createElement(i.Fragment,{},r)}},m=i.forwardRef((function(e,r){var o=e.components,n=e.mdxType,s=e.originalType,d=e.parentName,m=t(e,["components","mdxType","originalType","parentName"]),p=l(o),u=n,h=p["".concat(d,".").concat(u)]||p[u]||c[u]||s;return o?i.createElement(h,a(a({ref:r},m),{},{components:o})):i.createElement(h,a({ref:r},m))}));m.displayName="MDXCreateElement"},17712:(e,r,o)=>{o.d(r,{c:()=>i});const i=o.p+"assets/images/timer0-block-diagram-5e71243b7bad24e5127e6f41dfaedde0.png"},37276:(e,r,o)=>{o.d(r,{c:()=>i});const i=o.p+"assets/images/timer0-config1-7bc446e41376fe89fecb317e4ac0d04e.png"},84640:(e,r,o)=>{o.d(r,{c:()=>i});const i=o.p+"assets/images/timer0-config2-4933e7715c9acc2a35bdda2c4012d605.png"},9264:(e,r,o)=>{o.d(r,{c:()=>i});const i=o.p+"assets/images/timer0-config3-874ed73be5590580496ee7b7f893b26e.png"}}]); \ No newline at end of file diff --git a/en/assets/js/c720cb85.979b5272.js b/en/assets/js/c720cb85.979b5272.js deleted file mode 100755 index e6ed29851..000000000 --- a/en/assets/js/c720cb85.979b5272.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[310],{3905:(e,r,o)=>{o.d(r,{Zo:()=>d,kt:()=>g});var a=o(7294);function t(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}function i(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,a)}return o}function n(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?i(Object(o),!0).forEach((function(r){t(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}function s(e,r){if(null==e)return{};var o,a,t=function(e,r){if(null==e)return{};var o,a,t={},i=Object.keys(e);for(a=0;a<i.length;a++)o=i[a],r.indexOf(o)>=0||(t[o]=e[o]);return t}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)o=i[a],r.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var l=a.createContext({}),m=function(e){var r=a.useContext(l),o=r;return e&&(o="function"==typeof e?e(r):n(n({},r),e)),o},d=function(e){var r=m(e.components);return a.createElement(l.Provider,{value:r},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var r=e.children;return a.createElement(a.Fragment,{},r)}},u=a.forwardRef((function(e,r){var o=e.components,t=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=m(o),u=t,g=p["".concat(l,".").concat(u)]||p[u]||c[u]||i;return o?a.createElement(g,n(n({ref:r},d),{},{components:o})):a.createElement(g,n({ref:r},d))}));function g(e,r){var o=arguments,t=r&&r.mdxType;if("string"==typeof e||t){var i=o.length,n=new Array(i);n[0]=u;var s={};for(var l in r)hasOwnProperty.call(r,l)&&(s[l]=r[l]);s.originalType=e,s[p]="string"==typeof e?e:t,n[1]=s;for(var m=2;m<i;m++)n[m]=o[m];return a.createElement.apply(null,n)}return a.createElement.apply(null,o)}u.displayName="MDXCreateElement"},2639:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>l,contentTitle:()=>n,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>m});var a=o(3117),t=(o(7294),o(3905));const i={id:"timer0",title:"Timer 0",slug:"/franzininho-diy/exemplos-avr-libc/timer0",description:"Vamos aprender usar o timer 0 como temporizador",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},n=void 0,s={unversionedId:"FranzininhoDIY/exemplos-avr-libc/timer0",id:"FranzininhoDIY/exemplos-avr-libc/timer0",title:"Timer 0",description:"Vamos aprender usar o timer 0 como temporizador",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/timer0",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/timer0.md",tags:[],version:"current",frontMatter:{id:"timer0",title:"Timer 0",slug:"/franzininho-diy/exemplos-avr-libc/timer0",description:"Vamos aprender usar o timer 0 como temporizador",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Entrada Digital",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital"},next:{title:"Timer 0 - Interrup\xe7\xe3o",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int"}},l={},m=[{value:"Caracter\xedsticas do Timer0",id:"caracter\xedsticas-do-timer0",level:2},{value:"Resumo de recursos do Timer0",id:"resumo-de-recursos-do-timer0",level:2},{value:"Usando o Timer0 como temporizador",id:"usando-o-timer0-como-temporizador",level:2},{value:"Passo para configurar o Timer0 como temporizador",id:"passo-para-configurar-o-timer0-como-temporizador",level:3},{value:"Calculo do Delay",id:"calculo-do-delay",level:3},{value:"Passos para monitorar o overflow do timer e gerar o delay de 1s",id:"passos-para-monitorar-o-overflow-do-timer-e-gerar-o-delay-de-1s",level:3},{value:"Recursos necess\xe1rios",id:"recursos-necess\xe1rios",level:3},{value:"C\xf3digo exemplo",id:"c\xf3digo-exemplo",level:3},{value:"Simula\xe7\xe3o do exemplo",id:"simula\xe7\xe3o-do-exemplo",level:3}],d={toc:m},p="wrapper";function c(e){let{components:r,...i}=e;return(0,t.kt)(p,(0,a.Z)({},d,i,{components:r,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Os timers s\xe3o perif\xe9ricos muito importantes nos microcontroladores. Podemos us\xe1-los para temporiza\xe7\xe3o, contagem de eventos, PWM, medir pulsos externos, etc. O ATtiny85 possui 2 timers, chamados de Timer0 e Timer1. Nesse exemplos vamos focar no uso do Timer0 como temporizador."),(0,t.kt)("h2",{id:"caracter\xedsticas-do-timer0"},"Caracter\xedsticas do Timer0"),(0,t.kt)("p",null,"O Timer0 \xe9 um m\xf3dulo temporizador/contador de 8 bits de uso geral. Isso significa que ele pode contar de 0 a 255. A funcionalidade de temporiza\xe7\xe3o pode ser estendida ainda mais usando os perif\xe9ricos de compara\xe7\xe3o, que permitem que o temporizador conte eventos, gere sinais PWM e assim por diante. Assim \xe9 poss\xedvel gerar temporiza\xe7\xf5es precisas, ondas e sinais PWM independentes da CPU."),(0,t.kt)("p",null,"A figura a seguir exibe o diagrama de blocos simplificado do Timer0:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Diagrama de blocos do Timer0",src:o(7289).Z,width:"862",height:"668"})),(0,t.kt)("h2",{id:"resumo-de-recursos-do-timer0"},"Resumo de recursos do Timer0"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Duas unidades de compara\xe7\xe3o de sa\xedda independentes;"),(0,t.kt)("li",{parentName:"ul"},"Registradores de compara\xe7\xe3o de sa\xedda com buffer duplo;"),(0,t.kt)("li",{parentName:"ul"},"Limpa cron\xf4metro na compara\xe7\xe3o de correspond\xeancia (recarregamento autom\xe1tico);"),(0,t.kt)("li",{parentName:"ul"},"Modulador de largura de pulso com corre\xe7\xe3o de fase (PWM) livre de glitch;"),(0,t.kt)("li",{parentName:"ul"},"Per\xedodo PWM vari\xe1vel;"),(0,t.kt)("li",{parentName:"ul"},"Gerador de frequ\xeancia;"),(0,t.kt)("li",{parentName:"ul"},"Tr\xeas fontes de interrup\xe7\xe3o independentes (TOV0, OCF0A e OCF0B);")),(0,t.kt)("h2",{id:"usando-o-timer0-como-temporizador"},"Usando o Timer0 como temporizador"),(0,t.kt)("p",null,"Nesse exemplos vamos usar o Timer0 para gerar delay de 1s para piscar um LED."),(0,t.kt)("h3",{id:"passo-para-configurar-o-timer0-como-temporizador"},"Passo para configurar o Timer0 como temporizador"),(0,t.kt)("p",null,(0,t.kt)("strong",{parentName:"p"},"Passo 1:")," Configurar o Timer0 para trabalhar no modo normal. Nesse modo o timer iniciar\xe1 a contagem em 0 e ir\xe1 at\xe9 m\xe1ximo de 255. Quando atingido o m\xe1ximo \xe9 gerado um flag de sinaliza\xe7\xe3o de overflow e o timer volta a contar a partir do zero."),(0,t.kt)("p",null,"Para configurar o modo de opera\xe7\xe3o normal, devemos configurar o registrador ",(0,t.kt)("strong",{parentName:"p"},"TCCR0A \u2013 Timer/Counter Control Register A")," da seguinte forma:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"COM0A","[1:0]"," e COM0B","[1:0]"," = 0")),(0,t.kt)("p",null,(0,t.kt)("img",{src:o(5301).Z,width:"840",height:"212"})),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"WGM0","[1:0]"," = 0 e TCCR0B \u2013 WGM02 = 0")),(0,t.kt)("p",null,(0,t.kt)("img",{src:o(1300).Z,width:"841",height:"333"})),(0,t.kt)("p",null,"Deve-se escrever os seguintes valores em ",(0,t.kt)("strong",{parentName:"p"},"TCCR0A \u2013 Timer/Counter Control Register A"),":"),(0,t.kt)("p",null,"TCCR0A = 0b00000000;"),(0,t.kt)("p",null,(0,t.kt)("strong",{parentName:"p"},"Passo 2:")," Ajustar o prescaler do clock interno para 1024"),(0,t.kt)("p",null,"Para ajustar o prescale precisamos configurar os bits CS02,CS01 e CS00 do TCCR0B:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"TCCR0B \u2013 CS0","[2:0]")),(0,t.kt)("p",null,(0,t.kt)("img",{src:o(4059).Z,width:"839",height:"315"})),(0,t.kt)("p",null,"Deve-se escrever os seguintes valores em ",(0,t.kt)("strong",{parentName:"p"},"TCCR0B \u2013 Timer/Counter Control Register")," B:"),(0,t.kt)("p",null,"TCCR0B = 0b00000101;"),(0,t.kt)("h3",{id:"calculo-do-delay"},"Calculo do Delay"),(0,t.kt)("p",null,"Estamos trabalhando com o clock interno do ATtiny85 em 16.5Mhz. Essa \xe9 a fonte de clock para o timer0 em modo de opera\xe7\xe3o normal. Como selecionamos o prescaler para dividir o clock por 1024, temos o incremento do timer0 em:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"tempo por incremento do timer0 = 1/(16.5M/1024) = ",(0,t.kt)("strong",{parentName:"li"},"62 us"))),(0,t.kt)("p",null,"Assim, o tempo para o timer0 estourar(overflow) \xe9:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"tempo para o timer0 estourar = 62us x 256 = ",(0,t.kt)("strong",{parentName:"li"},"15,89ms"))),(0,t.kt)("p",null,"Portanto, para ter um delay de 1 segundo precisamos ter:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"quantidade de overflows do timer0 = 1/15,89ms \u2243 ",(0,t.kt)("strong",{parentName:"li"},"63 vezes"))),(0,t.kt)("h3",{id:"passos-para-monitorar-o-overflow-do-timer-e-gerar-o-delay-de-1s"},"Passos para monitorar o overflow do timer e gerar o delay de 1s"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Passo 0:")," Colocar TCNT0 em zero"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Passo 1:")," Aguardar a contagem do timer verificando quando TOV0 vai para 1"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Passo 2:")," Limpar a flag TOV0 escrevendo 1 nela(Isso mesmo escrevendo 1)"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Passo 3:")," Repetir passos 1 e 2 63 vezes para atingir 1 segundo"),(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Passo 4:")," Passou um segundo \u2013 Inverter LED")),(0,t.kt)("h3",{id:"recursos-necess\xe1rios"},"Recursos necess\xe1rios"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Placa Franzininho DIY(com Micronucleus)"),(0,t.kt)("li",{parentName:"ul"},"LED "),(0,t.kt)("li",{parentName:"ul"},"Resistor de 470 Ohm"),(0,t.kt)("li",{parentName:"ul"},"Jumpers"),(0,t.kt)("li",{parentName:"ul"},"Computador com as ferramentas de software instaladas")),(0,t.kt)("h3",{id:"c\xf3digo-exemplo"},"C\xf3digo exemplo"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},'/**\n * \n * @file main.c\n * @author F\xe1bio Souza\n * @brief Exibe como usar o timer zero para temporiza\xe7\xe3o\n * @version 0.1\n * @date 2021-02-13\n * \n * @copyright Franzininho \n * This example code is in the Public Domain (or CC0 licensed, at your option.)\n * Unless required by applicable law or agreed to in writing, this\n * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied.\n * \n */\n\n#include <avr/io.h>\n#include <util/delay.h> \n\n#define F_CPU 16500000L\n\n \n#define setBit(valor,bit) (valor |= (1<<bit))\n#define clearBit(valor,bit) (valor &= ~(1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n#define testBit(valor,bit) (valor & (1<<bit))\n\n/**\n * @brief Fun\xe7\xe3o main\n * \n * @return int \n */\nint main(void) \n{\n \n unsigned char tempo = 0; //contador auxiliar\n\n setBit(DDRB,PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n //configura\xe7\xe3o do timer0 para overflow a aproximadamente 15,89 ms\n //t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms\n TCCR0A=0x00; //Modo Normal\n TCCR0B=0x00;\n TCCR0B |= (1<<CS00)|(1<<CS02); //prescaler de 1024\n TCNT0=0; //inicia timer com 0\n \n /**\n * @brief loop infinito\n * \n */\n while (1)\n {\n if(testBit(TIFR,TOV0)) //se timer estourou\n {\n setBit(TIFR,TOV0); //limpa flag\n tempo++; //incrementa contador auxiliar\n if(tempo >=63) //se passaram-se 63 x 15,89 ms = 1 s\n {\n toogleBit(PORTB,PB1); //inverte LED\n tempo = 0; //reinicia contador\n }\n }\n } \n return (0); \n}\n')),(0,t.kt)("h3",{id:"simula\xe7\xe3o-do-exemplo"},"Simula\xe7\xe3o do exemplo"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"Wokwi: "))),(0,t.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/305410400451560001?view=diagram"}),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("strong",{parentName:"li"},"PICSimLab:")," ",(0,t.kt)("a",{parentName:"li",href:"https://lcgamboa.github.io/picsimlab_examples/board_Franzininho_DIY.html#board_Franzininho_DIY_attiny85"},"https://lcgamboa.github.io/picsimlab_examples/board_Franzininho_DIY.html#board_Franzininho_DIY_attiny85"))))}c.isMDXComponent=!0},7289:(e,r,o)=>{o.d(r,{Z:()=>a});const a=o.p+"assets/images/timer0-block-diagram-5e71243b7bad24e5127e6f41dfaedde0.png"},5301:(e,r,o)=>{o.d(r,{Z:()=>a});const a=o.p+"assets/images/timer0-config1-7bc446e41376fe89fecb317e4ac0d04e.png"},1300:(e,r,o)=>{o.d(r,{Z:()=>a});const a=o.p+"assets/images/timer0-config2-4933e7715c9acc2a35bdda2c4012d605.png"},4059:(e,r,o)=>{o.d(r,{Z:()=>a});const a=o.p+"assets/images/timer0-config3-874ed73be5590580496ee7b7f893b26e.png"}}]); \ No newline at end of file diff --git a/en/assets/js/ccc49370.60db7232.js b/en/assets/js/ccc49370.60db7232.js new file mode 100755 index 000000000..e7265d8cb --- /dev/null +++ b/en/assets/js/ccc49370.60db7232.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6344],{26448:(e,t,n)=>{n.r(t),n.d(t,{default:()=>j});n(11504);var i=n(34064),a=n(68900),o=n(45864),r=n(83152),s=n(9452),l=n(47590),c=n(84357),d=n(70308),u=n(17624);function m(e){const{nextItem:t,prevItem:n}=e;return(0,u.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,c.G)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"}),children:[n&&(0,u.jsx)(d.c,{...n,subLabel:(0,u.jsx)(c.c,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post",children:"Newer Post"})}),t&&(0,u.jsx)(d.c,{...t,subLabel:(0,u.jsx)(c.c,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post",children:"Older Post"}),isNext:!0})]})}function g(){const{assets:e,metadata:t}=(0,r.g)(),{title:n,description:i,date:o,tags:s,authors:l,frontMatter:c}=t,{keywords:d}=c,m=e.image??c.image;return(0,u.jsxs)(a.U7,{title:n,description:i,keywords:d,image:m,children:[(0,u.jsx)("meta",{property:"og:type",content:"article"}),(0,u.jsx)("meta",{property:"article:published_time",content:o}),l.some((e=>e.url))&&(0,u.jsx)("meta",{property:"article:author",content:l.map((e=>e.url)).filter(Boolean).join(",")}),s.length>0&&(0,u.jsx)("meta",{property:"article:tag",content:s.map((e=>e.label)).join(",")})]})}var h=n(56952),f=n(35388);function p(){const e=(0,f.C)();return(0,u.jsx)(h.c,{children:(0,u.jsx)("script",{type:"application/ld+json",children:JSON.stringify(e)})})}var v=n(75124),x=n(61528);function b(e){let{sidebar:t,children:n}=e;const{metadata:i,toc:a}=(0,r.g)(),{nextItem:o,prevItem:c,frontMatter:d,unlisted:g}=i,{hide_table_of_contents:h,toc_min_heading_level:f,toc_max_heading_level:p}=d;return(0,u.jsxs)(s.c,{sidebar:t,toc:!h&&a.length>0?(0,u.jsx)(v.c,{toc:a,minHeadingLevel:f,maxHeadingLevel:p}):void 0,children:[g&&(0,u.jsx)(x.c,{}),(0,u.jsx)(l.c,{children:n}),(o||c)&&(0,u.jsx)(m,{nextItem:o,prevItem:c})]})}function j(e){const t=e.content;return(0,u.jsx)(r.E,{content:e.content,isBlogPostPage:!0,children:(0,u.jsxs)(a.cr,{className:(0,i.c)(o.W.wrapper.blogPages,o.W.page.blogPostPage),children:[(0,u.jsx)(g,{}),(0,u.jsx)(p,{}),(0,u.jsx)(b,{sidebar:e.sidebar,children:(0,u.jsx)(t,{})})]})})}},75124:(e,t,n)=>{n.d(t,{c:()=>c});n(11504);var i=n(34064),a=n(43088);const o={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var r=n(17624);const s="table-of-contents__link toc-highlight",l="table-of-contents__link--active";function c(e){let{className:t,...n}=e;return(0,r.jsx)("div",{className:(0,i.c)(o.tableOfContents,"thin-scrollbar",t),children:(0,r.jsx)(a.c,{...n,linkClassName:s,linkActiveClassName:l})})}},43088:(e,t,n)=>{n.d(t,{c:()=>f});var i=n(11504),a=n(21824);function o(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const i=n.slice(2,e.level);e.parentIndex=Math.max(...i),n[e.level]=t}));const i=[];return t.forEach((e=>{const{parentIndex:n,...a}=e;n>=0?t[n].children.push(a):i.push(a)})),i}function r(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:i}=e;return t.flatMap((e=>{const t=r({toc:e.children,minHeadingLevel:n,maxHeadingLevel:i});return function(e){return e.level>=n&&e.level<=i}(e)?[{...e,children:t}]:t}))}function s(e){const t=e.getBoundingClientRect();return t.top===t.bottom?s(e.parentNode):t}function l(e,t){let{anchorTopOffset:n}=t;const i=e.find((e=>s(e).top>=n));if(i){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(s(i))?i:e[e.indexOf(i)-1]??null}return e[e.length-1]??null}function c(){const e=(0,i.useRef)(0),{navbar:{hideOnScroll:t}}=(0,a.y)();return(0,i.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,i.useRef)(void 0),n=c();(0,i.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:i,linkActiveClassName:a,minHeadingLevel:o,maxHeadingLevel:r}=e;function s(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(i),s=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const i=[];for(let a=t;a<=n;a+=1)i.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(i.join()))}({minHeadingLevel:o,maxHeadingLevel:r}),c=l(s,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(a),e.classList.add(a),t.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",s),document.addEventListener("resize",s),s(),()=>{document.removeEventListener("scroll",s),document.removeEventListener("resize",s)}}),[e,n])}var u=n(10867),m=n(17624);function g(e){let{toc:t,className:n,linkClassName:i,isChild:a}=e;return t.length?(0,m.jsx)("ul",{className:a?void 0:n,children:t.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.c,{to:`#${e.id}`,className:i??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(g,{isChild:!0,toc:e.children,className:n,linkClassName:i})]},e.id)))}):null}const h=i.memo(g);function f(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:s="table-of-contents__link",linkActiveClassName:l,minHeadingLevel:c,maxHeadingLevel:u,...g}=e;const f=(0,a.y)(),p=c??f.tableOfContents.minHeadingLevel,v=u??f.tableOfContents.maxHeadingLevel,x=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,i.useMemo)((()=>r({toc:o(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:p,maxHeadingLevel:v});return d((0,i.useMemo)((()=>{if(s&&l)return{linkClassName:s,linkActiveClassName:l,minHeadingLevel:p,maxHeadingLevel:v}}),[s,l,p,v])),(0,m.jsx)(h,{toc:x,className:n,linkClassName:s,...g})}},61528:(e,t,n)=>{n.d(t,{c:()=>g});n(11504);var i=n(34064),a=n(84357),o=n(56952),r=n(17624);function s(){return(0,r.jsx)(a.c,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function l(){return(0,r.jsx)(a.c,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,r.jsx)(o.c,{children:(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=n(45864),u=n(30304);function m(e){let{className:t}=e;return(0,r.jsx)(u.c,{type:"caution",title:(0,r.jsx)(s,{}),className:(0,i.c)(t,d.W.common.unlistedBanner),children:(0,r.jsx)(l,{})})}function g(e){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c,{}),(0,r.jsx)(m,{...e})]})}},35388:(e,t,n)=>{n.d(t,{Q:()=>d,C:()=>u});var i=n(70964),a=n(28264),o=n(85308);var r=n(83152);const s=e=>new Date(e).toISOString();function l(e){const t=e.map(m);return{author:1===t.length?t[0]:t}}function c(e,t,n){return e?{image:g({imageUrl:t(e,{absolute:!0}),caption:`title image for the blog post: ${n}`})}:{}}function d(e){const{siteConfig:t}=(0,a.c)(),{withBaseUrl:n}=(0,i.E)(),{metadata:{blogDescription:o,blogTitle:r,permalink:d}}=e,u=`${t.url}${d}`;return{"@context":"https://schema.org","@type":"Blog","@id":u,mainEntityOfPage:u,headline:r,description:o,blogPost:e.items.map((e=>function(e,t,n){const{assets:i,frontMatter:a,metadata:o}=e,{date:r,title:d,description:u,lastUpdatedAt:m}=o,g=i.image??a.image,h=a.keywords??[],f=`${t.url}${o.permalink}`,p=m?s(m):void 0;return{"@type":"BlogPosting","@id":f,mainEntityOfPage:f,url:f,headline:d,name:d,description:u,datePublished:r,...p?{dateModified:p}:{},...l(o.authors),...c(g,n,d),...h?{keywords:h}:{}}}(e.content,t,n)))}}function u(){const e=function(){const e=(0,o.c)(),t=e?.data?.blogMetadata;if(!t)throw new Error("useBlogMetadata() can't be called on the current route because the blog metadata could not be found in route context");return t}(),{assets:t,metadata:n}=(0,r.g)(),{siteConfig:d}=(0,a.c)(),{withBaseUrl:u}=(0,i.E)(),{date:m,title:g,description:h,frontMatter:f,lastUpdatedAt:p}=n,v=t.image??f.image,x=f.keywords??[],b=p?s(p):void 0,j=`${d.url}${n.permalink}`;return{"@context":"https://schema.org","@type":"BlogPosting","@id":j,mainEntityOfPage:j,url:j,headline:g,name:g,description:h,datePublished:m,...b?{dateModified:b}:{},...l(n.authors),...c(v,u,g),...x?{keywords:x}:{},isPartOf:{"@type":"Blog","@id":`${d.url}${e.blogBasePath}`,name:e.blogTitle}}}function m(e){return{"@type":"Person",...e.name?{name:e.name}:{},...e.title?{description:e.title}:{},...e.url?{url:e.url}:{},...e.email?{email:e.email}:{},...e.imageURL?{image:e.imageURL}:{}}}function g(e){let{imageUrl:t,caption:n}=e;return{"@type":"ImageObject","@id":t,url:t,contentUrl:t,caption:n}}}}]); \ No newline at end of file diff --git a/en/assets/js/ccc49370.ed5a44eb.js b/en/assets/js/ccc49370.ed5a44eb.js deleted file mode 100755 index a03a1d97e..000000000 --- a/en/assets/js/ccc49370.ed5a44eb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6103],{5203:(e,t,n)=>{n.r(t),n.d(t,{default:()=>h});var a=n(7294),l=n(4334),r=n(1944),o=n(5281),i=n(9460),c=n(9058),s=n(390),m=n(3117),d=n(5999),u=n(2244);function g(e){const{nextItem:t,prevItem:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,d.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"})},n&&a.createElement(u.Z,(0,m.Z)({},n,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post"},"Newer Post")})),t&&a.createElement(u.Z,(0,m.Z)({},t,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post"},"Older Post"),isNext:!0})))}function f(){const{assets:e,metadata:t}=(0,i.C)(),{title:n,description:l,date:o,tags:c,authors:s,frontMatter:m}=t,{keywords:d}=m,u=e.image??m.image;return a.createElement(r.d,{title:n,description:l,keywords:d,image:u},a.createElement("meta",{property:"og:type",content:"article"}),a.createElement("meta",{property:"article:published_time",content:o}),s.some((e=>e.url))&&a.createElement("meta",{property:"article:author",content:s.map((e=>e.url)).filter(Boolean).join(",")}),c.length>0&&a.createElement("meta",{property:"article:tag",content:c.map((e=>e.label)).join(",")}))}var v=n(9407);function p(e){let{sidebar:t,children:n}=e;const{metadata:l,toc:r}=(0,i.C)(),{nextItem:o,prevItem:m,frontMatter:d}=l,{hide_table_of_contents:u,toc_min_heading_level:f,toc_max_heading_level:p}=d;return a.createElement(c.Z,{sidebar:t,toc:!u&&r.length>0?a.createElement(v.Z,{toc:r,minHeadingLevel:f,maxHeadingLevel:p}):void 0},a.createElement(s.Z,null,n),(o||m)&&a.createElement(g,{nextItem:o,prevItem:m}))}function h(e){const t=e.content;return a.createElement(i.n,{content:e.content,isBlogPostPage:!0},a.createElement(r.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogPostPage)},a.createElement(f,null),a.createElement(p,{sidebar:e.sidebar},a.createElement(t,null))))}},9407:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(3117),l=n(7294),r=n(4334),o=n(3743);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},c="table-of-contents__link toc-highlight",s="table-of-contents__link--active";function m(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,r.Z)(i.tableOfContents,"thin-scrollbar",t)},l.createElement(o.Z,(0,a.Z)({},n,{linkClassName:c,linkActiveClassName:s})))}},3743:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(3117),l=n(7294),r=n(6668);function o(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function i(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=i({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function c(e){const t=e.getBoundingClientRect();return t.top===t.bottom?c(e.parentNode):t}function s(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>c(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(c(a))?a:e[e.indexOf(a)-1]??null}return e[e.length-1]??null}function m(){const e=(0,l.useRef)(0),{navbar:{hideOnScroll:t}}=(0,r.L)();return(0,l.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,l.useRef)(void 0),n=m();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:r,maxHeadingLevel:o}=e;function i(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),i=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:o}),c=s(i,{anchorTopOffset:n.current}),m=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===m)}))}return document.addEventListener("scroll",i),document.addEventListener("resize",i),i(),()=>{document.removeEventListener("scroll",i),document.removeEventListener("resize",i)}}),[e,n])}function u(e){let{toc:t,className:n,linkClassName:a,isChild:r}=e;return t.length?l.createElement("ul",{className:r?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(u,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const g=l.memo(u);function f(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:s,minHeadingLevel:m,maxHeadingLevel:u,...f}=e;const v=(0,r.L)(),p=m??v.tableOfContents.minHeadingLevel,h=u??v.tableOfContents.maxHeadingLevel,b=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,l.useMemo)((()=>i({toc:o(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:p,maxHeadingLevel:h});return d((0,l.useMemo)((()=>{if(c&&s)return{linkClassName:c,linkActiveClassName:s,minHeadingLevel:p,maxHeadingLevel:h}}),[c,s,p,h])),l.createElement(g,(0,a.Z)({toc:b,className:n,linkClassName:c},f))}}}]); \ No newline at end of file diff --git a/en/assets/js/cdcae78f.d260a8d2.js b/en/assets/js/cdcae78f.d260a8d2.js deleted file mode 100755 index 00bd72cba..000000000 --- a/en/assets/js/cdcae78f.d260a8d2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3518],{3905:(e,i,a)=>{a.d(i,{Zo:()=>d,kt:()=>h});var n=a(7294);function o(e,i,a){return i in e?Object.defineProperty(e,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[i]=a,e}function r(e,i){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);i&&(n=n.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),a.push.apply(a,n)}return a}function t(e){for(var i=1;i<arguments.length;i++){var a=null!=arguments[i]?arguments[i]:{};i%2?r(Object(a),!0).forEach((function(i){o(e,i,a[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))}))}return e}function s(e,i){if(null==e)return{};var a,n,o=function(e,i){if(null==e)return{};var a,n,o={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],i.indexOf(a)>=0||(o[a]=e[a]);return o}(e,i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],i.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),p=function(e){var i=n.useContext(l),a=i;return e&&(a="function"==typeof e?e(i):t(t({},i),e)),a},d=function(e){var i=p(e.components);return n.createElement(l.Provider,{value:i},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var i=e.children;return n.createElement(n.Fragment,{},i)}},m=n.forwardRef((function(e,i){var a=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=p(a),m=o,h=c["".concat(l,".").concat(m)]||c[m]||u[m]||r;return a?n.createElement(h,t(t({ref:i},d),{},{components:a})):n.createElement(h,t({ref:i},d))}));function h(e,i){var a=arguments,o=i&&i.mdxType;if("string"==typeof e||o){var r=a.length,t=new Array(r);t[0]=m;var s={};for(var l in i)hasOwnProperty.call(i,l)&&(s[l]=i[l]);s.originalType=e,s[c]="string"==typeof e?e:o,t[1]=s;for(var p=2;p<r;p++)t[p]=a[p];return n.createElement.apply(null,t)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},2729:(e,i,a)=>{a.r(i),a.d(i,{assets:()=>l,contentTitle:()=>t,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var n=a(3117),o=(a(7294),a(3905));const r={id:"franzininho-wifi",title:"Placa Franzininho WiFi",slug:"/franzininho-wifi/franzininho-wifi",description:"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes."},t=void 0,s={unversionedId:"FranzininhoWifi/franzininho-wifi",id:"FranzininhoWifi/franzininho-wifi",title:"Placa Franzininho WiFi",description:"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes.",source:"@site/docs/FranzininhoWifi/franzininho-wifi.md",sourceDirName:"FranzininhoWifi",slug:"/franzininho-wifi/franzininho-wifi",permalink:"/en/docs/franzininho-wifi/franzininho-wifi",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/franzininho-wifi.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi",title:"Placa Franzininho WiFi",slug:"/franzininho-wifi/franzininho-wifi",description:"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes."},sidebar:"docs",previous:{title:"Welcome!",permalink:"/en/docs/"},next:{title:"Como simular a Franzininho WiFi no Wokwi",permalink:"/en/docs/franzininho-wifi/wokwi/primeiros-passos"}},l={},p=[{value:"Resumo de recursos da placa Franzininho WiFi:",id:"resumo-de-recursos-da-placa-franzininho-wifi",level:2},{value:"Pinout da Franzininho WiFi",id:"pinout-da-franzininho-wifi",level:2},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Simula\xe7\xe3o da Franzininho WiFi no Wokwi",id:"simula\xe7\xe3o-da-franzininho-wifi-no-wokwi",level:2},{value:"Componente para o Fritzing",id:"componente-para-o-fritzing",level:2}],d={toc:p},c="wrapper";function u(e){let{components:i,...r}=e;return(0,o.kt)(c,(0,n.Z)({},d,r,{components:i,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"A Franzininho WIFI \xe9 uma placa de desenvolvimento de hardware de c\xf3digo aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal \xe9 tornar o desenvolvimento de projetos eletr\xf4nicos mais acess\xedvel a makers, entusiastas e desenvolvedores brasileiros."),(0,o.kt)("p",null,"A placa pode ser programada de v\xe1rias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes."),(0,o.kt)("p",null,"Neste texto, apresentaremos os recursos dispon\xedveis, as formas de programa\xe7\xe3o e informa\xe7\xf5es relevantes para aqueles que est\xe3o iniciando o uso da Franzininho WiFi ou t\xeam interesse em conhec\xea-la."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://sacola.pagseguro.uol.com.br/e9bdf81f-339f-4b36-951c-88c69240e0e7"},"Compre sua Franzininho WiFi (com frete gratis) clicando neste link")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Placa Franzininho WiFi",src:a(5081).Z,width:"1600",height:"900"})),(0,o.kt)("h2",{id:"resumo-de-recursos-da-placa-franzininho-wifi"},"Resumo de recursos da placa Franzininho WiFi:"),(0,o.kt)("p",null,"A Franzininho WiFi possui os seguintes recursos:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"M\xf3dulo ESP32-S2",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Microcontrolador Xtensa\xae single-core32-bit LX7 operando em at\xe9 240 MHz"),(0,o.kt)("li",{parentName:"ul"},"Mem\xf3rias: 128 KB de ROM, 320 KB de SRAM, 16 KB SRAM no RTC, 4MB de Flash"),(0,o.kt)("li",{parentName:"ul"},"WiFi 802.11 b/g/n"),(0,o.kt)("li",{parentName:"ul"},"Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera, IR,contador de pulsos, LED PWM, TWAI(CAN), USB 1.1 OTG, ADC, DAC, touch, sensor de temperatura interno."))),(0,o.kt)("li",{parentName:"ul"},"Pinout:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"40 pinos divididos em 2\xd720 headers de 2,54 mm"),(0,o.kt)("li",{parentName:"ul"},"35 GPIOs"),(0,o.kt)("li",{parentName:"ul"},"Compat\xedvel com protoboard"))),(0,o.kt)("li",{parentName:"ul"},"2 LEDS de uso geral"),(0,o.kt)("li",{parentName:"ul"},"Bot\xf5es: 1xReset, 1 x Boot"),(0,o.kt)("li",{parentName:"ul"},"USB: conector micro USB \u2013 OTG 1.1"),(0,o.kt)("li",{parentName:"ul"},"Alimenta\xe7\xe3o:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"5V via conector USB"),(0,o.kt)("li",{parentName:"ul"},"5V e GND via pinos"),(0,o.kt)("li",{parentName:"ul"},"3V3 e GND via pinos"))),(0,o.kt)("li",{parentName:"ul"},"Formas de programa\xe7\xe3o:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"ESP-IDF,"),(0,o.kt)("li",{parentName:"ul"},"Arduino,"),(0,o.kt)("li",{parentName:"ul"},"CircuitPyhton,"),(0,o.kt)("li",{parentName:"ul"},"MicroPython,"),(0,o.kt)("li",{parentName:"ul"},"Zephyr,"),(0,o.kt)("li",{parentName:"ul"},"NuttX")))),(0,o.kt)("h2",{id:"pinout-da-franzininho-wifi"},"Pinout da Franzininho WiFi"),(0,o.kt)("p",null,"A imagem a seguir exibe o pinout da Franzininho WiFi com mapeamento dos pinos e recursos:"),(0,o.kt)("p",null,(0,o.kt)("img",{parentName:"p",src:"https://raw.githubusercontent.com/Franzininho/imagens-franzininho/main/franzininho-wifi/pinagem-franzininho-wifi.png",alt:"Nova Franzininho WiFI: pinout"})),(0,o.kt)("h2",{id:"licen\xe7a"},"Licen\xe7a"),(0,o.kt)("p",null,"A placa Franzininho WiFi \xe9 um projeto de hardware de c\xf3digo aberto, licenciado sob a ",(0,o.kt)("strong",{parentName:"p"},"CERN Open Hardware License"),". Essa licen\xe7a \xe9 utilizada em projetos de hardware que s\xe3o desenvolvidos e disponibilizados como c\xf3digo aberto, permitindo que outras pessoas possam reproduzir e criar deriva\xe7\xf5es do projeto. Para garantir a conformidade com a licen\xe7a, \xe9 importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar deriva\xe7\xf5es do projeto. Dessa forma, podem garantir que est\xe3o seguindo as diretrizes corretas e respeitando a licen\xe7a escolhida para o projeto."),(0,o.kt)("p",null,"Voc\xea encontra o projeto do hardware no Github organiza\xe7\xe3o Franzininho: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/Franzininho-WiFi"},"https://github.com/Franzininho/Franzininho-WiFi")),(0,o.kt)("h2",{id:"simula\xe7\xe3o-da-franzininho-wifi-no-wokwi"},"Simula\xe7\xe3o da Franzininho WiFi no Wokwi"),(0,o.kt)("p",null,"O Wokwi \xe9 uma ferramenta de simula\xe7\xe3o online e gratuita que permite que desenvolvedores de projetos eletr\xf4nicos testem suas cria\xe7\xf5es em um ambiente leve e intuitivo. Com suporte a diversas placas de desenvolvimento, incluindo o Arduino Uno, ESP32, RP2040, e muitas outras, o simulador \xe9 um diferencial na \xe1rea. A ferramenta oferece recursos exclusivos, como simula\xe7\xe3o de Wi-Fi, Analisador L\xf3gico Virtual, Depura\xe7\xe3o avan\xe7ada com GDB, simula\xe7\xe3o de cart\xe3o SD, API dos chips (cria\xe7\xe3o de chips personalizados) e integra\xe7\xe3o com o Visual Studio Code."),(0,o.kt)("p",null,"A placa Franzininho WiFi tamb\xe9m \xe9 suportada no simulador. Para come\xe7ar a criar projetos, acesse a lista de placas suportadas pelo Wokwi e comece a testar suas cria\xe7\xf5es em um ambiente seguro e de f\xe1cil acesso. Al\xe9m disso, compartilhar seus projetos com a comunidade pode ajudar outros desenvolvedores a iniciarem no universo da eletr\xf4nica, permitindo que cres\xe7am juntos e desenvolvam solu\xe7\xf5es cada vez mais inovadoras."),(0,o.kt)("p",null,"A figura a seguir exibe a Franzininho WiFi no ambiente de simula\xe7\xe3o do Wokwi:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Franzininho WiFi",src:a(3454).Z,width:"1374",height:"633"})),(0,o.kt)("p",null,"Entenda melhor sobre a ferramenta, acessando os links abaixo:"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://docs.wokwi.com/pt-BR/"},"Documenta\xe7\xe3o do Wokwi")),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://wokwi.com/projects/new/franzininho-wifi"},"Simula\xe7\xe3o Franzininho WiFi")),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://docs.franzininho.com.br/docs/franzininho-wifi/wokwi/primeiros-passos"},"Documenta\xe7\xe3o da Franzininho Wokwi")),(0,o.kt)("h2",{id:"componente-para-o-fritzing"},"Componente para o Fritzing"),(0,o.kt)("p",null,"O ",(0,o.kt)("a",{parentName:"p",href:"https://fritzing.org/"},"Fritzing")," \xe9 uma ferramenta open-source que permite a intera\xe7\xe3o com o hardware, possibilitando a montagem de circuitos eletr\xf4nicos, cria\xe7\xe3o de placas de circuito impresso e inclus\xe3o do c\xf3digo-fonte do projeto proposto. Com sua riqueza de detalhes e ampla variedade de componentes, o Fritzing \xe9 uma op\xe7\xe3o ideal para documenta\xe7\xe3o de projetos. Para facilitar a documenta\xe7\xe3o de projetos, criamos um ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/franzininho-fritzing/tree/master/Franzininho-WiFi"},"componente para ser adicionado")," ao Fritzing:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Franzininho WiFi",src:a(3248).Z,width:"1600",height:"900"})))}u.isMDXComponent=!0},5081:(e,i,a)=>{a.d(i,{Z:()=>n});const n=a.p+"assets/images/franzininho-wifi-new-726cd0edc1ae88b9f789475b6d5797de.jpg"},3454:(e,i,a)=>{a.d(i,{Z:()=>n});const n=a.p+"assets/images/image-8.png-b399947d2d8d238d7e1e8b03130218a8.webp"},3248:(e,i,a)=>{a.d(i,{Z:()=>n});const n=a.p+"assets/images/image-9.png-b4e173c5e8b330e9ded7940fa1c12717.webp"}}]); \ No newline at end of file diff --git a/en/assets/js/cdcae78f.e1f3edac.js b/en/assets/js/cdcae78f.e1f3edac.js new file mode 100755 index 000000000..c42804be8 --- /dev/null +++ b/en/assets/js/cdcae78f.e1f3edac.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7272],{67340:(i,e,n)=>{n.r(e),n.d(e,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>c});var o=n(17624),r=n(95788);const a={id:"franzininho-wifi",title:"Placa Franzininho WiFi",slug:"/franzininho-wifi/franzininho-wifi",description:"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes."},s=void 0,t={id:"FranzininhoWifi/franzininho-wifi",title:"Placa Franzininho WiFi",description:"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes.",source:"@site/docs/FranzininhoWifi/franzininho-wifi.md",sourceDirName:"FranzininhoWifi",slug:"/franzininho-wifi/franzininho-wifi",permalink:"/en/docs/franzininho-wifi/franzininho-wifi",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/franzininho-wifi.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi",title:"Placa Franzininho WiFi",slug:"/franzininho-wifi/franzininho-wifi",description:"Conhe\xe7a todos os recursos da placa brasileira Franzininho WiFi. Vem ESP32-S2 e pode ser usada de iniciantes a desenvolvedores experientes."},sidebar:"docs",previous:{title:"Welcome!",permalink:"/en/docs/"},next:{title:"Como simular a Franzininho WiFi no Wokwi",permalink:"/en/docs/franzininho-wifi/wokwi/primeiros-passos"}},d={},c=[{value:"Resumo de recursos da placa Franzininho WiFi:",id:"resumo-de-recursos-da-placa-franzininho-wifi",level:2},{value:"Pinout da Franzininho WiFi",id:"pinout-da-franzininho-wifi",level:2},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Simula\xe7\xe3o da Franzininho WiFi no Wokwi",id:"simula\xe7\xe3o-da-franzininho-wifi-no-wokwi",level:2},{value:"Componente para o Fritzing",id:"componente-para-o-fritzing",level:2}];function l(i){const e={a:"a",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.MN)(),...i.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(e.p,{children:"A Franzininho WIFI \xe9 uma placa de desenvolvimento de hardware de c\xf3digo aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal \xe9 tornar o desenvolvimento de projetos eletr\xf4nicos mais acess\xedvel a makers, entusiastas e desenvolvedores brasileiros."}),"\n",(0,o.jsx)(e.p,{children:"A placa pode ser programada de v\xe1rias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes."}),"\n",(0,o.jsx)(e.p,{children:"Neste texto, apresentaremos os recursos dispon\xedveis, as formas de programa\xe7\xe3o e informa\xe7\xf5es relevantes para aqueles que est\xe3o iniciando o uso da Franzininho WiFi ou t\xeam interesse em conhec\xea-la."}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.a,{href:"https://sacola.pagseguro.uol.com.br/e9bdf81f-339f-4b36-951c-88c69240e0e7",children:"Compre sua Franzininho WiFi (com frete gratis) clicando neste link"})}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.img,{alt:"Placa Franzininho WiFi",src:n(41788).c+"",width:"1600",height:"900"})}),"\n",(0,o.jsx)(e.h2,{id:"resumo-de-recursos-da-placa-franzininho-wifi",children:"Resumo de recursos da placa Franzininho WiFi:"}),"\n",(0,o.jsx)(e.p,{children:"A Franzininho WiFi possui os seguintes recursos:"}),"\n",(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsxs)(e.li,{children:["M\xf3dulo ESP32-S2","\n",(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsx)(e.li,{children:"Microcontrolador Xtensa\xae single-core32-bit LX7 operando em at\xe9 240 MHz"}),"\n",(0,o.jsx)(e.li,{children:"Mem\xf3rias: 128 KB de ROM, 320 KB de SRAM, 16 KB SRAM no RTC, 4MB de Flash"}),"\n",(0,o.jsx)(e.li,{children:"WiFi 802.11 b/g/n"}),"\n",(0,o.jsx)(e.li,{children:"Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera, IR,contador de pulsos, LED PWM, TWAI(CAN), USB 1.1 OTG, ADC, DAC, touch, sensor de temperatura interno."}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(e.li,{children:["Pinout:","\n",(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsx)(e.li,{children:"40 pinos divididos em 2\xd720 headers de 2,54 mm"}),"\n",(0,o.jsx)(e.li,{children:"35 GPIOs"}),"\n",(0,o.jsx)(e.li,{children:"Compat\xedvel com protoboard"}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(e.li,{children:"2 LEDS de uso geral"}),"\n",(0,o.jsx)(e.li,{children:"Bot\xf5es: 1xReset, 1 x Boot"}),"\n",(0,o.jsx)(e.li,{children:"USB: conector micro USB \u2013 OTG 1.1"}),"\n",(0,o.jsxs)(e.li,{children:["Alimenta\xe7\xe3o:","\n",(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsx)(e.li,{children:"5V via conector USB"}),"\n",(0,o.jsx)(e.li,{children:"5V e GND via pinos"}),"\n",(0,o.jsx)(e.li,{children:"3V3 e GND via pinos"}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(e.li,{children:["Formas de programa\xe7\xe3o:","\n",(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsx)(e.li,{children:"ESP-IDF,"}),"\n",(0,o.jsx)(e.li,{children:"Arduino,"}),"\n",(0,o.jsx)(e.li,{children:"CircuitPyhton,"}),"\n",(0,o.jsx)(e.li,{children:"MicroPython,"}),"\n",(0,o.jsx)(e.li,{children:"Zephyr,"}),"\n",(0,o.jsx)(e.li,{children:"NuttX"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(e.h2,{id:"pinout-da-franzininho-wifi",children:"Pinout da Franzininho WiFi"}),"\n",(0,o.jsx)(e.p,{children:"A imagem a seguir exibe o pinout da Franzininho WiFi com mapeamento dos pinos e recursos:"}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.img,{src:"https://raw.githubusercontent.com/Franzininho/imagens-franzininho/main/franzininho-wifi/pinagem-franzininho-wifi.png",alt:"Nova Franzininho WiFI: pinout"})}),"\n",(0,o.jsx)(e.h2,{id:"licen\xe7a",children:"Licen\xe7a"}),"\n",(0,o.jsxs)(e.p,{children:["A placa Franzininho WiFi \xe9 um projeto de hardware de c\xf3digo aberto, licenciado sob a ",(0,o.jsx)(e.strong,{children:"CERN Open Hardware License"}),". Essa licen\xe7a \xe9 utilizada em projetos de hardware que s\xe3o desenvolvidos e disponibilizados como c\xf3digo aberto, permitindo que outras pessoas possam reproduzir e criar deriva\xe7\xf5es do projeto. Para garantir a conformidade com a licen\xe7a, \xe9 importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar deriva\xe7\xf5es do projeto. Dessa forma, podem garantir que est\xe3o seguindo as diretrizes corretas e respeitando a licen\xe7a escolhida para o projeto."]}),"\n",(0,o.jsxs)(e.p,{children:["Voc\xea encontra o projeto do hardware no Github organiza\xe7\xe3o Franzininho: ",(0,o.jsx)(e.a,{href:"https://github.com/Franzininho/Franzininho-WiFi",children:"https://github.com/Franzininho/Franzininho-WiFi"})]}),"\n",(0,o.jsx)(e.h2,{id:"simula\xe7\xe3o-da-franzininho-wifi-no-wokwi",children:"Simula\xe7\xe3o da Franzininho WiFi no Wokwi"}),"\n",(0,o.jsx)(e.p,{children:"O Wokwi \xe9 uma ferramenta de simula\xe7\xe3o online e gratuita que permite que desenvolvedores de projetos eletr\xf4nicos testem suas cria\xe7\xf5es em um ambiente leve e intuitivo. Com suporte a diversas placas de desenvolvimento, incluindo o Arduino Uno, ESP32, RP2040, e muitas outras, o simulador \xe9 um diferencial na \xe1rea. A ferramenta oferece recursos exclusivos, como simula\xe7\xe3o de Wi-Fi, Analisador L\xf3gico Virtual, Depura\xe7\xe3o avan\xe7ada com GDB, simula\xe7\xe3o de cart\xe3o SD, API dos chips (cria\xe7\xe3o de chips personalizados) e integra\xe7\xe3o com o Visual Studio Code."}),"\n",(0,o.jsx)(e.p,{children:"A placa Franzininho WiFi tamb\xe9m \xe9 suportada no simulador. Para come\xe7ar a criar projetos, acesse a lista de placas suportadas pelo Wokwi e comece a testar suas cria\xe7\xf5es em um ambiente seguro e de f\xe1cil acesso. Al\xe9m disso, compartilhar seus projetos com a comunidade pode ajudar outros desenvolvedores a iniciarem no universo da eletr\xf4nica, permitindo que cres\xe7am juntos e desenvolvam solu\xe7\xf5es cada vez mais inovadoras."}),"\n",(0,o.jsx)(e.p,{children:"A figura a seguir exibe a Franzininho WiFi no ambiente de simula\xe7\xe3o do Wokwi:"}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.img,{alt:"Franzininho WiFi",src:n(19424).c+"",width:"1374",height:"633"})}),"\n",(0,o.jsx)(e.p,{children:"Entenda melhor sobre a ferramenta, acessando os links abaixo:"}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.a,{href:"https://docs.wokwi.com/pt-BR/",children:"Documenta\xe7\xe3o do Wokwi"})}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.a,{href:"https://wokwi.com/projects/new/franzininho-wifi",children:"Simula\xe7\xe3o Franzininho WiFi"})}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.a,{href:"https://docs.franzininho.com.br/docs/franzininho-wifi/wokwi/primeiros-passos",children:"Documenta\xe7\xe3o da Franzininho Wokwi"})}),"\n",(0,o.jsx)(e.h2,{id:"componente-para-o-fritzing",children:"Componente para o Fritzing"}),"\n",(0,o.jsxs)(e.p,{children:["O ",(0,o.jsx)(e.a,{href:"https://fritzing.org/",children:"Fritzing"})," \xe9 uma ferramenta open-source que permite a intera\xe7\xe3o com o hardware, possibilitando a montagem de circuitos eletr\xf4nicos, cria\xe7\xe3o de placas de circuito impresso e inclus\xe3o do c\xf3digo-fonte do projeto proposto. Com sua riqueza de detalhes e ampla variedade de componentes, o Fritzing \xe9 uma op\xe7\xe3o ideal para documenta\xe7\xe3o de projetos. Para facilitar a documenta\xe7\xe3o de projetos, criamos um ",(0,o.jsx)(e.a,{href:"https://github.com/Franzininho/franzininho-fritzing/tree/master/Franzininho-WiFi",children:"componente para ser adicionado"})," ao Fritzing:"]}),"\n",(0,o.jsx)(e.p,{children:(0,o.jsx)(e.img,{alt:"Franzininho WiFi",src:n(26548).c+"",width:"1600",height:"900"})})]})}function h(i={}){const{wrapper:e}={...(0,r.MN)(),...i.components};return e?(0,o.jsx)(e,{...i,children:(0,o.jsx)(l,{...i})}):l(i)}},95788:(i,e,n)=>{n.d(e,{MN:()=>c});var o=n(11504);function r(i,e,n){return e in i?Object.defineProperty(i,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):i[e]=n,i}function a(i,e){var n=Object.keys(i);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(i);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(i,e).enumerable}))),n.push.apply(n,o)}return n}function s(i){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?a(Object(n),!0).forEach((function(e){r(i,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(i,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(e){Object.defineProperty(i,e,Object.getOwnPropertyDescriptor(n,e))}))}return i}function t(i,e){if(null==i)return{};var n,o,r=function(i,e){if(null==i)return{};var n,o,r={},a=Object.keys(i);for(o=0;o<a.length;o++)n=a[o],e.indexOf(n)>=0||(r[n]=i[n]);return r}(i,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(i);for(o=0;o<a.length;o++)n=a[o],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(i,n)&&(r[n]=i[n])}return r}var d=o.createContext({}),c=function(i){var e=o.useContext(d),n=e;return i&&(n="function"==typeof i?i(e):s(s({},e),i)),n},l={inlineCode:"code",wrapper:function(i){var e=i.children;return o.createElement(o.Fragment,{},e)}},h=o.forwardRef((function(i,e){var n=i.components,r=i.mdxType,a=i.originalType,d=i.parentName,h=t(i,["components","mdxType","originalType","parentName"]),p=c(n),u=r,m=p["".concat(d,".").concat(u)]||p[u]||l[u]||a;return n?o.createElement(m,s(s({ref:e},h),{},{components:n})):o.createElement(m,s({ref:e},h))}));h.displayName="MDXCreateElement"},41788:(i,e,n)=>{n.d(e,{c:()=>o});const o=n.p+"assets/images/franzininho-wifi-new-726cd0edc1ae88b9f789475b6d5797de.jpg"},19424:(i,e,n)=>{n.d(e,{c:()=>o});const o=n.p+"assets/images/image-8.png-b399947d2d8d238d7e1e8b03130218a8.webp"},26548:(i,e,n)=>{n.d(e,{c:()=>o});const o=n.p+"assets/images/image-9.png-b4e173c5e8b330e9ded7940fa1c12717.webp"}}]); \ No newline at end of file diff --git a/en/assets/js/cfe204fd.c6e46fa4.js b/en/assets/js/cfe204fd.c6e46fa4.js deleted file mode 100755 index 254a5e53f..000000000 --- a/en/assets/js/cfe204fd.c6e46fa4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1793],{3905:(t,e,n)=>{n.d(e,{Zo:()=>d,kt:()=>k});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function o(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?l(Object(n),!0).forEach((function(e){r(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function i(t,e){if(null==t)return{};var n,a,r=function(t,e){if(null==t)return{};var n,a,r={},l=Object.keys(t);for(a=0;a<l.length;a++)n=l[a],e.indexOf(n)>=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(a=0;a<l.length;a++)n=l[a],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var p=a.createContext({}),m=function(t){var e=a.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},d=function(t){var e=m(t.components);return a.createElement(p.Provider,{value:e},t.children)},u="mdxType",s={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},c=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,l=t.originalType,p=t.parentName,d=i(t,["components","mdxType","originalType","parentName"]),u=m(n),c=r,k=u["".concat(p,".").concat(c)]||u[c]||s[c]||l;return n?a.createElement(k,o(o({ref:e},d),{},{components:n})):a.createElement(k,o({ref:e},d))}));function k(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=n.length,o=new Array(l);o[0]=c;var i={};for(var p in e)hasOwnProperty.call(e,p)&&(i[p]=e[p]);i.originalType=t,i[u]="string"==typeof t?t:r,o[1]=i;for(var m=2;m<l;m++)o[m]=n[m];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},1693:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>o,default:()=>s,frontMatter:()=>l,metadata:()=>i,toc:()=>m});var a=n(3117),r=(n(7294),n(3905));const l={id:"franzininho-stm32c0-stm32cubeide-todolist",title:"STM32Cube IDE TODO List",slug:"/franzininho-c0/franzininho-c0-stm32cubeide-todolist",description:"Todo list para exemplos com STM32Cube IDE"},o=void 0,i={unversionedId:"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist",id:"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist",title:"STM32Cube IDE TODO List",description:"Todo list para exemplos com STM32Cube IDE",source:"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/stm32cube-ide-todolist.md",sourceDirName:"franzininhoSTM32C0/exemplos-stm32cube-IDE",slug:"/franzininho-c0/franzininho-c0-stm32cubeide-todolist",permalink:"/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/stm32cube-ide-todolist.md",tags:[],version:"current",frontMatter:{id:"franzininho-stm32c0-stm32cubeide-todolist",title:"STM32Cube IDE TODO List",slug:"/franzininho-c0/franzininho-c0-stm32cubeide-todolist",description:"Todo list para exemplos com STM32Cube IDE"},sidebar:"docs",previous:{title:"Placa Franzininho C0",permalink:"/en/docs/franzininho-c0/franzininho-c0-board"},next:{title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",permalink:"/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide"}},p={},m=[{value:"Reposit\xf3rio de Exemplos",id:"reposit\xf3rio-de-exemplos",level:2}],d={toc:m},u="wrapper";function s(t){let{components:e,...n}=t;return(0,r.kt)(u,(0,a.Z)({},d,n,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programa\xe7\xe3o da placa Franzininho C0 na STM32CubeIDE usando a HAL da ST. "),(0,r.kt)("p",null,"Fique a vontade para colaborar na constru\xe7\xe3o dos materiais e c\xf3digos. Outros exemplos podem ser adicionados. Converse na comunidade."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Exemplos"),(0,r.kt)("th",{parentName:"tr",align:null},"Status"),(0,r.kt)("th",{parentName:"tr",align:null},"Descri\xe7\xe3o"),(0,r.kt)("th",{parentName:"tr",align:null},"Documentacao"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"00 - Exemplo Template"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Projeto template com as"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"01 - Exemplo Blinky"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Piscando o LED usando delay"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"02 - Exemplo Blinky Int"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Piscando o LED usando interrup\xe7\xe3o de timer"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"03 - Exemplo Hello World"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Transmitindo mensagem serial pela UART"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"04 - Exemplo input"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Leitura de um bot\xe3o e acionamento de um LED"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"05 - Exemplo debounce"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Leitura de um bot\xe3o com realiza\xe7\xe3o de debounce"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"06 - Exemplo ADC"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Convers\xe3o A/D com DMA e base de tempo por timer"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"07 - Exemplo PWM"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Gera\xe7\xe3o de PWM"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"08 - Exemplo Dimmer"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Controlando o brilho do LED por um potenci\xf4metro (ADC e PWM)"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"09 - Exemplo Servo Motor"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Controlando a posi\xe7\xe3o de um servo motor por um potenci\xf4metro (ADC e PWM)"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"10 - Exemplo I2C"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Controlando algum perif\xe9rico via I2C (por exemplo, mem\xf3ria externa, sensor de temperatura, RTC, display, ...)"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"11 - Exemplo SPI"),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null},"Controlando aglum perif\xe9rico via SPI (por exemplo: mem\xf3ria externa, cart\xe3o SD, display, ...)"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"12 - Exemplo ..."),(0,r.kt)("td",{parentName:"tr",align:null},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null})))),(0,r.kt)("p",null,"Legenda:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ud83d\udfe2 Feito"),(0,r.kt)("li",{parentName:"ul"},"\ud83d\udfe1 Em progresso"),(0,r.kt)("li",{parentName:"ul"},"\ud83d\udd34 Ainda n\xe3o implementado")),(0,r.kt)("h2",{id:"reposit\xf3rio-de-exemplos"},"Reposit\xf3rio de Exemplos"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide"},"GitHub - Franzininho/franzininho-c0-exemplos-stm32cubeide: Exemplos de c\xf3digo para Franzininho C0 na STM32CubeIDE")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/cfe204fd.c8f28693.js b/en/assets/js/cfe204fd.c8f28693.js new file mode 100755 index 000000000..2b202b8e6 --- /dev/null +++ b/en/assets/js/cfe204fd.c8f28693.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8658],{37904:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>x,frontMatter:()=>o,metadata:()=>d,toc:()=>l});var r=t(17624),i=t(95788);const o={id:"franzininho-stm32c0-stm32cubeide-todolist",title:"STM32Cube IDE TODO List",slug:"/franzininho-c0/franzininho-c0-stm32cubeide-todolist",description:"Todo list para exemplos com STM32Cube IDE"},s=void 0,d={id:"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist",title:"STM32Cube IDE TODO List",description:"Todo list para exemplos com STM32Cube IDE",source:"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/stm32cube-ide-todolist.md",sourceDirName:"franzininhoSTM32C0/exemplos-stm32cube-IDE",slug:"/franzininho-c0/franzininho-c0-stm32cubeide-todolist",permalink:"/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/stm32cube-ide-todolist.md",tags:[],version:"current",frontMatter:{id:"franzininho-stm32c0-stm32cubeide-todolist",title:"STM32Cube IDE TODO List",slug:"/franzininho-c0/franzininho-c0-stm32cubeide-todolist",description:"Todo list para exemplos com STM32Cube IDE"},sidebar:"docs",previous:{title:"Placa Franzininho C0",permalink:"/en/docs/franzininho-c0/franzininho-c0-board"},next:{title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",permalink:"/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide"}},c={},l=[{value:"Reposit\xf3rio de Exemplos",id:"reposit\xf3rio-de-exemplos",level:2}];function a(e){const n={a:"a",h2:"h2",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programa\xe7\xe3o da placa Franzininho C0 na STM32CubeIDE usando a HAL da ST."}),"\n",(0,r.jsx)(n.p,{children:"Fique a vontade para colaborar na constru\xe7\xe3o dos materiais e c\xf3digos. Outros exemplos podem ser adicionados. Converse na comunidade."}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Exemplos"}),(0,r.jsx)(n.th,{children:"Status"}),(0,r.jsx)(n.th,{children:"Descri\xe7\xe3o"}),(0,r.jsx)(n.th,{children:"Documentacao"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"00 - Exemplo Template"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Projeto template com as"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"01 - Exemplo Blinky"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Piscando o LED usando delay"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"02 - Exemplo Blinky Int"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Piscando o LED usando interrup\xe7\xe3o de timer"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"03 - Exemplo Hello World"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Transmitindo mensagem serial pela UART"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"04 - Exemplo input"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Leitura de um bot\xe3o e acionamento de um LED"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"05 - Exemplo debounce"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Leitura de um bot\xe3o com realiza\xe7\xe3o de debounce"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"06 - Exemplo ADC"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Convers\xe3o A/D com DMA e base de tempo por timer"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"07 - Exemplo PWM"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Gera\xe7\xe3o de PWM"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"08 - Exemplo Dimmer"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Controlando o brilho do LED por um potenci\xf4metro (ADC e PWM)"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"09 - Exemplo Servo Motor"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Controlando a posi\xe7\xe3o de um servo motor por um potenci\xf4metro (ADC e PWM)"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"10 - Exemplo I2C"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Controlando algum perif\xe9rico via I2C (por exemplo, mem\xf3ria externa, sensor de temperatura, RTC, display, ...)"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"11 - Exemplo SPI"}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{children:"Controlando aglum perif\xe9rico via SPI (por exemplo: mem\xf3ria externa, cart\xe3o SD, display, ...)"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"12 - Exemplo ..."}),(0,r.jsx)(n.td,{children:"\ud83d\udd34"}),(0,r.jsx)(n.td,{}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"Legenda:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"\ud83d\udfe2 Feito"}),"\n",(0,r.jsx)(n.li,{children:"\ud83d\udfe1 Em progresso"}),"\n",(0,r.jsx)(n.li,{children:"\ud83d\udd34 Ainda n\xe3o implementado"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"reposit\xf3rio-de-exemplos",children:"Reposit\xf3rio de Exemplos"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.a,{href:"https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide",children:"GitHub - Franzininho/franzininho-c0-exemplos-stm32cubeide: Exemplos de c\xf3digo para Franzininho C0 na STM32CubeIDE"})})]})}function x(e={}){const{wrapper:n}={...(0,i.MN)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},95788:(e,n,t)=>{t.d(n,{MN:()=>l});var r=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function s(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){i(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function d(e,n){if(null==e)return{};var t,r,i=function(e,n){if(null==e)return{};var t,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var c=r.createContext({}),l=function(e){var n=r.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},a={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},x=r.forwardRef((function(e,n){var t=e.components,i=e.mdxType,o=e.originalType,c=e.parentName,x=d(e,["components","mdxType","originalType","parentName"]),h=l(t),m=i,p=h["".concat(c,".").concat(m)]||h[m]||a[m]||o;return t?r.createElement(p,s(s({ref:n},x),{},{components:t})):r.createElement(p,s({ref:n},x))}));x.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/d0c422fb.120fa59f.js b/en/assets/js/d0c422fb.120fa59f.js deleted file mode 100755 index e3e11fd99..000000000 --- a/en/assets/js/d0c422fb.120fa59f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8811],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var r=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function n(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){i(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t){if(null==e)return{};var a,r,i=function(e,t){if(null==e)return{};var a,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var l=r.createContext({}),d=function(e){var t=r.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):n(n({},t),e)),a},u=function(e){var t=d(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var a=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=d(a),m=i,h=p["".concat(l,".").concat(m)]||p[m]||c[m]||o;return a?r.createElement(h,n(n({ref:t},u),{},{components:a})):r.createElement(h,n({ref:t},u))}));function h(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=a.length,n=new Array(o);n[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:i,n[1]=s;for(var d=2;d<o;d++)n[d]=a[d];return r.createElement.apply(null,n)}return r.createElement.apply(null,a)}m.displayName="MDXCreateElement"},9358:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>n,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=a(3117),i=(a(7294),a(3905));const o={id:"circuitpython-dht11",title:"Sensor de temperatura e umidade DHT11",slug:"/franzininho-wifi/exemplos-circuitpython/dht11",description:"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},n=void 0,s={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11",title:"Sensor de temperatura e umidade DHT11",description:"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/dht11.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/dht11",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/dht11",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/dht11.md",tags:[],version:"current",frontMatter:{id:"circuitpython-dht11",title:"Sensor de temperatura e umidade DHT11",slug:"/franzininho-wifi/exemplos-circuitpython/dht11",description:"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},sidebar:"docs",previous:{title:"Display OLED I2C",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c"},next:{title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04"}},l={},d=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Resultado",id:"resultado",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],u={toc:d},p="wrapper";function c(e){let{components:t,...o}=e;return(0,i.kt)(p,(0,r.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11."),(0,i.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,i.kt)("p",null,"Identifique os seguintes materiais necess\xe1rios para este projeto:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"1 Franzininho WiFi."),(0,i.kt)("li",{parentName:"ul"},"1 Sensor DHT11"),(0,i.kt)("li",{parentName:"ul"},"1 Resistor de 10k"),(0,i.kt)("li",{parentName:"ul"},"1 Protoboard."),(0,i.kt)("li",{parentName:"ul"},"Cabos de liga\xe7\xe3o.")),(0,i.kt)("h2",{id:"circuito"},"Circuito"),(0,i.kt)("p",null,"Realize a montagem do circuito da maneira indicada pela figura a seguir:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Circuito DHT11",src:a(9100).Z,width:"876",height:"1041"})),(0,i.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,i.kt)("p",null,"Para usar o sensor DHT com a Franzininho WiFi, precisamos instalar o m\xf3dulo ",(0,i.kt)("strong",{parentName:"p"},"adafruit_dht")," na placa antes de criarmos nosso c\xf3digo."),(0,i.kt)("p",null,"As bibliotecas para o CircuitPython podem ser obtidas atrav\xe9s do endere\xe7o ",(0,i.kt)("a",{parentName:"p",href:"https://circuitpython.org/libraries"},"https://circuitpython.org/libraries"),". Escolha e baixe o arquivo de acordo com a vers\xe3o do CircuitPyhthon que voc\xea tem instalado na Franzininho WiFi."),(0,i.kt)("p",null,"Em seguida, copie o seguinte arquivo diretamente para a pasta ",(0,i.kt)("strong",{parentName:"p"},"lib")," do sistema de arquivos da Franzininho WiFi:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"adafruit_dht.mpy")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Instala\xe7\xe3o da Biblioteca",src:a(9837).Z,width:"1278",height:"271"})),(0,i.kt)("p",null,"Para demonstrar o uso do m\xf3dulo do sensor DHT, digite o c\xf3digo abaixo e conecte ao terminal serial (REPL) da placa para verificar os valores de temperatura e umidade lidos."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},'""" Leitura de temperatura e umidade com DHT11 """\n\nimport board\nimport time\nimport adafruit_dht\n\ndht = adafruit_dht.DHT11(board.IO2)\n\nwhile True:\n try:\n temperatura = dht.temperature\n umidade = dht.humidity\n # Imprime valores lidos na serial\n print("Temperatura: {:.1f} \xb0C \\t Umidade: {}%".format(temperatura, umidade))\n except RuntimeError as e:\n # A leitura do DHT11 pode falhar\n print("Falha na leitura do DHT11: ", e.args)\n\n time.sleep(1)\n')),(0,i.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},"An\xe1lise do c\xf3digo"),(0,i.kt)("p",null,"Na primeira parte do c\xf3digo temos a importa\xe7\xe3o das bibliotecas a serem usadas na aplica\xe7\xe3o. Note que importamos o m\xf3dulo ",(0,i.kt)("strong",{parentName:"p"},"adafruit_dht")," que instalamos na pasta ",(0,i.kt)("strong",{parentName:"p"},"lib")," da placa:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"import board\nimport time\nimport adafruit_dht\n")),(0,i.kt)("p",null,"Em seguida criamos uma inst\xe2ncia e escolhemos o modo DHT11, ja que \xe9 poss\xedvel trabalhar com outros modelos com essa biblioteca. \xc9 necessario passar como par\xe2metro o pino que est\xe1 conectado a linha de comunica\xe7\xe3o do sensor. Em nosso caso passamos o pino 2:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},"dht = adafruit_dht.DHT11(board.IO2)\n")),(0,i.kt)("p",null,"No loop infinito fazemos a leitura dos valores de temperatura e umidade a cada ",(0,i.kt)("strong",{parentName:"p"},"1 segundo")," atrav\xe9s dos metodos ",(0,i.kt)("inlineCode",{parentName:"p"},"dht.temperature")," e ",(0,i.kt)("inlineCode",{parentName:"p"},"dht.humidity"),", e imprimimos os valores lidos no terminal serial."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-python"},'while True:\n try:\n temperatura = dht.temperature\n umidade = dht.humidity\n # Imprime valores lidos na serial\n print("Temperatura: {:.1f} \xb0C \\t Umidade: {}%".format(temperatura, umidade))\n except RuntimeError as e:\n # A leitura do DHT11 pode falhar\n print("Falha na leitura do DHT11: ", e.args)\n\n time.sleep(1)\n')),(0,i.kt)("h2",{id:"resultado"},"Resultado"),(0,i.kt)("p",null,"A figura a seguir exibe os valores lidos no terminal serial(REPL):"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Terminal Serial",src:a(1867).Z,width:"818",height:"495"})),(0,i.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,i.kt)("p",null,"O sensor DHT11( e similares) possibilita que fa\xe7amos leitura de temperatura e umidade de uma forma simples e eficiente. Atrav\xe9s de 1 fio de comunica\xe7\xe3o conseguimos fazer a leitura das duas grandezas. Como a comunica\xe7\xe3o \xe9 um pouco complexa, o uso de uma biblioteca facilita a comunica\xe7\xe3o com o dispositivo."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,i.kt)("a",{parentName:"p",href:"https://discord.gg/H5kENmWGaz"},"Discord"))),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Autor"),(0,i.kt)("th",{parentName:"tr",align:null},"F\xe1bio Souza"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Data:"),(0,i.kt)("td",{parentName:"tr",align:null},"10/10/2021")))))}c.isMDXComponent=!0},9100:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/circuito-43a970745d9aaeec4fad97f720fd8811.png"},9837:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/lib-7c2dd516e09a0e1aed3ab358bcd7af0a.png"},1867:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/terminal-59d0e1d7a0f860e09a850af3600f4abd.png"}}]); \ No newline at end of file diff --git a/en/assets/js/d0c422fb.396383b0.js b/en/assets/js/d0c422fb.396383b0.js new file mode 100755 index 000000000..d02ebf3e2 --- /dev/null +++ b/en/assets/js/d0c422fb.396383b0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5944],{73880:(e,i,r)=>{r.r(i),r.d(i,{assets:()=>d,contentTitle:()=>t,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=r(17624),n=r(95788);const o={id:"circuitpython-dht11",title:"Sensor de temperatura e umidade DHT11",slug:"/franzininho-wifi/exemplos-circuitpython/dht11",description:"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},t=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11",title:"Sensor de temperatura e umidade DHT11",description:"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/dht11.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/dht11",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/dht11",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/dht11.md",tags:[],version:"current",frontMatter:{id:"circuitpython-dht11",title:"Sensor de temperatura e umidade DHT11",slug:"/franzininho-wifi/exemplos-circuitpython/dht11",description:"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11 usando o CircuitPython.",author:"Cl\xe1udio Lu\xeds Vieira Oliveira"},sidebar:"docs",previous:{title:"Display OLED I2C",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c"},next:{title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04"}},d={},c=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Resultado",id:"resultado",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function l(e){const i={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.p,{children:"Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11."}),"\n",(0,a.jsx)(i.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,a.jsx)(i.p,{children:"Identifique os seguintes materiais necess\xe1rios para este projeto:"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"1 Franzininho WiFi."}),"\n",(0,a.jsx)(i.li,{children:"1 Sensor DHT11"}),"\n",(0,a.jsx)(i.li,{children:"1 Resistor de 10k"}),"\n",(0,a.jsx)(i.li,{children:"1 Protoboard."}),"\n",(0,a.jsx)(i.li,{children:"Cabos de liga\xe7\xe3o."}),"\n"]}),"\n",(0,a.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,a.jsx)(i.p,{children:"Realize a montagem do circuito da maneira indicada pela figura a seguir:"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"Circuito DHT11",src:r(72524).c+"",width:"876",height:"1041"})}),"\n",(0,a.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,a.jsxs)(i.p,{children:["Para usar o sensor DHT com a Franzininho WiFi, precisamos instalar o m\xf3dulo ",(0,a.jsx)(i.strong,{children:"adafruit_dht"})," na placa antes de criarmos nosso c\xf3digo."]}),"\n",(0,a.jsxs)(i.p,{children:["As bibliotecas para o CircuitPython podem ser obtidas atrav\xe9s do endere\xe7o ",(0,a.jsx)(i.a,{href:"https://circuitpython.org/libraries",children:"https://circuitpython.org/libraries"}),". Escolha e baixe o arquivo de acordo com a vers\xe3o do CircuitPyhthon que voc\xea tem instalado na Franzininho WiFi."]}),"\n",(0,a.jsxs)(i.p,{children:["Em seguida, copie o seguinte arquivo diretamente para a pasta ",(0,a.jsx)(i.strong,{children:"lib"})," do sistema de arquivos da Franzininho WiFi:"]}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"adafruit_dht.mpy"}),"\n"]}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"Instala\xe7\xe3o da Biblioteca",src:r(97252).c+"",width:"1278",height:"271"})}),"\n",(0,a.jsx)(i.p,{children:"Para demonstrar o uso do m\xf3dulo do sensor DHT, digite o c\xf3digo abaixo e conecte ao terminal serial (REPL) da placa para verificar os valores de temperatura e umidade lidos."}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-python",children:'""" Leitura de temperatura e umidade com DHT11 """\n\nimport board\nimport time\nimport adafruit_dht\n\ndht = adafruit_dht.DHT11(board.IO2)\n\nwhile True:\n try:\n temperatura = dht.temperature\n umidade = dht.humidity\n # Imprime valores lidos na serial\n print("Temperatura: {:.1f} \xb0C \\t Umidade: {}%".format(temperatura, umidade))\n except RuntimeError as e:\n # A leitura do DHT11 pode falhar\n print("Falha na leitura do DHT11: ", e.args)\n\n time.sleep(1)\n'})}),"\n",(0,a.jsx)(i.h2,{id:"an\xe1lise-do-c\xf3digo",children:"An\xe1lise do c\xf3digo"}),"\n",(0,a.jsxs)(i.p,{children:["Na primeira parte do c\xf3digo temos a importa\xe7\xe3o das bibliotecas a serem usadas na aplica\xe7\xe3o. Note que importamos o m\xf3dulo ",(0,a.jsx)(i.strong,{children:"adafruit_dht"})," que instalamos na pasta ",(0,a.jsx)(i.strong,{children:"lib"})," da placa:"]}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-python",children:"import board\nimport time\nimport adafruit_dht\n"})}),"\n",(0,a.jsx)(i.p,{children:"Em seguida criamos uma inst\xe2ncia e escolhemos o modo DHT11, ja que \xe9 poss\xedvel trabalhar com outros modelos com essa biblioteca. \xc9 necessario passar como par\xe2metro o pino que est\xe1 conectado a linha de comunica\xe7\xe3o do sensor. Em nosso caso passamos o pino 2:"}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-python",children:"dht = adafruit_dht.DHT11(board.IO2)\n"})}),"\n",(0,a.jsxs)(i.p,{children:["No loop infinito fazemos a leitura dos valores de temperatura e umidade a cada ",(0,a.jsx)(i.strong,{children:"1 segundo"})," atrav\xe9s dos metodos ",(0,a.jsx)(i.code,{children:"dht.temperature"})," e ",(0,a.jsx)(i.code,{children:"dht.humidity"}),", e imprimimos os valores lidos no terminal serial."]}),"\n",(0,a.jsx)(i.pre,{children:(0,a.jsx)(i.code,{className:"language-python",children:'while True:\n try:\n temperatura = dht.temperature\n umidade = dht.humidity\n # Imprime valores lidos na serial\n print("Temperatura: {:.1f} \xb0C \\t Umidade: {}%".format(temperatura, umidade))\n except RuntimeError as e:\n # A leitura do DHT11 pode falhar\n print("Falha na leitura do DHT11: ", e.args)\n\n time.sleep(1)\n'})}),"\n",(0,a.jsx)(i.h2,{id:"resultado",children:"Resultado"}),"\n",(0,a.jsx)(i.p,{children:"A figura a seguir exibe os valores lidos no terminal serial(REPL):"}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.img,{alt:"Terminal Serial",src:r(91604).c+"",width:"818",height:"495"})}),"\n",(0,a.jsx)(i.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,a.jsx)(i.p,{children:"O sensor DHT11( e similares) possibilita que fa\xe7amos leitura de temperatura e umidade de uma forma simples e eficiente. Atrav\xe9s de 1 fio de comunica\xe7\xe3o conseguimos fazer a leitura das duas grandezas. Como a comunica\xe7\xe3o \xe9 um pouco complexa, o uso de uma biblioteca facilita a comunica\xe7\xe3o com o dispositivo."}),"\n",(0,a.jsx)(i.admonition,{type:"info",children:(0,a.jsxs)(i.p,{children:["Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,a.jsx)(i.a,{href:"https://discord.gg/H5kENmWGaz",children:"Discord"})]})}),"\n",(0,a.jsxs)(i.table,{children:[(0,a.jsx)(i.thead,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.th,{children:"Autor"}),(0,a.jsx)(i.th,{children:"F\xe1bio Souza"})]})}),(0,a.jsx)(i.tbody,{children:(0,a.jsxs)(i.tr,{children:[(0,a.jsx)(i.td,{children:"Data:"}),(0,a.jsx)(i.td,{children:"10/10/2021"})]})})]})]})}function u(e={}){const{wrapper:i}={...(0,n.MN)(),...e.components};return i?(0,a.jsx)(i,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},95788:(e,i,r)=>{r.d(i,{MN:()=>c});var a=r(11504);function n(e,i,r){return i in e?Object.defineProperty(e,i,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[i]=r,e}function o(e,i){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);i&&(a=a.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),r.push.apply(r,a)}return r}function t(e){for(var i=1;i<arguments.length;i++){var r=null!=arguments[i]?arguments[i]:{};i%2?o(Object(r),!0).forEach((function(i){n(e,i,r[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(r,i))}))}return e}function s(e,i){if(null==e)return{};var r,a,n=function(e,i){if(null==e)return{};var r,a,n={},o=Object.keys(e);for(a=0;a<o.length;a++)r=o[a],i.indexOf(r)>=0||(n[r]=e[r]);return n}(e,i);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],i.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var d=a.createContext({}),c=function(e){var i=a.useContext(d),r=i;return e&&(r="function"==typeof e?e(i):t(t({},i),e)),r},l={inlineCode:"code",wrapper:function(e){var i=e.children;return a.createElement(a.Fragment,{},i)}},u=a.forwardRef((function(e,i){var r=e.components,n=e.mdxType,o=e.originalType,d=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=c(r),p=n,h=m["".concat(d,".").concat(p)]||m[p]||l[p]||o;return r?a.createElement(h,t(t({ref:i},u),{},{components:r})):a.createElement(h,t({ref:i},u))}));u.displayName="MDXCreateElement"},72524:(e,i,r)=>{r.d(i,{c:()=>a});const a=r.p+"assets/images/circuito-43a970745d9aaeec4fad97f720fd8811.png"},97252:(e,i,r)=>{r.d(i,{c:()=>a});const a=r.p+"assets/images/lib-7c2dd516e09a0e1aed3ab358bcd7af0a.png"},91604:(e,i,r)=>{r.d(i,{c:()=>a});const a=r.p+"assets/images/terminal-59d0e1d7a0f860e09a850af3600f4abd.png"}}]); \ No newline at end of file diff --git a/en/assets/js/d268d7c6.aa332d4a.js b/en/assets/js/d268d7c6.aa332d4a.js new file mode 100755 index 000000000..dc156a2e6 --- /dev/null +++ b/en/assets/js/d268d7c6.aa332d4a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3630],{87604:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>t,metadata:()=>s,toc:()=>l});var o=n(17624),a=n(95788);const t={id:"circuitpython-entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",description:"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi",author:"Diana Santos"},r=void 0,s={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",description:"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-saidas-digitais.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/entrada-saidas-digitais.md",tags:[],version:"current",frontMatter:{id:"circuitpython-entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",description:"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Serial Console",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console"},next:{title:"Entrada Anal\xf3gica",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas"}},d={},l=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function c(e){const i={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.p,{children:"Agora que j\xe1 entendemos a estrutura b\xe1sica de um programa no CircuitoPython, exploraremos os pinos de I/O como entrada e sa\xedda digital. Este exemplo exibe como ler um bot\xe3o (entrada digital) e acionar um LED (sa\xedda digital). Quando o bot\xe3o for pressionado o estado do LED dever\xe1 ser invertido. Assim, ao final teremos um bot\xe3o Liga/Desliga para controlar o LED."}),"\n",(0,o.jsx)(i.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsx)(i.li,{children:"1 Placa Franzininho WiFi com CircuitPython;"}),"\n",(0,o.jsx)(i.li,{children:"1 Protoboard;"}),"\n",(0,o.jsx)(i.li,{children:"1 LED vermelho de 3 mm;"}),"\n",(0,o.jsx)(i.li,{children:"1 Resistor 330 \u03a9;"}),"\n",(0,o.jsx)(i.li,{children:"1 Bot\xe3o;"}),"\n",(0,o.jsx)(i.li,{children:"Jumpers."}),"\n"]}),"\n",(0,o.jsx)(i.h2,{id:"circuito",children:"Circuito"}),"\n",(0,o.jsx)(i.p,{children:"Fa\xe7a a seguinte montagem:"}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"Circuito Entrada e Saida digital",src:n(68528).c+"",width:"1728",height:"753"})}),"\n",(0,o.jsx)(i.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,o.jsx)(i.p,{children:"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 dentro do diret\xf3rio CIRCUITPY e salve o arquivo:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"# Entradas e Sa\xeddas digitais - Bot\xe3o Liga/Desliga\nimport time\nimport board\nfrom digitalio import DigitalInOut, Direction, Pull\n\n# Configura o pino do bot\xe3o\nbtn = DigitalInOut(board.IO5) \t# mapea para pino 5 \nbtn.direction = Direction.INPUT \t# configura como entrada\nbtn.pull = Pull.UP # habilita pull-up interno\n\n\n# Configura o pino do led\nled = DigitalInOut(board.IO4) # mapea para pino 4 \nled.direction = Direction.OUTPUT \t# configura como sa\xedda\n\n# loop infinito\nwhile True:\n\tif btn.value ==0:\t\t\t \t# Se bot\xe3o pressionado \n\t\tled.value=not led.value\t\t# inverte estado do LED\n\t\twhile btn.value==0:\t\t\t# Aguarda bot\xe3o ser solto\n\t\t\ttime.sleep(0.01)\t\t# delay de 10 ms\n"})}),"\n",(0,o.jsx)(i.h2,{id:"an\xe1lise-do-c\xf3digo",children:"An\xe1lise do c\xf3digo"}),"\n",(0,o.jsx)(i.p,{children:"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"import board\n"})}),"\n",(0,o.jsx)(i.p,{children:"Como precisaremos de intervalos de temporiza\xe7\xe3o importamos o m\xf3dulo time:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"import time\n"})}),"\n",(0,o.jsx)(i.p,{children:"Trabalharemos como entradas e sa\xeddas digitais nesse exemplo. Para isso, precisamos importar os seguintes m\xf3dulos em digitalio:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"from digitalio import DigitalInOut, Direction\n"})}),"\n",(0,o.jsx)(i.p,{children:"O bot\xe3o deve ser configurado como uma entrada digital no pino 5. Al\xe9m disso, como n\xe3o usamos resistor de pull-up externo devemos configurar o pull-up interno:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"# Configura o pino do bot\xe3o\nbtn = DigitalInOut(board.IO5) \t# mapea para pino 5 \nbtn.direction = Direction.INPUT \t# configura como entrada\nbtn.pull = Pull.UP # habilita pull-up interno\n"})}),"\n",(0,o.jsx)(i.p,{children:"O LED foi configurado como uma sa\xedda digital no pino 4, da mesma forma que fizemos no exemplo anterior:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"# Configura o pino do led\nled = DigitalInOut(board.IO4) # mapea para pino 4 \nled.direction = Direction.OUTPUT \t# configura como sa\xedda\n"})}),"\n",(0,o.jsx)(i.p,{children:"No loop infinito testamos o valor do pio do bot\xe3o, caso esteja em n\xedvel 0 significa que o usu\xe1rio apertou. Assim toda vez que o bot\xe3o \xe9 pressionado o valor do LED \xe9 invertido. Para evitar que o sejam realizadas diversas opera\xe7\xf5es \xe9 aguardado que o usu\xe1rio solte o bot\xe3o antes de ler o bot\xe3o novamente. Essa espera \xe9 feita com um loop\nwhile:"}),"\n",(0,o.jsx)(i.pre,{children:(0,o.jsx)(i.code,{className:"language-python",children:"# loop infinito\nwhile True:\n\tif btn.value ==0:\t\t\t \t# Se bot\xe3o pressionado \n\t\tled.value=not led.value\t\t# inverte estado do LED\n\t\twhile btn.value==0:\t\t\t# Aguarda bot\xe3o ser solto\n\t\t\ttime.sleep(0.01)\t\t# delay de 10 ms\n"})}),"\n",(0,o.jsx)(i.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,o.jsx)(i.p,{children:"Neste exemplo, fizemos uma aplica\xe7\xe3o simples para leitura de uma entrada digital(bot\xe3o) e acionamento de uma sa\xedda digital(LED). Esse exemplo servir\xe1 de base para quando voc\xea precisar trabalhar com entradas e sa\xeddas digitais em seus projetos. A configura\xe7\xe3o \xe9 sempre a mesma."}),"\n",(0,o.jsx)(i.admonition,{title:"Desafio",type:"tip",children:(0,o.jsx)(i.p,{children:"Inclua mais um bot\xe3o e mais um LED no circuito com funcionamento igual ao que fizemos."})}),"\n",(0,o.jsxs)(i.table,{children:[(0,o.jsx)(i.thead,{children:(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.th,{children:"Autor"}),(0,o.jsx)(i.th,{children:"Diana Santos"})]})}),(0,o.jsxs)(i.tbody,{children:[(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.td,{children:"Autor"}),(0,o.jsx)(i.td,{children:(0,o.jsx)(i.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]}),(0,o.jsxs)(i.tr,{children:[(0,o.jsx)(i.td,{children:"Data:"}),(0,o.jsx)(i.td,{children:"16/09/2021"})]})]})]})]})}function p(e={}){const{wrapper:i}={...(0,a.MN)(),...e.components};return i?(0,o.jsx)(i,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},95788:(e,i,n)=>{n.d(i,{MN:()=>l});var o=n(11504);function a(e,i,n){return i in e?Object.defineProperty(e,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[i]=n,e}function t(e,i){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);i&&(o=o.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var i=1;i<arguments.length;i++){var n=null!=arguments[i]?arguments[i]:{};i%2?t(Object(n),!0).forEach((function(i){a(e,i,n[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):t(Object(n)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(n,i))}))}return e}function s(e,i){if(null==e)return{};var n,o,a=function(e,i){if(null==e)return{};var n,o,a={},t=Object.keys(e);for(o=0;o<t.length;o++)n=t[o],i.indexOf(n)>=0||(a[n]=e[n]);return a}(e,i);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(o=0;o<t.length;o++)n=t[o],i.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var d=o.createContext({}),l=function(e){var i=o.useContext(d),n=i;return e&&(n="function"==typeof e?e(i):r(r({},i),e)),n},c={inlineCode:"code",wrapper:function(e){var i=e.children;return o.createElement(o.Fragment,{},i)}},p=o.forwardRef((function(e,i){var n=e.components,a=e.mdxType,t=e.originalType,d=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(n),m=a,h=u["".concat(d,".").concat(m)]||u[m]||c[m]||t;return n?o.createElement(h,r(r({ref:i},p),{},{components:n})):o.createElement(h,r({ref:i},p))}));p.displayName="MDXCreateElement"},68528:(e,i,n)=>{n.d(i,{c:()=>o});const o=n.p+"assets/images/00-circuito-366206a6cd9002f9e3db12f576d74713.png"}}]); \ No newline at end of file diff --git a/en/assets/js/d268d7c6.c51e5171.js b/en/assets/js/d268d7c6.c51e5171.js deleted file mode 100755 index 9155bc35c..000000000 --- a/en/assets/js/d268d7c6.c51e5171.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8659],{3905:(e,a,t)=>{t.d(a,{Zo:()=>p,kt:()=>g});var i=t(7294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function n(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,i)}return t}function r(e){for(var a=1;a<arguments.length;a++){var t=null!=arguments[a]?arguments[a]:{};a%2?n(Object(t),!0).forEach((function(a){o(e,a,t[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):n(Object(t)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(t,a))}))}return e}function s(e,a){if(null==e)return{};var t,i,o=function(e,a){if(null==e)return{};var t,i,o={},n=Object.keys(e);for(i=0;i<n.length;i++)t=n[i],a.indexOf(t)>=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i<n.length;i++)t=n[i],a.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=i.createContext({}),d=function(e){var a=i.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):r(r({},a),e)),t},p=function(e){var a=d(e.components);return i.createElement(l.Provider,{value:a},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var a=e.children;return i.createElement(i.Fragment,{},a)}},m=i.forwardRef((function(e,a){var t=e.components,o=e.mdxType,n=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=d(t),m=o,g=u["".concat(l,".").concat(m)]||u[m]||c[m]||n;return t?i.createElement(g,r(r({ref:a},p),{},{components:t})):i.createElement(g,r({ref:a},p))}));function g(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var n=t.length,r=new Array(n);r[0]=m;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[u]="string"==typeof e?e:o,r[1]=s;for(var d=2;d<n;d++)r[d]=t[d];return i.createElement.apply(null,r)}return i.createElement.apply(null,t)}m.displayName="MDXCreateElement"},416:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>n,metadata:()=>s,toc:()=>d});var i=t(3117),o=(t(7294),t(3905));const n={id:"circuitpython-entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",description:"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi",author:"Diana Santos"},r=void 0,s={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",description:"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-saidas-digitais.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/entrada-saidas-digitais.md",tags:[],version:"current",frontMatter:{id:"circuitpython-entradas-saidas-digitais",title:"Entradas e Sa\xeddas Digitais",slug:"/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",description:"Este exemplo exibe como trabalhar com as entradas e sa\xeddas digitais na Franzininho WiFi",author:"Diana Santos"},sidebar:"docs",previous:{title:"Serial Console",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console"},next:{title:"Entrada Anal\xf3gica",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas"}},l={},d=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],p={toc:d},u="wrapper";function c(e){let{components:a,...n}=e;return(0,o.kt)(u,(0,i.Z)({},p,n,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Agora que j\xe1 entendemos a estrutura b\xe1sica de um programa no CircuitoPython, exploraremos os pinos de I/O como entrada e sa\xedda digital. Este exemplo exibe como ler um bot\xe3o (entrada digital) e acionar um LED (sa\xedda digital). Quando o bot\xe3o for pressionado o estado do LED dever\xe1 ser invertido. Assim, ao final teremos um bot\xe3o Liga/Desliga para controlar o LED."),(0,o.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"1 Placa Franzininho WiFi com CircuitPython;"),(0,o.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,o.kt)("li",{parentName:"ul"},"1 LED vermelho de 3 mm;"),(0,o.kt)("li",{parentName:"ul"},"1 Resistor 330 \u03a9;"),(0,o.kt)("li",{parentName:"ul"},"1 Bot\xe3o;"),(0,o.kt)("li",{parentName:"ul"},"Jumpers.")),(0,o.kt)("h2",{id:"circuito"},"Circuito"),(0,o.kt)("p",null,"Fa\xe7a a seguinte montagem:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Circuito Entrada e Saida digital",src:t(7807).Z,width:"1728",height:"753"})),(0,o.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,o.kt)("p",null,"Digite o c\xf3digo abaixo no arquivo code.py que est\xe1 dentro do diret\xf3rio CIRCUITPY e salve o arquivo:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"# Entradas e Sa\xeddas digitais - Bot\xe3o Liga/Desliga\nimport time\nimport board\nfrom digitalio import DigitalInOut, Direction, Pull\n\n# Configura o pino do bot\xe3o\nbtn = DigitalInOut(board.IO5) # mapea para pino 5 \nbtn.direction = Direction.INPUT # configura como entrada\nbtn.pull = Pull.UP # habilita pull-up interno\n\n\n# Configura o pino do led\nled = DigitalInOut(board.IO4) # mapea para pino 4 \nled.direction = Direction.OUTPUT # configura como sa\xedda\n\n# loop infinito\nwhile True:\n if btn.value ==0: # Se bot\xe3o pressionado \n led.value=not led.value # inverte estado do LED\n while btn.value==0: # Aguarda bot\xe3o ser solto\n time.sleep(0.01) # delay de 10 ms\n")),(0,o.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},"An\xe1lise do c\xf3digo"),(0,o.kt)("p",null,"Para acessar os pinos da placa precisamos importar o m\xf3dulo board:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,o.kt)("p",null,"Como precisaremos de intervalos de temporiza\xe7\xe3o importamos o m\xf3dulo time:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"import time\n")),(0,o.kt)("p",null,"Trabalharemos como entradas e sa\xeddas digitais nesse exemplo. Para isso, precisamos importar os seguintes m\xf3dulos em digitalio:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"from digitalio import DigitalInOut, Direction\n")),(0,o.kt)("p",null,"O bot\xe3o deve ser configurado como uma entrada digital no pino 5. Al\xe9m disso, como n\xe3o usamos resistor de pull-up externo devemos configurar o pull-up interno:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"# Configura o pino do bot\xe3o\nbtn = DigitalInOut(board.IO5) # mapea para pino 5 \nbtn.direction = Direction.INPUT # configura como entrada\nbtn.pull = Pull.UP # habilita pull-up interno\n")),(0,o.kt)("p",null,"O LED foi configurado como uma sa\xedda digital no pino 4, da mesma forma que fizemos no exemplo anterior:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"# Configura o pino do led\nled = DigitalInOut(board.IO4) # mapea para pino 4 \nled.direction = Direction.OUTPUT # configura como sa\xedda\n")),(0,o.kt)("p",null,"No loop infinito testamos o valor do pio do bot\xe3o, caso esteja em n\xedvel 0 significa que o usu\xe1rio apertou. Assim toda vez que o bot\xe3o \xe9 pressionado o valor do LED \xe9 invertido. Para evitar que o sejam realizadas diversas opera\xe7\xf5es \xe9 aguardado que o usu\xe1rio solte o bot\xe3o antes de ler o bot\xe3o novamente. Essa espera \xe9 feita com um loop\nwhile:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"# loop infinito\nwhile True:\n if btn.value ==0: # Se bot\xe3o pressionado \n led.value=not led.value # inverte estado do LED\n while btn.value==0: # Aguarda bot\xe3o ser solto\n time.sleep(0.01) # delay de 10 ms\n")),(0,o.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,o.kt)("p",null,"Neste exemplo, fizemos uma aplica\xe7\xe3o simples para leitura de uma entrada digital(bot\xe3o) e acionamento de uma sa\xedda digital(LED). Esse exemplo servir\xe1 de base para quando voc\xea precisar trabalhar com entradas e sa\xeddas digitais em seus projetos. A configura\xe7\xe3o \xe9 sempre a mesma."),(0,o.kt)("admonition",{title:"Desafio",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Inclua mais um bot\xe3o e mais um LED no circuito com funcionamento igual ao que fizemos.")),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Autor"),(0,o.kt)("th",{parentName:"tr",align:null},"Diana Santos"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Autor"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Data:"),(0,o.kt)("td",{parentName:"tr",align:null},"16/09/2021")))))}c.isMDXComponent=!0},7807:(e,a,t)=>{t.d(a,{Z:()=>i});const i=t.p+"assets/images/00-circuito-366206a6cd9002f9e3db12f576d74713.png"}}]); \ No newline at end of file diff --git a/en/assets/js/d29449f8.4b800ab3.js b/en/assets/js/d29449f8.4b800ab3.js new file mode 100755 index 000000000..c3aed83fe --- /dev/null +++ b/en/assets/js/d29449f8.4b800ab3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[560],{61052:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var r=i(17624),s=i(95788);const o={id:"circuitpython-sensor-hcsr04",title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",slug:"/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",description:"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.",author:"Wallace Brito"},t=void 0,a={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04",title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",description:"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/hcsr04.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/hcsr04.md",tags:[],version:"current",frontMatter:{id:"circuitpython-sensor-hcsr04",title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",slug:"/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",description:"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.",author:"Wallace Brito"},sidebar:"docs",previous:{title:"Sensor de temperatura e umidade DHT11",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/dht11"},next:{title:"Servo motor",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor"}},c={},d=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Resultado",id:"resultado",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython."}),"\n",(0,r.jsx)(n.h2,{id:"materiais-necess\xe1rios",children:"Materiais necess\xe1rios"}),"\n",(0,r.jsx)(n.p,{children:"Identifique os seguintes materiais necess\xe1rios para este projeto:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"1 Franzininho WiFi."}),"\n",(0,r.jsx)(n.li,{children:"1 Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04."}),"\n",(0,r.jsx)(n.li,{children:"1 Protoboard."}),"\n",(0,r.jsx)(n.li,{children:"Cabos de liga\xe7\xe3o."}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,r.jsx)(n.p,{children:"A pr\xf3xima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Circuito HC-SR04",src:i(51956).c+"",width:"984",height:"918"})}),"\n",(0,r.jsx)(n.p,{children:"A tabela abaixo resume as conex\xf5es entre o sensor e a Franzininho:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{style:{textAlign:"center"},children:"HC-SR04"}),(0,r.jsx)(n.th,{style:{textAlign:"center"},children:"Franzininho WiFi"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"Echo"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"GPIO35"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"Trig"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"GPIO36"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"Vcc"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"5v"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"Gnd"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"GND"})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,r.jsx)(n.p,{children:"Neste exemplo, vamos fazer o uso de uma biblioteca que implementa os m\xe9todos necess\xe1rios para uso do sensor."}),"\n",(0,r.jsxs)(n.p,{children:["As bibliotecas para o CircuitPython podem ser obtidas atrav\xe9s do endere\xe7o ",(0,r.jsx)(n.a,{href:"https://circuitpython.org/libraries",children:"https://circuitpython.org/libraries"}),". Escolha e baixe o arquivo de acordo com a vers\xe3o do CircuitPyhthon que voc\xea tem instalado na Franzininho WiFi."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Bibliotecas",src:i(73508).c+"",width:"1295",height:"465"})}),"\n",(0,r.jsx)(n.p,{children:"Em seguida, copie o arquivo diretamente para a pasta lib do sistema de arquivos da Franzininho WiFi:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"adafruit_hcsr04.mpy"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Implemente o programa abaixo no arquivo ",(0,r.jsx)(n.strong,{children:"code.py"})," que est\xe1 localizado na pasta raiz da Franzininho WiFi."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:'import board\nimport time\nimport adafruit_hcsr04\n\nsonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)\n\nwhile True:\n try:\n print((sonar.distance,))\n except RuntimeError:\n print("Retrying!")\n time.sleep(0.1)\n'})}),"\n",(0,r.jsx)(n.h2,{id:"an\xe1lise-do-c\xf3digo",children:"An\xe1lise do c\xf3digo"}),"\n",(0,r.jsxs)(n.p,{children:["Para acessar os pinos da placa precisamos importar o m\xf3dulo ",(0,r.jsx)(n.strong,{children:"board"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:"import board\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Como precisaremos fazer o uso do sleep, importamos o m\xf3dulo ",(0,r.jsx)(n.strong,{children:"time"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:"import time\n"})}),"\n",(0,r.jsxs)(n.p,{children:["A biblioteca que vamos utilizar para realizar as leituras do sensor \xe9 o ",(0,r.jsx)(n.strong,{children:"adafruit_hcsr04"}),", importaremos esse m\xf3dulo:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:"import adafruit_hcsr04\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Em seguida criamos uma inst\xe2ncia da classe HCSR04, passando como par\xe2metro ",(0,r.jsx)(n.strong,{children:"trigger_pin"})," sendo o pino 36, o ",(0,r.jsx)(n.strong,{children:"echo_pin"})," o pino 35 e o ",(0,r.jsx)(n.strong,{children:"timeout"})," sendo 0.5 segundos.\nO ",(0,r.jsx)(n.strong,{children:"trigger_pin"})," (em portugu\xeas: Gatilho) tem a fun\xe7\xe3o de disparar uma esp\xe9cie de onda sonora ultrass\xf4nica, a qual ir\xe1 colidir com algum obst\xe1culo e retorna para o sensor fazendo com que o pino ",(0,r.jsx)(n.strong,{children:"echo_pin"})," envie pulsos para a Franzininho, o tempo desse processo ser\xe1 convertido em dist\xe2ncia. O par\xe2metro ",(0,r.jsx)(n.strong,{children:"timeout"})," \xe9 o tempo m\xe1ximo de leitura do sensor, que nesse caso \xe9 0.5 segundos.\nConforme podemos observar na pinagem, dispon\xedvel em ",(0,r.jsx)(n.a,{href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi",children:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi"})]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:"sonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)\n"})}),"\n",(0,r.jsxs)(n.p,{children:["No loop infinito fazemos a leitura do valor de dist\xe2ncia a cada ",(0,r.jsx)(n.strong,{children:"0.1 segundos"})," atrav\xe9s dos m\xe9todo ",(0,r.jsx)(n.code,{children:"sonar.distance"}),", e imprimimos o valor lido no terminal serial. O valor retornado de ",(0,r.jsx)(n.code,{children:"sonar.distance"})," tem a unidade de medida cent\xedmetros."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-python",children:'while True:\n try:\n print((sonar.distance,))\n except RuntimeError:\n print("Retrying!")\n time.sleep(0.1)\n'})}),"\n",(0,r.jsx)(n.h2,{id:"resultado",children:"Resultado"}),"\n",(0,r.jsx)(n.p,{children:"A figura a seguir exibe os valores lidos no terminal serial(REPL):"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Terminal Serial",src:i(46636).c+"",width:"1141",height:"344"})}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,r.jsx)(n.a,{href:"https://discord.gg/H5kENmWGaz",children:"Discord"})]})}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Autor"}),(0,r.jsx)(n.th,{children:(0,r.jsx)(n.a,{href:"mailto:wallacejsb@gmail.com",children:"Wallace Brito"})})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Data:"}),(0,r.jsx)(n.td,{children:"31/10/2021"})]})})]})]})}function h(e={}){const{wrapper:n}={...(0,s.MN)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},95788:(e,n,i)=>{i.d(n,{MN:()=>d});var r=i(11504);function s(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function o(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,r)}return i}function t(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?o(Object(i),!0).forEach((function(n){s(e,n,i[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):o(Object(i)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(i,n))}))}return e}function a(e,n){if(null==e)return{};var i,r,s=function(e,n){if(null==e)return{};var i,r,s={},o=Object.keys(e);for(r=0;r<o.length;r++)i=o[r],n.indexOf(i)>=0||(s[i]=e[i]);return s}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],n.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(s[i]=e[i])}return s}var c=r.createContext({}),d=function(e){var n=r.useContext(c),i=n;return e&&(i="function"==typeof e?e(n):t(t({},n),e)),i},l={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},h=r.forwardRef((function(e,n){var i=e.components,s=e.mdxType,o=e.originalType,c=e.parentName,h=a(e,["components","mdxType","originalType","parentName"]),p=d(i),u=s,m=p["".concat(c,".").concat(u)]||p[u]||l[u]||o;return i?r.createElement(m,t(t({ref:n},h),{},{components:i})):r.createElement(m,t({ref:n},h))}));h.displayName="MDXCreateElement"},73508:(e,n,i)=>{i.d(n,{c:()=>r});const r=i.p+"assets/images/libraries-43f696d429c655da2cf36dc63cfc72e0.png"},51956:(e,n,i)=>{i.d(n,{c:()=>r});const r=i.p+"assets/images/circuito-sensor-hcsr04-36362e07b837238ba47b3c1f31c559ce.png"},46636:(e,n,i)=>{i.d(n,{c:()=>r});const r=i.p+"assets/images/leitura-sensor-hc-sr04-0c4c677c0a5e425cbba24731cb5f7f09.png"}}]); \ No newline at end of file diff --git a/en/assets/js/d29449f8.8e51f674.js b/en/assets/js/d29449f8.8e51f674.js deleted file mode 100755 index 7bfbf90d9..000000000 --- a/en/assets/js/d29449f8.8e51f674.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4242],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(r),u=a,h=d["".concat(l,".").concat(u)]||d[u]||m[u]||i;return r?n.createElement(h,o(o({ref:t},c),{},{components:r})):n.createElement(h,o({ref:t},c))}));function h(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:a,o[1]=s;for(var p=2;p<i;p++)o[p]=r[p];return n.createElement.apply(null,o)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},6463:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var n=r(3117),a=(r(7294),r(3905));const i={id:"circuitpython-sensor-hcsr04",title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",slug:"/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",description:"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.",author:"Wallace Brito"},o=void 0,s={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04",title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",description:"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/hcsr04.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/hcsr04.md",tags:[],version:"current",frontMatter:{id:"circuitpython-sensor-hcsr04",title:"Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04",slug:"/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",description:"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython.",author:"Wallace Brito"},sidebar:"docs",previous:{title:"Sensor de temperatura e umidade DHT11",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/dht11"},next:{title:"Servo motor",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor"}},l={},p=[{value:"Materiais necess\xe1rios",id:"materiais-necess\xe1rios",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"An\xe1lise do c\xf3digo",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"Resultado",id:"resultado",level:2}],c={toc:p},d="wrapper";function m(e){let{components:t,...i}=e;return(0,a.kt)(d,(0,n.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Nesse exemplo aprenderemos a ler valores de dist\xe2ncia com o sensor HC-SR04 usando o CircuitPython."),(0,a.kt)("h2",{id:"materiais-necess\xe1rios"},"Materiais necess\xe1rios"),(0,a.kt)("p",null,"Identifique os seguintes materiais necess\xe1rios para este projeto:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"1 Franzininho WiFi."),(0,a.kt)("li",{parentName:"ul"},"1 Sensor de Dist\xe2ncia Ultrass\xf4nico HC-SR04."),(0,a.kt)("li",{parentName:"ul"},"1 Protoboard."),(0,a.kt)("li",{parentName:"ul"},"Cabos de liga\xe7\xe3o.")),(0,a.kt)("h2",{id:"circuito"},"Circuito"),(0,a.kt)("p",null,"A pr\xf3xima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Circuito HC-SR04",src:r(901).Z,width:"984",height:"918"})),(0,a.kt)("p",null,"A tabela abaixo resume as conex\xf5es entre o sensor e a Franzininho: "),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:"center"},"HC-SR04"),(0,a.kt)("th",{parentName:"tr",align:"center"},"Franzininho WiFi"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Echo"),(0,a.kt)("td",{parentName:"tr",align:"center"},"GPIO35")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Trig"),(0,a.kt)("td",{parentName:"tr",align:"center"},"GPIO36")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Vcc"),(0,a.kt)("td",{parentName:"tr",align:"center"},"5v")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Gnd"),(0,a.kt)("td",{parentName:"tr",align:"center"},"GND")))),(0,a.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,a.kt)("p",null,"Neste exemplo, vamos fazer o uso de uma biblioteca que implementa os m\xe9todos necess\xe1rios para uso do sensor."),(0,a.kt)("p",null,"As bibliotecas para o CircuitPython podem ser obtidas atrav\xe9s do endere\xe7o ",(0,a.kt)("a",{parentName:"p",href:"https://circuitpython.org/libraries"},"https://circuitpython.org/libraries"),". Escolha e baixe o arquivo de acordo com a vers\xe3o do CircuitPyhthon que voc\xea tem instalado na Franzininho WiFi."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Bibliotecas",src:r(609).Z,width:"1295",height:"465"})),(0,a.kt)("p",null,"Em seguida, copie o arquivo diretamente para a pasta lib do sistema de arquivos da Franzininho WiFi:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"adafruit_hcsr04.mpy")),(0,a.kt)("p",null,"Implemente o programa abaixo no arquivo ",(0,a.kt)("strong",{parentName:"p"},"code.py")," que est\xe1 localizado na pasta raiz da Franzininho WiFi."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},'import board\nimport time\nimport adafruit_hcsr04\n\nsonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)\n\nwhile True:\n try:\n print((sonar.distance,))\n except RuntimeError:\n print("Retrying!")\n time.sleep(0.1)\n')),(0,a.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},"An\xe1lise do c\xf3digo"),(0,a.kt)("p",null,"Para acessar os pinos da placa precisamos importar o m\xf3dulo ",(0,a.kt)("strong",{parentName:"p"},"board"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,a.kt)("p",null,"Como precisaremos fazer o uso do sleep, importamos o m\xf3dulo ",(0,a.kt)("strong",{parentName:"p"},"time"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"import time\n")),(0,a.kt)("p",null,"A biblioteca que vamos utilizar para realizar as leituras do sensor \xe9 o ",(0,a.kt)("strong",{parentName:"p"},"adafruit_hcsr04"),", importaremos esse m\xf3dulo:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"import adafruit_hcsr04\n")),(0,a.kt)("p",null,"Em seguida criamos uma inst\xe2ncia da classe HCSR04, passando como par\xe2metro ",(0,a.kt)("strong",{parentName:"p"},"trigger_pin")," sendo o pino 36, o ",(0,a.kt)("strong",{parentName:"p"},"echo_pin")," o pino 35 e o ",(0,a.kt)("strong",{parentName:"p"},"timeout")," sendo 0.5 segundos.\nO ",(0,a.kt)("strong",{parentName:"p"},"trigger_pin")," (em portugu\xeas: Gatilho) tem a fun\xe7\xe3o de disparar uma esp\xe9cie de onda sonora ultrass\xf4nica, a qual ir\xe1 colidir com algum obst\xe1culo e retorna para o sensor fazendo com que o pino ",(0,a.kt)("strong",{parentName:"p"},"echo_pin")," envie pulsos para a Franzininho, o tempo desse processo ser\xe1 convertido em dist\xe2ncia. O par\xe2metro ",(0,a.kt)("strong",{parentName:"p"},"timeout")," \xe9 o tempo m\xe1ximo de leitura do sensor, que nesse caso \xe9 0.5 segundos.\nConforme podemos observar na pinagem, dispon\xedvel em ",(0,a.kt)("a",{parentName:"p",href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi"},"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi")," "),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},"sonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)\n")),(0,a.kt)("p",null,"No loop infinito fazemos a leitura do valor de dist\xe2ncia a cada ",(0,a.kt)("strong",{parentName:"p"},"0.1 segundos")," atrav\xe9s dos m\xe9todo ",(0,a.kt)("inlineCode",{parentName:"p"},"sonar.distance"),", e imprimimos o valor lido no terminal serial. O valor retornado de ",(0,a.kt)("inlineCode",{parentName:"p"},"sonar.distance")," tem a unidade de medida cent\xedmetros."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-python"},'while True:\n try:\n print((sonar.distance,))\n except RuntimeError:\n print("Retrying!")\n time.sleep(0.1)\n')),(0,a.kt)("h2",{id:"resultado"},"Resultado"),(0,a.kt)("p",null,"A figura a seguir exibe os valores lidos no terminal serial(REPL):"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Terminal Serial",src:r(5621).Z,width:"1141",height:"344"})),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Se tiver alguma d\xfavida consulte a comunidade Franzininho no ",(0,a.kt)("a",{parentName:"p",href:"https://discord.gg/H5kENmWGaz"},"Discord"))),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Autor"),(0,a.kt)("th",{parentName:"tr",align:null},(0,a.kt)("a",{parentName:"th",href:"mailto:wallacejsb@gmail.com"},"Wallace Brito")))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Data:"),(0,a.kt)("td",{parentName:"tr",align:null},"31/10/2021")))))}m.isMDXComponent=!0},609:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/libraries-43f696d429c655da2cf36dc63cfc72e0.png"},901:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/circuito-sensor-hcsr04-36362e07b837238ba47b3c1f31c559ce.png"},5621:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/leitura-sensor-hc-sr04-0c4c677c0a5e425cbba24731cb5f7f09.png"}}]); \ No newline at end of file diff --git a/en/assets/js/d5f74b3b.19a763b0.js b/en/assets/js/d5f74b3b.19a763b0.js deleted file mode 100755 index a0fac04dc..000000000 --- a/en/assets/js/d5f74b3b.19a763b0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5845],{3905:(e,a,t)=>{t.d(a,{Zo:()=>s,kt:()=>f});var r=t(7294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function i(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var a=1;a<arguments.length;a++){var t=null!=arguments[a]?arguments[a]:{};a%2?i(Object(t),!0).forEach((function(a){n(e,a,t[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(t,a))}))}return e}function l(e,a){if(null==e)return{};var t,r,n=function(e,a){if(null==e)return{};var t,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],a.indexOf(t)>=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],a.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var c=r.createContext({}),u=function(e){var a=r.useContext(c),t=a;return e&&(t="function"==typeof e?e(a):o(o({},a),e)),t},s=function(e){var a=u(e.components);return r.createElement(c.Provider,{value:a},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},m=r.forwardRef((function(e,a){var t=e.components,n=e.mdxType,i=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),d=u(t),m=n,f=d["".concat(c,".").concat(m)]||d[m]||p[m]||i;return t?r.createElement(f,o(o({ref:a},s),{},{components:t})):r.createElement(f,o({ref:a},s))}));function f(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var c in a)hasOwnProperty.call(a,c)&&(l[c]=a[c]);l.originalType=e,l[d]="string"==typeof e?e:n,o[1]=l;for(var u=2;u<i;u++)o[u]=t[u];return r.createElement.apply(null,o)}return r.createElement.apply(null,t)}m.displayName="MDXCreateElement"},4853:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var r=t(3117),n=(t(7294),t(3905));const i={id:"leitura-tecla",title:"Leitura de Tecla",slug:"/franzininho-diy/leitura-tecla",description:"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada."},o=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/leitura-tecla",id:"FranzininhoDIY/exemplos-arduino/leitura-tecla",title:"Leitura de Tecla",description:"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/leitura-tecla.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/leitura-tecla",permalink:"/en/docs/franzininho-diy/leitura-tecla",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/leitura-tecla.md",tags:[],version:"current",frontMatter:{id:"leitura-tecla",title:"Leitura de Tecla",slug:"/franzininho-diy/leitura-tecla",description:"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada."},sidebar:"docs",previous:{title:"Controle brilho de LED",permalink:"/en/docs/franzininho-diy/brilho-led"},next:{title:"Tecla Liga/Desliga",permalink:"/en/docs/franzininho-diy/tecla-liga-desliga"}},c={},u=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],s={toc:u},d="wrapper";function p(e){let{components:a,...i}=e;return(0,n.kt)(d,(0,r.Z)({},s,i,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada."),(0,n.kt)("h2",{id:"materiais"},"Materiais"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Placa Franzininho;"),(0,n.kt)("li",{parentName:"ul"},"Protoboard;"),(0,n.kt)("li",{parentName:"ul"},"LED 3mm;"),(0,n.kt)("li",{parentName:"ul"},"1 Resistor 330;"),(0,n.kt)("li",{parentName:"ul"},"1 Resistor de 1k;"),(0,n.kt)("li",{parentName:"ul"},"1 Bot\xe3o;"),(0,n.kt)("li",{parentName:"ul"},"Jumpers macho/f\xeamea")),(0,n.kt)("h2",{id:"circuito"},"Circuito"),(0,n.kt)("p",null,"No protoboard voc\xea deve inserir o LED, resistores e o bot\xe3o, conforme a imagem abaixo:"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Circuito leitura tecla",src:t(988).Z,width:"1755",height:"702"})),(0,n.kt)("h2",{id:"sketch"},"Sketch"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},"/*\n Franzininho\n Exemplo: Leitura de Tecla - Pull Down\n Esse exemplo exibe como ler uma tecla com resistor de pull down e acionar um led quando ela for pressionada\n*/\nconst int LED = 1; //pino para o LED\nconst int BOTAO = 2; //pino para o bot\xe3o\nint val = 0; // val ser\xe1 utilizado para armazenar o estado do pino\nvoid setup(){\n pinMode(LED,OUTPUT); //o LED \xe9 uma sa\xedda\n pinMode(BOTAO,INPUT); //o BOTAO \xe9 uma entrada\n}\nvoid loop (){\nval = digitalRead(BOTAO); // l\xea e armazena o valor de entrada\ndigitalWrite(LED, val); //aciona LED conforme valor lido do bot\xe3o\n}\n")),(0,n.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,n.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311373301712683584?view=diagram"}),(0,n.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,n.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/JHdqOuj-WHc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}p.isMDXComponent=!0},988:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/leitura-de-tecla-0133088e4f085079b1a5dc507efc2d45.png"}}]); \ No newline at end of file diff --git a/en/assets/js/d5f74b3b.cf415bb7.js b/en/assets/js/d5f74b3b.cf415bb7.js new file mode 100755 index 000000000..2af26a363 --- /dev/null +++ b/en/assets/js/d5f74b3b.cf415bb7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7888],{89360:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>t,metadata:()=>l,toc:()=>s});var r=i(17624),a=i(95788);const t={id:"leitura-tecla",title:"Leitura de Tecla",slug:"/franzininho-diy/leitura-tecla",description:"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada."},o=void 0,l={id:"FranzininhoDIY/exemplos-arduino/leitura-tecla",title:"Leitura de Tecla",description:"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/leitura-tecla.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/leitura-tecla",permalink:"/en/docs/franzininho-diy/leitura-tecla",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/leitura-tecla.md",tags:[],version:"current",frontMatter:{id:"leitura-tecla",title:"Leitura de Tecla",slug:"/franzininho-diy/leitura-tecla",description:"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada."},sidebar:"docs",previous:{title:"Controle brilho de LED",permalink:"/en/docs/franzininho-diy/brilho-led"},next:{title:"Tecla Liga/Desliga",permalink:"/en/docs/franzininho-diy/tecla-liga-desliga"}},c={},s=[{value:"Materiais",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function d(e){const n={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada."}),"\n",(0,r.jsx)(n.h2,{id:"materiais",children:"Materiais"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Placa Franzininho;"}),"\n",(0,r.jsx)(n.li,{children:"Protoboard;"}),"\n",(0,r.jsx)(n.li,{children:"LED 3mm;"}),"\n",(0,r.jsx)(n.li,{children:"1 Resistor 330;"}),"\n",(0,r.jsx)(n.li,{children:"1 Resistor de 1k;"}),"\n",(0,r.jsx)(n.li,{children:"1 Bot\xe3o;"}),"\n",(0,r.jsx)(n.li,{children:"Jumpers macho/f\xeamea"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,r.jsx)(n.p,{children:"No protoboard voc\xea deve inserir o LED, resistores e o bot\xe3o, conforme a imagem abaixo:"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Circuito leitura tecla",src:i(88444).c+"",width:"1755",height:"702"})}),"\n",(0,r.jsx)(n.h2,{id:"sketch",children:"Sketch"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-cpp",children:"/*\n Franzininho\n Exemplo: Leitura de Tecla - Pull Down\n Esse exemplo exibe como ler uma tecla com resistor de pull down e acionar um led quando ela for pressionada\n*/\nconst int LED = 1; //pino para o LED\nconst int BOTAO = 2; //pino para o bot\xe3o\nint val = 0; // val ser\xe1 utilizado para armazenar o estado do pino\nvoid setup(){\n pinMode(LED,OUTPUT); //o LED \xe9 uma sa\xedda\n pinMode(BOTAO,INPUT); //o BOTAO \xe9 uma entrada\n}\nvoid loop (){\nval = digitalRead(BOTAO); // l\xea e armazena o valor de entrada\ndigitalWrite(LED, val); //aciona LED conforme valor lido do bot\xe3o\n}\n"})}),"\n",(0,r.jsx)(n.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,r.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311373301712683584?view=diagram"}),"\n",(0,r.jsx)(n.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,r.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/JHdqOuj-WHc",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function u(e={}){const{wrapper:n}={...(0,a.MN)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},95788:(e,n,i)=>{i.d(n,{MN:()=>s});var r=i(11504);function a(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function t(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,r)}return i}function o(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?t(Object(i),!0).forEach((function(n){a(e,n,i[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):t(Object(i)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(i,n))}))}return e}function l(e,n){if(null==e)return{};var i,r,a=function(e,n){if(null==e)return{};var i,r,a={},t=Object.keys(e);for(r=0;r<t.length;r++)i=t[r],n.indexOf(i)>=0||(a[i]=e[i]);return a}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(r=0;r<t.length;r++)i=t[r],n.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}var c=r.createContext({}),s=function(e){var n=r.useContext(c),i=n;return e&&(i="function"==typeof e?e(n):o(o({},n),e)),i},d={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},u=r.forwardRef((function(e,n){var i=e.components,a=e.mdxType,t=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=s(i),p=a,h=m["".concat(c,".").concat(p)]||m[p]||d[p]||t;return i?r.createElement(h,o(o({ref:n},u),{},{components:i})):r.createElement(h,o({ref:n},u))}));u.displayName="MDXCreateElement"},88444:(e,n,i)=>{i.d(n,{c:()=>r});const r=i.p+"assets/images/leitura-de-tecla-0133088e4f085079b1a5dc507efc2d45.png"}}]); \ No newline at end of file diff --git a/en/assets/js/d610846f.7d006bc7.js b/en/assets/js/d610846f.7d006bc7.js deleted file mode 100755 index 9980a4d92..000000000 --- a/en/assets/js/d610846f.7d006bc7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6176],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var u=o.createContext({}),c=function(e){var t=o.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=c(e.components);return o.createElement(u.Provider,{value:t},e.children)},p="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,u=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),p=c(r),m=n,f=p["".concat(u,".").concat(m)]||p[m]||h[m]||a;return r?o.createElement(f,l(l({ref:t},s),{},{components:r})):o.createElement(f,l({ref:t},s))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i[p]="string"==typeof e?e:n,l[1]=i;for(var c=2;c<a;c++)l[c]=r[c];return o.createElement.apply(null,l)}return o.createElement.apply(null,r)}m.displayName="MDXCreateElement"},1452:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var o=r(3117),n=(r(7294),r(3905));const a={slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},l=void 0,i={permalink:"/en/blog/hello-world",source:"@site/blog/2019-05-29-hello-world.md",title:"Hello",description:"Welcome to this blog. This blog is created with Docusaurus 2 alpha.",date:"2019-05-29T00:00:00.000Z",formattedDate:"May 29, 2019",tags:[{label:"hello",permalink:"/en/blog/tags/hello"},{label:"docusaurus",permalink:"/en/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4"}],frontMatter:{slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},prevItem:{title:"Welcome",permalink:"/en/blog/welcome"},nextItem:{title:"Hola",permalink:"/en/blog/hola"}},u={authorsImageUrls:[void 0]},c=[],s={toc:c},p="wrapper";function h(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,o.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Welcome to this blog. This blog is created with ",(0,n.kt)("a",{parentName:"p",href:"https://v2.docusaurus.io/"},(0,n.kt)("strong",{parentName:"a"},"Docusaurus 2 alpha")),"."),(0,n.kt)("p",null,"This is a test post."),(0,n.kt)("p",null,"A whole bunch of other information."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/d610846f.ec6549e0.js b/en/assets/js/d610846f.ec6549e0.js new file mode 100755 index 000000000..f4dcf12c4 --- /dev/null +++ b/en/assets/js/d610846f.ec6549e0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6552],{41508:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var n=r(17624),o=r(95788);const a={slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},l=void 0,i={permalink:"/en/blog/hello-world",source:"@site/blog/2019-05-29-hello-world.md",title:"Hello",description:"Welcome to this blog. This blog is created with Docusaurus 2 alpha.",date:"2019-05-29T00:00:00.000Z",tags:[{label:"hello",permalink:"/en/blog/tags/hello"},{label:"docusaurus",permalink:"/en/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4"}],frontMatter:{slug:"hello-world",title:"Hello",author:"Endilie Yacop Sucipto",author_title:"Maintainer of Docusaurus",author_url:"https://github.com/endiliey",author_image_url:"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4",tags:["hello","docusaurus"]},unlisted:!1,prevItem:{title:"Welcome",permalink:"/en/blog/welcome"},nextItem:{title:"Hola",permalink:"/en/blog/hola"}},u={authorsImageUrls:[void 0]},s=[];function c(e){const t={a:"a",p:"p",strong:"strong",...(0,o.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["Welcome to this blog. This blog is created with ",(0,n.jsx)(t.a,{href:"https://v2.docusaurus.io/",children:(0,n.jsx)(t.strong,{children:"Docusaurus 2 alpha"})}),"."]}),"\n",(0,n.jsx)(t.p,{children:"This is a test post."}),"\n",(0,n.jsx)(t.p,{children:"A whole bunch of other information."})]})}function p(e={}){const{wrapper:t}={...(0,o.MN)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},95788:(e,t,r)=>{r.d(t,{MN:()=>s});var n=r(11504);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var u=n.createContext({}),s=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,u=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),h=s(r),m=o,d=h["".concat(u,".").concat(m)]||h[m]||c[m]||a;return r?n.createElement(d,l(l({ref:t},p),{},{components:r})):n.createElement(d,l({ref:t},p))}));p.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/d69ae106.2f6c556d.js b/en/assets/js/d69ae106.2f6c556d.js new file mode 100755 index 000000000..ef1e596f9 --- /dev/null +++ b/en/assets/js/d69ae106.2f6c556d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8930],{21204:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>d});var a=o(17624),i=o(95788);const r={id:"micropython-primeiros-passos",title:"Primeiros Passos com MicroPython",slug:"/franzininho-wifi/exemplos-micropython/primeiros-passos",description:"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.",author:"Sthefania Fernandes"},s=void 0,t={id:"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos",title:"Primeiros Passos com MicroPython",description:"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.",source:"@site/docs/FranzininhoWifi/exemplos-micropython/primeiros-passos.md",sourceDirName:"FranzininhoWifi/exemplos-micropython",slug:"/franzininho-wifi/exemplos-micropython/primeiros-passos",permalink:"/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-micropython/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"micropython-primeiros-passos",title:"Primeiros Passos com MicroPython",slug:"/franzininho-wifi/exemplos-micropython/primeiros-passos",description:"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.",author:"Sthefania Fernandes"},sidebar:"docs",previous:{title:"Leitura DHT11",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/dht11"},next:{title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",permalink:"/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais"}},c={},d=[{value:"Gravando o MicroPython na Franzininho WiFi",id:"gravando-o-micropython-na-franzininho-wifi",level:2},{value:"Apresentando o Thonny IDE",id:"apresentando-o-thonny-ide",level:2}];function p(e){const n={a:"a",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.p,{children:"A Franzininho WIFI \xe9 uma placa de desenvolvimento de hardware de c\xf3digo aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal \xe9 tornar o desenvolvimento de projetos eletr\xf4nicos mais acess\xedvel a makers, entusiastas e desenvolvedores brasileiros."}),"\n",(0,a.jsx)(n.p,{children:"A placa pode ser programada de v\xe1rias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes."}),"\n",(0,a.jsx)(n.p,{children:"A Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns s\xe3o:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:["ESP-IDF, Arduino, CircuitPython e ",(0,a.jsx)(n.strong,{children:"MicroPython"})]}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"A Franzininho WiFi LAB01 \xe9 uma placa de expans\xe3o para a placa Franzininho WiFi, com a proposta de ser um laborat\xf3rio para auxiliar no ensino e aprendizagem do ESP32, baseada na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experi\xeancias."}),"\n",(0,a.jsxs)(n.p,{children:["Nessa s\xe9rie de artigos, vamos explorar a programa\xe7\xe3o em MicroPython com a Franzininho WiFi LAB01. Primeiramente, \xe9 preciso entender que o ",(0,a.jsx)(n.a,{href:"https://micropython.org/",children:"MicroPython"})," \xe9 uma implementa\xe7\xe3o completa da linguagem Python 3 para rodar em hardware embarcado."]}),"\n",(0,a.jsxs)(n.p,{children:["Assim, para poder programar a sua placa Franzininho WiFi com MicroPython \xe9 preciso, primeiro, gravar o firmware do MicroPython nela. Para facilitar a instala\xe7\xe3o do MicroPython, vamos usar a ferramenta de grava\xe7\xe3o atrav\xe9s do browser, criada pela comunidade Franzininho: ",(0,a.jsx)(n.a,{href:"https://franzininho.github.io/franzininho-webesptools/#",children:"franzininho.github.io"})," (funciona no Chrome e similares). Aproveitamos para agradecer ao Ewerton Sousa pela contribui\xe7\xe3o com essa ferramenta."]}),"\n",(0,a.jsx)(n.p,{children:"A seguir apresentamos os passos para grava\xe7\xe3o do MicroPython na Franzininho WiFI e a IDE que usaremos nessa serie de artigos."}),"\n",(0,a.jsx)(n.h2,{id:"gravando-o-micropython-na-franzininho-wifi",children:"Gravando o MicroPython na Franzininho WiFi"}),"\n",(0,a.jsxs)(n.p,{children:["Acesse a ferramenta ",(0,a.jsx)(n.a,{href:"https://franzininho.github.io/franzininho-webesptools/#",children:"Franzininho \u2013 ESP Web Tools"}),". Com essa ferramenta \xe9 poss\xedvel obter o firmware n\xe3o somente o firmware do Micropython, mas tamb\xe9m das outras ferramentas de software que a placa suporta. Ent\xe3o, atente-se para selecionar a aba do MicroPython, conforme exibido abaixo:"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Ferramenta de Grava\xe7\xe3o",src:o(3104).c+"",width:"1844",height:"529"})}),"\n",(0,a.jsx)(n.p,{children:"Seguindo o tutorial, comece conectando sua placa Franzininho a uma das portas USB de seu computador. Em seguida coloque sua placa em modo DFU que significa executar os seguintes passos:"}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsx)(n.li,{children:"Pressione e segure o bot\xe3o boot;"}),"\n",(0,a.jsx)(n.li,{children:"Pressione o bot\xe3o reset;"}),"\n",(0,a.jsx)(n.li,{children:"Ap\xf3s soltar o reset solte o boot."}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Franzininho WiFI",src:o(63020).c+"",width:"848",height:"438"})}),"\n",(0,a.jsxs)(n.p,{children:["Feito isso, clique no bot\xe3o Conectar do site ",(0,a.jsx)(n.a,{href:"https://franzininho.github.io/franzininho-webesptools/#",children:"franzininho.github.io"}),", selecione a placa e clique em conectar:"]}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Conectando a placa a ferramenta",src:o(52636).c+"",width:"778",height:"651"})}),"\n",(0,a.jsx)(n.p,{children:"Com a placa conectada, clique em instalar MicroPython:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Intale o MicroPython",src:o(44616).c+"",width:"523",height:"242"})}),"\n",(0,a.jsx)(n.p,{children:"Selecione a op\xe7\xe3o apagar dispositivo:"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Apagar dispositivo",src:o(22580).c+"",width:"528",height:"392"})}),"\n",(0,a.jsx)(n.p,{children:"Clique em instalar e aguarde finalizar a instala\xe7\xe3o (mantenha a p\xe1gina aberta at\xe9 o final da instala\xe7\xe3o):"}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Instalando o MicroPython",src:o(16344).c+"",width:"532",height:"355"})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"Instalando o MicroPython",src:o(1884).c+"",width:"591",height:"448"})}),"\n",(0,a.jsx)(n.p,{children:"Uma vez instalado clique novamente no bot\xe3o de reset para iniciar o MicroPython."}),"\n",(0,a.jsx)(n.p,{children:"Tudo pronto, agora \xe9 poss\xedvel programar sua Franzininho WiFi LAB01 com MicroPython."}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.strong,{children:"Observa\xe7\xe3o"}),": Quando voc\xea colocar a placa em modo DFU, o buzzer pode ser ativado, o que pode causar ru\xeddo indesejado. Para evitar isso, desconecte o jumper do buzzer (IO17), que \xe9 o primeiro da esquerda para a direita."]}),"\n",(0,a.jsx)(n.h2,{id:"apresentando-o-thonny-ide",children:"Apresentando o Thonny IDE"}),"\n",(0,a.jsx)(n.p,{children:"O Thonny \xe9 um IDE popular para Python e MicroPython e \xe9 o que recomendamos para a programa\xe7\xe3o da Franzininho WiFi."}),"\n",(0,a.jsxs)(n.p,{children:["Para realizar o download, basta visitar o site ",(0,a.jsx)(n.a,{href:"https://thonny.org/",children:"thonny.org"})," e selecionar o link de download localizado no topo da p\xe1gina, conforme o seu sistema operacional."]}),"\n",(0,a.jsx)(n.p,{children:"Em seguida, inicie o Thonny enquanto a placa ainda estiver conectada via USB. Na parte inferior direita, selecione a op\xe7\xe3o MicroPython (ESP32). Desta forma, o Thonny ir\xe1 detectar automaticamente a Franzininho WiFi."}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.img,{alt:"MicroPython Conectado",src:o(12e3).c+"",width:"1659",height:"251"})}),"\n",(0,a.jsx)(n.p,{children:"Agora tudo est\xe1 pronto para iniciar seus projetos com MicroPython na Franzininho WiFi."}),"\n",(0,a.jsxs)(n.table,{children:[(0,a.jsx)(n.thead,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.th,{children:"Autor"}),(0,a.jsx)(n.th,{children:"Sthefania Fernandes"})]})}),(0,a.jsx)(n.tbody,{children:(0,a.jsxs)(n.tr,{children:[(0,a.jsx)(n.td,{children:"Data:"}),(0,a.jsx)(n.td,{children:"10/11/2023"})]})})]})]})}function h(e={}){const{wrapper:n}={...(0,i.MN)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(p,{...e})}):p(e)}},95788:(e,n,o)=>{o.d(n,{MN:()=>d});var a=o(11504);function i(e,n,o){return n in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o,e}function r(e,n){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),o.push.apply(o,a)}return o}function s(e){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?r(Object(o),!0).forEach((function(n){i(e,n,o[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(o,n))}))}return e}function t(e,n){if(null==e)return{};var o,a,i=function(e,n){if(null==e)return{};var o,a,i={},r=Object.keys(e);for(a=0;a<r.length;a++)o=r[a],n.indexOf(o)>=0||(i[o]=e[o]);return i}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)o=r[a],n.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var c=a.createContext({}),d=function(e){var n=a.useContext(c),o=n;return e&&(o="function"==typeof e?e(n):s(s({},n),e)),o},p={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},h=a.forwardRef((function(e,n){var o=e.components,i=e.mdxType,r=e.originalType,c=e.parentName,h=t(e,["components","mdxType","originalType","parentName"]),l=d(o),m=i,u=l["".concat(c,".").concat(m)]||l[m]||p[m]||r;return o?a.createElement(u,s(s({ref:n},h),{},{components:o})):a.createElement(u,s({ref:n},h))}));h.displayName="MDXCreateElement"},3104:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/1-6d88a07fe7b4d086c5c1e919543bde1f.png"},63020:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/2-4ff442ba4ad188b9e12f85f62f5651e5.png"},52636:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/3-85a7b0152873fb9d9f399f85282c2978.png"},44616:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/4-f656418f67a602f10d2a5413fbc17693.png"},22580:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/5-6365593b93164509a613351e73fe8bd3.png"},16344:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/6-8f46bd568b85b06a3ef67a3e4bf9608f.png"},1884:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/7-b365425ef64b1bf55dcbf8492f02b523.png"},12e3:(e,n,o)=>{o.d(n,{c:()=>a});const a=o.p+"assets/images/8-e065f7a020356536e7b2097f799041a2.png"}}]); \ No newline at end of file diff --git a/en/assets/js/d69ae106.866a06c1.js b/en/assets/js/d69ae106.866a06c1.js deleted file mode 100755 index 66c839508..000000000 --- a/en/assets/js/d69ae106.866a06c1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7201],{3905:(e,a,o)=>{o.d(a,{Zo:()=>c,kt:()=>u});var n=o(7294);function r(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function i(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function t(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?i(Object(o),!0).forEach((function(a){r(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function s(e,a){if(null==e)return{};var o,n,r=function(e,a){if(null==e)return{};var o,n,r={},i=Object.keys(e);for(n=0;n<i.length;n++)o=i[n],a.indexOf(o)>=0||(r[o]=e[o]);return r}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)o=i[n],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var p=n.createContext({}),l=function(e){var a=n.useContext(p),o=a;return e&&(o="function"==typeof e?e(a):t(t({},a),e)),o},c=function(e){var a=l(e.components);return n.createElement(p.Provider,{value:a},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},h=n.forwardRef((function(e,a){var o=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=l(o),h=r,u=m["".concat(p,".").concat(h)]||m[h]||d[h]||i;return o?n.createElement(u,t(t({ref:a},c),{},{components:o})):n.createElement(u,t({ref:a},c))}));function u(e,a){var o=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var i=o.length,t=new Array(i);t[0]=h;var s={};for(var p in a)hasOwnProperty.call(a,p)&&(s[p]=a[p]);s.originalType=e,s[m]="string"==typeof e?e:r,t[1]=s;for(var l=2;l<i;l++)t[l]=o[l];return n.createElement.apply(null,t)}return n.createElement.apply(null,o)}h.displayName="MDXCreateElement"},1918:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>p,contentTitle:()=>t,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=o(3117),r=(o(7294),o(3905));const i={id:"micropython-primeiros-passos",title:"Primeiros Passos com MicroPython",slug:"/franzininho-wifi/exemplos-micropython/primeiros-passos",description:"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.",author:"Sthefania Fernandes"},t=void 0,s={unversionedId:"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos",id:"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos",title:"Primeiros Passos com MicroPython",description:"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.",source:"@site/docs/FranzininhoWifi/exemplos-micropython/primeiros-passos.md",sourceDirName:"FranzininhoWifi/exemplos-micropython",slug:"/franzininho-wifi/exemplos-micropython/primeiros-passos",permalink:"/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-micropython/primeiros-passos.md",tags:[],version:"current",frontMatter:{id:"micropython-primeiros-passos",title:"Primeiros Passos com MicroPython",slug:"/franzininho-wifi/exemplos-micropython/primeiros-passos",description:"Aprenda como gravar o MicroPython na Franzininho WiFi usando a ferramenta Franzininho - ESP Web Tools e explore projetos com o Thonny IDE.",author:"Sthefania Fernandes"},sidebar:"docs",previous:{title:"Leitura DHT11",permalink:"/en/docs/franzininho-wifi/exemplos-arduino/dht11"},next:{title:"Explore as entradas e sa\xeddas digitais da Franzininho WiFi no MicroPython",permalink:"/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais"}},p={},l=[{value:"Gravando o MicroPython na Franzininho WiFi",id:"gravando-o-micropython-na-franzininho-wifi",level:2},{value:"Apresentando o Thonny IDE",id:"apresentando-o-thonny-ide",level:2}],c={toc:l},m="wrapper";function d(e){let{components:a,...i}=e;return(0,r.kt)(m,(0,n.Z)({},c,i,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"A Franzininho WIFI \xe9 uma placa de desenvolvimento de hardware de c\xf3digo aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal \xe9 tornar o desenvolvimento de projetos eletr\xf4nicos mais acess\xedvel a makers, entusiastas e desenvolvedores brasileiros."),(0,r.kt)("p",null,"A placa pode ser programada de v\xe1rias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes."),(0,r.kt)("p",null,"A Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns s\xe3o:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"ESP-IDF, Arduino, CircuitPython e ",(0,r.kt)("strong",{parentName:"li"},"MicroPython"))),(0,r.kt)("p",null,"A Franzininho WiFi LAB01 \xe9 uma placa de expans\xe3o para a placa Franzininho WiFi, com a proposta de ser um laborat\xf3rio para auxiliar no ensino e aprendizagem do ESP32, baseada na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experi\xeancias."),(0,r.kt)("p",null,"Nessa s\xe9rie de artigos, vamos explorar a programa\xe7\xe3o em MicroPython com a Franzininho WiFi LAB01. Primeiramente, \xe9 preciso entender que o ",(0,r.kt)("a",{parentName:"p",href:"https://micropython.org/"},"MicroPython")," \xe9 uma implementa\xe7\xe3o completa da linguagem Python 3 para rodar em hardware embarcado."),(0,r.kt)("p",null,"Assim, para poder programar a sua placa Franzininho WiFi com MicroPython \xe9 preciso, primeiro, gravar o firmware do MicroPython nela. Para facilitar a instala\xe7\xe3o do MicroPython, vamos usar a ferramenta de grava\xe7\xe3o atrav\xe9s do browser, criada pela comunidade Franzininho: ",(0,r.kt)("a",{parentName:"p",href:"https://franzininho.github.io/franzininho-webesptools/#"},"franzininho.github.io")," (funciona no Chrome e similares). Aproveitamos para agradecer ao Ewerton Sousa pela contribui\xe7\xe3o com essa ferramenta."),(0,r.kt)("p",null,"A seguir apresentamos os passos para grava\xe7\xe3o do MicroPython na Franzininho WiFI e a IDE que usaremos nessa serie de artigos."),(0,r.kt)("h2",{id:"gravando-o-micropython-na-franzininho-wifi"},"Gravando o MicroPython na Franzininho WiFi"),(0,r.kt)("p",null,"Acesse a ferramenta ",(0,r.kt)("a",{parentName:"p",href:"https://franzininho.github.io/franzininho-webesptools/#"},"Franzininho \u2013 ESP Web Tools"),". Com essa ferramenta \xe9 poss\xedvel obter o firmware n\xe3o somente o firmware do Micropython, mas tamb\xe9m das outras ferramentas de software que a placa suporta. Ent\xe3o, atente-se para selecionar a aba do MicroPython, conforme exibido abaixo:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Ferramenta de Grava\xe7\xe3o",src:o(2480).Z,width:"1844",height:"529"})),(0,r.kt)("p",null,"Seguindo o tutorial, comece conectando sua placa Franzininho a uma das portas USB de seu computador. Em seguida coloque sua placa em modo DFU que significa executar os seguintes passos:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Pressione e segure o bot\xe3o boot;"),(0,r.kt)("li",{parentName:"ol"},"Pressione o bot\xe3o reset;"),(0,r.kt)("li",{parentName:"ol"},"Ap\xf3s soltar o reset solte o boot.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Franzininho WiFI",src:o(4829).Z,width:"848",height:"438"})),(0,r.kt)("p",null,"Feito isso, clique no bot\xe3o Conectar do site ",(0,r.kt)("a",{parentName:"p",href:"https://franzininho.github.io/franzininho-webesptools/#"},"franzininho.github.io"),", selecione a placa e clique em conectar:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Conectando a placa a ferramenta",src:o(1220).Z,width:"778",height:"651"})),(0,r.kt)("p",null,"Com a placa conectada, clique em instalar MicroPython:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Intale o MicroPython",src:o(82).Z,width:"523",height:"242"})),(0,r.kt)("p",null,"Selecione a op\xe7\xe3o apagar dispositivo:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Apagar dispositivo",src:o(4994).Z,width:"528",height:"392"})),(0,r.kt)("p",null,"Clique em instalar e aguarde finalizar a instala\xe7\xe3o (mantenha a p\xe1gina aberta at\xe9 o final da instala\xe7\xe3o):"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Instalando o MicroPython",src:o(9968).Z,width:"532",height:"355"})),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Instalando o MicroPython",src:o(9109).Z,width:"591",height:"448"})),(0,r.kt)("p",null,"Uma vez instalado clique novamente no bot\xe3o de reset para iniciar o MicroPython."),(0,r.kt)("p",null,"Tudo pronto, agora \xe9 poss\xedvel programar sua Franzininho WiFi LAB01 com MicroPython."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Observa\xe7\xe3o"),": Quando voc\xea colocar a placa em modo DFU, o buzzer pode ser ativado, o que pode causar ru\xeddo indesejado. Para evitar isso, desconecte o jumper do buzzer (IO17), que \xe9 o primeiro da esquerda para a direita."),(0,r.kt)("h2",{id:"apresentando-o-thonny-ide"},"Apresentando o Thonny IDE"),(0,r.kt)("p",null,"O Thonny \xe9 um IDE popular para Python e MicroPython e \xe9 o que recomendamos para a programa\xe7\xe3o da Franzininho WiFi."),(0,r.kt)("p",null,"Para realizar o download, basta visitar o site ",(0,r.kt)("a",{parentName:"p",href:"https://thonny.org/"},"thonny.org")," e selecionar o link de download localizado no topo da p\xe1gina, conforme o seu sistema operacional."),(0,r.kt)("p",null,"Em seguida, inicie o Thonny enquanto a placa ainda estiver conectada via USB. Na parte inferior direita, selecione a op\xe7\xe3o MicroPython (ESP32). Desta forma, o Thonny ir\xe1 detectar automaticamente a Franzininho WiFi."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"MicroPython Conectado",src:o(7627).Z,width:"1659",height:"251"})),(0,r.kt)("p",null,"Agora tudo est\xe1 pronto para iniciar seus projetos com MicroPython na Franzininho WiFi."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Autor"),(0,r.kt)("th",{parentName:"tr",align:null},"Sthefania Fernandes"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data:"),(0,r.kt)("td",{parentName:"tr",align:null},"10/11/2023")))))}d.isMDXComponent=!0},2480:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/1-6d88a07fe7b4d086c5c1e919543bde1f.png"},4829:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/2-4ff442ba4ad188b9e12f85f62f5651e5.png"},1220:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/3-85a7b0152873fb9d9f399f85282c2978.png"},82:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/4-f656418f67a602f10d2a5413fbc17693.png"},4994:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/5-6365593b93164509a613351e73fe8bd3.png"},9968:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/6-8f46bd568b85b06a3ef67a3e4bf9608f.png"},9109:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/7-b365425ef64b1bf55dcbf8492f02b523.png"},7627:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/8-e065f7a020356536e7b2097f799041a2.png"}}]); \ No newline at end of file diff --git a/en/assets/js/d7336970.7109bba1.js b/en/assets/js/d7336970.7109bba1.js deleted file mode 100755 index 1f5d4c0db..000000000 --- a/en/assets/js/d7336970.7109bba1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2312],{3905:(e,n,a)=>{a.d(n,{Zo:()=>d,kt:()=>h});var r=a(7294);function t(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function o(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var n=1;n<arguments.length;n++){var a=null!=arguments[n]?arguments[n]:{};n%2?o(Object(a),!0).forEach((function(n){t(e,n,a[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))}))}return e}function s(e,n){if(null==e)return{};var a,r,t=function(e,n){if(null==e)return{};var a,r,t={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],n.indexOf(a)>=0||(t[a]=e[a]);return t}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],n.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(t[a]=e[a])}return t}var l=r.createContext({}),c=function(e){var n=r.useContext(l),a=n;return e&&(a="function"==typeof e?e(n):i(i({},n),e)),a},d=function(e){var n=c(e.components);return r.createElement(l.Provider,{value:n},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},u=r.forwardRef((function(e,n){var a=e.components,t=e.mdxType,o=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=c(a),u=t,h=p["".concat(l,".").concat(u)]||p[u]||m[u]||o;return a?r.createElement(h,i(i({ref:n},d),{},{components:a})):r.createElement(h,i({ref:n},d))}));function h(e,n){var a=arguments,t=n&&n.mdxType;if("string"==typeof e||t){var o=a.length,i=new Array(o);i[0]=u;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s[p]="string"==typeof e?e:t,i[1]=s;for(var c=2;c<o;c++)i[c]=a[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,a)}u.displayName="MDXCreateElement"},4158:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=a(3117),t=(a(7294),a(3905));const o={id:"franzininho-stm32c0",title:"Placa Franzininho C0",slug:"/franzininho-c0/franzininho-c0-board",description:"Franzininho C0 'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics"},i=void 0,s={unversionedId:"franzininhoSTM32C0/franzininho-stm32c0",id:"franzininhoSTM32C0/franzininho-stm32c0",title:"Placa Franzininho C0",description:"Franzininho C0 'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics",source:"@site/docs/franzininhoSTM32C0/franzininho-stm32c0-board.md",sourceDirName:"franzininhoSTM32C0",slug:"/franzininho-c0/franzininho-c0-board",permalink:"/en/docs/franzininho-c0/franzininho-c0-board",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/franzininho-stm32c0-board.md",tags:[],version:"current",frontMatter:{id:"franzininho-stm32c0",title:"Placa Franzininho C0",slug:"/franzininho-c0/franzininho-c0-board",description:"Franzininho C0 'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics"},sidebar:"docs",previous:{title:"Franzininho WiFi LAB01",permalink:"/en/docs/franzininho-wifi-lab01"},next:{title:"STM32Cube IDE TODO List",permalink:"/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist"}},l={},c=[{value:"Recursos de Hardware",id:"recursos-de-hardware",level:2},{value:"Pinout",id:"pinout",level:3},{value:"Mapeamento de recursos na placa",id:"mapeamento-de-recursos-na-placa",level:3},{value:"Pinout do microcontrolador",id:"pinout-do-microcontrolador",level:3},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Fotos",id:"fotos",level:2}],d={toc:c},p="wrapper";function m(e){let{components:n,...o}=e;return(0,t.kt)(p,(0,r.Z)({},d,o,{components:n,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"A Franzininho C0 \xe9 uma placa de desenvolvimento de hardware de c\xf3digo aberto, baseada no Microcontrolador STM32C0, um Arm Cortex M0+ da STMicroelectronics. Desenvolvida no Brasil, sua finalidade principal \xe9 servir como uma ferramenta de ensino/aprendizagem e prototipagem para estudantes, makers, entusiastas e desenvolvedores brasileiros."),(0,t.kt)("p",null,"Com um form factor pequeno e compat\xedvel com protoboard, ela pode ser programada atrav\xe9s das ferramentas da ST e tamb\xe9m da Arduino IDE. "),(0,t.kt)("p",null,"Neste texto, apresentaremos todos os recursos dispon\xedveis e detalhes do seu hardware."),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzininho C0",src:a(6660).Z,width:"850",height:"510"})),(0,t.kt)("h2",{id:"recursos-de-hardware"},"Recursos de Hardware"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Microcontrolador: ",(0,t.kt)("ul",{parentName:"li"},(0,t.kt)("li",{parentName:"ul"},(0,t.kt)("a",{parentName:"li",href:"https://www.st.com/en/microcontrollers-microprocessors/stm32c011f6.html"},"STM32C011F6P6")," - ARM Cortex M0+ @48MHz"),(0,t.kt)("li",{parentName:"ul"},"Mem\xf3ria Flash: 32 kB"),(0,t.kt)("li",{parentName:"ul"},"Mem\xf3ria RAM: 6 kB"))),(0,t.kt)("li",{parentName:"ul"},"ADC: 12 bits (13 canais + 2 internos)"),(0,t.kt)("li",{parentName:"ul"},"Comunica\xe7\xf5es: 1x I2C, 1 x SPI, 2x USART"),(0,t.kt)("li",{parentName:"ul"},"RTC"),(0,t.kt)("li",{parentName:"ul"},"Timer/Contador: 8"),(0,t.kt)("li",{parentName:"ul"},"GPIO: 16 - Compat\xedvel com protoboard"),(0,t.kt)("li",{parentName:"ul"},"Conversor USB/Serial"),(0,t.kt)("li",{parentName:"ul"},"Conector Micro USB"),(0,t.kt)("li",{parentName:"ul"},"Tens\xe3o de opera\xe7\xe3o: 3,3V"),(0,t.kt)("li",{parentName:"ul"},"Tens\xe3o de alimenta\xe7\xe3o:",(0,t.kt)("ul",{parentName:"li"},(0,t.kt)("li",{parentName:"ul"},"5V via conector USB"),(0,t.kt)("li",{parentName:"ul"},"5V e GND via pinos"))),(0,t.kt)("li",{parentName:"ul"},"Bot\xe3o de USO Geral: 1"),(0,t.kt)("li",{parentName:"ul"},"LEDS de uso Geral: 2"),(0,t.kt)("li",{parentName:"ul"},"Bot\xf5es: 1xReset, 1 x Boot"),(0,t.kt)("li",{parentName:"ul"},"Compat\xedvel com protoboard"),(0,t.kt)("li",{parentName:"ul"},"Dimens\xe3o: 38,1 mm x 20.32 mm"),(0,t.kt)("li",{parentName:"ul"},"Licen\xe7a: CERN Open Hardware Licence version 2")),(0,t.kt)("h3",{id:"pinout"},"Pinout"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzininho C0 Pinout",src:a(9186).Z,width:"3213",height:"2457"})),(0,t.kt)("h3",{id:"mapeamento-de-recursos-na-placa"},"Mapeamento de recursos na placa"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Bot\xe3o: PA8"),(0,t.kt)("li",{parentName:"ul"},"LED1: PB6"),(0,t.kt)("li",{parentName:"ul"},"LED2: PB7"),(0,t.kt)("li",{parentName:"ul"},"RX_PA10"),(0,t.kt)("li",{parentName:"ul"},"TX_PA11")),(0,t.kt)("h3",{id:"pinout-do-microcontrolador"},"Pinout do microcontrolador"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzininho C0 Pinout stm32c11f6p6",src:a(9298).Z,width:"6660",height:"721"})),(0,t.kt)("h3",{id:"esquem\xe1tico"},"Esquem\xe1tico"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Schematic_Franzininho C0_2023-07-26.png",src:a(2997).Z,width:"1170",height:"827"})),(0,t.kt)("h2",{id:"licen\xe7a"},"Licen\xe7a"),(0,t.kt)("p",null,"A placa Franzininho C0 \xe9 um projeto de hardware de c\xf3digo aberto, licenciado sob a ",(0,t.kt)("strong",{parentName:"p"},"CERN Open Hardware Licence version 2"),". Essa licen\xe7a \xe9 utilizada em projetos de hardware que s\xe3o desenvolvidos e disponibilizados como c\xf3digo aberto, permitindo que outras pessoas possam reproduzir e criar deriva\xe7\xf5es do projeto. Para garantir a conformidade com a licen\xe7a, \xe9 importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar deriva\xe7\xf5es do projeto. Dessa forma, podem garantir que est\xe3o seguindo as diretrizes corretas e respeitando a licen\xe7a escolhida para o projeto."),(0,t.kt)("p",null,"Reposit\xf3rio: ",(0,t.kt)("a",{parentName:"p",href:"https://oshwlab.com/fabiosouza/franzininho-stm32"},"Franzininho C0 - EasyEDA open source hardware lab")),(0,t.kt)("h2",{id:"fotos"},"Fotos"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzininho C0 Frente e verso",src:a(7189).Z,width:"1920",height:"909"})),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Franzininho C0 Frente e verso",src:a(6080).Z,width:"1920",height:"909"})))}m.isMDXComponent=!0},6660:(e,n,a)=>{a.d(n,{Z:()=>r});const r=a.p+"assets/images/Franzininho_C0-6eb01ea78e1dcc0dcef9935e5127238c.png"},6080:(e,n,a)=>{a.d(n,{Z:()=>r});const r=a.p+"assets/images/Franzininho_C0_Protoboards-bd53f85686e107715d6c10c510a985e5.jpg"},2997:(e,n,a)=>{a.d(n,{Z:()=>r});const r=a.p+"assets/images/Franzininho_C0_Schematic-2950216dd4948871d9d70bc01c79d332.png"},7189:(e,n,a)=>{a.d(n,{Z:()=>r});const r=a.p+"assets/images/Franzininho_C0_back-9def83dc0608f9cf896243270a9e9745.jpg"},9186:(e,n,a)=>{a.d(n,{Z:()=>r});const r=a.p+"assets/images/Pinout-Franzininho-C0-34bddd88aa02f5e6d532e774d3d7925a.png"},9298:(e,n,a)=>{a.d(n,{Z:()=>r});const r=a.p+"assets/images/pinout-stm32c11f6p6-e552e71c3445ae37f6bd33259a633c72.png"}}]); \ No newline at end of file diff --git a/en/assets/js/d7336970.9e79ba18.js b/en/assets/js/d7336970.9e79ba18.js new file mode 100755 index 000000000..cb9994ab1 --- /dev/null +++ b/en/assets/js/d7336970.9e79ba18.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7073],{24236:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>d});var i=r(17624),o=r(95788);const a={id:"franzininho-stm32c0",title:"Placa Franzininho C0",slug:"/franzininho-c0/franzininho-c0-board",description:"Franzininho C0 'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics"},s=void 0,t={id:"franzininhoSTM32C0/franzininho-stm32c0",title:"Placa Franzininho C0",description:"Franzininho C0 'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics",source:"@site/docs/franzininhoSTM32C0/franzininho-stm32c0-board.md",sourceDirName:"franzininhoSTM32C0",slug:"/franzininho-c0/franzininho-c0-board",permalink:"/en/docs/franzininho-c0/franzininho-c0-board",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/franzininho-stm32c0-board.md",tags:[],version:"current",frontMatter:{id:"franzininho-stm32c0",title:"Placa Franzininho C0",slug:"/franzininho-c0/franzininho-c0-board",description:"Franzininho C0 'e uma placa desenvolvimento baseada no microcontrolador STM32C0 da STmicroelectronics"},sidebar:"docs",previous:{title:"Franzininho WiFi LAB01",permalink:"/en/docs/franzininho-wifi-lab01"},next:{title:"STM32Cube IDE TODO List",permalink:"/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist"}},c={},d=[{value:"Recursos de Hardware",id:"recursos-de-hardware",level:2},{value:"Pinout",id:"pinout",level:3},{value:"Mapeamento de recursos na placa",id:"mapeamento-de-recursos-na-placa",level:3},{value:"Pinout do microcontrolador",id:"pinout-do-microcontrolador",level:3},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Fotos",id:"fotos",level:2}];function l(e){const n={a:"a",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"A Franzininho C0 \xe9 uma placa de desenvolvimento de hardware de c\xf3digo aberto, baseada no Microcontrolador STM32C0, um Arm Cortex M0+ da STMicroelectronics. Desenvolvida no Brasil, sua finalidade principal \xe9 servir como uma ferramenta de ensino/aprendizagem e prototipagem para estudantes, makers, entusiastas e desenvolvedores brasileiros."}),"\n",(0,i.jsx)(n.p,{children:"Com um form factor pequeno e compat\xedvel com protoboard, ela pode ser programada atrav\xe9s das ferramentas da ST e tamb\xe9m da Arduino IDE."}),"\n",(0,i.jsx)(n.p,{children:"Neste texto, apresentaremos todos os recursos dispon\xedveis e detalhes do seu hardware."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Franzininho C0",src:r(41933).c+"",width:"850",height:"510"})}),"\n",(0,i.jsx)(n.h2,{id:"recursos-de-hardware",children:"Recursos de Hardware"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Microcontrolador:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.st.com/en/microcontrollers-microprocessors/stm32c011f6.html",children:"STM32C011F6P6"})," - ARM Cortex M0+ @48MHz"]}),"\n",(0,i.jsx)(n.li,{children:"Mem\xf3ria Flash: 32 kB"}),"\n",(0,i.jsx)(n.li,{children:"Mem\xf3ria RAM: 6 kB"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"ADC: 12 bits (13 canais + 2 internos)"}),"\n",(0,i.jsx)(n.li,{children:"Comunica\xe7\xf5es: 1x I2C, 1 x SPI, 2x USART"}),"\n",(0,i.jsx)(n.li,{children:"RTC"}),"\n",(0,i.jsx)(n.li,{children:"Timer/Contador: 8"}),"\n",(0,i.jsx)(n.li,{children:"GPIO: 16 - Compat\xedvel com protoboard"}),"\n",(0,i.jsx)(n.li,{children:"Conversor USB/Serial"}),"\n",(0,i.jsx)(n.li,{children:"Conector Micro USB"}),"\n",(0,i.jsx)(n.li,{children:"Tens\xe3o de opera\xe7\xe3o: 3,3V"}),"\n",(0,i.jsxs)(n.li,{children:["Tens\xe3o de alimenta\xe7\xe3o:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"5V via conector USB"}),"\n",(0,i.jsx)(n.li,{children:"5V e GND via pinos"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"Bot\xe3o de USO Geral: 1"}),"\n",(0,i.jsx)(n.li,{children:"LEDS de uso Geral: 2"}),"\n",(0,i.jsx)(n.li,{children:"Bot\xf5es: 1xReset, 1 x Boot"}),"\n",(0,i.jsx)(n.li,{children:"Compat\xedvel com protoboard"}),"\n",(0,i.jsx)(n.li,{children:"Dimens\xe3o: 38,1 mm x 20.32 mm"}),"\n",(0,i.jsx)(n.li,{children:"Licen\xe7a: CERN Open Hardware Licence version 2"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"pinout",children:"Pinout"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Franzininho C0 Pinout",src:r(4280).c+"",width:"3213",height:"2457"})}),"\n",(0,i.jsx)(n.h3,{id:"mapeamento-de-recursos-na-placa",children:"Mapeamento de recursos na placa"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Bot\xe3o: PA8"}),"\n",(0,i.jsx)(n.li,{children:"LED1: PB6"}),"\n",(0,i.jsx)(n.li,{children:"LED2: PB7"}),"\n",(0,i.jsx)(n.li,{children:"RX_PA10"}),"\n",(0,i.jsx)(n.li,{children:"TX_PA11"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"pinout-do-microcontrolador",children:"Pinout do microcontrolador"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Franzininho C0 Pinout stm32c11f6p6",src:r(95516).c+"",width:"6660",height:"721"})}),"\n",(0,i.jsx)(n.h3,{id:"esquem\xe1tico",children:"Esquem\xe1tico"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Schematic_Franzininho C0_2023-07-26.png",src:r(56800).c+"",width:"1170",height:"827"})}),"\n",(0,i.jsx)(n.h2,{id:"licen\xe7a",children:"Licen\xe7a"}),"\n",(0,i.jsxs)(n.p,{children:["A placa Franzininho C0 \xe9 um projeto de hardware de c\xf3digo aberto, licenciado sob a ",(0,i.jsx)(n.strong,{children:"CERN Open Hardware Licence version 2"}),". Essa licen\xe7a \xe9 utilizada em projetos de hardware que s\xe3o desenvolvidos e disponibilizados como c\xf3digo aberto, permitindo que outras pessoas possam reproduzir e criar deriva\xe7\xf5es do projeto. Para garantir a conformidade com a licen\xe7a, \xe9 importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar deriva\xe7\xf5es do projeto. Dessa forma, podem garantir que est\xe3o seguindo as diretrizes corretas e respeitando a licen\xe7a escolhida para o projeto."]}),"\n",(0,i.jsxs)(n.p,{children:["Reposit\xf3rio: ",(0,i.jsx)(n.a,{href:"https://oshwlab.com/fabiosouza/franzininho-stm32",children:"Franzininho C0 - EasyEDA open source hardware lab"})]}),"\n",(0,i.jsx)(n.h2,{id:"fotos",children:"Fotos"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Franzininho C0 Frente e verso",src:r(59048).c+"",width:"1920",height:"909"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Franzininho C0 Frente e verso",src:r(80452).c+"",width:"1920",height:"909"})})]})}function h(e={}){const{wrapper:n}={...(0,o.MN)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},95788:(e,n,r)=>{r.d(n,{MN:()=>d});var i=r(11504);function o(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function a(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,i)}return r}function s(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?a(Object(r),!0).forEach((function(n){o(e,n,r[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))}))}return e}function t(e,n){if(null==e)return{};var r,i,o=function(e,n){if(null==e)return{};var r,i,o={},a=Object.keys(e);for(i=0;i<a.length;i++)r=a[i],n.indexOf(r)>=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],n.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=i.createContext({}),d=function(e){var n=i.useContext(c),r=n;return e&&(r="function"==typeof e?e(n):s(s({},n),e)),r},l={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},h=i.forwardRef((function(e,n){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,h=t(e,["components","mdxType","originalType","parentName"]),p=d(r),m=o,u=p["".concat(c,".").concat(m)]||p[m]||l[m]||a;return r?i.createElement(u,s(s({ref:n},h),{},{components:r})):i.createElement(u,s({ref:n},h))}));h.displayName="MDXCreateElement"},41933:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/Franzininho_C0-6eb01ea78e1dcc0dcef9935e5127238c.png"},80452:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/Franzininho_C0_Protoboards-bd53f85686e107715d6c10c510a985e5.jpg"},56800:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/Franzininho_C0_Schematic-2950216dd4948871d9d70bc01c79d332.png"},59048:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/Franzininho_C0_back-9def83dc0608f9cf896243270a9e9745.jpg"},4280:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/Pinout-Franzininho-C0-34bddd88aa02f5e6d532e774d3d7925a.png"},95516:(e,n,r)=>{r.d(n,{c:()=>i});const i=r.p+"assets/images/pinout-stm32c11f6p6-e552e71c3445ae37f6bd33259a633c72.png"}}]); \ No newline at end of file diff --git a/en/assets/js/d75a6ad4.868c0a17.js b/en/assets/js/d75a6ad4.868c0a17.js new file mode 100755 index 000000000..4e489da56 --- /dev/null +++ b/en/assets/js/d75a6ad4.868c0a17.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1363],{44972:(i,n,e)=>{e.r(n),e.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>d,toc:()=>t});var r=e(17624),a=e(95788);const s={id:"franzininho-wifi-lab01",title:"Franzininho WiFi LAB01",slug:"/franzininho-wifi-lab01",description:"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi."},o=void 0,d={id:"FranzininhoWiFiLAB01/franzininho-wifi-lab01",title:"Franzininho WiFi LAB01",description:"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi.",source:"@site/docs/FranzininhoWiFiLAB01/franzininho-wifi-lab01.md",sourceDirName:"FranzininhoWiFiLAB01",slug:"/franzininho-wifi-lab01",permalink:"/en/docs/franzininho-wifi-lab01",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWiFiLAB01/franzininho-wifi-lab01.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-lab01",title:"Franzininho WiFi LAB01",slug:"/franzininho-wifi-lab01",description:"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi."},sidebar:"docs",previous:{title:"Placa Franzininho WiFi dev Edition",permalink:"/en/docs/franzininho-wifi/franzininho-wifi-dev-edition"},next:{title:"Placa Franzininho C0",permalink:"/en/docs/franzininho-c0/franzininho-c0-board"}},c={},t=[{value:"Franzininho WiFi LAB01",id:"franzininho-wifi-lab01",level:2},{value:"Recursos da Franzininho WiFi LAB01",id:"recursos-da-franzininho-wifi-lab01",level:3},{value:"Resumo dos recursos da placa",id:"resumo-dos-recursos-da-placa",level:3},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Usando os pinos de expans\xe3o da placa",id:"usando-os-pinos-de-expans\xe3o-da-placa",level:2},{value:"Mapa de pinos Franzininho vs Recurso onboard",id:"mapa-de-pinos-franzininho-vs-recurso-onboard",level:2},{value:"JTAG",id:"jtag",level:2},{value:"Como Programar?",id:"como-programar",level:2},{value:"Exemplos de c\xf3digo:",id:"exemplos-de-c\xf3digo",level:3},{value:"Onde adquirir a placa?",id:"onde-adquirir-a-placa",level:2}];function l(i){const n={a:"a",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.MN)(),...i.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["A Franzininho WiFi LAB01 \xe9 uma placa de expans\xe3o para a placa ",(0,r.jsx)(n.a,{href:"https://embarcados.com.br/franzininho-wifi/",children:"Franzininho WiFi"}),", com a proposta de ser um laborat\xf3rio para auxiliar no ensino e aprendizagem do ESP32, com base na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experiencias."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Franzininho WiFi LAB01",src:e(49423).c+"",width:"1195",height:"1181"})}),"\n",(0,r.jsx)(n.p,{children:"Nesse material voc\xea encontra os detalhes do hardware da Franzininho WiFi LAB01."}),"\n",(0,r.jsxs)(n.p,{children:["Saiba mais sobre a Franzininho WiFi: ",(0,r.jsx)(n.a,{href:"https://docs.franzininho.com.br/docs/franzininho-wifi/franzininho-wifi",children:"Placa Franzininho WiFi"})]}),"\n",(0,r.jsx)(n.h2,{id:"franzininho-wifi-lab01",children:"Franzininho WiFi LAB01"}),"\n",(0,r.jsx)(n.p,{children:"A placa Franzininho WiFi LAB01 foi desenvolvida para facilitar o ensino e aprendizagem em diversos n\xedveis e abordagens com a Franzininho WiFi."}),"\n",(0,r.jsx)(n.p,{children:"Essa placa \xe9 o laborat\xf3rio base para os exemplos apresentados com a Franzininho WiFi sendo usada em oficinas, workshops e forma\xe7\xf5es em diversos n\xedveis de abordagem, desde iniciantes at\xe9 desenvolvedores experientes."}),"\n",(0,r.jsx)(n.h3,{id:"recursos-da-franzininho-wifi-lab01",children:"Recursos da Franzininho WiFi LAB01"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Conector para placa Franzininho WiFi"}),"\n",(0,r.jsx)(n.li,{children:"6 chaves t\xe1cteis"}),"\n",(0,r.jsx)(n.li,{children:"Conector para display IPS 240\xd7240 ST7789"}),"\n",(0,r.jsx)(n.li,{children:"Conector para display OLED 0.96 SSD1306"}),"\n",(0,r.jsx)(n.li,{children:"DHT11"}),"\n",(0,r.jsx)(n.li,{children:"LDR"}),"\n",(0,r.jsx)(n.li,{children:"LED RGB"}),"\n",(0,r.jsx)(n.li,{children:"BUZZER"}),"\n",(0,r.jsxs)(n.li,{children:["Expans\xf5es:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"5 x I2C"}),"\n",(0,r.jsx)(n.li,{children:"2 UARTs"}),"\n",(0,r.jsx)(n.li,{children:"Alimenta\xe7\xe3o (5V, GND)"}),"\n",(0,r.jsx)(n.li,{children:"6x Conector para garras jacar\xe9s (TOUCH, entrada DIGITAL)"}),"\n",(0,r.jsx)(n.li,{children:"Todos os I/Os da Franzininho WiFi"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.li,{children:"JTAG"}),"\n",(0,r.jsx)(n.li,{children:"Possibilidade de desabilitar/habilitar recursos para uso dos I/Os por outro recurso"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"resumo-dos-recursos-da-placa",children:"Resumo dos recursos da placa"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Recursos da Franzininho WiFi LAB01",src:e(75764).c+"",width:"800",height:"640"})}),"\n",(0,r.jsx)(n.h3,{id:"esquem\xe1tico",children:"Esquem\xe1tico"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Franzininho-wifi-lab01-esquematico.png",src:e(7376).c+"",width:"1653",height:"1171"})}),"\n",(0,r.jsx)(n.h2,{id:"licen\xe7a",children:"Licen\xe7a"}),"\n",(0,r.jsxs)(n.p,{children:["A ",(0,r.jsx)(n.strong,{children:"Franzininho WiFi LAB01"})," \xe9 um projeto open source e est\xe1 dispon\xedvel sob a licen\xe7a ",(0,r.jsx)(n.strong,{children:"CERN Open Hardware License"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["O projeto, criado em fevereiro de 2022 no ",(0,r.jsx)(n.strong,{children:"EasyEDA"}),", est\xe1 dispon\xedvel em: ",(0,r.jsx)(n.a,{href:"https://oshwlab.com/fabiosouza/shield-franzininho-wifi",children:"https://oshwlab.com/fabiosouza/shield-franzininho-wifi"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"usando-os-pinos-de-expans\xe3o-da-placa",children:"Usando os pinos de expans\xe3o da placa"}),"\n",(0,r.jsx)(n.p,{children:"A placa Franzininho WiFi LAB01 foi pensanda para o uso dos recursos existentes na placa e tamb\xe9m dando a possibilidade para adicionar recursos externos. Por exemplo, se voce precisar adicionar um rele para acionamento de pot\xeancia, ou outro sensor, voc\xea pode usar os pinos de expans\xe3o da placa."}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Franzininho-wifi-lab01-expansoes.png",src:e(39133).c+"",width:"2509",height:"1838"})}),"\n",(0,r.jsx)(n.p,{children:"Caso o pino da Franzininho WiFi que voce queira usar esteja sendo usado por um dos recursos onboard da placa, voce pode desabilitar atrav\xe9s dos jumper correspondente:"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Franzininho-wifi-lab01-jumpers.png",src:e(77368).c+"",width:"862",height:"710"})}),"\n",(0,r.jsx)(n.p,{children:"Al\xe9m disso, ela possui alguns barramentos de comunica\xe7\xf5es que facilitam a conex\xe3o de m\xf3dulos externos. \xc9 posivel ligar 5 m\xf3dulos I2C e 2 UARTs#"}),"\n",(0,r.jsx)(n.h2,{id:"mapa-de-pinos-franzininho-vs-recurso-onboard",children:"Mapa de pinos Franzininho vs Recurso onboard"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Pino"}),(0,r.jsx)(n.th,{children:"Recurso"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"I01"}),(0,r.jsx)(n.td,{children:"LDR"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"I02"}),(0,r.jsx)(n.td,{children:"BT6"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO3"}),(0,r.jsx)(n.td,{children:"BT5"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO4"}),(0,r.jsx)(n.td,{children:"BT4"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO5"}),(0,r.jsx)(n.td,{children:"BT3"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO6"}),(0,r.jsx)(n.td,{children:"BT2"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO7"}),(0,r.jsx)(n.td,{children:"BT1"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO8"}),(0,r.jsx)(n.td,{children:"OLED_SDA"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO9"}),(0,r.jsx)(n.td,{children:"OLED_SCL"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO10"}),(0,r.jsx)(n.td,{children:"TFT_DC"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO11"}),(0,r.jsx)(n.td,{children:"TFT_RES"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO12"}),(0,r.jsx)(n.td,{children:"LED AZUL"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO13"}),(0,r.jsx)(n.td,{children:"LED VERDE"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO14"}),(0,r.jsx)(n.td,{children:"LED VERMELHO"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO15"}),(0,r.jsx)(n.td,{children:"DHT11"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO17"}),(0,r.jsx)(n.td,{children:"BUZZER"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO35"}),(0,r.jsx)(n.td,{children:"TFT_SDA"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"IO36"}),(0,r.jsx)(n.td,{children:"TFT_scl"})]})]})]}),"\n",(0,r.jsx)(n.h2,{id:"jtag",children:"JTAG"}),"\n",(0,r.jsxs)(n.p,{children:["A Franzininho WiFI LAB01 possui conector para JTAG compat\xedvel com o ",(0,r.jsx)(n.a,{href:"https://docs.espressif.com/projects/espressif-esp-dev-kits/en/latest/other/esp-prog/user_guide.html",children:"ESP-PROG"})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Franzininho-wifi-lab01-jtag.png",src:e(54684).c+"",width:"1751",height:"1447"})}),"\n",(0,r.jsx)(n.h2,{id:"como-programar",children:"Como Programar?"}),"\n",(0,r.jsxs)(n.p,{children:["Conforme apresentado no artigo \u201c",(0,r.jsx)(n.a,{href:"https://embarcados.com.br/como-programar-a-franzininho-wifi/",children:"Como programar a Franzininho WiFi? Descubra agora mesmo!"}),"\u201c, a Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns s\xe3o:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"ESP-IDF, Arduino, CircuitPython e MicroPython"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"exemplos-de-c\xf3digo",children:"Exemplos de c\xf3digo:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Arduino: ",(0,r.jsx)(n.a,{href:"https://github.com/Franzininho/Franzininho-WiFI-LAB01-Arduino",children:"https://github.com/Franzininho/Franzininho-WiFI-LAB01-Arduino"})]}),"\n",(0,r.jsx)(n.li,{children:"CircuitPython: tbd"}),"\n",(0,r.jsx)(n.li,{children:"MicroPython: tbd"}),"\n",(0,r.jsx)(n.li,{children:"ESP-IDF: tbd"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"onde-adquirir-a-placa",children:"Onde adquirir a placa?"}),"\n",(0,r.jsxs)(n.p,{children:["Adquira sua placa em: ",(0,r.jsx)(n.a,{href:"https://cursos.embarcados.com.br/cursos/franzininho-wifi-lab01/",children:"https://cursos.embarcados.com.br/cursos/franzininho-wifi-lab01/"})]}),"\n",(0,r.jsx)(n.p,{children:"Se voc\xea quiser equipar o laborat\xf3rio da sua institui\xe7\xe3o com essa placa, entre em contato conosco para reservar com anteced\xeancia antes da produ\xe7\xe3o."}),"\n",(0,r.jsxs)(n.p,{children:["Contato: ",(0,r.jsx)(n.a,{href:"mailto:contato@embarcados.com.br",children:"contato@embarcados.com.br"})]})]})}function h(i={}){const{wrapper:n}={...(0,a.MN)(),...i.components};return n?(0,r.jsx)(n,{...i,children:(0,r.jsx)(l,{...i})}):l(i)}},95788:(i,n,e)=>{e.d(n,{MN:()=>t});var r=e(11504);function a(i,n,e){return n in i?Object.defineProperty(i,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):i[n]=e,i}function s(i,n){var e=Object.keys(i);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(i);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(i,n).enumerable}))),e.push.apply(e,r)}return e}function o(i){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?s(Object(e),!0).forEach((function(n){a(i,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(i,Object.getOwnPropertyDescriptors(e)):s(Object(e)).forEach((function(n){Object.defineProperty(i,n,Object.getOwnPropertyDescriptor(e,n))}))}return i}function d(i,n){if(null==i)return{};var e,r,a=function(i,n){if(null==i)return{};var e,r,a={},s=Object.keys(i);for(r=0;r<s.length;r++)e=s[r],n.indexOf(e)>=0||(a[e]=i[e]);return a}(i,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(i);for(r=0;r<s.length;r++)e=s[r],n.indexOf(e)>=0||Object.prototype.propertyIsEnumerable.call(i,e)&&(a[e]=i[e])}return a}var c=r.createContext({}),t=function(i){var n=r.useContext(c),e=n;return i&&(e="function"==typeof i?i(n):o(o({},n),i)),e},l={inlineCode:"code",wrapper:function(i){var n=i.children;return r.createElement(r.Fragment,{},n)}},h=r.forwardRef((function(i,n){var e=i.components,a=i.mdxType,s=i.originalType,c=i.parentName,h=d(i,["components","mdxType","originalType","parentName"]),p=t(e),x=a,j=p["".concat(c,".").concat(x)]||p[x]||l[x]||s;return e?r.createElement(j,o(o({ref:n},h),{},{components:e})):r.createElement(j,o({ref:n},h))}));h.displayName="MDXCreateElement"},49423:(i,n,e)=>{e.d(n,{c:()=>r});const r=e.p+"assets/images/Franzininho-wifi-lab01-desenho-392517059b55459854f015253728930c.png"},7376:(i,n,e)=>{e.d(n,{c:()=>r});const r=e.p+"assets/images/Franzininho-wifi-lab01-esquematico-d4d32d414db33086a671d4b8c1a66dc0.png"},39133:(i,n,e)=>{e.d(n,{c:()=>r});const r=e.p+"assets/images/Franzininho-wifi-lab01-expansoes-85f8d5ef179d70c5e10144221aa414e6.png"},54684:(i,n,e)=>{e.d(n,{c:()=>r});const r=e.p+"assets/images/Franzininho-wifi-lab01-jtag-714e1397df7c33ee7a2cb36fd8f49b02.png"},77368:(i,n,e)=>{e.d(n,{c:()=>r});const r=e.p+"assets/images/Franzininho-wifi-lab01-jumpers-a5b24505dd2d71bff5fc1f8c62400d22.png"},75764:(i,n,e)=>{e.d(n,{c:()=>r});const r=e.p+"assets/images/Franzininho-wifi-lab01-recursos-a73b02e1e67137518f241488c8367938.png"}}]); \ No newline at end of file diff --git a/en/assets/js/d75a6ad4.a2fd71d0.js b/en/assets/js/d75a6ad4.a2fd71d0.js deleted file mode 100755 index 18ea0eca3..000000000 --- a/en/assets/js/d75a6ad4.a2fd71d0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[286],{3905:(a,n,e)=>{e.d(n,{Zo:()=>d,kt:()=>h});var t=e(7294);function i(a,n,e){return n in a?Object.defineProperty(a,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):a[n]=e,a}function r(a,n){var e=Object.keys(a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(a);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(a,n).enumerable}))),e.push.apply(e,t)}return e}function o(a){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?r(Object(e),!0).forEach((function(n){i(a,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(e)):r(Object(e)).forEach((function(n){Object.defineProperty(a,n,Object.getOwnPropertyDescriptor(e,n))}))}return a}function l(a,n){if(null==a)return{};var e,t,i=function(a,n){if(null==a)return{};var e,t,i={},r=Object.keys(a);for(t=0;t<r.length;t++)e=r[t],n.indexOf(e)>=0||(i[e]=a[e]);return i}(a,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(a);for(t=0;t<r.length;t++)e=r[t],n.indexOf(e)>=0||Object.prototype.propertyIsEnumerable.call(a,e)&&(i[e]=a[e])}return i}var s=t.createContext({}),p=function(a){var n=t.useContext(s),e=n;return a&&(e="function"==typeof a?a(n):o(o({},n),a)),e},d=function(a){var n=p(a.components);return t.createElement(s.Provider,{value:n},a.children)},c="mdxType",u={inlineCode:"code",wrapper:function(a){var n=a.children;return t.createElement(t.Fragment,{},n)}},m=t.forwardRef((function(a,n){var e=a.components,i=a.mdxType,r=a.originalType,s=a.parentName,d=l(a,["components","mdxType","originalType","parentName"]),c=p(e),m=i,h=c["".concat(s,".").concat(m)]||c[m]||u[m]||r;return e?t.createElement(h,o(o({ref:n},d),{},{components:e})):t.createElement(h,o({ref:n},d))}));function h(a,n){var e=arguments,i=n&&n.mdxType;if("string"==typeof a||i){var r=e.length,o=new Array(r);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=a,l[c]="string"==typeof a?a:i,o[1]=l;for(var p=2;p<r;p++)o[p]=e[p];return t.createElement.apply(null,o)}return t.createElement.apply(null,e)}m.displayName="MDXCreateElement"},8059:(a,n,e)=>{e.r(n),e.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var t=e(3117),i=(e(7294),e(3905));const r={id:"franzininho-wifi-lab01",title:"Franzininho WiFi LAB01",slug:"/franzininho-wifi-lab01",description:"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi."},o=void 0,l={unversionedId:"FranzininhoWiFiLAB01/franzininho-wifi-lab01",id:"FranzininhoWiFiLAB01/franzininho-wifi-lab01",title:"Franzininho WiFi LAB01",description:"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi.",source:"@site/docs/FranzininhoWiFiLAB01/franzininho-wifi-lab01.md",sourceDirName:"FranzininhoWiFiLAB01",slug:"/franzininho-wifi-lab01",permalink:"/en/docs/franzininho-wifi-lab01",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWiFiLAB01/franzininho-wifi-lab01.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-lab01",title:"Franzininho WiFi LAB01",slug:"/franzininho-wifi-lab01",description:"Conhe\xe7a todos os recursos da placa Franzininho WiFi LAB01, uma placa de expans\xe3o para a placa Franzininho WiFi."},sidebar:"docs",previous:{title:"Placa Franzininho WiFi dev Edition",permalink:"/en/docs/franzininho-wifi/franzininho-wifi-dev-edition"},next:{title:"Placa Franzininho C0",permalink:"/en/docs/franzininho-c0/franzininho-c0-board"}},s={},p=[{value:"Franzininho WiFi LAB01",id:"franzininho-wifi-lab01",level:2},{value:"Recursos da Franzininho WiFi LAB01",id:"recursos-da-franzininho-wifi-lab01",level:3},{value:"Resumo dos recursos da placa",id:"resumo-dos-recursos-da-placa",level:3},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"Licen\xe7a",id:"licen\xe7a",level:2},{value:"Usando os pinos de expans\xe3o da placa",id:"usando-os-pinos-de-expans\xe3o-da-placa",level:2},{value:"Mapa de pinos Franzininho vs Recurso onboard",id:"mapa-de-pinos-franzininho-vs-recurso-onboard",level:2},{value:"JTAG",id:"jtag",level:2},{value:"Como Programar?",id:"como-programar",level:2},{value:"Exemplos de c\xf3digo:",id:"exemplos-de-c\xf3digo",level:3},{value:"Onde adquirir a placa?",id:"onde-adquirir-a-placa",level:2}],d={toc:p},c="wrapper";function u(a){let{components:n,...r}=a;return(0,i.kt)(c,(0,t.Z)({},d,r,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"A Franzininho WiFi LAB01 \xe9 uma placa de expans\xe3o para a placa ",(0,i.kt)("a",{parentName:"p",href:"https://embarcados.com.br/franzininho-wifi/"},"Franzininho WiFi"),", com a proposta de ser um laborat\xf3rio para auxiliar no ensino e aprendizagem do ESP32, com base na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experiencias."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Franzininho WiFi LAB01",src:e(8652).Z,width:"1195",height:"1181"})),(0,i.kt)("p",null,"Nesse material voc\xea encontra os detalhes do hardware da Franzininho WiFi LAB01."),(0,i.kt)("p",null,"Saiba mais sobre a Franzininho WiFi: ",(0,i.kt)("a",{parentName:"p",href:"https://docs.franzininho.com.br/docs/franzininho-wifi/franzininho-wifi"},"Placa Franzininho WiFi")),(0,i.kt)("h2",{id:"franzininho-wifi-lab01"},"Franzininho WiFi LAB01"),(0,i.kt)("p",null,"A placa Franzininho WiFi LAB01 foi desenvolvida para facilitar o ensino e aprendizagem em diversos n\xedveis e abordagens com a Franzininho WiFi."),(0,i.kt)("p",null,"Essa placa \xe9 o laborat\xf3rio base para os exemplos apresentados com a Franzininho WiFi sendo usada em oficinas, workshops e forma\xe7\xf5es em diversos n\xedveis de abordagem, desde iniciantes at\xe9 desenvolvedores experientes."),(0,i.kt)("h3",{id:"recursos-da-franzininho-wifi-lab01"},"Recursos da Franzininho WiFi LAB01"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Conector para placa Franzininho WiFi"),(0,i.kt)("li",{parentName:"ul"},"6 chaves t\xe1cteis"),(0,i.kt)("li",{parentName:"ul"},"Conector para display IPS 240\xd7240 ST7789"),(0,i.kt)("li",{parentName:"ul"},"Conector para display OLED 0.96 SSD1306"),(0,i.kt)("li",{parentName:"ul"},"DHT11"),(0,i.kt)("li",{parentName:"ul"},"LDR"),(0,i.kt)("li",{parentName:"ul"},"LED RGB"),(0,i.kt)("li",{parentName:"ul"},"BUZZER"),(0,i.kt)("li",{parentName:"ul"},"Expans\xf5es:",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"5 x I2C"),(0,i.kt)("li",{parentName:"ul"},"2 UARTs"),(0,i.kt)("li",{parentName:"ul"},"Alimenta\xe7\xe3o (5V, GND)"),(0,i.kt)("li",{parentName:"ul"},"6x Conector para garras jacar\xe9s (TOUCH, entrada DIGITAL)"),(0,i.kt)("li",{parentName:"ul"},"Todos os I/Os da Franzininho WiFi"))),(0,i.kt)("li",{parentName:"ul"},"JTAG"),(0,i.kt)("li",{parentName:"ul"},"Possibilidade de desabilitar/habilitar recursos para uso dos I/Os por outro recurso")),(0,i.kt)("h3",{id:"resumo-dos-recursos-da-placa"},"Resumo dos recursos da placa"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Recursos da Franzininho WiFi LAB01",src:e(6734).Z,width:"800",height:"640"})),(0,i.kt)("h3",{id:"esquem\xe1tico"},"Esquem\xe1tico"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Franzininho-wifi-lab01-esquematico.png",src:e(9893).Z,width:"1653",height:"1171"})),(0,i.kt)("h2",{id:"licen\xe7a"},"Licen\xe7a"),(0,i.kt)("p",null,"A ",(0,i.kt)("strong",{parentName:"p"},"Franzininho WiFi LAB01")," \xe9 um projeto open source e est\xe1 dispon\xedvel sob a licen\xe7a ",(0,i.kt)("strong",{parentName:"p"},"CERN Open Hardware License"),"."),(0,i.kt)("p",null,"O projeto, criado em fevereiro de 2022 no ",(0,i.kt)("strong",{parentName:"p"},"EasyEDA"),", est\xe1 dispon\xedvel em: ",(0,i.kt)("a",{parentName:"p",href:"https://oshwlab.com/fabiosouza/shield-franzininho-wifi"},"https://oshwlab.com/fabiosouza/shield-franzininho-wifi"),"."),(0,i.kt)("h2",{id:"usando-os-pinos-de-expans\xe3o-da-placa"},"Usando os pinos de expans\xe3o da placa"),(0,i.kt)("p",null,"A placa Franzininho WiFi LAB01 foi pensanda para o uso dos recursos existentes na placa e tamb\xe9m dando a possibilidade para adicionar recursos externos. Por exemplo, se voce precisar adicionar um rele para acionamento de pot\xeancia, ou outro sensor, voc\xea pode usar os pinos de expans\xe3o da placa."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Franzininho-wifi-lab01-expansoes.png",src:e(5794).Z,width:"2509",height:"1838"})),(0,i.kt)("p",null,"Caso o pino da Franzininho WiFi que voce queira usar esteja sendo usado por um dos recursos onboard da placa, voce pode desabilitar atrav\xe9s dos jumper correspondente:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Franzininho-wifi-lab01-jumpers.png",src:e(2561).Z,width:"862",height:"710"})),(0,i.kt)("p",null,"Al\xe9m disso, ela possui alguns barramentos de comunica\xe7\xf5es que facilitam a conex\xe3o de m\xf3dulos externos. \xc9 posivel ligar 5 m\xf3dulos I2C e 2 UARTs#"),(0,i.kt)("h2",{id:"mapa-de-pinos-franzininho-vs-recurso-onboard"},"Mapa de pinos Franzininho vs Recurso onboard"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Pino"),(0,i.kt)("th",{parentName:"tr",align:null},"Recurso"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"I01"),(0,i.kt)("td",{parentName:"tr",align:null},"LDR")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"I02"),(0,i.kt)("td",{parentName:"tr",align:null},"BT6")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO3"),(0,i.kt)("td",{parentName:"tr",align:null},"BT5")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO4"),(0,i.kt)("td",{parentName:"tr",align:null},"BT4")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO5"),(0,i.kt)("td",{parentName:"tr",align:null},"BT3")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO6"),(0,i.kt)("td",{parentName:"tr",align:null},"BT2")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO7"),(0,i.kt)("td",{parentName:"tr",align:null},"BT1")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO8"),(0,i.kt)("td",{parentName:"tr",align:null},"OLED_SDA")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO9"),(0,i.kt)("td",{parentName:"tr",align:null},"OLED_SCL")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO10"),(0,i.kt)("td",{parentName:"tr",align:null},"TFT_DC")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO11"),(0,i.kt)("td",{parentName:"tr",align:null},"TFT_RES")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO12"),(0,i.kt)("td",{parentName:"tr",align:null},"LED AZUL")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO13"),(0,i.kt)("td",{parentName:"tr",align:null},"LED VERDE")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO14"),(0,i.kt)("td",{parentName:"tr",align:null},"LED VERMELHO")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO15"),(0,i.kt)("td",{parentName:"tr",align:null},"DHT11")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO17"),(0,i.kt)("td",{parentName:"tr",align:null},"BUZZER")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO35"),(0,i.kt)("td",{parentName:"tr",align:null},"TFT_SDA")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"IO36"),(0,i.kt)("td",{parentName:"tr",align:null},"TFT_scl")))),(0,i.kt)("h2",{id:"jtag"},"JTAG"),(0,i.kt)("p",null,"A Franzininho WiFI LAB01 possui conector para JTAG compat\xedvel com o ",(0,i.kt)("a",{parentName:"p",href:"https://docs.espressif.com/projects/espressif-esp-dev-kits/en/latest/other/esp-prog/user_guide.html"},"ESP-PROG")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Franzininho-wifi-lab01-jtag.png",src:e(5955).Z,width:"1751",height:"1447"})),(0,i.kt)("h2",{id:"como-programar"},"Como Programar?"),(0,i.kt)("p",null,"Conforme apresentado no artigo \u201c",(0,i.kt)("a",{parentName:"p",href:"https://embarcados.com.br/como-programar-a-franzininho-wifi/"},"Como programar a Franzininho WiFi? Descubra agora mesmo!"),"\u201c, a Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns s\xe3o:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"ESP-IDF, Arduino, CircuitPython e MicroPython")),(0,i.kt)("h3",{id:"exemplos-de-c\xf3digo"},"Exemplos de c\xf3digo:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Arduino: ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/Franzininho-WiFI-LAB01-Arduino"},"https://github.com/Franzininho/Franzininho-WiFI-LAB01-Arduino")),(0,i.kt)("li",{parentName:"ul"},"CircuitPython: tbd"),(0,i.kt)("li",{parentName:"ul"},"MicroPython: tbd"),(0,i.kt)("li",{parentName:"ul"},"ESP-IDF: tbd")),(0,i.kt)("h2",{id:"onde-adquirir-a-placa"},"Onde adquirir a placa?"),(0,i.kt)("p",null,"Adquira sua placa em: ",(0,i.kt)("a",{parentName:"p",href:"https://cursos.embarcados.com.br/cursos/franzininho-wifi-lab01/"},"https://cursos.embarcados.com.br/cursos/franzininho-wifi-lab01/")),(0,i.kt)("p",null,"Se voc\xea quiser equipar o laborat\xf3rio da sua institui\xe7\xe3o com essa placa, entre em contato conosco para reservar com anteced\xeancia antes da produ\xe7\xe3o."),(0,i.kt)("p",null,"Contato: ",(0,i.kt)("a",{parentName:"p",href:"mailto:contato@embarcados.com.br"},"contato@embarcados.com.br")))}u.isMDXComponent=!0},8652:(a,n,e)=>{e.d(n,{Z:()=>t});const t=e.p+"assets/images/Franzininho-wifi-lab01-desenho-392517059b55459854f015253728930c.png"},9893:(a,n,e)=>{e.d(n,{Z:()=>t});const t=e.p+"assets/images/Franzininho-wifi-lab01-esquematico-d4d32d414db33086a671d4b8c1a66dc0.png"},5794:(a,n,e)=>{e.d(n,{Z:()=>t});const t=e.p+"assets/images/Franzininho-wifi-lab01-expansoes-85f8d5ef179d70c5e10144221aa414e6.png"},5955:(a,n,e)=>{e.d(n,{Z:()=>t});const t=e.p+"assets/images/Franzininho-wifi-lab01-jtag-714e1397df7c33ee7a2cb36fd8f49b02.png"},2561:(a,n,e)=>{e.d(n,{Z:()=>t});const t=e.p+"assets/images/Franzininho-wifi-lab01-jumpers-a5b24505dd2d71bff5fc1f8c62400d22.png"},6734:(a,n,e)=>{e.d(n,{Z:()=>t});const t=e.p+"assets/images/Franzininho-wifi-lab01-recursos-a73b02e1e67137518f241488c8367938.png"}}]); \ No newline at end of file diff --git a/en/assets/js/d9a3a88a.4e4c766c.js b/en/assets/js/d9a3a88a.4e4c766c.js deleted file mode 100755 index 8e1704504..000000000 --- a/en/assets/js/d9a3a88a.4e4c766c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7259],{3905:(e,a,o)=>{o.d(a,{Zo:()=>u,kt:()=>f});var r=o(7294);function t(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function n(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,r)}return o}function i(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?n(Object(o),!0).forEach((function(a){t(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function l(e,a){if(null==e)return{};var o,r,t=function(e,a){if(null==e)return{};var o,r,t={},n=Object.keys(e);for(r=0;r<n.length;r++)o=n[r],a.indexOf(o)>=0||(t[o]=e[o]);return t}(e,a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r<n.length;r++)o=n[r],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var s=r.createContext({}),c=function(e){var a=r.useContext(s),o=a;return e&&(o="function"==typeof e?e(a):i(i({},a),e)),o},u=function(e){var a=c(e.components);return r.createElement(s.Provider,{value:a},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},m=r.forwardRef((function(e,a){var o=e.components,t=e.mdxType,n=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(o),m=t,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||n;return o?r.createElement(f,i(i({ref:a},u),{},{components:o})):r.createElement(f,i({ref:a},u))}));function f(e,a){var o=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var n=o.length,i=new Array(n);i[0]=m;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[d]="string"==typeof e?e:t,i[1]=l;for(var c=2;c<n;c++)i[c]=o[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,o)}m.displayName="MDXCreateElement"},129:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>n,metadata:()=>l,toc:()=>c});var r=o(3117),t=(o(7294),o(3905));const n={id:"girassol-automatizado",title:"Girassol Automatizado",slug:"/franzininho-diy/girassol-automatizado",description:"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY"},i=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/girassol-automatizado",id:"FranzininhoDIY/exemplos-arduino/girassol-automatizado",title:"Girassol Automatizado",description:"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/girassol-automatizado.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/girassol-automatizado",permalink:"/en/docs/franzininho-diy/girassol-automatizado",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/girassol-automatizado.md",tags:[],version:"current",frontMatter:{id:"girassol-automatizado",title:"Girassol Automatizado",slug:"/franzininho-diy/girassol-automatizado",description:"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY"},sidebar:"docs",previous:{title:"Theremim",permalink:"/en/docs/franzininho-diy/theremim"},next:{title:"Primeiros Passos",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos"}},s={},c=[{value:"Materiais:",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Video explicativo",id:"video-explicativo",level:2},{value:"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 1)",id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-1",level:3},{value:"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 2)",id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-2",level:3},{value:"Refer\xeancia",id:"refer\xeancia",level:2}],u={toc:c},d="wrapper";function p(e){let{components:a,...n}=e;return(0,t.kt)(d,(0,r.Z)({},u,n,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Nesse exemplo vamos fazer um girassol automatizado que se movimenta conforme a posi\xe7\xe3o da luz."),(0,t.kt)("h2",{id:"materiais"},"Materiais:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Placa Franzininho DIY;"),(0,t.kt)("li",{parentName:"ul"},"Protoboard;"),(0,t.kt)("li",{parentName:"ul"},"LED 3mm;"),(0,t.kt)("li",{parentName:"ul"},"1 Resistor LDR (foto resistores 10 k)"),(0,t.kt)("li",{parentName:"ul"},"1 Servo motor"),(0,t.kt)("li",{parentName:"ul"},"Jumpers macho/f\xeamea")),(0,t.kt)("h2",{id:"circuito"},"Circuito"),(0,t.kt)("p",null,"No protoboard voc\xea deve inserir o foto resistores e o servo motoro, conforme a imagem abaixo:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Circuito",src:o(3190).Z,width:"1698",height:"1050"})),(0,t.kt)("h2",{id:"c\xf3digo"},"C\xf3digo"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-cpp"},"\n/*\nFranzininho\nExemplo: Girassol Automatizado\nNesse exemplo \xe9 de um girassol automatizado com dois fotos resistores, um servo motor, entre outros materiais, confira.\n*/\n//\n\n#include <Servo.h>\n\nint sensor = A;\nint servoMotor = 1;\n\nint valorSensor =0;\nint analogServo = 90;\n\nServo servo;\n\nvoid setup() {\n servo.attach(servoMotor);\n servo.write(anguloServo);\n}\n\nvoid loop() {\n valorSensor = analogRead(sensor);\n if(valorSensor <512)\n {\n if(anguloServo < 170)anguloServo++;\n }\n if(valorSensor = >512)\n {\n if(anguloServo > 10)anguloServo--;\n }\n\nservo.write(anguloServo);\ndelay(50);\n}\n\n")),(0,t.kt)("h2",{id:"video-explicativo"},"Video explicativo"),(0,t.kt)("p",null,"Este projeto foi feiro para colaborar no projeto Co.Lab da Red Hat, confira esse e outros na plataforma:",(0,t.kt)("a",{parentName:"p",href:"https://www.redhat.com/pt-br/colab-repo"},"https://www.redhat.com/pt-br/colab-repo")),(0,t.kt)("h3",{id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-1"},"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 1)"),(0,t.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/wGXmITj9mHE",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,t.kt)("h3",{id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-2"},"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 2)"),(0,t.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/ANmRyWnvq4U",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,t.kt)("h2",{id:"refer\xeancia"},"Refer\xeancia"),(0,t.kt)("p",null," ",(0,t.kt)("a",{parentName:"p",href:"https://create.arduino.cc/projecthub/Mako_/arduino-sunflower-c4fd84"},"Arduino Sunflower")),(0,t.kt)("table",null,(0,t.kt)("thead",{parentName:"table"},(0,t.kt)("tr",{parentName:"thead"},(0,t.kt)("th",{parentName:"tr",align:null},"Autor"),(0,t.kt)("th",{parentName:"tr",align:null},"Diana Santos"))),(0,t.kt)("tbody",{parentName:"table"},(0,t.kt)("tr",{parentName:"tbody"},(0,t.kt)("td",{parentName:"tr",align:null},"Data:"),(0,t.kt)("td",{parentName:"tr",align:null},"22/01/2022")))))}p.isMDXComponent=!0},3190:(e,a,o)=>{o.d(a,{Z:()=>r});const r=o.p+"assets/images/girassol-atualizado-8574b109211295db7d1d61b5f40e69e8.png"}}]); \ No newline at end of file diff --git a/en/assets/js/d9a3a88a.c7315740.js b/en/assets/js/d9a3a88a.c7315740.js new file mode 100755 index 000000000..6c807a208 --- /dev/null +++ b/en/assets/js/d9a3a88a.c7315740.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4672],{18208:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>c,contentTitle:()=>t,default:()=>u,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var a=o(17624),i=o(95788);const n={id:"girassol-automatizado",title:"Girassol Automatizado",slug:"/franzininho-diy/girassol-automatizado",description:"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY"},t=void 0,s={id:"FranzininhoDIY/exemplos-arduino/girassol-automatizado",title:"Girassol Automatizado",description:"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/girassol-automatizado.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/girassol-automatizado",permalink:"/en/docs/franzininho-diy/girassol-automatizado",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/girassol-automatizado.md",tags:[],version:"current",frontMatter:{id:"girassol-automatizado",title:"Girassol Automatizado",slug:"/franzininho-diy/girassol-automatizado",description:"Nesse exemplo vamos fazer um Girassol Automatizado com Franzininho DIY"},sidebar:"docs",previous:{title:"Theremim",permalink:"/en/docs/franzininho-diy/theremim"},next:{title:"Primeiros Passos",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos"}},c={},l=[{value:"Materiais:",id:"materiais",level:2},{value:"Circuito",id:"circuito",level:2},{value:"C\xf3digo",id:"c\xf3digo",level:2},{value:"Video explicativo",id:"video-explicativo",level:2},{value:"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 1)",id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-1",level:3},{value:"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 2)",id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-2",level:3},{value:"Refer\xeancia",id:"refer\xeancia",level:2}];function d(e){const r={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(r.p,{children:"Nesse exemplo vamos fazer um girassol automatizado que se movimenta conforme a posi\xe7\xe3o da luz."}),"\n",(0,a.jsx)(r.h2,{id:"materiais",children:"Materiais:"}),"\n",(0,a.jsxs)(r.ul,{children:["\n",(0,a.jsx)(r.li,{children:"Placa Franzininho DIY;"}),"\n",(0,a.jsx)(r.li,{children:"Protoboard;"}),"\n",(0,a.jsx)(r.li,{children:"LED 3mm;"}),"\n",(0,a.jsx)(r.li,{children:"1 Resistor LDR (foto resistores 10 k)"}),"\n",(0,a.jsx)(r.li,{children:"1 Servo motor"}),"\n",(0,a.jsx)(r.li,{children:"Jumpers macho/f\xeamea"}),"\n"]}),"\n",(0,a.jsx)(r.h2,{id:"circuito",children:"Circuito"}),"\n",(0,a.jsx)(r.p,{children:"No protoboard voc\xea deve inserir o foto resistores e o servo motoro, conforme a imagem abaixo:"}),"\n",(0,a.jsx)(r.p,{children:(0,a.jsx)(r.img,{alt:"Circuito",src:o(76388).c+"",width:"1698",height:"1050"})}),"\n",(0,a.jsx)(r.h2,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,a.jsx)(r.pre,{children:(0,a.jsx)(r.code,{className:"language-cpp",children:"\n/*\nFranzininho\nExemplo: Girassol Automatizado\nNesse exemplo \xe9 de um girassol automatizado com dois fotos resistores, um servo motor, entre outros materiais, confira.\n*/\n//\n\n#include <Servo.h>\n\nint sensor = A;\nint servoMotor = 1;\n\nint valorSensor =0;\nint analogServo = 90;\n\nServo servo;\n\nvoid setup() {\n servo.attach(servoMotor);\n servo.write(anguloServo);\n}\n\nvoid loop() {\n valorSensor = analogRead(sensor);\n if(valorSensor <512)\n {\n if(anguloServo < 170)anguloServo++;\n }\n if(valorSensor = >512)\n {\n if(anguloServo > 10)anguloServo--;\n }\n\nservo.write(anguloServo);\ndelay(50);\n}\n\n"})}),"\n",(0,a.jsx)(r.h2,{id:"video-explicativo",children:"Video explicativo"}),"\n",(0,a.jsxs)(r.p,{children:["Este projeto foi feiro para colaborar no projeto Co.Lab da Red Hat, confira esse e outros na plataforma:",(0,a.jsx)(r.a,{href:"https://www.redhat.com/pt-br/colab-repo",children:"https://www.redhat.com/pt-br/colab-repo"})]}),"\n",(0,a.jsx)(r.h3,{id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-1",children:"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 1)"}),"\n",(0,a.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/wGXmITj9mHE",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,a.jsx)(r.h3,{id:"colab--workshop-rob\xf3tica-educacional---aprenda-sobre-ci\xeancia-da-natureza-e-eletr\xf4nica-parte-2",children:"Co.Lab | Workshop: Rob\xf3tica Educacional - Aprenda sobre Ci\xeancia da Natureza e Eletr\xf4nica (Parte 2)"}),"\n",(0,a.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/ANmRyWnvq4U",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,a.jsx)(r.h2,{id:"refer\xeancia",children:"Refer\xeancia"}),"\n",(0,a.jsx)(r.p,{children:(0,a.jsx)(r.a,{href:"https://create.arduino.cc/projecthub/Mako_/arduino-sunflower-c4fd84",children:"Arduino Sunflower"})}),"\n",(0,a.jsxs)(r.table,{children:[(0,a.jsx)(r.thead,{children:(0,a.jsxs)(r.tr,{children:[(0,a.jsx)(r.th,{children:"Autor"}),(0,a.jsx)(r.th,{children:"Diana Santos"})]})}),(0,a.jsx)(r.tbody,{children:(0,a.jsxs)(r.tr,{children:[(0,a.jsx)(r.td,{children:"Data:"}),(0,a.jsx)(r.td,{children:"22/01/2022"})]})})]})]})}function u(e={}){const{wrapper:r}={...(0,i.MN)(),...e.components};return r?(0,a.jsx)(r,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},95788:(e,r,o)=>{o.d(r,{MN:()=>l});var a=o(11504);function i(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}function n(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,a)}return o}function t(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?n(Object(o),!0).forEach((function(r){i(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}function s(e,r){if(null==e)return{};var o,a,i=function(e,r){if(null==e)return{};var o,a,i={},n=Object.keys(e);for(a=0;a<n.length;a++)o=n[a],r.indexOf(o)>=0||(i[o]=e[o]);return i}(e,r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a<n.length;a++)o=n[a],r.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var c=a.createContext({}),l=function(e){var r=a.useContext(c),o=r;return e&&(o="function"==typeof e?e(r):t(t({},r),e)),o},d={inlineCode:"code",wrapper:function(e){var r=e.children;return a.createElement(a.Fragment,{},r)}},u=a.forwardRef((function(e,r){var o=e.components,i=e.mdxType,n=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(o),m=i,h=p["".concat(c,".").concat(m)]||p[m]||d[m]||n;return o?a.createElement(h,t(t({ref:r},u),{},{components:o})):a.createElement(h,t({ref:r},u))}));u.displayName="MDXCreateElement"},76388:(e,r,o)=>{o.d(r,{c:()=>a});const a=o.p+"assets/images/girassol-atualizado-8574b109211295db7d1d61b5f40e69e8.png"}}]); \ No newline at end of file diff --git a/en/assets/js/daddf4d9.8b7ef4e1.js b/en/assets/js/daddf4d9.8b7ef4e1.js deleted file mode 100755 index debf10ac3..000000000 --- a/en/assets/js/daddf4d9.8b7ef4e1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5193],{3905:(a,o,n)=>{n.d(o,{Zo:()=>p,kt:()=>g});var e=n(7294);function r(a,o,n){return o in a?Object.defineProperty(a,o,{value:n,enumerable:!0,configurable:!0,writable:!0}):a[o]=n,a}function t(a,o){var n=Object.keys(a);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(a);o&&(e=e.filter((function(o){return Object.getOwnPropertyDescriptor(a,o).enumerable}))),n.push.apply(n,e)}return n}function i(a){for(var o=1;o<arguments.length;o++){var n=null!=arguments[o]?arguments[o]:{};o%2?t(Object(n),!0).forEach((function(o){r(a,o,n[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(n)):t(Object(n)).forEach((function(o){Object.defineProperty(a,o,Object.getOwnPropertyDescriptor(n,o))}))}return a}function u(a,o){if(null==a)return{};var n,e,r=function(a,o){if(null==a)return{};var n,e,r={},t=Object.keys(a);for(e=0;e<t.length;e++)n=t[e],o.indexOf(n)>=0||(r[n]=a[n]);return r}(a,o);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(a);for(e=0;e<t.length;e++)n=t[e],o.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(a,n)&&(r[n]=a[n])}return r}var d=e.createContext({}),s=function(a){var o=e.useContext(d),n=o;return a&&(n="function"==typeof a?a(o):i(i({},o),a)),n},p=function(a){var o=s(a.components);return e.createElement(d.Provider,{value:o},a.children)},c="mdxType",l={inlineCode:"code",wrapper:function(a){var o=a.children;return e.createElement(e.Fragment,{},o)}},m=e.forwardRef((function(a,o){var n=a.components,r=a.mdxType,t=a.originalType,d=a.parentName,p=u(a,["components","mdxType","originalType","parentName"]),c=s(n),m=r,g=c["".concat(d,".").concat(m)]||c[m]||l[m]||t;return n?e.createElement(g,i(i({ref:o},p),{},{components:n})):e.createElement(g,i({ref:o},p))}));function g(a,o){var n=arguments,r=o&&o.mdxType;if("string"==typeof a||r){var t=n.length,i=new Array(t);i[0]=m;var u={};for(var d in o)hasOwnProperty.call(o,d)&&(u[d]=o[d]);u.originalType=a,u[c]="string"==typeof a?a:r,i[1]=u;for(var s=2;s<t;s++)i[s]=n[s];return e.createElement.apply(null,i)}return e.createElement.apply(null,n)}m.displayName="MDXCreateElement"},5244:(a,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>i,default:()=>l,frontMatter:()=>t,metadata:()=>u,toc:()=>s});var e=n(3117),r=(n(7294),n(3905));const t={id:"upload-com-arduino-uno",title:"Gravando a Franzino com um placa Arduino UNO",slug:"/Franzino/upload-com-arduino-uno",description:"Veja como usar um Arduino Uno como programador para a Franzino"},i=void 0,u={unversionedId:"Franzino/upload-com-arduino-uno",id:"Franzino/upload-com-arduino-uno",title:"Gravando a Franzino com um placa Arduino UNO",description:"Veja como usar um Arduino Uno como programador para a Franzino",source:"@site/docs/Franzino/upload-com-arduino-uno.md",sourceDirName:"Franzino",slug:"/Franzino/upload-com-arduino-uno",permalink:"/en/docs/Franzino/upload-com-arduino-uno",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Franzino/upload-com-arduino-uno.md",tags:[],version:"current",frontMatter:{id:"upload-com-arduino-uno",title:"Gravando a Franzino com um placa Arduino UNO",slug:"/Franzino/upload-com-arduino-uno",description:"Veja como usar um Arduino Uno como programador para a Franzino"},sidebar:"docs",previous:{title:"Upload via conversor USB/SERIAL",permalink:"/en/docs/Franzino/upload-conversor-serial"},next:{title:"Placa FranzBoy",permalink:"/en/docs/FranzBoy/franzboy"}},d={},s=[{value:"Configurando o avrdude ( se estiver usando o ATmega328 e n\xe3o o ATmega328P)",id:"configurando-o-avrdude--se-estiver-usando-o-atmega328-e-n\xe3o-o-atmega328p",level:2},{value:"Upload de Sketchs usando a Arduino UNO",id:"upload-de-sketchs-usando-a-arduino-uno",level:2}],p={toc:s},c="wrapper";function l(a){let{components:o,...t}=a;return(0,r.kt)(c,(0,e.Z)({},p,t,{components:o,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Se voc\xea n\xe3o possui um conversor USB/Serial voc\xea pode gravar a Franzino atrav\xe9s de um Arduino. Para isso vamos configurar a placa Arduino UNO com programador."),(0,r.kt)("p",null,"Primeiro, escolha o exemplo ArduinoISP, conforme figura abaixo:"),(0,r.kt)("p",null,(0,r.kt)("img",{src:n(1280).Z,width:"625",height:"603"})),(0,r.kt)("p",null,"Fa\xe7a o upload para a placa Arduino UNO que ser\xe1 usada como programador."),(0,r.kt)("p",null,"Feito o UPLOAD, agora vamos as conex\xf5es do Arduino UNO na Franzino:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Ligue o pino RESET da FRANZINO ao pino 10 do Arduino"),(0,r.kt)("li",{parentName:"ul"},"Ligue o pino 11 da FRANZINO ao pino 11 do Arduino"),(0,r.kt)("li",{parentName:"ul"},"Ligue o pino 12 da FRANZINO ao pino 12 do Arduino"),(0,r.kt)("li",{parentName:"ul"},"Ligue o pino 13 da FRANZINO ao pino 13 do Arduino"),(0,r.kt)("li",{parentName:"ul"},"Ligue o pino 5V da FRANZINO no pino 5V do Arduino"),(0,r.kt)("li",{parentName:"ul"},"Ligue o pino GND da FRANZINO ao GND do Arduino")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Liga\xe7\xe3o_arduino_franzino.png",src:n(9060).Z,width:"1024",height:"432"})),(0,r.kt)("h2",{id:"configurando-o-avrdude--se-estiver-usando-o-atmega328-e-n\xe3o-o-atmega328p"},"Configurando o avrdude ( se estiver usando o ATmega328 e n\xe3o o ATmega328P)"),(0,r.kt)("p",null,"A vers\xe3o 0 da Franzino vem com o ATmega328-PU, dessa forma precisamos configurar o avrdude para gravar esse microcontrolador. Na pasta do arduino acesse:"),(0,r.kt)("p",null,"C:\\arduino-1.6.8\\hardware\\tools\\avr\\etc, abra o arquivo avrdude.conf"),(0,r.kt)("p",null,"Procure a assinatura do ATMEGA328P:"),(0,r.kt)("p",null,(0,r.kt)("img",{src:n(2459).Z,width:"485",height:"144"})),(0,r.kt)("p",null,"Troque a assinatura por:"),(0,r.kt)("p",null,(0,r.kt)("img",{src:n(1914).Z,width:"390",height:"142"})),(0,r.kt)("p",null,"Salve o arquivo."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Ap\xf3s a grava\xe7\xe3o, volte a assinatura para o valor original: signature= 0x1e 0x95 0x0F;")),(0,r.kt)("h2",{id:"upload-de-sketchs-usando-a-arduino-uno"},"Upload de Sketchs usando a Arduino UNO"),(0,r.kt)("p",null,"Pronto, agora abra o programa que ser\xe1 gravado na Franzino. Para esse exemplo vamos usar o exemplo Blink, mas voc\xea poder\xe1 fazer esse procedimento para gravar suas aplica\xe7\xf5es;"),(0,r.kt)("p",null,(0,r.kt)("img",{src:n(8014).Z,width:"687",height:"615"})),(0,r.kt)("p",null,"Agora vamos preparar para grava\xe7\xe3o. Configure o Programador como ArduinoISP:"),(0,r.kt)("p",null,(0,r.kt)("img",{src:n(1617).Z,width:"669",height:"728"})),(0,r.kt)("p",null,"Pronto, agora \xe9 s\xf3 fazer o UPLOAD para a Franzino:"),(0,r.kt)("p",null,(0,r.kt)("img",{src:n(1490).Z,width:"445",height:"233"})))}l.isMDXComponent=!0},1617:(a,o,n)=>{n.d(o,{Z:()=>e});const e=n.p+"assets/images/arduinoisp-cbcaa0a676744f41adbc8859207b0e20.png"},1914:(a,o,n)=>{n.d(o,{Z:()=>e});const e=n.p+"assets/images/assinatura-328-atualizada-b7da6dca34b30968ad45021edb325724.png"},2459:(a,o,n)=>{n.d(o,{Z:()=>e});const e=n.p+"assets/images/assinatura-328-8c42edd0b4bf6dae4c2421ec48f8c629.png"},1280:(a,o,n)=>{n.d(o,{Z:()=>e});const e=n.p+"assets/images/exemplo-arduinoisp-23bff4a9b75ade0f2fc2c0446f805aac.png"},8014:(a,o,n)=>{n.d(o,{Z:()=>e});const e=n.p+"assets/images/exemplo-blink-6137bc4974e113707a3197170b2c4223.png"},9060:(a,o,n)=>{n.d(o,{Z:()=>e});const e=n.p+"assets/images/franzino-uno-a66f005fcfffc7bf3d13df4670cfbf51.png"},1490:(a,o,n)=>{n.d(o,{Z:()=>e});const e=n.p+"assets/images/upload-isp-8742233fda744ea45e5a90798852386b.png"}}]); \ No newline at end of file diff --git a/en/assets/js/daddf4d9.8fce146d.js b/en/assets/js/daddf4d9.8fce146d.js new file mode 100755 index 000000000..aa88888bf --- /dev/null +++ b/en/assets/js/daddf4d9.8fce146d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1140],{5472:(o,a,n)=>{n.r(a),n.d(a,{assets:()=>t,contentTitle:()=>s,default:()=>p,frontMatter:()=>i,metadata:()=>d,toc:()=>c});var r=n(17624),e=n(95788);const i={id:"upload-com-arduino-uno",title:"Gravando a Franzino com um placa Arduino UNO",slug:"/Franzino/upload-com-arduino-uno",description:"Veja como usar um Arduino Uno como programador para a Franzino"},s=void 0,d={id:"Franzino/upload-com-arduino-uno",title:"Gravando a Franzino com um placa Arduino UNO",description:"Veja como usar um Arduino Uno como programador para a Franzino",source:"@site/docs/Franzino/upload-com-arduino-uno.md",sourceDirName:"Franzino",slug:"/Franzino/upload-com-arduino-uno",permalink:"/en/docs/Franzino/upload-com-arduino-uno",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Franzino/upload-com-arduino-uno.md",tags:[],version:"current",frontMatter:{id:"upload-com-arduino-uno",title:"Gravando a Franzino com um placa Arduino UNO",slug:"/Franzino/upload-com-arduino-uno",description:"Veja como usar um Arduino Uno como programador para a Franzino"},sidebar:"docs",previous:{title:"Upload via conversor USB/SERIAL",permalink:"/en/docs/Franzino/upload-conversor-serial"},next:{title:"Placa FranzBoy",permalink:"/en/docs/FranzBoy/franzboy"}},t={},c=[{value:"Configurando o avrdude ( se estiver usando o ATmega328 e n\xe3o o ATmega328P)",id:"configurando-o-avrdude--se-estiver-usando-o-atmega328-e-n\xe3o-o-atmega328p",level:2},{value:"Upload de Sketchs usando a Arduino UNO",id:"upload-de-sketchs-usando-a-arduino-uno",level:2}];function u(o){const a={admonition:"admonition",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,e.MN)(),...o.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.p,{children:"Se voc\xea n\xe3o possui um conversor USB/Serial voc\xea pode gravar a Franzino atrav\xe9s de um Arduino. Para isso vamos configurar a placa Arduino UNO com programador."}),"\n",(0,r.jsx)(a.p,{children:"Primeiro, escolha o exemplo ArduinoISP, conforme figura abaixo:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{src:n(42488).c+"",width:"625",height:"603"})}),"\n",(0,r.jsx)(a.p,{children:"Fa\xe7a o upload para a placa Arduino UNO que ser\xe1 usada como programador."}),"\n",(0,r.jsx)(a.p,{children:"Feito o UPLOAD, agora vamos as conex\xf5es do Arduino UNO na Franzino:"}),"\n",(0,r.jsxs)(a.ul,{children:["\n",(0,r.jsx)(a.li,{children:"Ligue o pino RESET da FRANZINO ao pino 10 do Arduino"}),"\n",(0,r.jsx)(a.li,{children:"Ligue o pino 11 da FRANZINO ao pino 11 do Arduino"}),"\n",(0,r.jsx)(a.li,{children:"Ligue o pino 12 da FRANZINO ao pino 12 do Arduino"}),"\n",(0,r.jsx)(a.li,{children:"Ligue o pino 13 da FRANZINO ao pino 13 do Arduino"}),"\n",(0,r.jsx)(a.li,{children:"Ligue o pino 5V da FRANZINO no pino 5V do Arduino"}),"\n",(0,r.jsx)(a.li,{children:"Ligue o pino GND da FRANZINO ao GND do Arduino"}),"\n"]}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{alt:"Liga\xe7\xe3o_arduino_franzino.png",src:n(44708).c+"",width:"1024",height:"432"})}),"\n",(0,r.jsx)(a.h2,{id:"configurando-o-avrdude--se-estiver-usando-o-atmega328-e-n\xe3o-o-atmega328p",children:"Configurando o avrdude ( se estiver usando o ATmega328 e n\xe3o o ATmega328P)"}),"\n",(0,r.jsx)(a.p,{children:"A vers\xe3o 0 da Franzino vem com o ATmega328-PU, dessa forma precisamos configurar o avrdude para gravar esse microcontrolador. Na pasta do arduino acesse:"}),"\n",(0,r.jsx)(a.p,{children:"C:\\arduino-1.6.8\\hardware\\tools\\avr\\etc, abra o arquivo avrdude.conf"}),"\n",(0,r.jsx)(a.p,{children:"Procure a assinatura do ATMEGA328P:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{src:n(8812).c+"",width:"485",height:"144"})}),"\n",(0,r.jsx)(a.p,{children:"Troque a assinatura por:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{src:n(2324).c+"",width:"390",height:"142"})}),"\n",(0,r.jsx)(a.p,{children:"Salve o arquivo."}),"\n",(0,r.jsx)(a.admonition,{type:"tip",children:(0,r.jsx)(a.p,{children:"Ap\xf3s a grava\xe7\xe3o, volte a assinatura para o valor original: signature= 0x1e 0x95 0x0F;"})}),"\n",(0,r.jsx)(a.h2,{id:"upload-de-sketchs-usando-a-arduino-uno",children:"Upload de Sketchs usando a Arduino UNO"}),"\n",(0,r.jsx)(a.p,{children:"Pronto, agora abra o programa que ser\xe1 gravado na Franzino. Para esse exemplo vamos usar o exemplo Blink, mas voc\xea poder\xe1 fazer esse procedimento para gravar suas aplica\xe7\xf5es;"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{src:n(74844).c+"",width:"687",height:"615"})}),"\n",(0,r.jsx)(a.p,{children:"Agora vamos preparar para grava\xe7\xe3o. Configure o Programador como ArduinoISP:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{src:n(96836).c+"",width:"669",height:"728"})}),"\n",(0,r.jsx)(a.p,{children:"Pronto, agora \xe9 s\xf3 fazer o UPLOAD para a Franzino:"}),"\n",(0,r.jsx)(a.p,{children:(0,r.jsx)(a.img,{src:n(83032).c+"",width:"445",height:"233"})})]})}function p(o={}){const{wrapper:a}={...(0,e.MN)(),...o.components};return a?(0,r.jsx)(a,{...o,children:(0,r.jsx)(u,{...o})}):u(o)}},95788:(o,a,n)=>{n.d(a,{MN:()=>c});var r=n(11504);function e(o,a,n){return a in o?Object.defineProperty(o,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):o[a]=n,o}function i(o,a){var n=Object.keys(o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(o);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(o,a).enumerable}))),n.push.apply(n,r)}return n}function s(o){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{};a%2?i(Object(n),!0).forEach((function(a){e(o,a,n[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(a){Object.defineProperty(o,a,Object.getOwnPropertyDescriptor(n,a))}))}return o}function d(o,a){if(null==o)return{};var n,r,e=function(o,a){if(null==o)return{};var n,r,e={},i=Object.keys(o);for(r=0;r<i.length;r++)n=i[r],a.indexOf(n)>=0||(e[n]=o[n]);return e}(o,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(o);for(r=0;r<i.length;r++)n=i[r],a.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(o,n)&&(e[n]=o[n])}return e}var t=r.createContext({}),c=function(o){var a=r.useContext(t),n=a;return o&&(n="function"==typeof o?o(a):s(s({},a),o)),n},u={inlineCode:"code",wrapper:function(o){var a=o.children;return r.createElement(r.Fragment,{},a)}},p=r.forwardRef((function(o,a){var n=o.components,e=o.mdxType,i=o.originalType,t=o.parentName,p=d(o,["components","mdxType","originalType","parentName"]),l=c(n),m=e,g=l["".concat(t,".").concat(m)]||l[m]||u[m]||i;return n?r.createElement(g,s(s({ref:a},p),{},{components:n})):r.createElement(g,s({ref:a},p))}));p.displayName="MDXCreateElement"},96836:(o,a,n)=>{n.d(a,{c:()=>r});const r=n.p+"assets/images/arduinoisp-cbcaa0a676744f41adbc8859207b0e20.png"},2324:(o,a,n)=>{n.d(a,{c:()=>r});const r=n.p+"assets/images/assinatura-328-atualizada-b7da6dca34b30968ad45021edb325724.png"},8812:(o,a,n)=>{n.d(a,{c:()=>r});const r=n.p+"assets/images/assinatura-328-8c42edd0b4bf6dae4c2421ec48f8c629.png"},42488:(o,a,n)=>{n.d(a,{c:()=>r});const r=n.p+"assets/images/exemplo-arduinoisp-23bff4a9b75ade0f2fc2c0446f805aac.png"},74844:(o,a,n)=>{n.d(a,{c:()=>r});const r=n.p+"assets/images/exemplo-blink-6137bc4974e113707a3197170b2c4223.png"},44708:(o,a,n)=>{n.d(a,{c:()=>r});const r=n.p+"assets/images/franzino-uno-a66f005fcfffc7bf3d13df4670cfbf51.png"},83032:(o,a,n)=>{n.d(a,{c:()=>r});const r=n.p+"assets/images/upload-isp-8742233fda744ea45e5a90798852386b.png"}}]); \ No newline at end of file diff --git a/en/assets/js/db00da42.592001ba.js b/en/assets/js/db00da42.592001ba.js deleted file mode 100755 index 6e0d5c500..000000000 --- a/en/assets/js/db00da42.592001ba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9267],{3905:(e,o,a)=>{a.d(o,{Zo:()=>c,kt:()=>b});var t=a(7294);function i(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function r(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,t)}return a}function n(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?r(Object(a),!0).forEach((function(o){i(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function l(e,o){if(null==e)return{};var a,t,i=function(e,o){if(null==e)return{};var a,t,i={},r=Object.keys(e);for(t=0;t<r.length;t++)a=r[t],o.indexOf(a)>=0||(i[a]=e[a]);return i}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t<r.length;t++)a=r[t],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=t.createContext({}),d=function(e){var o=t.useContext(s),a=o;return e&&(a="function"==typeof e?e(o):n(n({},o),e)),a},c=function(e){var o=d(e.components);return t.createElement(s.Provider,{value:o},e.children)},m="mdxType",p={inlineCode:"code",wrapper:function(e){var o=e.children;return t.createElement(t.Fragment,{},o)}},u=t.forwardRef((function(e,o){var a=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=d(a),u=i,b=m["".concat(s,".").concat(u)]||m[u]||p[u]||r;return a?t.createElement(b,n(n({ref:o},c),{},{components:a})):t.createElement(b,n({ref:o},c))}));function b(e,o){var a=arguments,i=o&&o.mdxType;if("string"==typeof e||i){var r=a.length,n=new Array(r);n[0]=u;var l={};for(var s in o)hasOwnProperty.call(o,s)&&(l[s]=o[s]);l.originalType=e,l[m]="string"==typeof e?e:i,n[1]=l;for(var d=2;d<r;d++)n[d]=a[d];return t.createElement.apply(null,n)}return t.createElement.apply(null,a)}u.displayName="MDXCreateElement"},5797:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>s,contentTitle:()=>n,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var t=a(3117),i=(a(7294),a(3905));const r={id:"biblioteca-laboratorioFW-ARDUNO",title:"laboratorioFW_ARDUNO",slug:"biblioteca-laboratorioFW_ARDUNO",description:"O que \xe9 a biblioteca laboratorioFW-ARDUNO"},n=void 0,l={unversionedId:"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO",id:"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO",title:"laboratorioFW_ARDUNO",description:"O que \xe9 a biblioteca laboratorioFW-ARDUNO",source:"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO.md",sourceDirName:"LaboratorioSistemasIot/bibliotecas",slug:"/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO",permalink:"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO.md",tags:[],version:"current",frontMatter:{id:"biblioteca-laboratorioFW-ARDUNO",title:"laboratorioFW_ARDUNO",slug:"biblioteca-laboratorioFW_ARDUNO",description:"O que \xe9 a biblioteca laboratorioFW-ARDUNO"},sidebar:"docs",previous:{title:"laboratorioFW",permalink:"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW"}},s={},d=[{value:"Como instalar a biblioteca",id:"como-instalar-a-biblioteca",level:2},{value:"Como usar a biblioteca",id:"como-usar-a-biblioteca",level:2},{value:"Exemplo de utiliza\xe7\xe3o:",id:"exemplo-de-utiliza\xe7\xe3o",level:2},{value:"Exemplos implementados:",id:"exemplos-implementados",level:2},{value:"testes_completos.ino",id:"testes_completosino",level:3},{value:"adivinhe_a_senha.ino",id:"adivinhe_a_senhaino",level:3},{value:"ativar_led_RGB_com_potenciometro_e_botoes.ino",id:"ativar_led_rgb_com_potenciometro_e_botoesino",level:3},{value:"ativar_servo_motor_com_botoes.ino",id:"ativar_servo_motor_com_botoesino",level:3},{value:"contagem_display_7seg.ino",id:"contagem_display_7segino",level:3},{value:"controle_led_com_ldr.ino",id:"controle_led_com_ldrino",level:3},{value:"do_re_mi_fa.ino",id:"do_re_mi_faino",level:3},{value:"genio.ino",id:"genioino",level:3},{value:"leitura_do_teclado.ino",id:"leitura_do_tecladoino",level:3},{value:"leitura_sensores_externos.ino",id:"leitura_sensores_externosino",level:3},{value:"leitura_sensores_grove.ino",id:"leitura_sensores_groveino",level:3},{value:"leitura_umidade_temperatura_oled.ino",id:"leitura_umidade_temperatura_oledino",level:3}],c={toc:d},m="wrapper";function p(e){let{components:o,...r}=e;return(0,i.kt)(m,(0,t.Z)({},c,r,{components:o,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Nesta biblioteca \xe9 poss\xedvel encontrar o mapeamento entre a pinagem da placa Arduino Uno e a codifica\xe7\xe3o dos pinos de ativa\xe7\xe3o da placa Laborat\xf3rio de Sistemas Embarcados e IoT segundo o projeto do adaptador para Arduino projeto para a placa. A biblioteca tamb\xe9m \xe9 poss\xedvel encontrar exemplos de utiliza\xe7\xe3o dos perif\xe9ricos dispon\xedveis na placa."),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/biblioteca-laboratorioFW_ARDUNO"},"Clique aqui")," para acessar o reposit\xf3rio da biblioteca no Github."),(0,i.kt)("h2",{id:"como-instalar-a-biblioteca"},"Como instalar a biblioteca"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Fa\xe7a o donwload da biblioteca em formato zip clicando em ",(0,i.kt)("strong",{parentName:"li"},"Code")," e depois em ",(0,i.kt)("strong",{parentName:"li"},"Download ZIP"))),(0,i.kt)("p",null,(0,i.kt)("img",{src:a(2467).Z,width:"528",height:"398"})),(0,i.kt)("ol",{start:2},(0,i.kt)("li",{parentName:"ol"},"Abra a IDE do Arduino"),(0,i.kt)("li",{parentName:"ol"},"V\xe1 em Sketch > Include Library > Add .ZIP Library")),(0,i.kt)("p",null,(0,i.kt)("img",{src:a(3992).Z,width:"657",height:"378"})),(0,i.kt)("ol",{start:4},(0,i.kt)("li",{parentName:"ol"},"Selecione o arquivo zip baixado e clique em ok"),(0,i.kt)("li",{parentName:"ol"},"Opcional: Procure pelos exemplos da biblioteca em File > Examples")),(0,i.kt)("h2",{id:"como-usar-a-biblioteca"},"Como usar a biblioteca"),(0,i.kt)("p",null,"Para utilizar a biblioteca basta inclu\xed-la no seu arquivo de c\xf3digo com a linha ",(0,i.kt)("inlineCode",{parentName:"p"},"#include<laboratorioFW_ARDUNO.h>"),". Depois disso, voc\xea pode utilizar os c\xf3digos dos pinos de ativa\xe7\xe3o na placa dentro do seu c\xf3digo."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Importante : Os algorismos do c\xf3digo do pino de ativa\xe7\xe3o s\xe3o separados por um caractere de ",(0,i.kt)("inlineCode",{parentName:"strong"},"_"),", ou seja o pino de ativa\xe7\xe3o C0 pode ser acessado no c\xf3digo atrav\xe9s do c\xf3digo C_0 e assim por diante.")),(0,i.kt)("h2",{id:"exemplo-de-utiliza\xe7\xe3o"},"Exemplo de utiliza\xe7\xe3o:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-c"},"#include <laborarotioFW_ARDUNO.h>\n\n#define led A_1\n\nvoid setup(){\n pinMode(led,OUTPUT);\n}\n\nvoid loop{\n digitalWrite(led,HIGH);\n delay(1000);\n digitalWrite(led,LOW);\n delay(1000);\n}\n")),(0,i.kt)("h2",{id:"exemplos-implementados"},"Exemplos implementados:"),(0,i.kt)("h3",{id:"testes_completosino"},"testes_completos.ino"),(0,i.kt)("p",null,"Neste exemplo temos todos os c\xf3digos necess\xe1rios para os testes de todos os perif\xe9ricos dispon\xedveis na placa. Este c\xf3digo \xe9 um c\xf3digo para a valida\xe7\xe3o da placa e n\xe3o para ser utilizado no cotidiano."),(0,i.kt)("h3",{id:"adivinhe_a_senhaino"},"adivinhe_a_senha.ino"),(0,i.kt)("p",null,"Neste exemplo implementamos um sistema de verifica\xe7\xe3o de senha utilizando o teclado matricial e a biblioteca ",(0,i.kt)("inlineCode",{parentName:"p"},"Keypad")," para fazer o mapeamento\ndo teclado. Neste sistema, o usu\xe1rio deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usu\xe1rio indica que terminou de digitar a senha apertando um o bot\xe3o correspondente ao caractere ",(0,i.kt)("inlineCode",{parentName:"p"},"*")," ou ",(0,i.kt)("inlineCode",{parentName:"p"},"#"),", essa sequ\xeancia \xe9 comparada com uma senha previamente definida no c\xf3digo. Um led \xe9 aceso para indicar se a senha est\xe1 correta ou n\xe3o e uma mensagem com essa informa\xe7\xe3o \xe9 impresso no monitor serial."),(0,i.kt)("h3",{id:"ativar_led_rgb_com_potenciometro_e_botoesino"},"ativar_led_RGB_com_potenciometro_e_botoes.ino"),(0,i.kt)("p",null,"Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenci\xf4metro e tr\xeas bot\xf5es. Os tr\xeas bot\xf5es s\xe3o utilizados para selecionar qual cor do LED RGB ser\xe1 controlada (vermelho, verde e azul) e a leitura anal\xf3gica do potenci\xf4metro \xe9 usada para dosar a intensidade da cor do terminal."),(0,i.kt)("h3",{id:"ativar_servo_motor_com_botoesino"},"ativar_servo_motor_com_botoes.ino"),(0,i.kt)("p",null,"Neste exemplo, utilizamos dois bot\xf5es para controlar a posi\xe7\xe3o de um servo motor. Os bot\xf5es s\xe3o associados no c\xf3digo \xe0s dire\xe7\xf5es esquerda e direita e alteram o \xe2ngulo do servo fazendo com que seja poss\xedvel moviment\xe1-lo nas duas dire\xe7\xf5es. Foi usada a biblioteca Servo."),(0,i.kt)("h3",{id:"contagem_display_7segino"},"contagem_display_7seg.ino"),(0,i.kt)("p",null,"Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos."),(0,i.kt)("h3",{id:"controle_led_com_ldrino"},"controle_led_com_ldr.ino"),(0,i.kt)("p",null,"Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura \xe9 mapeada e o valor resultante \xe9 usado para acender um LED. O exemplo tamb\xe9m conta com um bot\xe3o que controla um estado interno do programa e seleciona se a leitura ser\xe1 impressa como \xe9 lida ou com l\xf3gica complementar."),(0,i.kt)("h3",{id:"do_re_mi_faino"},"do_re_mi_fa.ino"),(0,i.kt)("p",null,"Neste exemplo uma m\xfasica \xe9 tocada pelo buzzer em conjunto com a ativa\xe7\xe3o\ndo LED RGB endere\xe7\xe1vel. O programa utiliza a biblioteca ",(0,i.kt)("inlineCode",{parentName:"p"},"Adafruit_NeoPixel")," para controlar o LED."),(0,i.kt)("h3",{id:"genioino"},"genio.ino"),(0,i.kt)("p",null,"Neste exemplo, implementamos o jogo Simon, tamb\xe9m conhecido como g\xeanio. Neste jogo, quatro LEDs s\xe3o ativados em uma sequ\xeancia gerada aleat\xf3riamente e essa sequ\xeancia \xe9 apresentada para o jogador, que deve repetir a sequ\xeancia na ordem correta pressionando os bot\xf5es correspondentes. Quando os LEDs acendem, um som correspondente \xe9 tocado no buzzer."),(0,i.kt)("h3",{id:"leitura_do_tecladoino"},"leitura_do_teclado.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e\na imprimimos essa tecla no no monitor serial. A biblioteca ",(0,i.kt)("inlineCode",{parentName:"p"},"Keypad")," \xe9 utilizada para fazer o mapeamento do teclado."),(0,i.kt)("h3",{id:"leitura_sensores_externosino"},"leitura_sensores_externos.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets\npara conectores externos da placa e imprimimos os valores lidos no monitor serial."),(0,i.kt)("h3",{id:"leitura_sensores_groveino"},"leitura_sensores_grove.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial."),(0,i.kt)("h3",{id:"leitura_umidade_temperatura_oledino"},"leitura_umidade_temperatura_oled.ino"),(0,i.kt)("p",null,"Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, s\xe3o utilizadas as bibliotecas ",(0,i.kt)("inlineCode",{parentName:"p"},"DTH")," e ",(0,i.kt)("inlineCode",{parentName:"p"},"U8glib"),"."),(0,i.kt)("admonition",{title:"Obs.",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Este projeto foi desenvolvido como parte do Trabalho de Conclus\xe3o de Curso de ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/LelePG"},"Let\xedcia Pegoraro Garcez"),".")))}p.isMDXComponent=!0},3992:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/add-zip-ce38fdcac233471a2c4ff935e87d70bd.png"},2467:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/download-zip-ba60fb48387d2208e3f003c8afe3db77.png"}}]); \ No newline at end of file diff --git a/en/assets/js/db00da42.fa1f8905.js b/en/assets/js/db00da42.fa1f8905.js new file mode 100755 index 000000000..b4c9ead8a --- /dev/null +++ b/en/assets/js/db00da42.fa1f8905.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6728],{27652:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>l,contentTitle:()=>t,default:()=>m,frontMatter:()=>n,metadata:()=>s,toc:()=>d});var i=a(17624),r=a(95788);const n={id:"biblioteca-laboratorioFW-ARDUNO",title:"laboratorioFW_ARDUNO",slug:"biblioteca-laboratorioFW_ARDUNO",description:"O que \xe9 a biblioteca laboratorioFW-ARDUNO"},t=void 0,s={id:"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO",title:"laboratorioFW_ARDUNO",description:"O que \xe9 a biblioteca laboratorioFW-ARDUNO",source:"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO.md",sourceDirName:"LaboratorioSistemasIot/bibliotecas",slug:"/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO",permalink:"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO.md",tags:[],version:"current",frontMatter:{id:"biblioteca-laboratorioFW-ARDUNO",title:"laboratorioFW_ARDUNO",slug:"biblioteca-laboratorioFW_ARDUNO",description:"O que \xe9 a biblioteca laboratorioFW-ARDUNO"},sidebar:"docs",previous:{title:"laboratorioFW",permalink:"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW"}},l={},d=[{value:"Como instalar a biblioteca",id:"como-instalar-a-biblioteca",level:2},{value:"Como usar a biblioteca",id:"como-usar-a-biblioteca",level:2},{value:"Exemplo de utiliza\xe7\xe3o:",id:"exemplo-de-utiliza\xe7\xe3o",level:2},{value:"Exemplos implementados:",id:"exemplos-implementados",level:2},{value:"testes_completos.ino",id:"testes_completosino",level:3},{value:"adivinhe_a_senha.ino",id:"adivinhe_a_senhaino",level:3},{value:"ativar_led_RGB_com_potenciometro_e_botoes.ino",id:"ativar_led_rgb_com_potenciometro_e_botoesino",level:3},{value:"ativar_servo_motor_com_botoes.ino",id:"ativar_servo_motor_com_botoesino",level:3},{value:"contagem_display_7seg.ino",id:"contagem_display_7segino",level:3},{value:"controle_led_com_ldr.ino",id:"controle_led_com_ldrino",level:3},{value:"do_re_mi_fa.ino",id:"do_re_mi_faino",level:3},{value:"genio.ino",id:"genioino",level:3},{value:"leitura_do_teclado.ino",id:"leitura_do_tecladoino",level:3},{value:"leitura_sensores_externos.ino",id:"leitura_sensores_externosino",level:3},{value:"leitura_sensores_grove.ino",id:"leitura_sensores_groveino",level:3},{value:"leitura_umidade_temperatura_oled.ino",id:"leitura_umidade_temperatura_oledino",level:3}];function c(e){const o={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,r.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.p,{children:"Nesta biblioteca \xe9 poss\xedvel encontrar o mapeamento entre a pinagem da placa Arduino Uno e a codifica\xe7\xe3o dos pinos de ativa\xe7\xe3o da placa Laborat\xf3rio de Sistemas Embarcados e IoT segundo o projeto do adaptador para Arduino projeto para a placa. A biblioteca tamb\xe9m \xe9 poss\xedvel encontrar exemplos de utiliza\xe7\xe3o dos perif\xe9ricos dispon\xedveis na placa."}),"\n",(0,i.jsxs)(o.p,{children:[(0,i.jsx)(o.a,{href:"https://github.com/Franzininho/biblioteca-laboratorioFW_ARDUNO",children:"Clique aqui"})," para acessar o reposit\xf3rio da biblioteca no Github."]}),"\n",(0,i.jsx)(o.h2,{id:"como-instalar-a-biblioteca",children:"Como instalar a biblioteca"}),"\n",(0,i.jsxs)(o.ol,{children:["\n",(0,i.jsxs)(o.li,{children:["Fa\xe7a o donwload da biblioteca em formato zip clicando em ",(0,i.jsx)(o.strong,{children:"Code"})," e depois em ",(0,i.jsx)(o.strong,{children:"Download ZIP"})]}),"\n"]}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{src:a(68160).c+"",width:"528",height:"398"})}),"\n",(0,i.jsxs)(o.ol,{start:"2",children:["\n",(0,i.jsx)(o.li,{children:"Abra a IDE do Arduino"}),"\n",(0,i.jsx)(o.li,{children:"V\xe1 em Sketch > Include Library > Add .ZIP Library"}),"\n"]}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsx)(o.img,{src:a(5056).c+"",width:"657",height:"378"})}),"\n",(0,i.jsxs)(o.ol,{start:"4",children:["\n",(0,i.jsx)(o.li,{children:"Selecione o arquivo zip baixado e clique em ok"}),"\n",(0,i.jsx)(o.li,{children:"Opcional: Procure pelos exemplos da biblioteca em File > Examples"}),"\n"]}),"\n",(0,i.jsx)(o.h2,{id:"como-usar-a-biblioteca",children:"Como usar a biblioteca"}),"\n",(0,i.jsxs)(o.p,{children:["Para utilizar a biblioteca basta inclu\xed-la no seu arquivo de c\xf3digo com a linha ",(0,i.jsx)(o.code,{children:"#include<laboratorioFW_ARDUNO.h>"}),". Depois disso, voc\xea pode utilizar os c\xf3digos dos pinos de ativa\xe7\xe3o na placa dentro do seu c\xf3digo."]}),"\n",(0,i.jsx)(o.p,{children:(0,i.jsxs)(o.strong,{children:["Importante : Os algorismos do c\xf3digo do pino de ativa\xe7\xe3o s\xe3o separados por um caractere de ",(0,i.jsx)(o.code,{children:"_"}),", ou seja o pino de ativa\xe7\xe3o C0 pode ser acessado no c\xf3digo atrav\xe9s do c\xf3digo C_0 e assim por diante."]})}),"\n",(0,i.jsx)(o.h2,{id:"exemplo-de-utiliza\xe7\xe3o",children:"Exemplo de utiliza\xe7\xe3o:"}),"\n",(0,i.jsx)(o.pre,{children:(0,i.jsx)(o.code,{className:"language-c",children:"#include <laborarotioFW_ARDUNO.h>\n\n#define led A_1\n\nvoid setup(){\n pinMode(led,OUTPUT);\n}\n\nvoid loop{\n digitalWrite(led,HIGH);\n delay(1000);\n digitalWrite(led,LOW);\n delay(1000);\n}\n"})}),"\n",(0,i.jsx)(o.h2,{id:"exemplos-implementados",children:"Exemplos implementados:"}),"\n",(0,i.jsx)(o.h3,{id:"testes_completosino",children:"testes_completos.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo temos todos os c\xf3digos necess\xe1rios para os testes de todos os perif\xe9ricos dispon\xedveis na placa. Este c\xf3digo \xe9 um c\xf3digo para a valida\xe7\xe3o da placa e n\xe3o para ser utilizado no cotidiano."}),"\n",(0,i.jsx)(o.h3,{id:"adivinhe_a_senhaino",children:"adivinhe_a_senha.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo implementamos um sistema de verifica\xe7\xe3o de senha utilizando o teclado matricial e a biblioteca ",(0,i.jsx)(o.code,{children:"Keypad"})," para fazer o mapeamento\ndo teclado. Neste sistema, o usu\xe1rio deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usu\xe1rio indica que terminou de digitar a senha apertando um o bot\xe3o correspondente ao caractere ",(0,i.jsx)(o.code,{children:"*"})," ou ",(0,i.jsx)(o.code,{children:"#"}),", essa sequ\xeancia \xe9 comparada com uma senha previamente definida no c\xf3digo. Um led \xe9 aceso para indicar se a senha est\xe1 correta ou n\xe3o e uma mensagem com essa informa\xe7\xe3o \xe9 impresso no monitor serial."]}),"\n",(0,i.jsx)(o.h3,{id:"ativar_led_rgb_com_potenciometro_e_botoesino",children:"ativar_led_RGB_com_potenciometro_e_botoes.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenci\xf4metro e tr\xeas bot\xf5es. Os tr\xeas bot\xf5es s\xe3o utilizados para selecionar qual cor do LED RGB ser\xe1 controlada (vermelho, verde e azul) e a leitura anal\xf3gica do potenci\xf4metro \xe9 usada para dosar a intensidade da cor do terminal."}),"\n",(0,i.jsx)(o.h3,{id:"ativar_servo_motor_com_botoesino",children:"ativar_servo_motor_com_botoes.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, utilizamos dois bot\xf5es para controlar a posi\xe7\xe3o de um servo motor. Os bot\xf5es s\xe3o associados no c\xf3digo \xe0s dire\xe7\xf5es esquerda e direita e alteram o \xe2ngulo do servo fazendo com que seja poss\xedvel moviment\xe1-lo nas duas dire\xe7\xf5es. Foi usada a biblioteca Servo."}),"\n",(0,i.jsx)(o.h3,{id:"contagem_display_7segino",children:"contagem_display_7seg.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos."}),"\n",(0,i.jsx)(o.h3,{id:"controle_led_com_ldrino",children:"controle_led_com_ldr.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura \xe9 mapeada e o valor resultante \xe9 usado para acender um LED. O exemplo tamb\xe9m conta com um bot\xe3o que controla um estado interno do programa e seleciona se a leitura ser\xe1 impressa como \xe9 lida ou com l\xf3gica complementar."}),"\n",(0,i.jsx)(o.h3,{id:"do_re_mi_faino",children:"do_re_mi_fa.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo uma m\xfasica \xe9 tocada pelo buzzer em conjunto com a ativa\xe7\xe3o\ndo LED RGB endere\xe7\xe1vel. O programa utiliza a biblioteca ",(0,i.jsx)(o.code,{children:"Adafruit_NeoPixel"})," para controlar o LED."]}),"\n",(0,i.jsx)(o.h3,{id:"genioino",children:"genio.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo, implementamos o jogo Simon, tamb\xe9m conhecido como g\xeanio. Neste jogo, quatro LEDs s\xe3o ativados em uma sequ\xeancia gerada aleat\xf3riamente e essa sequ\xeancia \xe9 apresentada para o jogador, que deve repetir a sequ\xeancia na ordem correta pressionando os bot\xf5es correspondentes. Quando os LEDs acendem, um som correspondente \xe9 tocado no buzzer."}),"\n",(0,i.jsx)(o.h3,{id:"leitura_do_tecladoino",children:"leitura_do_teclado.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e\na imprimimos essa tecla no no monitor serial. A biblioteca ",(0,i.jsx)(o.code,{children:"Keypad"})," \xe9 utilizada para fazer o mapeamento do teclado."]}),"\n",(0,i.jsx)(o.h3,{id:"leitura_sensores_externosino",children:"leitura_sensores_externos.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets\npara conectores externos da placa e imprimimos os valores lidos no monitor serial."}),"\n",(0,i.jsx)(o.h3,{id:"leitura_sensores_groveino",children:"leitura_sensores_grove.ino"}),"\n",(0,i.jsx)(o.p,{children:"Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial."}),"\n",(0,i.jsx)(o.h3,{id:"leitura_umidade_temperatura_oledino",children:"leitura_umidade_temperatura_oled.ino"}),"\n",(0,i.jsxs)(o.p,{children:["Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, s\xe3o utilizadas as bibliotecas ",(0,i.jsx)(o.code,{children:"DTH"})," e ",(0,i.jsx)(o.code,{children:"U8glib"}),"."]}),"\n",(0,i.jsx)(o.admonition,{title:"Obs.",type:"info",children:(0,i.jsxs)(o.p,{children:["Este projeto foi desenvolvido como parte do Trabalho de Conclus\xe3o de Curso de ",(0,i.jsx)(o.a,{href:"https://github.com/LelePG",children:"Let\xedcia Pegoraro Garcez"}),"."]})})]})}function m(e={}){const{wrapper:o}={...(0,r.MN)(),...e.components};return o?(0,i.jsx)(o,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},95788:(e,o,a)=>{a.d(o,{MN:()=>d});var i=a(11504);function r(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function n(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);o&&(i=i.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,i)}return a}function t(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?n(Object(a),!0).forEach((function(o){r(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function s(e,o){if(null==e)return{};var a,i,r=function(e,o){if(null==e)return{};var a,i,r={},n=Object.keys(e);for(i=0;i<n.length;i++)a=n[i],o.indexOf(a)>=0||(r[a]=e[a]);return r}(e,o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i<n.length;i++)a=n[i],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=i.createContext({}),d=function(e){var o=i.useContext(l),a=o;return e&&(a="function"==typeof e?e(o):t(t({},o),e)),a},c={inlineCode:"code",wrapper:function(e){var o=e.children;return i.createElement(i.Fragment,{},o)}},m=i.forwardRef((function(e,o){var a=e.components,r=e.mdxType,n=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),p=d(a),u=r,b=p["".concat(l,".").concat(u)]||p[u]||c[u]||n;return a?i.createElement(b,t(t({ref:o},m),{},{components:a})):i.createElement(b,t({ref:o},m))}));m.displayName="MDXCreateElement"},5056:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/add-zip-ce38fdcac233471a2c4ff935e87d70bd.png"},68160:(e,o,a)=>{a.d(o,{c:()=>i});const i=a.p+"assets/images/download-zip-ba60fb48387d2208e3f003c8afe3db77.png"}}]); \ No newline at end of file diff --git a/en/assets/js/dcf87b66.1facdaa3.js b/en/assets/js/dcf87b66.1facdaa3.js deleted file mode 100755 index 56297ab19..000000000 --- a/en/assets/js/dcf87b66.1facdaa3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1375],{3905:(e,o,a)=>{a.d(o,{Zo:()=>p,kt:()=>g});var i=a(7294);function r(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function n(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);o&&(i=i.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,i)}return a}function s(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?n(Object(a),!0).forEach((function(o){r(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function t(e,o){if(null==e)return{};var a,i,r=function(e,o){if(null==e)return{};var a,i,r={},n=Object.keys(e);for(i=0;i<n.length;i++)a=n[i],o.indexOf(a)>=0||(r[a]=e[a]);return r}(e,o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(i=0;i<n.length;i++)a=n[i],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=i.createContext({}),d=function(e){var o=i.useContext(l),a=o;return e&&(a="function"==typeof e?e(o):s(s({},o),e)),a},p=function(e){var o=d(e.components);return i.createElement(l.Provider,{value:o},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var o=e.children;return i.createElement(i.Fragment,{},o)}},m=i.forwardRef((function(e,o){var a=e.components,r=e.mdxType,n=e.originalType,l=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),u=d(a),m=r,g=u["".concat(l,".").concat(m)]||u[m]||c[m]||n;return a?i.createElement(g,s(s({ref:o},p),{},{components:a})):i.createElement(g,s({ref:o},p))}));function g(e,o){var a=arguments,r=o&&o.mdxType;if("string"==typeof e||r){var n=a.length,s=new Array(n);s[0]=m;var t={};for(var l in o)hasOwnProperty.call(o,l)&&(t[l]=o[l]);t.originalType=e,t[u]="string"==typeof e?e:r,s[1]=t;for(var d=2;d<n;d++)s[d]=a[d];return i.createElement.apply(null,s)}return i.createElement.apply(null,a)}m.displayName="MDXCreateElement"},229:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>n,metadata:()=>t,toc:()=>d});var i=a(3117),r=(a(7294),a(3905));const n={id:"franzininho-wifi-espidf-01",title:"Hello World! ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",description:"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI",author:"Halysson Junior"},s=void 0,t={unversionedId:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01",id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01",title:"Hello World! ESP-IDF",description:"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x01-Hello-world.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x01-Hello-world.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-01",title:"Hello World! ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",description:"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI",author:"Halysson Junior"},sidebar:"docs",previous:{title:"Primeiros Passos com ESP-IDF",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos"},next:{title:"Entrada digital",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital"}},l={},d=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Abaixo segue o nosso circuito do nosso projeto",id:"abaixo-segue-o-nosso-circuito-do-nosso-projeto",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],p={toc:d},u="wrapper";function c(e){let{components:o,...n}=e;return(0,r.kt)(u,(0,i.Z)({},p,n,{components:o,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"O artigo proposto dar\xe1 in\xedcio a uma s\xe9rie de projetos utilizando o framework oficial da Espressif, o IDF. O objetivo deste artigo \xe9 apresentar um exemplo de projeto que sirva como base para aqueles que est\xe3o dando seus primeiros passos na fam\xedlia de microcontroladores ESP32."),(0,r.kt)("p",null,"Como \xe9 de praxe na programa\xe7\xe3o sempre que iniciamos uma nova linguagem ou quando aprendemos sobre um novo processador o primeiro projeto a ser criado \xe9 o \u201cOl\xe1 Mundo\u201c, caso contr\xe1rio teremos um eterno azar, ent\xe3o o que acha de come\xe7armos a estudar e apresentar nosso projeto ao Mundo?"),(0,r.kt)("p",null,"Ao final desse exemplo voc\xea saber\xe1 como \xe9 a estrutura b\xe1sica de um programa no ESP-IDF e estar\xe1 pronto para os pr\xf3ximos passos."),(0,r.kt)("h2",{id:"recursos-necess\xe1rios"},"Recursos Necess\xe1rios"),(0,r.kt)("p",null,"Para esse exemplo voc\xea precisar\xe1 dos seguintes recursos:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Placa Franzininho WiFi;"),(0,r.kt)("li",{parentName:"ul"},"Protoboard;"),(0,r.kt)("li",{parentName:"ul"},"LED;"),(0,r.kt)("li",{parentName:"ul"},"Resistor 220R ou 150R;"),(0,r.kt)("li",{parentName:"ul"},"Computador com ESP-IDF instalado e configurado")),(0,r.kt)("h2",{id:"desenvolvimento"},"Desenvolvimento"),(0,r.kt)("p",null,"Nesse projeto foi utilizado a Franzininho WiFi, uma placa de desenvolvimento baseada no m\xf3dulo ESP 32-S2 (Wroom ou Wrover), o qual faz parte de uma iniciativa open hardware para ensinar sobre programa\xe7\xe3o e eletr\xf4nica aliando habilidades na soldagem de componentes eletr\xf4nicos."),(0,r.kt)("p",null,"Como mencionado, vamos fazer o Ol\xe1 Mundo (Hello, World!), um programa base que tem como objetivo apresentar os recursos prim\xe1rios do processador em estudo. Nesse primeiro projeto vamos explorar as GPIOs, configuradas como sa\xedda digital, conectada a um LED externo para ligar e desligar numa frequ\xeancia de 1 Hertz (1 segundo) e enviar alguns dados de sa\xedda para serem mostrados no monitor do editor, para aqueles que est\xe3o migrando do Arduino j\xe1 est\xe3o familiarizados com esse exemplo, o famoso \u201cBlink\u201d."),(0,r.kt)("h3",{id:"esquem\xe1tico"},"Esquem\xe1tico"),(0,r.kt)("p",null,"Antes de come\xe7armos a escrever as primeiras linhas de c\xf3digo vamos realizar a montagem do circuito, vale ressaltar que na placa Franzininho WiFi h\xe1 um LED RGB on board endere\xe7\xe1vel, contudo ser\xe1 utilizado um LED externo, conectado a GPIO 2 ,para o primeiro projeto, vamos nos familiarizarmos com os comandos b\xe1sicos. Abaixo segue o esquem\xe1tico proposto:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Hello World_circuito",src:a(7694).Z,width:"1600",height:"632"})),(0,r.kt)("h3",{id:"c\xf3digo"},"C\xf3digo"),(0,r.kt)("p",null,"O nosso c\xf3digo possui uma estrutura bem simples e n\xe3o \xe9 necess\xe1rio acrescentar nenhuma biblioteca. Ao criar um novo projeto no IDF j\xe1 temos arquivos configurados e prontos para programa\xe7\xe3o do dispositivo, desta forma digite e comente as linhas do seguinte c\xf3digo no arquivo main.c :"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-c"},'/*\n Descri\xe7\xe3o: Exemplo que mostra Hello World utilizando quatro modalidade de sa\xedda de dados por meio do\n terminal e interagindo com um LED externo para indica\xe7\xe3o de estado.\n\n Autor: Halysson Junior\n Data : 28/03/21\n*/\n\n\n// Arquivos de cabe\xe7alho\n#include <stdio.h>\n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "esp_system.h"\n#include "driver/gpio.h"\n\n\n// Defini\xe7\xe3o de pino\n\n#define LED 2\n\n// Vari\xe1vel Global\nchar status[2] = {\'L\',\'H\'}; // Caracter para indicar estado do LED H- HIGH e L - LOW\n\n\nvoid app_main(void) // Main\n{\n\n gpio_pad_select_gpio(LED);// Mapeamento do pino LED\n gpio_set_direction(LED,GPIO_MODE_OUTPUT); // Defini\xe7\xe3o\n\n printf("Exemplo - Hello World \\n");// Mostra informa\xe7\xe3o no terminal\n\n\n //Vari\xe1veis Local\n bool i = 0 ; // Varia o estado l\xf3gico do LED\n\n for (;;) {// Loop\n\n i= i^1; // Opera\xe7\xe3o l\xf3gica XOR para alternar o estado do LED\n gpio_set_level(LED,i); // Envia os n\xedveis l\xf3gicos 1 ou 0\n\n printf("Hello World, i am Franzininho WiFi ----\x3e LED status : %c \\n", status[i]);\n\n vTaskDelay(1000 / portTICK_PERIOD_MS); // Rotina de Delay de 1 segundo\n fflush(stdout); // Descarrega os buffers de sa\xedda de dados \n\n }// end Loop\n\n\n}// end Main\n')),(0,r.kt)("p",null,"Voc\xea encontra o projeto completo na documenta\xe7\xe3o da Franzininho: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/Hello_World"},"Hello_World")),(0,r.kt)("p",null,"Caso ainda n\xe3o tenha instalado e configurado o IDF no seu computador ou tem d\xfavidas sobre as ferramentas, acesse o ",(0,r.kt)("a",{parentName:"p",href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi-espidf/primeiros-passos"},"tutorial de instala\xe7\xe3o")),(0,r.kt)("h3",{id:"compila\xe7\xe3o"},"Compila\xe7\xe3o"),(0,r.kt)("p",null,"Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o set target para ESP 32-S2."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"idf.py set-target esp32s2")),(0,r.kt)("p",null,"Ao final da compila\xe7\xe3o o resultado final deve ser semelhante \xe0 imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu c\xf3digo."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"resultado da compila\xe7\xe3o",src:a(9970).Z,width:"1600",height:"311"})),(0,r.kt)("p",null,"Agora vamos enviar o c\xf3digo fonte para nossa placa, no editor vamos pressionar o \xedcone abaixo e aguarde alguns segundos para assim dar in\xedcio ao programa \u201cOl\xe1 Mundo\u201d."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Gravando",src:a(6521).Z,width:"215",height:"69"})),(0,r.kt)("p",null,"Para vermos a sa\xedda de dados do nosso projeto clique no \xedcone apresentado abaixo."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Monitor",src:a(6145).Z,width:"215",height:"70"})),(0,r.kt)("h3",{id:"resultados"},"Resultados"),(0,r.kt)("p",null,"Com a finaliza\xe7\xe3o do projeto o leitor observou que utilizamos uma estrutura\xe7\xe3o da linguagem C (main(), printf, fflush()), la\xe7os de repeti\xe7\xe3o (for()) e alguns tipos de vari\xe1veis primitivas (int e char) para formar nosso c\xf3digo . Aliados a isso utilizamos labels nativas do IDF para definir os pinos de entrada ou sa\xedda digital (GPIO_MODE_OUTPUT )."),(0,r.kt)("p",null,"Abaixo segue o resultado final dos dados de sa\xedda :"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"monitor",src:a(7537).Z,width:"1056",height:"204"})),(0,r.kt)("h2",{id:"abaixo-segue-o-nosso-circuito-do-nosso-projeto"},"Abaixo segue o nosso circuito do nosso projeto"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Monitor",src:a(4116).Z,width:"1024",height:"252"})),(0,r.kt)("p",null,"Portanto, a partir deste projeto \xe9 poss\xedvel aplicar a l\xf3gica estruturada no c\xf3digo em diversos outros tipos de sensores, por exemplo : sensor de vibra\xe7\xe3o, sensor infravermelho, sensor de som e outros sensores digitais comumente comercializados."),(0,r.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,r.kt)("p",null,"Nesse projeto apresentamos os conceitos b\xe1sicos para aqueles que desejam dar o pontap\xe9 inicial nos estudos sobre o IDF, contudo aconselhamos aos leitores a modificar o c\xf3digo no intuito de revisar a linguagem C e fixar algumas fun\xe7\xf5es nativas, os quais ser\xe3o normalmente utilizadas em outros projetos tamb\xe9m n\xe3o limitar-se apenas aos perif\xe9ricos GPIOs do microcontrolador, pois o ESP32-S2 possui diversos recursos tanto em hardware quanto em software. Desta forma o artigo servir\xe1 de acervo aos leitores para relembrar conceitos espec\xedficos e aprimorar os que j\xe1 possuem."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Autor"),(0,r.kt)("th",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"th",href:"https://github.com/halyssonJr"},"Halysson Junior")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data:"),(0,r.kt)("td",{parentName:"tr",align:null},"13/05/2021")))))}c.isMDXComponent=!0},7694:(e,o,a)=>{a.d(o,{Z:()=>i});const i=a.p+"assets/images/01-esquematico-121114b8161dd3e6287dcf53cbef5789.jpg"},9970:(e,o,a)=>{a.d(o,{Z:()=>i});const i=a.p+"assets/images/02-compilacao-8819c8dee549eaa15aa22bdf14b9b11b.png"},6521:(e,o,a)=>{a.d(o,{Z:()=>i});const i="data:image/png;base64,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"},6145:(e,o,a)=>{a.d(o,{Z:()=>i});const i="data:image/png;base64,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"},7537:(e,o,a)=>{a.d(o,{Z:()=>i});const i=a.p+"assets/images/05-monitor-715bb898fc09463329bc8c14844b8509.png"},4116:(e,o,a)=>{a.d(o,{Z:()=>i});const i=a.p+"assets/images/06-circuito-montado-58b7b31688a38dba89adcadf4bbdba30.png"}}]); \ No newline at end of file diff --git a/en/assets/js/dcf87b66.eb5d1b2f.js b/en/assets/js/dcf87b66.eb5d1b2f.js new file mode 100755 index 000000000..f6f253b4d --- /dev/null +++ b/en/assets/js/dcf87b66.eb5d1b2f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4298],{40620:(e,o,i)=>{i.r(o),i.d(o,{assets:()=>d,contentTitle:()=>n,default:()=>p,frontMatter:()=>r,metadata:()=>t,toc:()=>l});var a=i(17624),s=i(95788);const r={id:"franzininho-wifi-espidf-01",title:"Hello World! ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",description:"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI",author:"Halysson Junior"},n=void 0,t={id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01",title:"Hello World! ESP-IDF",description:"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x01-Hello-world.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x01-Hello-world.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-01",title:"Hello World! ESP-IDF",slug:"/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",description:"Este texto tem como objetivo fazer o primeiro programa no ESP-IDF para a Franzininho WIFI",author:"Halysson Junior"},sidebar:"docs",previous:{title:"Primeiros Passos com ESP-IDF",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos"},next:{title:"Entrada digital",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital"}},d={},l=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:3},{value:"Abaixo segue o nosso circuito do nosso projeto",id:"abaixo-segue-o-nosso-circuito-do-nosso-projeto",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function c(e){const o={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.p,{children:"O artigo proposto dar\xe1 in\xedcio a uma s\xe9rie de projetos utilizando o framework oficial da Espressif, o IDF. O objetivo deste artigo \xe9 apresentar um exemplo de projeto que sirva como base para aqueles que est\xe3o dando seus primeiros passos na fam\xedlia de microcontroladores ESP32."}),"\n",(0,a.jsx)(o.p,{children:"Como \xe9 de praxe na programa\xe7\xe3o sempre que iniciamos uma nova linguagem ou quando aprendemos sobre um novo processador o primeiro projeto a ser criado \xe9 o \u201cOl\xe1 Mundo\u201c, caso contr\xe1rio teremos um eterno azar, ent\xe3o o que acha de come\xe7armos a estudar e apresentar nosso projeto ao Mundo?"}),"\n",(0,a.jsx)(o.p,{children:"Ao final desse exemplo voc\xea saber\xe1 como \xe9 a estrutura b\xe1sica de um programa no ESP-IDF e estar\xe1 pronto para os pr\xf3ximos passos."}),"\n",(0,a.jsx)(o.h2,{id:"recursos-necess\xe1rios",children:"Recursos Necess\xe1rios"}),"\n",(0,a.jsx)(o.p,{children:"Para esse exemplo voc\xea precisar\xe1 dos seguintes recursos:"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"Placa Franzininho WiFi;"}),"\n",(0,a.jsx)(o.li,{children:"Protoboard;"}),"\n",(0,a.jsx)(o.li,{children:"LED;"}),"\n",(0,a.jsx)(o.li,{children:"Resistor 220R ou 150R;"}),"\n",(0,a.jsx)(o.li,{children:"Computador com ESP-IDF instalado e configurado"}),"\n"]}),"\n",(0,a.jsx)(o.h2,{id:"desenvolvimento",children:"Desenvolvimento"}),"\n",(0,a.jsx)(o.p,{children:"Nesse projeto foi utilizado a Franzininho WiFi, uma placa de desenvolvimento baseada no m\xf3dulo ESP 32-S2 (Wroom ou Wrover), o qual faz parte de uma iniciativa open hardware para ensinar sobre programa\xe7\xe3o e eletr\xf4nica aliando habilidades na soldagem de componentes eletr\xf4nicos."}),"\n",(0,a.jsx)(o.p,{children:"Como mencionado, vamos fazer o Ol\xe1 Mundo (Hello, World!), um programa base que tem como objetivo apresentar os recursos prim\xe1rios do processador em estudo. Nesse primeiro projeto vamos explorar as GPIOs, configuradas como sa\xedda digital, conectada a um LED externo para ligar e desligar numa frequ\xeancia de 1 Hertz (1 segundo) e enviar alguns dados de sa\xedda para serem mostrados no monitor do editor, para aqueles que est\xe3o migrando do Arduino j\xe1 est\xe3o familiarizados com esse exemplo, o famoso \u201cBlink\u201d."}),"\n",(0,a.jsx)(o.h3,{id:"esquem\xe1tico",children:"Esquem\xe1tico"}),"\n",(0,a.jsx)(o.p,{children:"Antes de come\xe7armos a escrever as primeiras linhas de c\xf3digo vamos realizar a montagem do circuito, vale ressaltar que na placa Franzininho WiFi h\xe1 um LED RGB on board endere\xe7\xe1vel, contudo ser\xe1 utilizado um LED externo, conectado a GPIO 2 ,para o primeiro projeto, vamos nos familiarizarmos com os comandos b\xe1sicos. Abaixo segue o esquem\xe1tico proposto:"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Hello World_circuito",src:i(43988).c+"",width:"1600",height:"632"})}),"\n",(0,a.jsx)(o.h3,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,a.jsx)(o.p,{children:"O nosso c\xf3digo possui uma estrutura bem simples e n\xe3o \xe9 necess\xe1rio acrescentar nenhuma biblioteca. Ao criar um novo projeto no IDF j\xe1 temos arquivos configurados e prontos para programa\xe7\xe3o do dispositivo, desta forma digite e comente as linhas do seguinte c\xf3digo no arquivo main.c :"}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-c",children:'/*\n Descri\xe7\xe3o: Exemplo que mostra Hello World utilizando quatro modalidade de sa\xedda de dados por meio do\n terminal e interagindo com um LED externo para indica\xe7\xe3o de estado.\n\n Autor: Halysson Junior\n Data : 28/03/21\n*/\n\n\n// Arquivos de cabe\xe7alho\n#include <stdio.h>\n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "esp_system.h"\n#include "driver/gpio.h"\n\n\n// Defini\xe7\xe3o de pino\n\n#define LED 2\n\n// Vari\xe1vel Global\nchar status[2] = {\'L\',\'H\'}; // Caracter para indicar estado do LED H- HIGH e L - LOW\n\n\nvoid app_main(void) // Main\n{\n\n gpio_pad_select_gpio(LED);// Mapeamento do pino LED\n gpio_set_direction(LED,GPIO_MODE_OUTPUT); // Defini\xe7\xe3o\n\n printf("Exemplo - Hello World \\n");// Mostra informa\xe7\xe3o no terminal\n\n\n //Vari\xe1veis Local\n bool i = 0 ; // Varia o estado l\xf3gico do LED\n\n for (;;) {// Loop\n\n i= i^1; // Opera\xe7\xe3o l\xf3gica XOR para alternar o estado do LED\n gpio_set_level(LED,i); // Envia os n\xedveis l\xf3gicos 1 ou 0\n\n printf("Hello World, i am Franzininho WiFi ----\x3e LED status : %c \\n", status[i]);\n\n vTaskDelay(1000 / portTICK_PERIOD_MS); // Rotina de Delay de 1 segundo\n fflush(stdout); // Descarrega os buffers de sa\xedda de dados \n\n }// end Loop\n\n\n}// end Main\n'})}),"\n",(0,a.jsxs)(o.p,{children:["Voc\xea encontra o projeto completo na documenta\xe7\xe3o da Franzininho: ",(0,a.jsx)(o.a,{href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/Hello_World",children:"Hello_World"})]}),"\n",(0,a.jsxs)(o.p,{children:["Caso ainda n\xe3o tenha instalado e configurado o IDF no seu computador ou tem d\xfavidas sobre as ferramentas, acesse o ",(0,a.jsx)(o.a,{href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi-espidf/primeiros-passos",children:"tutorial de instala\xe7\xe3o"})]}),"\n",(0,a.jsx)(o.h3,{id:"compila\xe7\xe3o",children:"Compila\xe7\xe3o"}),"\n",(0,a.jsx)(o.p,{children:"Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o set target para ESP 32-S2."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.code,{children:"idf.py set-target esp32s2"})}),"\n",(0,a.jsx)(o.p,{children:"Ao final da compila\xe7\xe3o o resultado final deve ser semelhante \xe0 imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu c\xf3digo."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"resultado da compila\xe7\xe3o",src:i(1432).c+"",width:"1600",height:"311"})}),"\n",(0,a.jsx)(o.p,{children:"Agora vamos enviar o c\xf3digo fonte para nossa placa, no editor vamos pressionar o \xedcone abaixo e aguarde alguns segundos para assim dar in\xedcio ao programa \u201cOl\xe1 Mundo\u201d."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Gravando",src:i(10840).c+"",width:"215",height:"69"})}),"\n",(0,a.jsx)(o.p,{children:"Para vermos a sa\xedda de dados do nosso projeto clique no \xedcone apresentado abaixo."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Monitor",src:i(76420).c+"",width:"215",height:"70"})}),"\n",(0,a.jsx)(o.h3,{id:"resultados",children:"Resultados"}),"\n",(0,a.jsx)(o.p,{children:"Com a finaliza\xe7\xe3o do projeto o leitor observou que utilizamos uma estrutura\xe7\xe3o da linguagem C (main(), printf, fflush()), la\xe7os de repeti\xe7\xe3o (for()) e alguns tipos de vari\xe1veis primitivas (int e char) para formar nosso c\xf3digo . Aliados a isso utilizamos labels nativas do IDF para definir os pinos de entrada ou sa\xedda digital (GPIO_MODE_OUTPUT )."}),"\n",(0,a.jsx)(o.p,{children:"Abaixo segue o resultado final dos dados de sa\xedda :"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"monitor",src:i(27232).c+"",width:"1056",height:"204"})}),"\n",(0,a.jsx)(o.h2,{id:"abaixo-segue-o-nosso-circuito-do-nosso-projeto",children:"Abaixo segue o nosso circuito do nosso projeto"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Monitor",src:i(22444).c+"",width:"1024",height:"252"})}),"\n",(0,a.jsx)(o.p,{children:"Portanto, a partir deste projeto \xe9 poss\xedvel aplicar a l\xf3gica estruturada no c\xf3digo em diversos outros tipos de sensores, por exemplo : sensor de vibra\xe7\xe3o, sensor infravermelho, sensor de som e outros sensores digitais comumente comercializados."}),"\n",(0,a.jsx)(o.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,a.jsx)(o.p,{children:"Nesse projeto apresentamos os conceitos b\xe1sicos para aqueles que desejam dar o pontap\xe9 inicial nos estudos sobre o IDF, contudo aconselhamos aos leitores a modificar o c\xf3digo no intuito de revisar a linguagem C e fixar algumas fun\xe7\xf5es nativas, os quais ser\xe3o normalmente utilizadas em outros projetos tamb\xe9m n\xe3o limitar-se apenas aos perif\xe9ricos GPIOs do microcontrolador, pois o ESP32-S2 possui diversos recursos tanto em hardware quanto em software. Desta forma o artigo servir\xe1 de acervo aos leitores para relembrar conceitos espec\xedficos e aprimorar os que j\xe1 possuem."}),"\n",(0,a.jsxs)(o.table,{children:[(0,a.jsx)(o.thead,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.th,{children:"Autor"}),(0,a.jsx)(o.th,{children:(0,a.jsx)(o.a,{href:"https://github.com/halyssonJr",children:"Halysson Junior"})})]})}),(0,a.jsx)(o.tbody,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"Data:"}),(0,a.jsx)(o.td,{children:"13/05/2021"})]})})]})]})}function p(e={}){const{wrapper:o}={...(0,s.MN)(),...e.components};return o?(0,a.jsx)(o,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},95788:(e,o,i)=>{i.d(o,{MN:()=>l});var a=i(11504);function s(e,o,i){return o in e?Object.defineProperty(e,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[o]=i,e}function r(e,o){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);o&&(a=a.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),i.push.apply(i,a)}return i}function n(e){for(var o=1;o<arguments.length;o++){var i=null!=arguments[o]?arguments[o]:{};o%2?r(Object(i),!0).forEach((function(o){s(e,o,i[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):r(Object(i)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(i,o))}))}return e}function t(e,o){if(null==e)return{};var i,a,s=function(e,o){if(null==e)return{};var i,a,s={},r=Object.keys(e);for(a=0;a<r.length;a++)i=r[a],o.indexOf(i)>=0||(s[i]=e[i]);return s}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)i=r[a],o.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(s[i]=e[i])}return s}var d=a.createContext({}),l=function(e){var o=a.useContext(d),i=o;return e&&(i="function"==typeof e?e(o):n(n({},o),e)),i},c={inlineCode:"code",wrapper:function(e){var o=e.children;return a.createElement(a.Fragment,{},o)}},p=a.forwardRef((function(e,o){var i=e.components,s=e.mdxType,r=e.originalType,d=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),m=l(i),u=s,h=m["".concat(d,".").concat(u)]||m[u]||c[u]||r;return i?a.createElement(h,n(n({ref:o},p),{},{components:i})):a.createElement(h,n({ref:o},p))}));p.displayName="MDXCreateElement"},43988:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/01-esquematico-121114b8161dd3e6287dcf53cbef5789.jpg"},1432:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/02-compilacao-8819c8dee549eaa15aa22bdf14b9b11b.png"},10840:(e,o,i)=>{i.d(o,{c:()=>a});const a="data:image/png;base64,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"},76420:(e,o,i)=>{i.d(o,{c:()=>a});const a="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANcAAABGCAYAAABfRwFTAAAMiElEQVR4Xu2aCXRU5RmGJ0EU2QKIsoOsXWy1WMVyUFAKWGhPi22tWrWWsmQnkD2QNEHDKkQIsiQaFgEBDRggIUR2QjAsZvYtk5nJZCbrTPYF8djz9rssFjKJCcm9R6rfc85zJvnvvXPn/vd//2XmymQM8/1TT6INq77dm2GYduEhcw9Sawr7MgzTTjhcDCMRHC6GkQgOF8NIBIeLYSSCw8UwEsHhYhiJ4HAxjERwuBhGIjhcDCMRHC6GkQgOF8NIBIeLYSSCw8UwEsHhYhiJ4HAxjERwuBhGIjhcDCMRHC6GkQgOF8NIBIeLYSSCw8UwEsHhYhiJ4HAxjERwuBhGIjhcDCMRHC6GkQgOF8OIhEXmHppvWihrbmOz/0tlDMPcwQtkrax9gWrNa+QMGcMwbnQmYBwshmmDjgSMg8Uw7eRuAiYEa/qNwxiGaQ/tCRgHi2E6yHcFjIPFMJ2kpYBxsBhGJG4F7D8yDhbDiI4QsAoZB4thGIZhGIZhGIZhGIZhGIZhmDYYO3YcWPEdPXo0RowYgeHDh7M/UmXDx08DK75Dn5iKwb+YgkGPTWZ/pMpk8/PAsqwEuhWwLCuObgUsy4qjW0FbesvRzV8OjwX0t4/if383348VR6Fuqc5lPvIbfzffzoqrmHXsVtCWYfmYtUWHHgF0s+PMmJmoRq+APHg0309Mb11woAqPhGvw6BINhixWoLuPxOcluwQo0S9Mg+GRdN4oeg1ToW+gHPeJeROaS2G6P1CJ/qEaDFuqw4h4A0as0GNErBbDwlXot1CBrt4tHCeiHkInGkT1HXHjukdEqDFgkQIPSnFeoS7ba/NjRdTTV4GedK2DFsndtnVIt4K2XFeOnDwbhoUo4LGtCieyTBgZrICnVBfuq0RfusEDQ5Xw2lWOJG095FVNyDphxawVmuuNrU+AQtzGLryXMFL4qDD0g2LEqBpwrqgJF0uv4gttBSJTDDeuX4rRZAHNBiIMmLCzBCsu1SArvx5njHU4ZazHOVM9MuROxOw3Y3y0Cg9I0dCvq0CPcAOmfFqBraZG5BY24GxBDZLTrZga1XzfjutJM5+eIWoMjaFOI1rTtlFqPBIkh2cL79VZPajee0WY8Gr+VWRm5qO/v/s+d61bQWvOo950MfVkW5y4pHbgyWVaDNpXg+wzFkyI08CLpoeiB8xbAa/37FimrMWBy2WIVlbjnb0FmJBahvjTpQi/UIlktQtRu0z4WagC94t1/gAVesYZMGiDFa+crED8qRL8PcWMcTuLEXi6Am9n2jHtgwIMW6FFLwqZp5iNPFiPZz8qxaozpfCmEA9afLMXpfqXBaoxbHMRfE+XI25/AZ6KVLgfL4IedJ5R79kQmObA/EQdvEJ0GL3NgbcO2/Cn5Uq3/Tsk3dve0QV442gNLpc3Unjrv9Nzlgbkmqqx41A+es9r4f06qRCuPkvN8HdcQ46+Fh9+qEbXFva7K90KWnOOHpMv1mK/8Sp0pfU4RB9gv60JWkc9PjdXI2SjGv38RZ6mBZuwKLcSy9PtCDjhQpqpEjHJRoxZbcO/z1dix7EizMhyYdOlUvxjg456G7k4548w4vfpVThobsR5ax0yDLU4TNebpr/xeqSwCbmljTh6zo7XVtE00a+F9+ioUUZMPeDEppwKhO0uwOOxGgwOU2NQqBqDo/UYv92B6AsubM4sxJRYkRr6HVIPHmnE83uL4fepFZNjKGgJhQg4UoKgJAMGiNWR0KjlFVuAlz8pQdwunfv2211AU9TFekyhWcTKDCsekSBcXfzVGL2lFB/ll2H2Bge264rxeGev1a2gNeeasba4CgsSDfB6W4f7bvrAMgOeutKApF00tAeJGC6q0Pt8tfjJkUqsTBdusgrdaM7ffTFNExcp0WOhnNZDWkw/VokPTxbhz6vU6C1WuIRRIsGG2R87MOegFc8mWTA9yYwnk62YklSAiakleCvdgTcStRgS1MLxnZHCNXlvOTZQp7JXXYNMUwNyzDQtszTinLUeR/Q12HfFhY2HLHhOgnBdH7U2FCLwsB3zNxswclkB3kwvx6oMG34XQ2suH/djOuQ9FC4Pb1pyxFrwV0Ut3k9Wo3uYEbO01fCP/tJt37vSraA1r4erArMjlXjw9umX0BDPN+C9nVoMFTNcVJnjaSoSkFuL0/oKzFmnx+CVZryRWYGNF8vgv9WAUcsLEZlTjT2XnPj3ATOeiKV1iBg3/1a49pbg3dwyLMksx7qsMsw97kI4vfqedSLw82LJwjVphwN+2/MxPpI+hy9JnYmMOhaZL20P1mHC1iIE7zFLEC5aa9GoNXFfMXxSaWSM12H4HpqCm69CW1SHA6fteImmhaLc43slXBSsB2PMeP5yLT7ONMKLyjzDqC3n1WHteiWt5zvx5YZbQWtSuNYUO/GXKPdw3Z/TgIQdIodrhYNC5MQyqswJNCr19NNgapYTK6lHnUSjVcJZO/6wWoMeMXqM2laGzXlOeG81YlCACAveeylczbdLGa4ANR6lKWDgZ3b4btSiz81G7Emj2ch1hZj7GY3Wm3ToJkbjvhfCRe/bNcqAX1+ow6GTBRiwkMIURKNYuAmvWb/GBWUNdqfqcH/z49qrW0FrzjNikbkWYbTG6ON7W4gW6DBLWYdlmzQYKOaaK96ONbTuiKVF9DMJWngt1GJyegXeOWLH9EwX1p4owsyVtM5aTY3w03JskVdg7mYjBnK4Om6oBoO22fFyKl17vApegQp0W0iBW2dDYFYF4lPNeDy0heM64j0QLk9aZ41JLKXpdzGeidDg57ud+OxLO2bE2pDgugaNrhoZ1jJM9+/g9NCtoDWFBneoFifkdjwXp0Y/SnmvhRS0XS4cVdkxLVJ154jWWYWbut6Kf56tRW5hFSJo/j90mQmzj9B65DytedbrMSSqAIvOVyNV4UTsfhMeW6pE1x/atLD5dinD5afCkDU2LMmth6K8AQdodvDmjkL4ZNGa66AFE8Na+Dwd9fsOF7VVz1Ba06dVITXNgMHLi5DsvIrsAhe8Y2hbEJ0zVI/pmgasWdPC8e3RreC79NFg5Kk6nKH5d7q+FqmFjbhkqcC/VivR+/bRTCy9dXjxZDV2n7Rhxgo1HqK1R3dag3TxkaN7CIU7iNZYn5QjKM2K38ap0EOMYAneFq6VOaUITad1R0YJ3qT13qKjJZh32gn/rB9guObf+EJj5PpC+B4rRWRmMQKPlWHlESsmRbXwWTrjzXD9jcIVv9eA7gGK1g0Ufus0YMa2EqwSM1zhWozLqsH+Q0aMPViFo9kWjDxcg2NfWDFS+D0tRItheU1I2dTC8e3RraA9RlqwvLQR23cZMDBQpG/oWnKJFVFXqrE5zY45WZU44KjFxl35eGKDAwmqBmRrKhCcXYVdV0rxVqKIX8UL4Vprw0t77XjlIxNGr6VRczWNlGvoJrxrxJjdxXj9sAOvC+Fa2MLxnfFmuAJ2mvD0EoXbo2We4XpMTLEj5GMpwiVHnwgjZqbSSHWxEinnKvDu4UJMXSLB72kUrt4xBXg1oxLppmps+MJ5w1wnrbVd2HqlEkmXXXifytbnupB4me6z0oWkDBMeFitci7T46R4nMjTF+OVJWl+lKOERasCIiw04lqZH/2gLltBni46Relp4hwb42uqwMlGN/n4SjFi3G1+I6EvV2JZFi+zLNVidZsG0oxVYcbIYwTlV2GusRPQOI8YFi/xIUmQ+TUFdOGBpRF5pE5Qlt1lcj30ni/DH5bQuEb7Ba35sZ1ysw29SSvD2iVL4phgxKkyJHtR7XzdEg7GbbfA9XoaoPSb8Klzk0USYim90IO5iLY5To1qfbsP0pRIE65beCnRZqseApAI8k2zGpBQrZuyh+5xdjeM116A0OBG6w4IXtlnwXHIBnk7QY2y4eJ/Hg87/UKwFwfarOG+qx6lT+ehKdTB6ZxW01HG/fqkBp87ko29Hw+xW0B4X6DFHXoWQNSr0lWI62JrJZdisb0JB7VVkHaNKXyo8OEzlnf2xrzWFx5v8SP/mCtvyxH/0SVAYNRdTj5rswDtX6nDO1oTLRY24WNQEuaMR2Son4mg0HRcqXiP7VmpYQ7fYEZpbje3Hi/BinNgjYysKz/TFm/Fqdj10rq9QVPM1Kr/6BpX1X8NWfhVynQvLU9pYl3VQDx8lHo63Ic7QCJWpDDOj1BiTXg97ZT12CqNkZx4QcCtg7y39KERhKsgiqKHTFFySQN+u8AR+IJ2zM7/v/D8q1Kvwm6LwKnSgnQnVLd0KWJYVR7cClmXF0a2AZVlxdCtgWVYU/wtXToKcVk+nvgAAAABJRU5ErkJggg=="},27232:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/05-monitor-715bb898fc09463329bc8c14844b8509.png"},22444:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/06-circuito-montado-58b7b31688a38dba89adcadf4bbdba30.png"}}]); \ No newline at end of file diff --git a/en/assets/js/e510ad2d.6589df4e.js b/en/assets/js/e510ad2d.6589df4e.js new file mode 100755 index 000000000..ee2f52fca --- /dev/null +++ b/en/assets/js/e510ad2d.6589df4e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5884],{57508:a=>{a.exports=JSON.parse('{"label":"hola","permalink":"/en/blog/tags/hola","allTagsPath":"/en/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/en/assets/js/e510ad2d.b5eefe08.js b/en/assets/js/e510ad2d.b5eefe08.js deleted file mode 100755 index be151dc24..000000000 --- a/en/assets/js/e510ad2d.b5eefe08.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3034],{2650:a=>{a.exports=JSON.parse('{"label":"hola","permalink":"/en/blog/tags/hola","allTagsPath":"/en/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/en/assets/js/e586c302.11ebd454.js b/en/assets/js/e586c302.11ebd454.js deleted file mode 100755 index ad1f615fa..000000000 --- a/en/assets/js/e586c302.11ebd454.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6355],{3905:(t,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>k});var r=a(7294);function n(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,r)}return a}function o(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?i(Object(a),!0).forEach((function(e){n(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}function l(t,e){if(null==t)return{};var a,r,n=function(t,e){if(null==t)return{};var a,r,n={},i=Object.keys(t);for(r=0;r<i.length;r++)a=i[r],e.indexOf(a)>=0||(n[a]=t[a]);return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)a=i[r],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(n[a]=t[a])}return n}var d=r.createContext({}),m=function(t){var e=r.useContext(d),a=e;return t&&(a="function"==typeof t?t(e):o(o({},e),t)),a},p=function(t){var e=m(t.components);return r.createElement(d.Provider,{value:e},t.children)},s="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},f=r.forwardRef((function(t,e){var a=t.components,n=t.mdxType,i=t.originalType,d=t.parentName,p=l(t,["components","mdxType","originalType","parentName"]),s=m(a),f=n,k=s["".concat(d,".").concat(f)]||s[f]||c[f]||i;return a?r.createElement(k,o(o({ref:e},p),{},{components:a})):r.createElement(k,o({ref:e},p))}));function k(t,e){var a=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var i=a.length,o=new Array(i);o[0]=f;var l={};for(var d in e)hasOwnProperty.call(e,d)&&(l[d]=e[d]);l.originalType=t,l[s]="string"==typeof t?t:n,o[1]=l;for(var m=2;m<i;m++)o[m]=a[m];return r.createElement.apply(null,o)}return r.createElement.apply(null,a)}f.displayName="MDXCreateElement"},9660:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>d,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>m});var r=a(3117),n=(a(7294),a(3905));const i={id:"lista-de-materiais",title:"Lista de Materiais",slug:"/franzininho-diy/lista-de-materiais",description:"Lista de materiais (componentes) para montagem da Franzininho DIY"},o=void 0,l={unversionedId:"FranzininhoDIY/lista-de-materiais",id:"FranzininhoDIY/lista-de-materiais",title:"Lista de Materiais",description:"Lista de materiais (componentes) para montagem da Franzininho DIY",source:"@site/docs/FranzininhoDIY/lista-de-materiais.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/lista-de-materiais",permalink:"/en/docs/franzininho-diy/lista-de-materiais",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/lista-de-materiais.md",tags:[],version:"current",frontMatter:{id:"lista-de-materiais",title:"Lista de Materiais",slug:"/franzininho-diy/lista-de-materiais",description:"Lista de materiais (componentes) para montagem da Franzininho DIY"},sidebar:"docs",previous:{title:"Placa Franzininho DIY",permalink:"/en/docs/franzininho-diy/sobre"},next:{title:"Identificando os componentes",permalink:"/en/docs/franzininho-diy/identificando-componentes"}},d={},m=[{value:"Lista de materiais (BOM)",id:"lista-de-materiais-bom",level:2}],p={toc:m},s="wrapper";function c(t){let{components:e,...a}=t;return(0,n.kt)(s,(0,r.Z)({},p,a,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Aqui voc\xea encontra a lista de materiais para montagem da Franzininho DIY."),(0,n.kt)("p",null,"Confira a refer\xeancia e descri\xe7\xe3o de cada componente."),(0,n.kt)("h2",{id:"lista-de-materiais-bom"},"Lista de materiais ","(","BOM",")"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"Refer\xeancia"),(0,n.kt)("th",{parentName:"tr",align:"left"},"Descri\xe7\xe3o"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"C1"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Capacitor Cer\xe2mico 100 nF x 50 V")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"C2"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Capacitor eletrol\xedtico 10 uF x 35 V")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"D1"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Diodo Zener 3,6 V 0,5W")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"D2"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Diodo Zener 3,6 V 0,5W")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"D3"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Diodo 1N4148")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"IC1"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Microcontrolador ATTINY85 - 20PU")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"IC2"),(0,n.kt)("td",{parentName:"tr",align:"left"},"78L05 - Regulador de tens\xe3o")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"SQ1"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Soquete Para CI - 8 pinos")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"JP3"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Barra de pinos estampada 15 mm 180\xb0 - 8 vias")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"J1"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Barra de pinos estampada 15 mm 180\xb0 - 3 vias")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"LED"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Led 3mm Amarelo Difuso")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"ON"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Led 3mm Verde Difuso")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"R1"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Resistor 68 R - 5% 1/4 W")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"R2"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Resistor 68 R - 5% 1/4 W")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"R3"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Resistor 1K5 - 5% 1/4 W")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"R4"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Resistor 1K - 5% 1/4 W")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"R5"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Resistor 1K - 5% 1/4 W")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"RESET"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Chave T\xe1ctil 6x6x5 mm")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"USB"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Conector USB Macho 90\xba com trava")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"PCB"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("a",{parentName:"td",href:"https://github.com/Franzininho/franzininho-diy-board"},"Placa de circuito impresso Franzininho V2"))))),(0,n.kt)("admonition",{title:"Ajuda",type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Se tiver alguma d\xfavida sobre os componentes, consulte a comunidade Franzininho no ",(0,n.kt)("a",{parentName:"p",href:"https://discord.gg/H5kENmWGaz"},"Discord"))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/e586c302.ec4d5aee.js b/en/assets/js/e586c302.ec4d5aee.js new file mode 100755 index 000000000..5754732f9 --- /dev/null +++ b/en/assets/js/e586c302.ec4d5aee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[872],{24400:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>x,frontMatter:()=>l,metadata:()=>d,toc:()=>o});var n=i(17624),r=i(95788);const l={id:"lista-de-materiais",title:"Lista de Materiais",slug:"/franzininho-diy/lista-de-materiais",description:"Lista de materiais (componentes) para montagem da Franzininho DIY"},s=void 0,d={id:"FranzininhoDIY/lista-de-materiais",title:"Lista de Materiais",description:"Lista de materiais (componentes) para montagem da Franzininho DIY",source:"@site/docs/FranzininhoDIY/lista-de-materiais.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/lista-de-materiais",permalink:"/en/docs/franzininho-diy/lista-de-materiais",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/lista-de-materiais.md",tags:[],version:"current",frontMatter:{id:"lista-de-materiais",title:"Lista de Materiais",slug:"/franzininho-diy/lista-de-materiais",description:"Lista de materiais (componentes) para montagem da Franzininho DIY"},sidebar:"docs",previous:{title:"Placa Franzininho DIY",permalink:"/en/docs/franzininho-diy/sobre"},next:{title:"Identificando os componentes",permalink:"/en/docs/franzininho-diy/identificando-componentes"}},a={},o=[{value:"Lista de materiais (BOM)",id:"lista-de-materiais-bom",level:2}];function c(e){const t={a:"a",admonition:"admonition",h2:"h2",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Aqui voc\xea encontra a lista de materiais para montagem da Franzininho DIY."}),"\n",(0,n.jsx)(t.p,{children:"Confira a refer\xeancia e descri\xe7\xe3o de cada componente."}),"\n",(0,n.jsx)(t.h2,{id:"lista-de-materiais-bom",children:"Lista de materiais (BOM)"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{style:{textAlign:"left"},children:"Refer\xeancia"}),(0,n.jsx)(t.th,{style:{textAlign:"left"},children:"Descri\xe7\xe3o"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"C1"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Capacitor Cer\xe2mico 100 nF x 50 V"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"C2"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Capacitor eletrol\xedtico 10 uF x 35 V"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"D1"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Diodo Zener 3,6 V 0,5W"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"D2"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Diodo Zener 3,6 V 0,5W"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"D3"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Diodo 1N4148"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"IC1"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Microcontrolador ATTINY85 - 20PU"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"IC2"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"78L05 - Regulador de tens\xe3o"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"SQ1"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Soquete Para CI - 8 pinos"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"JP3"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Barra de pinos estampada 15 mm 180\xb0 - 8 vias"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"J1"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Barra de pinos estampada 15 mm 180\xb0 - 3 vias"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"LED"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Led 3mm Amarelo Difuso"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"ON"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Led 3mm Verde Difuso"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"R1"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Resistor 68 R - 5% 1/4 W"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"R2"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Resistor 68 R - 5% 1/4 W"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"R3"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Resistor 1K5 - 5% 1/4 W"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"R4"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Resistor 1K - 5% 1/4 W"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"R5"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Resistor 1K - 5% 1/4 W"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"RESET"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Chave T\xe1ctil 6x6x5 mm"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"USB"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"Conector USB Macho 90\xba com trava"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{style:{textAlign:"left"},children:"PCB"}),(0,n.jsx)(t.td,{style:{textAlign:"left"},children:(0,n.jsx)(t.a,{href:"https://github.com/Franzininho/franzininho-diy-board",children:"Placa de circuito impresso Franzininho V2"})})]})]})]}),"\n",(0,n.jsx)(t.admonition,{title:"Ajuda",type:"note",children:(0,n.jsxs)(t.p,{children:["Se tiver alguma d\xfavida sobre os componentes, consulte a comunidade Franzininho no ",(0,n.jsx)(t.a,{href:"https://discord.gg/H5kENmWGaz",children:"Discord"})]})})]})}function x(e={}){const{wrapper:t}={...(0,r.MN)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},95788:(e,t,i)=>{i.d(t,{MN:()=>o});var n=i(11504);function r(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function l(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function s(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?l(Object(i),!0).forEach((function(t){r(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):l(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function d(e,t){if(null==e)return{};var i,n,r=function(e,t){if(null==e)return{};var i,n,r={},l=Object.keys(e);for(n=0;n<l.length;n++)i=l[n],t.indexOf(i)>=0||(r[i]=e[i]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)i=l[n],t.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var a=n.createContext({}),o=function(e){var t=n.useContext(a),i=t;return e&&(i="function"==typeof e?e(t):s(s({},t),e)),i},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},x=n.forwardRef((function(e,t){var i=e.components,r=e.mdxType,l=e.originalType,a=e.parentName,x=d(e,["components","mdxType","originalType","parentName"]),h=o(i),f=r,j=h["".concat(a,".").concat(f)]||h[f]||c[f]||l;return i?n.createElement(j,s(s({ref:t},x),{},{components:i})):n.createElement(j,s({ref:t},x))}));x.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/e6a1d5e9.16118bc4.js b/en/assets/js/e6a1d5e9.16118bc4.js new file mode 100755 index 000000000..c0a109966 --- /dev/null +++ b/en/assets/js/e6a1d5e9.16118bc4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5758],{1996:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>s,contentTitle:()=>t,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var n=o(17624),a=o(95788);const i={id:"upload-conversor-serial",title:"Upload via conversor USB/SERIAL",slug:"/Franzino/upload-conversor-serial",description:"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos"},t=void 0,c={id:"Franzino/upload-conversor-serial",title:"Upload via conversor USB/SERIAL",description:"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos",source:"@site/docs/Franzino/upload-conversor-serial.md",sourceDirName:"Franzino",slug:"/Franzino/upload-conversor-serial",permalink:"/en/docs/Franzino/upload-conversor-serial",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Franzino/upload-conversor-serial.md",tags:[],version:"current",frontMatter:{id:"upload-conversor-serial",title:"Upload via conversor USB/SERIAL",slug:"/Franzino/upload-conversor-serial",description:"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos"},sidebar:"docs",previous:{title:"Placa Franzino",permalink:"/en/docs/Franzino/franzino"},next:{title:"Gravando a Franzino com um placa Arduino UNO",permalink:"/en/docs/Franzino/upload-com-arduino-uno"}},s={},l=[];function d(e){const r={img:"img",p:"p",...(0,a.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.p,{children:"Para fazer upload de c\xf3digos para a Franzino, primeiro \xe9 necess\xe1rio ligar o conversor USB/Serial a placa, como exibido na figura abaixo:"}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{alt:"liga\xe7\xe3o Conversor USB/Seril",src:o(40624).c+"",width:"1133",height:"528"})}),"\n",(0,n.jsx)(r.p,{children:"Selecione na IDE do Arduino a Placa Arduino UNO. Tamb\xe9m selecione a porta seria que foi criada ao ser inserido o conversor USB/SERIAL no computador:"}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{alt:"configura\xe7\xe3o da IDE Arduino",src:o(15800).c+"",width:"485",height:"309"})}),"\n",(0,n.jsx)(r.p,{children:"Pronto, agora \xe9 s\xf3 fazer o upload dos seus c\xf3digos para a placa Franzino"})]})}function p(e={}){const{wrapper:r}={...(0,a.MN)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},95788:(e,r,o)=>{o.d(r,{MN:()=>l});var n=o(11504);function a(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}function i(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,n)}return o}function t(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?i(Object(o),!0).forEach((function(r){a(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}function c(e,r){if(null==e)return{};var o,n,a=function(e,r){if(null==e)return{};var o,n,a={},i=Object.keys(e);for(n=0;n<i.length;n++)o=i[n],r.indexOf(o)>=0||(a[o]=e[o]);return a}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)o=i[n],r.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var s=n.createContext({}),l=function(e){var r=n.useContext(s),o=r;return e&&(o="function"==typeof e?e(r):t(t({},r),e)),o},d={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},p=n.forwardRef((function(e,r){var o=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(o),f=a,g=u["".concat(s,".").concat(f)]||u[f]||d[f]||i;return o?n.createElement(g,t(t({ref:r},p),{},{components:o})):n.createElement(g,t({ref:r},p))}));p.displayName="MDXCreateElement"},15800:(e,r,o)=>{o.d(r,{c:()=>n});const n=o.p+"assets/images/congfigura-ide-7682d8d241bef3238696600a41a74a2e.png"},40624:(e,r,o)=>{o.d(r,{c:()=>n});const n=o.p+"assets/images/ligacao_conversor-29c3b68ee0e2d48f071f37ed5149e5ef.jpg"}}]); \ No newline at end of file diff --git a/en/assets/js/e6a1d5e9.e61af3e6.js b/en/assets/js/e6a1d5e9.e61af3e6.js deleted file mode 100755 index d3216b56e..000000000 --- a/en/assets/js/e6a1d5e9.e61af3e6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3290],{3905:(e,r,o)=>{o.d(r,{Zo:()=>p,kt:()=>m});var n=o(7294);function a(e,r,o){return r in e?Object.defineProperty(e,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[r]=o,e}function t(e,r){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?t(Object(o),!0).forEach((function(r){a(e,r,o[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):t(Object(o)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(o,r))}))}return e}function c(e,r){if(null==e)return{};var o,n,a=function(e,r){if(null==e)return{};var o,n,a={},t=Object.keys(e);for(n=0;n<t.length;n++)o=t[n],r.indexOf(o)>=0||(a[o]=e[o]);return a}(e,r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(n=0;n<t.length;n++)o=t[n],r.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var l=n.createContext({}),s=function(e){var r=n.useContext(l),o=r;return e&&(o="function"==typeof e?e(r):i(i({},r),e)),o},p=function(e){var r=s(e.components);return n.createElement(l.Provider,{value:r},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},f=n.forwardRef((function(e,r){var o=e.components,a=e.mdxType,t=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),d=s(o),f=a,m=d["".concat(l,".").concat(f)]||d[f]||u[f]||t;return o?n.createElement(m,i(i({ref:r},p),{},{components:o})):n.createElement(m,i({ref:r},p))}));function m(e,r){var o=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var t=o.length,i=new Array(t);i[0]=f;var c={};for(var l in r)hasOwnProperty.call(r,l)&&(c[l]=r[l]);c.originalType=e,c[d]="string"==typeof e?e:a,i[1]=c;for(var s=2;s<t;s++)i[s]=o[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,o)}f.displayName="MDXCreateElement"},203:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>t,metadata:()=>c,toc:()=>s});var n=o(3117),a=(o(7294),o(3905));const t={id:"upload-conversor-serial",title:"Upload via conversor USB/SERIAL",slug:"/Franzino/upload-conversor-serial",description:"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos"},i=void 0,c={unversionedId:"Franzino/upload-conversor-serial",id:"Franzino/upload-conversor-serial",title:"Upload via conversor USB/SERIAL",description:"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos",source:"@site/docs/Franzino/upload-conversor-serial.md",sourceDirName:"Franzino",slug:"/Franzino/upload-conversor-serial",permalink:"/en/docs/Franzino/upload-conversor-serial",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/Franzino/upload-conversor-serial.md",tags:[],version:"current",frontMatter:{id:"upload-conversor-serial",title:"Upload via conversor USB/SERIAL",slug:"/Franzino/upload-conversor-serial",description:"Liga\xe7\xe3o do conversor USB Serial para upload de c\xf3digos"},sidebar:"docs",previous:{title:"Placa Franzino",permalink:"/en/docs/Franzino/franzino"},next:{title:"Gravando a Franzino com um placa Arduino UNO",permalink:"/en/docs/Franzino/upload-com-arduino-uno"}},l={},s=[],p={toc:s},d="wrapper";function u(e){let{components:r,...t}=e;return(0,a.kt)(d,(0,n.Z)({},p,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Para fazer upload de c\xf3digos para a Franzino, primeiro \xe9 necess\xe1rio ligar o conversor USB/Serial a placa, como exibido na figura abaixo:"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"liga\xe7\xe3o Conversor USB/Seril",src:o(3798).Z,width:"1133",height:"528"})),(0,a.kt)("p",null,"Selecione na IDE do Arduino a Placa Arduino UNO. Tamb\xe9m selecione a porta seria que foi criada ao ser inserido o conversor USB/SERIAL no computador:"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"configura\xe7\xe3o da IDE Arduino",src:o(2238).Z,width:"485",height:"309"})),(0,a.kt)("p",null,"Pronto, agora \xe9 s\xf3 fazer o upload dos seus c\xf3digos para a placa Franzino"))}u.isMDXComponent=!0},2238:(e,r,o)=>{o.d(r,{Z:()=>n});const n=o.p+"assets/images/congfigura-ide-7682d8d241bef3238696600a41a74a2e.png"},3798:(e,r,o)=>{o.d(r,{Z:()=>n});const n=o.p+"assets/images/ligacao_conversor-29c3b68ee0e2d48f071f37ed5149e5ef.jpg"}}]); \ No newline at end of file diff --git a/en/assets/js/ec054302.6e4d837a.js b/en/assets/js/ec054302.6e4d837a.js new file mode 100755 index 000000000..4096b5300 --- /dev/null +++ b/en/assets/js/ec054302.6e4d837a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1880],{66376:(e,o,i)=>{i.r(o),i.d(o,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>a,metadata:()=>t,toc:()=>d});var n=i(17624),r=i(95788);const a={id:"circuitpython-touch-capacitivo",title:"Pinos de Toque Capacitivo",slug:"/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",description:"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.",author:"Mateus Adriano Ventura Vieira"},s=void 0,t={id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo",title:"Pinos de Toque Capacitivo",description:"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/touch-capacitivo.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/touch-capacitivo.md",tags:[],version:"current",frontMatter:{id:"circuitpython-touch-capacitivo",title:"Pinos de Toque Capacitivo",slug:"/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",description:"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.",author:"Mateus Adriano Ventura Vieira"},sidebar:"docs",previous:{title:"PWM - Pulse Width Modulation",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/pwm"},next:{title:"Display OLED I2C",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c"}},c={},d=[{value:"<strong>Materiais necess\xe1rios</strong>",id:"materiais-necess\xe1rios",level:2},{value:"<strong>Circuito</strong>",id:"circuito",level:2},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo",level:2},{value:"<strong>An\xe1lise do C\xf3digo</strong>",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"<strong>Como ajustar a sensibilidade do touch?</strong>",id:"como-ajustar-a-sensibilidade-do-touch",level:2},{value:"<strong>Conclus\xe3o</strong>",id:"conclus\xe3o",level:2}];function l(e){const o={code:"code",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.MN)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.p,{children:"A capacit\xe2ncia pode ser definida, basicamente, como a capacidade de um corpo de armazenar energia el\xe9trica. Dessa maneira, os pinos de toque capacitivo detectam a mudan\xe7a na capacit\xe2ncia de um elemento. Esses pinos, podem ser utilizados por toque, e at\xe9 mesmo, pela aproxima\xe7\xe3o de um dedo."}),"\n",(0,n.jsx)(o.p,{children:"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso."}),"\n",(0,n.jsx)(o.h2,{id:"materiais-necess\xe1rios",children:(0,n.jsx)(o.strong,{children:"Materiais necess\xe1rios"})}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:"1 Placa Franzininho WiFi com CircuitPython;"}),"\n",(0,n.jsx)(o.li,{children:"1 Protoboard;"}),"\n",(0,n.jsx)(o.li,{children:"1 LED;"}),"\n",(0,n.jsx)(o.li,{children:"1 resistor de 220 \u03a9 ou 330 \u03a9;"}),"\n",(0,n.jsx)(o.li,{children:"Jumpers."}),"\n"]}),"\n",(0,n.jsx)(o.h2,{id:"circuito",children:(0,n.jsx)(o.strong,{children:"Circuito"})}),"\n",(0,n.jsx)(o.p,{children:"Realize a seguinte montagem para este projeto. No lugar do \u201csensor\u201d de toque capacitivo, pode ser utilizado um jumper, um peda\xe7o de fio ou qualquer outro material."}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"Circuito",src:i(16872).c+"",width:"939",height:"693"})}),"\n",(0,n.jsx)(o.h2,{id:"c\xf3digo",children:(0,n.jsx)(o.strong,{children:"C\xf3digo"})}),"\n",(0,n.jsx)(o.p,{children:"Implemente o c\xf3digo abaixo e teste seu circuito."}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"#Toque Capacitivo\n\nimport board \nimport touchio\nfrom digitalio import DigitalInOut, Direction\nfrom time import sleep \n\nestado = 0\n\npin = board.IO1\ntouch = touchio.TouchIn(pin)\n\nled = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n\nwhile True:\n if touch.value:\n estado = not estado\n \n led.value = estado\n sleep(1)\n"})}),"\n",(0,n.jsx)(o.p,{children:"Ap\xf3s finalizar a edi\xe7\xe3o do c\xf3digo, salve-o. Execute o programa. Ao aproximar, ou, encostar o dedo no \u201csensor\u201d escolhido por voc\xea, ele deve funcionar como um interruptor, ligando e desligando o LED."}),"\n",(0,n.jsx)(o.h2,{id:"an\xe1lise-do-c\xf3digo",children:(0,n.jsx)(o.strong,{children:"An\xe1lise do C\xf3digo"})}),"\n",(0,n.jsxs)(o.p,{children:["Para acessarmos os pinos da placa devemos importar o m\xf3dulo ",(0,n.jsx)(o.strong,{children:"board"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import board\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Al\xe9m disso, para o uso dos pinos de toque capacitivo, usaremos a biblioteca ",(0,n.jsx)(o.strong,{children:"touchio"}),":"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"import touchio\n"})}),"\n",(0,n.jsxs)(o.p,{children:["E, para configurarmos o LED como uma sa\xedda digital, temos que importar as fun\xe7\xf5es ",(0,n.jsx)(o.strong,{children:"DigitalInOut"})," e ",(0,n.jsx)(o.strong,{children:"Direction"})," do m\xf3dulo ",(0,n.jsx)(o.strong,{children:"digitalio:"})]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"from digitalio import DigitalInOut, Direction\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Por \xfaltimo, vamos chamar a fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"sleep"})," do m\xf3dulo ",(0,n.jsx)(o.strong,{children:"time"}),", que usaremos para intervalos de temporiza\xe7\xe3o:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"from time import sleep\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Ap\xf3s importarmos as bibliotecas necess\xe1rias, criaremos uma vari\xe1vel ",(0,n.jsx)(o.strong,{children:"estado"}),", que vai armazenar o estado do LED:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"estado = 0\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Agora, vamos configurar o GPIO1, como um pino ",(0,n.jsx)(o.strong,{children:"touch"}),". Primeiro, iremos atribuir esse pino a uma vari\xe1vel, no caso, a vari\xe1vel ",(0,n.jsx)(o.strong,{children:"pin"}),". Ap\xf3s isso, iremos criar o objeto ",(0,n.jsx)(o.strong,{children:"touch"})," e atribuir o pin a esse objeto:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"pin = board.IO1\ntouch = touchio.TouchIn(pin)\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Ademais, iremos atribuir o GPIO4 a var\xe1vel ",(0,n.jsx)(o.strong,{children:"led"})," e, configur\xe1-lo como uma sa\xedda digital:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"led = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Na sequ\xeancia, criaremos um la\xe7o infinito (",(0,n.jsx)(o.strong,{children:"while True"}),"). Dentro do loop, verificamos se houve mudan\xe7a na capacit\xe2ncia do \u201csensor\u201d. Caso aconte\xe7a a mudan\xe7a, o estado do led tamb\xe9m mudar\xe1:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"while True:\n if touch.value:\n estado = not estado\n \n led.value = estado\n sleep(1)\n"})}),"\n",(0,n.jsx)(o.h2,{id:"como-ajustar-a-sensibilidade-do-touch",children:(0,n.jsx)(o.strong,{children:"Como ajustar a sensibilidade do touch?"})}),"\n",(0,n.jsxs)(o.p,{children:["Nesse exemplo, estamos acionando o led apenas por aproximar o dedo. Por\xe9m, pode ser que voc\xea deseje ajustar o seu \u201csensor\u201d para acionar por toque. Para isso, vamos utilizar o comando ",(0,n.jsx)(o.strong,{children:"threshold"}),"."]}),"\n",(0,n.jsxs)(o.p,{children:["Primeiro, vamos verificar a medi\xe7\xe3o do toque bruto. Para isso, utilizaremos a fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"raw_value"}),". Depois, ajustaremos a sensibilidade, para que ele seja acionado apenas por toque:"]}),"\n",(0,n.jsx)(o.pre,{children:(0,n.jsx)(o.code,{className:"language-python",children:"pin = board.IO1\ntouch = touchio.TouchIn(pin)\nprint(touch.raw_value)\ntouch.threshold = 17300\n"})}),"\n",(0,n.jsxs)(o.p,{children:["Ap\xf3s adicionarmos a fun\xe7\xe3o ",(0,n.jsx)(o.strong,{children:"threshold"}),", o led s\xf3 \xe9 acionado se tocarmos o \u201csensor\u201d. Isso acontece, pois, o configuramos com uma sensibilidade menor, ou seja, um valor m\xednimo de capacit\xe2ncia maior, para que a mudan\xe7a seja percebida pela placa."]}),"\n",(0,n.jsx)(o.h2,{id:"conclus\xe3o",children:(0,n.jsx)(o.strong,{children:"Conclus\xe3o"})}),"\n",(0,n.jsx)(o.p,{children:"Aprendemos, atrav\xe9s de um exemplo pr\xe1tico, a como usar um pino toque capacitivo, que, em muitas situa\xe7\xf5es pode ser usado para substituir bot\xf5es e interruptores, por exemplo, apresentando-se como uma solu\xe7\xe3o mais simples, pois seu funcionamento n\xe3o \xe9 mec\xe2nico. Al\xe9m disso, pudemos ver como ajustar a sensibilidade desse sensor as nossas necessidades."}),"\n",(0,n.jsxs)(o.table,{children:[(0,n.jsx)(o.thead,{children:(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.th,{children:"Autor"}),(0,n.jsx)(o.th,{children:"Mateus Adriano Ventura Vieira"})]})}),(0,n.jsx)(o.tbody,{children:(0,n.jsxs)(o.tr,{children:[(0,n.jsx)(o.td,{children:"Data:"}),(0,n.jsx)(o.td,{children:"06/05/2022"})]})})]})]})}function u(e={}){const{wrapper:o}={...(0,r.MN)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},95788:(e,o,i)=>{i.d(o,{MN:()=>d});var n=i(11504);function r(e,o,i){return o in e?Object.defineProperty(e,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[o]=i,e}function a(e,o){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),i.push.apply(i,n)}return i}function s(e){for(var o=1;o<arguments.length;o++){var i=null!=arguments[o]?arguments[o]:{};o%2?a(Object(i),!0).forEach((function(o){r(e,o,i[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):a(Object(i)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(i,o))}))}return e}function t(e,o){if(null==e)return{};var i,n,r=function(e,o){if(null==e)return{};var i,n,r={},a=Object.keys(e);for(n=0;n<a.length;n++)i=a[n],o.indexOf(i)>=0||(r[i]=e[i]);return r}(e,o);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)i=a[n],o.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var c=n.createContext({}),d=function(e){var o=n.useContext(c),i=o;return e&&(i="function"==typeof e?e(o):s(s({},o),e)),i},l={inlineCode:"code",wrapper:function(e){var o=e.children;return n.createElement(n.Fragment,{},o)}},u=n.forwardRef((function(e,o){var i=e.components,r=e.mdxType,a=e.originalType,c=e.parentName,u=t(e,["components","mdxType","originalType","parentName"]),p=d(i),m=r,h=p["".concat(c,".").concat(m)]||p[m]||l[m]||a;return i?n.createElement(h,s(s({ref:o},u),{},{components:i})):n.createElement(h,s({ref:o},u))}));u.displayName="MDXCreateElement"},16872:(e,o,i)=>{i.d(o,{c:()=>n});const n=i.p+"assets/images/circuito-toque-capacitivo-baa986e339db82a3e64763d11f03a158.webp"}}]); \ No newline at end of file diff --git a/en/assets/js/ec054302.f8b1d903.js b/en/assets/js/ec054302.f8b1d903.js deleted file mode 100755 index 624361da2..000000000 --- a/en/assets/js/ec054302.f8b1d903.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8911],{3905:(e,o,a)=>{a.d(o,{Zo:()=>u,kt:()=>h});var t=a(7294);function r(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function i(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,t)}return a}function n(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?i(Object(a),!0).forEach((function(o){r(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function s(e,o){if(null==e)return{};var a,t,r=function(e,o){if(null==e)return{};var a,t,r={},i=Object.keys(e);for(t=0;t<i.length;t++)a=i[t],o.indexOf(a)>=0||(r[a]=e[a]);return r}(e,o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t<i.length;t++)a=i[t],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=t.createContext({}),c=function(e){var o=t.useContext(p),a=o;return e&&(a="function"==typeof e?e(o):n(n({},o),e)),a},u=function(e){var o=c(e.components);return t.createElement(p.Provider,{value:o},e.children)},l="mdxType",m={inlineCode:"code",wrapper:function(e){var o=e.children;return t.createElement(t.Fragment,{},o)}},d=t.forwardRef((function(e,o){var a=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),l=c(a),d=r,h=l["".concat(p,".").concat(d)]||l[d]||m[d]||i;return a?t.createElement(h,n(n({ref:o},u),{},{components:a})):t.createElement(h,n({ref:o},u))}));function h(e,o){var a=arguments,r=o&&o.mdxType;if("string"==typeof e||r){var i=a.length,n=new Array(i);n[0]=d;var s={};for(var p in o)hasOwnProperty.call(o,p)&&(s[p]=o[p]);s.originalType=e,s[l]="string"==typeof e?e:r,n[1]=s;for(var c=2;c<i;c++)n[c]=a[c];return t.createElement.apply(null,n)}return t.createElement.apply(null,a)}d.displayName="MDXCreateElement"},4807:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>p,contentTitle:()=>n,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var t=a(3117),r=(a(7294),a(3905));const i={id:"circuitpython-touch-capacitivo",title:"Pinos de Toque Capacitivo",slug:"/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",description:"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.",author:"Mateus Adriano Ventura Vieira"},n=void 0,s={unversionedId:"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo",id:"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo",title:"Pinos de Toque Capacitivo",description:"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.",source:"@site/docs/FranzininhoWifi/exemplos-circuitpython/touch-capacitivo.md",sourceDirName:"FranzininhoWifi/exemplos-circuitpython",slug:"/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-circuitpython/touch-capacitivo.md",tags:[],version:"current",frontMatter:{id:"circuitpython-touch-capacitivo",title:"Pinos de Toque Capacitivo",slug:"/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",description:"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.",author:"Mateus Adriano Ventura Vieira"},sidebar:"docs",previous:{title:"PWM - Pulse Width Modulation",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/pwm"},next:{title:"Display OLED I2C",permalink:"/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c"}},p={},c=[{value:"<strong>Materiais necess\xe1rios</strong>",id:"materiais-necess\xe1rios",level:2},{value:"<strong>Circuito</strong>",id:"circuito",level:2},{value:"<strong>C\xf3digo</strong>",id:"c\xf3digo",level:2},{value:"<strong>An\xe1lise do C\xf3digo</strong>",id:"an\xe1lise-do-c\xf3digo",level:2},{value:"<strong>Como ajustar a sensibilidade do touch?</strong>",id:"como-ajustar-a-sensibilidade-do-touch",level:2},{value:"<strong>Conclus\xe3o</strong>",id:"conclus\xe3o",level:2}],u={toc:c},l="wrapper";function m(e){let{components:o,...i}=e;return(0,r.kt)(l,(0,t.Z)({},u,i,{components:o,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"A capacit\xe2ncia pode ser definida, basicamente, como a capacidade de um corpo de armazenar energia el\xe9trica. Dessa maneira, os pinos de toque capacitivo detectam a mudan\xe7a na capacit\xe2ncia de um elemento. Esses pinos, podem ser utilizados por toque, e at\xe9 mesmo, pela aproxima\xe7\xe3o de um dedo."),(0,r.kt)("p",null,"Neste exemplo, vamos fazer um \u201cinterruptor\u201d por aproxima\xe7\xe3o e, aprender como usar o m\xf3dulo respons\xe1vel pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso."),(0,r.kt)("h2",{id:"materiais-necess\xe1rios"},(0,r.kt)("strong",{parentName:"h2"},"Materiais necess\xe1rios")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"1 Placa Franzininho WiFi com CircuitPython;"),(0,r.kt)("li",{parentName:"ul"},"1 Protoboard;"),(0,r.kt)("li",{parentName:"ul"},"1 LED;"),(0,r.kt)("li",{parentName:"ul"},"1 resistor de 220 \u03a9 ou 330 \u03a9;"),(0,r.kt)("li",{parentName:"ul"},"Jumpers.")),(0,r.kt)("h2",{id:"circuito"},(0,r.kt)("strong",{parentName:"h2"},"Circuito")),(0,r.kt)("p",null,"Realize a seguinte montagem para este projeto. No lugar do \u201csensor\u201d de toque capacitivo, pode ser utilizado um jumper, um peda\xe7o de fio ou qualquer outro material."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Circuito",src:a(8941).Z,width:"939",height:"693"})),(0,r.kt)("h2",{id:"c\xf3digo"},(0,r.kt)("strong",{parentName:"h2"},"C\xf3digo")),(0,r.kt)("p",null,"Implemente o c\xf3digo abaixo e teste seu circuito."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"#Toque Capacitivo\n\nimport board \nimport touchio\nfrom digitalio import DigitalInOut, Direction\nfrom time import sleep \n\nestado = 0\n\npin = board.IO1\ntouch = touchio.TouchIn(pin)\n\nled = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n\nwhile True:\n if touch.value:\n estado = not estado\n \n led.value = estado\n sleep(1)\n")),(0,r.kt)("p",null,"Ap\xf3s finalizar a edi\xe7\xe3o do c\xf3digo, salve-o. Execute o programa. Ao aproximar, ou, encostar o dedo no \u201csensor\u201d escolhido por voc\xea, ele deve funcionar como um interruptor, ligando e desligando o LED."),(0,r.kt)("h2",{id:"an\xe1lise-do-c\xf3digo"},(0,r.kt)("strong",{parentName:"h2"},"An\xe1lise do C\xf3digo")),(0,r.kt)("p",null,"Para acessarmos os pinos da placa devemos importar o m\xf3dulo ",(0,r.kt)("strong",{parentName:"p"},"board"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import board\n")),(0,r.kt)("p",null,"Al\xe9m disso, para o uso dos pinos de toque capacitivo, usaremos a biblioteca ",(0,r.kt)("strong",{parentName:"p"},"touchio"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import touchio\n")),(0,r.kt)("p",null,"E, para configurarmos o LED como uma sa\xedda digital, temos que importar as fun\xe7\xf5es ",(0,r.kt)("strong",{parentName:"p"},"DigitalInOut")," e ",(0,r.kt)("strong",{parentName:"p"},"Direction")," do m\xf3dulo ",(0,r.kt)("strong",{parentName:"p"},"digitalio:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"from digitalio import DigitalInOut, Direction\n")),(0,r.kt)("p",null,"Por \xfaltimo, vamos chamar a fun\xe7\xe3o ",(0,r.kt)("strong",{parentName:"p"},"sleep")," do m\xf3dulo ",(0,r.kt)("strong",{parentName:"p"},"time"),", que usaremos para intervalos de temporiza\xe7\xe3o:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"from time import sleep\n")),(0,r.kt)("p",null,"Ap\xf3s importarmos as bibliotecas necess\xe1rias, criaremos uma vari\xe1vel ",(0,r.kt)("strong",{parentName:"p"},"estado"),", que vai armazenar o estado do LED:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"estado = 0\n")),(0,r.kt)("p",null,"Agora, vamos configurar o GPIO1, como um pino ",(0,r.kt)("strong",{parentName:"p"},"touch"),". Primeiro, iremos atribuir esse pino a uma vari\xe1vel, no caso, a vari\xe1vel ",(0,r.kt)("strong",{parentName:"p"},"pin"),". Ap\xf3s isso, iremos criar o objeto ",(0,r.kt)("strong",{parentName:"p"},"touch")," e atribuir o pin a esse objeto:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"pin = board.IO1\ntouch = touchio.TouchIn(pin)\n")),(0,r.kt)("p",null,"Ademais, iremos atribuir o GPIO4 a var\xe1vel ",(0,r.kt)("strong",{parentName:"p"},"led")," e, configur\xe1-lo como uma sa\xedda digital:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"led = DigitalInOut(board.IO4)\nled.direction = Direction.OUTPUT\n")),(0,r.kt)("p",null,"Na sequ\xeancia, criaremos um la\xe7o infinito (",(0,r.kt)("strong",{parentName:"p"},"while True"),"). Dentro do loop, verificamos se houve mudan\xe7a na capacit\xe2ncia do \u201csensor\u201d. Caso aconte\xe7a a mudan\xe7a, o estado do led tamb\xe9m mudar\xe1:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"while True:\n if touch.value:\n estado = not estado\n \n led.value = estado\n sleep(1)\n")),(0,r.kt)("h2",{id:"como-ajustar-a-sensibilidade-do-touch"},(0,r.kt)("strong",{parentName:"h2"},"Como ajustar a sensibilidade do touch?")),(0,r.kt)("p",null,"Nesse exemplo, estamos acionando o led apenas por aproximar o dedo. Por\xe9m, pode ser que voc\xea deseje ajustar o seu \u201csensor\u201d para acionar por toque. Para isso, vamos utilizar o comando ",(0,r.kt)("strong",{parentName:"p"},"threshold"),"."),(0,r.kt)("p",null,"Primeiro, vamos verificar a medi\xe7\xe3o do toque bruto. Para isso, utilizaremos a fun\xe7\xe3o ",(0,r.kt)("strong",{parentName:"p"},"raw_value"),". Depois, ajustaremos a sensibilidade, para que ele seja acionado apenas por toque:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"pin = board.IO1\ntouch = touchio.TouchIn(pin)\nprint(touch.raw_value)\ntouch.threshold = 17300\n")),(0,r.kt)("p",null,"Ap\xf3s adicionarmos a fun\xe7\xe3o ",(0,r.kt)("strong",{parentName:"p"},"threshold"),", o led s\xf3 \xe9 acionado se tocarmos o \u201csensor\u201d. Isso acontece, pois, o configuramos com uma sensibilidade menor, ou seja, um valor m\xednimo de capacit\xe2ncia maior, para que a mudan\xe7a seja percebida pela placa."),(0,r.kt)("h2",{id:"conclus\xe3o"},(0,r.kt)("strong",{parentName:"h2"},"Conclus\xe3o")),(0,r.kt)("p",null,"Aprendemos, atrav\xe9s de um exemplo pr\xe1tico, a como usar um pino toque capacitivo, que, em muitas situa\xe7\xf5es pode ser usado para substituir bot\xf5es e interruptores, por exemplo, apresentando-se como uma solu\xe7\xe3o mais simples, pois seu funcionamento n\xe3o \xe9 mec\xe2nico. Al\xe9m disso, pudemos ver como ajustar a sensibilidade desse sensor as nossas necessidades."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Autor"),(0,r.kt)("th",{parentName:"tr",align:null},"Mateus Adriano Ventura Vieira"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data:"),(0,r.kt)("td",{parentName:"tr",align:null},"06/05/2022")))))}m.isMDXComponent=!0},8941:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/circuito-toque-capacitivo-baa986e339db82a3e64763d11f03a158.webp"}}]); \ No newline at end of file diff --git a/en/assets/js/f2d382a4.43d89127.js b/en/assets/js/f2d382a4.43d89127.js new file mode 100755 index 000000000..0c0633033 --- /dev/null +++ b/en/assets/js/f2d382a4.43d89127.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7568],{16972:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>c,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var r=t(17624),o=t(95788);const i={id:"sobre",title:"Welcome to Franzinho project documentation",sidebar_label:"Welcome!",slug:"/"},c=void 0,a={id:"sobre",title:"Welcome to Franzinho project documentation",description:"Here you find the documents (Under development) to work with all boards and kits Franzinho.",source:"@site/i18n/en/docusaurus-plugin-content-docs/current/sobre.md",sourceDirName:".",slug:"/",permalink:"/en/docs/",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/sobre.md",tags:[],version:"current",frontMatter:{id:"sobre",title:"Welcome to Franzinho project documentation",sidebar_label:"Welcome!",slug:"/"},sidebar:"docs",next:{title:"Placa Franzininho WiFi",permalink:"/en/docs/franzininho-wifi/franzininho-wifi"}},s={},l=[{value:"About the Franzininho project",id:"about-the-franzininho-project",level:2},{value:"Join the community",id:"join-the-community",level:2},{value:"Contact the organizers",id:"contact-the-organizers",level:2}];function h(e){const n={a:"a",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.MN)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["Here you find the documents (",(0,r.jsx)(n.strong,{children:"Under development"}),") to work with all boards and kits Franzinho."]}),"\n",(0,r.jsxs)(n.p,{children:["If you need help and can't find it here, feel free to join the community on ",(0,r.jsx)(n.a,{href:"https://discord.gg/H5kENmWGaz",children:"Discord"})]}),"\n",(0,r.jsx)(n.p,{children:"If you are not familiar with the Franzinho project, here is a brief summary:"}),"\n",(0,r.jsx)(n.h2,{id:"about-the-franzininho-project",children:"About the Franzininho project"}),"\n",(0,r.jsxs)(n.p,{children:["The project ",(0,r.jsx)(n.a,{href:"https://franzininho.com.br/",children:"Franzininho"})," it was created with the objective of encouraging and empowering Brazilians to become protagonists in the development of electronic projects involving embedded systems and IoT."]}),"\n",(0,r.jsx)(n.p,{children:"We seek to make the study of current technologies accessible to Brazilian society through content, teaching materials, development tools, shared projects and the community involved."}),"\n",(0,r.jsx)(n.p,{children:"We work based on the following pillars: Open source software and hardware, open teaching materials, community, knowledge sharing, collaboration."}),"\n",(0,r.jsx)(n.h2,{id:"join-the-community",children:"Join the community"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://discord.gg/H5kENmWGaz",children:"Server on Discord"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.facebook.com/groups/299236843857849/",children:"Facebook group"})}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"contact-the-organizers",children:"Contact the organizers"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://franzininho.com.br/",children:"site"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"mailto:contato@franzininho.com.br",children:"e-mail"})}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,o.MN)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},95788:(e,n,t)=>{t.d(n,{MN:()=>l});var r=t(11504);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function a(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),l=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):c(c({},n),e)),t},h={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,d=a(e,["components","mdxType","originalType","parentName"]),u=l(t),p=o,m=u["".concat(s,".").concat(p)]||u[p]||h[p]||i;return t?r.createElement(m,c(c({ref:n},d),{},{components:t})):r.createElement(m,c({ref:n},d))}));d.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/f2d382a4.a75b663c.js b/en/assets/js/f2d382a4.a75b663c.js deleted file mode 100755 index 1ad8f32a2..000000000 --- a/en/assets/js/f2d382a4.a75b663c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[7055],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),s=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=s(n),d=o,h=u["".concat(l,".").concat(d)]||u[d]||m[d]||i;return n?r.createElement(h,a(a({ref:t},p),{},{components:n})):r.createElement(h,a({ref:t},p))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[u]="string"==typeof e?e:o,a[1]=c;for(var s=2;s<i;s++)a[s]=n[s];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},1549:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>c,toc:()=>s});var r=n(3117),o=(n(7294),n(3905));const i={id:"sobre",title:"Welcome to Franzinho project documentation",sidebar_label:"Welcome!",slug:"/"},a=void 0,c={unversionedId:"sobre",id:"sobre",title:"Welcome to Franzinho project documentation",description:"Here you find the documents (Under development) to work with all boards and kits Franzinho.",source:"@site/i18n/en/docusaurus-plugin-content-docs/current/sobre.md",sourceDirName:".",slug:"/",permalink:"/en/docs/",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/sobre.md",tags:[],version:"current",frontMatter:{id:"sobre",title:"Welcome to Franzinho project documentation",sidebar_label:"Welcome!",slug:"/"},sidebar:"docs",next:{title:"Placa Franzininho WiFi",permalink:"/en/docs/franzininho-wifi/franzininho-wifi"}},l={},s=[{value:"About the Franzininho project",id:"about-the-franzininho-project",level:2},{value:"Join the community",id:"join-the-community",level:2},{value:"Contact the organizers",id:"contact-the-organizers",level:2}],p={toc:s},u="wrapper";function m(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Here you find the documents (",(0,o.kt)("strong",{parentName:"p"},"Under development"),") to work with all boards and kits Franzinho."),(0,o.kt)("p",null,"If you need help and can't find it here, feel free to join the community on ",(0,o.kt)("a",{parentName:"p",href:"https://discord.gg/H5kENmWGaz"},"Discord")),(0,o.kt)("p",null,"If you are not familiar with the Franzinho project, here is a brief summary:"),(0,o.kt)("h2",{id:"about-the-franzininho-project"},"About the Franzininho project"),(0,o.kt)("p",null,"The project ",(0,o.kt)("a",{parentName:"p",href:"https://franzininho.com.br/"},"Franzininho")," it was created with the objective of encouraging and empowering Brazilians to become protagonists in the development of electronic projects involving embedded systems and IoT."),(0,o.kt)("p",null,"We seek to make the study of current technologies accessible to Brazilian society through content, teaching materials, development tools, shared projects and the community involved."),(0,o.kt)("p",null,"We work based on the following pillars: Open source software and hardware, open teaching materials, community, knowledge sharing, collaboration."),(0,o.kt)("h2",{id:"join-the-community"},"Join the community"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://discord.gg/H5kENmWGaz"},"Server on Discord")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://www.facebook.com/groups/299236843857849/"},"Facebook group"))),(0,o.kt)("h2",{id:"contact-the-organizers"},"Contact the organizers"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://franzininho.com.br/"},"site")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"mailto:contato@franzininho.com.br"},"e-mail"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/f3019b90.11545fed.js b/en/assets/js/f3019b90.11545fed.js new file mode 100755 index 000000000..65ed8f4e2 --- /dev/null +++ b/en/assets/js/f3019b90.11545fed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[952],{71484:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var o=i(17624),r=i(95788);const a={id:"brilho-led",title:"Controle brilho de LED",slug:"/franzininho-diy/brilho-led",description:"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY."},t="Materiais",l={id:"FranzininhoDIY/exemplos-arduino/brilho-led",title:"Controle brilho de LED",description:"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/brilho-led.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/brilho-led",permalink:"/en/docs/franzininho-diy/brilho-led",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/brilho-led.md",tags:[],version:"current",frontMatter:{id:"brilho-led",title:"Controle brilho de LED",slug:"/franzininho-diy/brilho-led",description:"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY."},sidebar:"docs",previous:{title:"Pisca LED",permalink:"/en/docs/franzininho-diy/pisca-led"},next:{title:"Leitura de Tecla",permalink:"/en/docs/franzininho-diy/leitura-tecla"}},d={},c=[{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}];function s(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.MN)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"Esse exemplo exibe como controlar a intensidade de um LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY."}),"\n",(0,o.jsx)(n.h1,{id:"materiais",children:"Materiais"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Placa Franzininho;"}),"\n",(0,o.jsx)(n.li,{children:"Protoboard;"}),"\n",(0,o.jsx)(n.li,{children:"LED 3mm;"}),"\n",(0,o.jsx)(n.li,{children:"Resistor 330;"}),"\n",(0,o.jsx)(n.li,{children:"Jumpers macho/f\xeamea;"}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"circuito",children:"Circuito"}),"\n",(0,o.jsx)(n.p,{children:"Na protoboard voc\xea pode montar o circuito para acionamento do LED da seguinte forma:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Circuito",src:i(98104).c+"",width:"1833",height:"756"})}),"\n",(0,o.jsx)(n.h2,{id:"sketch",children:"Sketch"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-cpp",children:"/*\n Franzininho\n Exemplo: Controle Brilho de LED - PWM\n Esse exemplo exibe como controlar a intensidade de brilho de um LED usando PWM\n*/\n\nconst int LED = 1; //pino para o LED\nint i = 0; //utilizaremos essa vari\xe1vel para contagem auxiliar\n\nvoid setup() {\n pinMode(LED,OUTPUT); //configura o pino do LED como uma sa\xedda\n}\n\nvoid loop() {\n //faz um loop de 0 a 255 (acende gradualmente)\n for (i = 0; i<255; i++) {\n analogWrite (LED, i); // define o brilho do LED\n delay (10); //espere 10ms, pois analogwrite \xe9 um instant\xe2neo e n\xe3o ver\xedamos nenhuma altera\xe7\xe3o\n }\n\n delay(1000);\n\n //faz um loop de 255 a 1 (apaga gradualmente)\n for (i = 255; i > 0; i--) { \n analogWrite(LED, i); //define o brilho do LED\n delay(10); //aguarda 10ms\n }\n\n delay(1000);\n}\n"})}),"\n",(0,o.jsx)(n.admonition,{title:"Saidas PWM",type:"tip",children:(0,o.jsx)(n.p,{children:"Verifique no pinout da Franzininho DIY quais os pinos possuem fun\xe7\xe3o de sa\xedda PWM"})}),"\n",(0,o.jsx)(n.h2,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311359730520949312?view=diagram"}),"\n",(0,o.jsx)(n.h2,{id:"video-de-funcionamento",children:"Video de Funcionamento"}),"\n",(0,o.jsx)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/0W5Dos0NHsE",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0})]})}function u(e={}){const{wrapper:n}={...(0,r.MN)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(s,{...e})}):s(e)}},95788:(e,n,i)=>{i.d(n,{MN:()=>c});var o=i(11504);function r(e,n,i){return n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e}function a(e,n){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),i.push.apply(i,o)}return i}function t(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?a(Object(i),!0).forEach((function(n){r(e,n,i[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):a(Object(i)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(i,n))}))}return e}function l(e,n){if(null==e)return{};var i,o,r=function(e,n){if(null==e)return{};var i,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)i=a[o],n.indexOf(i)>=0||(r[i]=e[i]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)i=a[o],n.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var d=o.createContext({}),c=function(e){var n=o.useContext(d),i=n;return e&&(i="function"==typeof e?e(n):t(t({},n),e)),i},s={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var i=e.components,r=e.mdxType,a=e.originalType,d=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(i),m=r,h=p["".concat(d,".").concat(m)]||p[m]||s[m]||a;return i?o.createElement(h,t(t({ref:n},u),{},{components:i})):o.createElement(h,t({ref:n},u))}));u.displayName="MDXCreateElement"},98104:(e,n,i)=>{i.d(n,{c:()=>o});const o=i.p+"assets/images/brilho-led-circuito-cafaefb0f69ebc87e542c140ed6f0f67.png"}}]); \ No newline at end of file diff --git a/en/assets/js/f3019b90.db752ab3.js b/en/assets/js/f3019b90.db752ab3.js deleted file mode 100755 index ac299e236..000000000 --- a/en/assets/js/f3019b90.db752ab3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[467],{3905:(e,n,o)=>{o.d(n,{Zo:()=>u,kt:()=>f});var i=o(7294);function r(e,n,o){return n in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o,e}function t(e,n){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),o.push.apply(o,i)}return o}function a(e){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?t(Object(o),!0).forEach((function(n){r(e,n,o[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):t(Object(o)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(o,n))}))}return e}function l(e,n){if(null==e)return{};var o,i,r=function(e,n){if(null==e)return{};var o,i,r={},t=Object.keys(e);for(i=0;i<t.length;i++)o=t[i],n.indexOf(o)>=0||(r[o]=e[o]);return r}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(i=0;i<t.length;i++)o=t[i],n.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var d=i.createContext({}),c=function(e){var n=i.useContext(d),o=n;return e&&(o="function"==typeof e?e(n):a(a({},n),e)),o},u=function(e){var n=c(e.components);return i.createElement(d.Provider,{value:n},e.children)},s="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},m=i.forwardRef((function(e,n){var o=e.components,r=e.mdxType,t=e.originalType,d=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),s=c(o),m=r,f=s["".concat(d,".").concat(m)]||s[m]||p[m]||t;return o?i.createElement(f,a(a({ref:n},u),{},{components:o})):i.createElement(f,a({ref:n},u))}));function f(e,n){var o=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var t=o.length,a=new Array(t);a[0]=m;var l={};for(var d in n)hasOwnProperty.call(n,d)&&(l[d]=n[d]);l.originalType=e,l[s]="string"==typeof e?e:r,a[1]=l;for(var c=2;c<t;c++)a[c]=o[c];return i.createElement.apply(null,a)}return i.createElement.apply(null,o)}m.displayName="MDXCreateElement"},7987:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var i=o(3117),r=(o(7294),o(3905));const t={id:"brilho-led",title:"Controle brilho de LED",slug:"/franzininho-diy/brilho-led",description:"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY."},a=void 0,l={unversionedId:"FranzininhoDIY/exemplos-arduino/brilho-led",id:"FranzininhoDIY/exemplos-arduino/brilho-led",title:"Controle brilho de LED",description:"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY.",source:"@site/docs/FranzininhoDIY/exemplos-arduino/brilho-led.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/brilho-led",permalink:"/en/docs/franzininho-diy/brilho-led",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/brilho-led.md",tags:[],version:"current",frontMatter:{id:"brilho-led",title:"Controle brilho de LED",slug:"/franzininho-diy/brilho-led",description:"Esse exemplo exibe como controlar a intensidade do LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY."},sidebar:"docs",previous:{title:"Pisca LED",permalink:"/en/docs/franzininho-diy/pisca-led"},next:{title:"Leitura de Tecla",permalink:"/en/docs/franzininho-diy/leitura-tecla"}},d={},c=[{value:"Circuito",id:"circuito",level:2},{value:"Sketch",id:"sketch",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:2},{value:"Video de Funcionamento",id:"video-de-funcionamento",level:2}],u={toc:c},s="wrapper";function p(e){let{components:n,...t}=e;return(0,r.kt)(s,(0,i.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Esse exemplo exibe como controlar a intensidade de um LED usando a fun\xe7\xe3o analogWrite() na Franzininho DIY."),(0,r.kt)("h1",{id:"materiais"},"Materiais"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Placa Franzininho;"),(0,r.kt)("li",{parentName:"ul"},"Protoboard;"),(0,r.kt)("li",{parentName:"ul"},"LED 3mm;"),(0,r.kt)("li",{parentName:"ul"},"Resistor 330;"),(0,r.kt)("li",{parentName:"ul"},"Jumpers macho/f\xeamea;")),(0,r.kt)("h2",{id:"circuito"},"Circuito"),(0,r.kt)("p",null,"Na protoboard voc\xea pode montar o circuito para acionamento do LED da seguinte forma:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Circuito",src:o(7706).Z,width:"1833",height:"756"})),(0,r.kt)("h2",{id:"sketch"},"Sketch"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"/*\n Franzininho\n Exemplo: Controle Brilho de LED - PWM\n Esse exemplo exibe como controlar a intensidade de brilho de um LED usando PWM\n*/\n\nconst int LED = 1; //pino para o LED\nint i = 0; //utilizaremos essa vari\xe1vel para contagem auxiliar\n\nvoid setup() {\n pinMode(LED,OUTPUT); //configura o pino do LED como uma sa\xedda\n}\n\nvoid loop() {\n //faz um loop de 0 a 255 (acende gradualmente)\n for (i = 0; i<255; i++) {\n analogWrite (LED, i); // define o brilho do LED\n delay (10); //espere 10ms, pois analogwrite \xe9 um instant\xe2neo e n\xe3o ver\xedamos nenhuma altera\xe7\xe3o\n }\n\n delay(1000);\n\n //faz um loop de 255 a 1 (apaga gradualmente)\n for (i = 255; i > 0; i--) { \n analogWrite(LED, i); //define o brilho do LED\n delay(10); //aguarda 10ms\n }\n\n delay(1000);\n}\n")),(0,r.kt)("admonition",{title:"Saidas PWM",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Verifique no pinout da Franzininho DIY quais os pinos possuem fun\xe7\xe3o de sa\xedda PWM")),(0,r.kt)("h2",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,r.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/311359730520949312?view=diagram"}),(0,r.kt)("h2",{id:"video-de-funcionamento"},"Video de Funcionamento"),(0,r.kt)("iframe",{width:"100%",height:"422",src:"https://www.youtube.com/embed/0W5Dos0NHsE",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}))}p.isMDXComponent=!0},7706:(e,n,o)=>{o.d(n,{Z:()=>i});const i=o.p+"assets/images/brilho-led-circuito-cafaefb0f69ebc87e542c140ed6f0f67.png"}}]); \ No newline at end of file diff --git a/en/assets/js/f3dd2eb3.c77b901c.js b/en/assets/js/f3dd2eb3.c77b901c.js new file mode 100755 index 000000000..702796979 --- /dev/null +++ b/en/assets/js/f3dd2eb3.c77b901c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8556],{15720:e=>{e.exports=JSON.parse('{"permalink":"/en/blog/tags/facebook","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/en/assets/js/f3dd2eb3.eec001d0.js b/en/assets/js/f3dd2eb3.eec001d0.js deleted file mode 100755 index c3bfafa64..000000000 --- a/en/assets/js/f3dd2eb3.eec001d0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5904],{2452:e=>{e.exports=JSON.parse('{"permalink":"/en/blog/tags/facebook","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/en/assets/js/f3f8ac04.8d0b739e.js b/en/assets/js/f3f8ac04.8d0b739e.js new file mode 100755 index 000000000..614552074 --- /dev/null +++ b/en/assets/js/f3f8ac04.8d0b739e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[2899],{98848:s=>{s.exports=JSON.parse('{"label":"docusaurus","permalink":"/en/blog/tags/docusaurus","allTagsPath":"/en/blog/tags","count":3,"unlisted":false}')}}]); \ No newline at end of file diff --git a/en/assets/js/f3f8ac04.ff4b2813.js b/en/assets/js/f3f8ac04.ff4b2813.js deleted file mode 100755 index 90b0a4d71..000000000 --- a/en/assets/js/f3f8ac04.ff4b2813.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1193],{8681:a=>{a.exports=JSON.parse('{"label":"docusaurus","permalink":"/en/blog/tags/docusaurus","allTagsPath":"/en/blog/tags","count":3}')}}]); \ No newline at end of file diff --git a/en/assets/js/f64cfe00.671658d6.js b/en/assets/js/f64cfe00.671658d6.js deleted file mode 100755 index b48d3a728..000000000 --- a/en/assets/js/f64cfe00.671658d6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[5045],{3905:(e,o,a)=>{a.d(o,{Zo:()=>p,kt:()=>f});var t=a(7294);function i(e,o,a){return o in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a,e}function n(e,o){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),a.push.apply(a,t)}return a}function r(e){for(var o=1;o<arguments.length;o++){var a=null!=arguments[o]?arguments[o]:{};o%2?n(Object(a),!0).forEach((function(o){i(e,o,a[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(a,o))}))}return e}function s(e,o){if(null==e)return{};var a,t,i=function(e,o){if(null==e)return{};var a,t,i={},n=Object.keys(e);for(t=0;t<n.length;t++)a=n[t],o.indexOf(a)>=0||(i[a]=e[a]);return i}(e,o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(t=0;t<n.length;t++)a=n[t],o.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var l=t.createContext({}),d=function(e){var o=t.useContext(l),a=o;return e&&(a="function"==typeof e?e(o):r(r({},o),e)),a},p=function(e){var o=d(e.components);return t.createElement(l.Provider,{value:o},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var o=e.children;return t.createElement(t.Fragment,{},o)}},m=t.forwardRef((function(e,o){var a=e.components,i=e.mdxType,n=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=d(a),m=i,f=u["".concat(l,".").concat(m)]||u[m]||c[m]||n;return a?t.createElement(f,r(r({ref:o},p),{},{components:a})):t.createElement(f,r({ref:o},p))}));function f(e,o){var a=arguments,i=o&&o.mdxType;if("string"==typeof e||i){var n=a.length,r=new Array(n);r[0]=m;var s={};for(var l in o)hasOwnProperty.call(o,l)&&(s[l]=o[l]);s.originalType=e,s[u]="string"==typeof e?e:i,r[1]=s;for(var d=2;d<n;d++)r[d]=a[d];return t.createElement.apply(null,r)}return t.createElement.apply(null,a)}m.displayName="MDXCreateElement"},593:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>n,metadata:()=>s,toc:()=>d});var t=a(3117),i=(a(7294),a(3905));const n={id:"franzininho-wifi-espidf-02",title:"Entrada digital",slug:"/franzininho-wifi/exemplos-espidf/entrada-digital",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},r=void 0,s={unversionedId:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02",id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02",title:"Entrada digital",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x02-entrada-digital.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/entrada-digital",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x02-entrada-digital.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-02",title:"Entrada digital",slug:"/franzininho-wifi/exemplos-espidf/entrada-digital",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},sidebar:"docs",previous:{title:"Hello World! ESP-IDF",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf"},next:{title:"Entrada Anal\xf3gica",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica"}},l={},d=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"<strong>Recursos Necess\xe1rios</strong>",id:"recursos-necess\xe1rios-1",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}],p={toc:d},u="wrapper";function c(e){let{components:o,...n}=e;return(0,i.kt)(u,(0,t.Z)({},p,n,{components:o,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Seguindo nas aplica\xe7\xf5es com o ESP-IDF naa placa Franzininho WiFi vamos dar continuidade aos trabalhos com o perif\xe9rico de Entrada/Sa\xedda de Prop\xf3sito Geral ou do ingl\xeas General Purpose Input/Output (GPIO) . O objetivo deste texto \xe9 apresentar um exemplo de projeto para configurar os pinos como entrada digital. Ao final, estaremos preparados para manipular tanto as sa\xeddas digitais, vista anteriormente, quanto \xe0s entradas de digitais."),(0,i.kt)("h2",{id:"recursos-necess\xe1rios"},"Recursos Necess\xe1rios"),(0,i.kt)("p",null,"Os materiais necess\xe1rios para realizar esse exemplo s\xe3o:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Placa Franzininho WiFi;"),(0,i.kt)("li",{parentName:"ul"},"Protoboard;"),(0,i.kt)("li",{parentName:"ul"},"Bot\xe3o ou chave t\xe1ctil;"),(0,i.kt)("li",{parentName:"ul"},"LED;"),(0,i.kt)("li",{parentName:"ul"},"Resistor de 220 ou 330 Ohm;"),(0,i.kt)("li",{parentName:"ul"},"Cabos Jumpers;"),(0,i.kt)("li",{parentName:"ul"},"Computador com ESP-IDF instalado e configurado.")),(0,i.kt)("h2",{id:"recursos-necess\xe1rios-1"},(0,i.kt)("strong",{parentName:"h2"},"Recursos Necess\xe1rios")),(0,i.kt)("p",null,"Os materiais necess\xe1rios para realizar esse exemplo s\xe3o:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Placa Franzininho WiFi;"),(0,i.kt)("li",{parentName:"ul"},"Protoboard;"),(0,i.kt)("li",{parentName:"ul"},"Bot\xe3o ou chave t\xe1ctil;"),(0,i.kt)("li",{parentName:"ul"},"LED;"),(0,i.kt)("li",{parentName:"ul"},"Resistor de 220 ou 330 Ohm;"),(0,i.kt)("li",{parentName:"ul"},"Cabos Jumpers;"),(0,i.kt)("li",{parentName:"ul"},"Computador com ESP-IDF instalado e configurado.")),(0,i.kt)("h2",{id:"desenvolvimento"},"Desenvolvimento"),(0,i.kt)("p",null,"Nesse artigo vamos apresentar um exemplo de projeto utilizando as duas fun\xe7\xf5es do perif\xe9rico GPIO: entrada digital e sa\xedda digital. Na entrada digital vamos realizar a leitura do bot\xe3o t\xe1ctil e armazenar seu estado em uma vari\xe1vel que ir\xe1 interagir com o monitor e um LED externo, atuando como uma sa\xedda digital que ir\xe1 nos indicar o estado atual do bot\xe3o."),(0,i.kt)("p",null,"O programa desenvolvido possibilita utilizar duas topologias de circuito : ",(0,i.kt)("a",{parentName:"p",href:"https://www.embarcados.com.br/como-dimensionar-resistores-de-pull-up/"},(0,i.kt)("strong",{parentName:"a"},"pull up"))," ou ",(0,i.kt)("a",{parentName:"p",href:"https://www.embarcados.com.br/resistor-de-pull-down/"},(0,i.kt)("strong",{parentName:"a"},"pull down")),", para mais informa\xe7\xf5es sobre essas topologias acesse os links referente a cada circuito. Nesse exemplo de projeto iremos utilizar a topologia com o pull up interno do processador, desta forma deve-se observar os coment\xe1rios ao longo do c\xf3digo a fim de habilitar ou desabilitar as topologias de circuito."),(0,i.kt)("p",null,"Na placa Franzininho WiFI temos 38 pinos program\xe1veis com o perif\xe9rico GPIO, encorajamos aos leitores que alterem o c\xf3digo da forma como achar necess\xe1rio e praticar a codifica\xe7\xe3o do programa a fim de consolidar o conhecimento adquirido."),(0,i.kt)("h3",{id:"esquem\xe1tico"},"Esquem\xe1tico"),(0,i.kt)("p",null,"Para darmos in\xedcio ao projeto \xe9 importante realizar a montagem do circuito em protoboard observando com cuidado as conex\xf5es, iremos conectar um dos terminais do resistor no ",(0,i.kt)("strong",{parentName:"p"},"GPIO 2")," e outro no LED externo por fim ligamos a ",(0,i.kt)("strong",{parentName:"p"},"GPIO 15")," no bot\xe3o t\xe1ctil. Abaixo segue o esquem\xe1tico proposto:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"circuito",src:a(8346).Z,width:"1755",height:"702"})),(0,i.kt)("h3",{id:"c\xf3digo"},"C\xf3digo"),(0,i.kt)("p",null,"O programa desenvolvido possui uma estrutura bem simples e n\xe3o \xe9 necess\xe1rio acrescentar nenhuma biblioteca, apenas a manuten\xe7\xe3o dos arquivos de cabe\xe7alho j\xe1 presentes no projeto. Ao criar um novo projeto no IDF automaticamente j\xe1 temos arquivos configurados e prontos para programa\xe7\xe3o do dispositivo, desta forma digite e comente as linhas do seguinte c\xf3digo no arquivo ",(0,i.kt)("strong",{parentName:"p"},"main.c :")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-c"},'/*\n Autor : Halysson Junior\n Data: 31/03/21\n Descri\xe7\xe3o:\n Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital)\n e mostra seu estado no terminal.\n\n*/\n\n// Inclus\xe3o arquivos de cabe\xe7alho\n\n#include <stdio.h>\n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "driver/gpio.h"\n#include "sdkconfig.h"\n\n// Defini\xe7\xf5es de Pinos\n#define BTN 15\n#define LED 2\n\n// Defini\xe7\xe3o de habilita\xe7\xe3o (PULLUP / PULLDOWN)\n#define PULLUP\n// #define PULLDOWN (Para habilitar pulldown descomente aqui e comente -> " #define PULLUP ")\n\n// Defini\xe7\xf5es de estado l\xf3gico (caso altere para pulldown, deve-se inverter os estado l\xf3gicos)\n#define ON 1\n#define OFF 0\n\nvoid app_main(void){ // Main\n\n gpio_pad_select_gpio(LED); \n gpio_set_direction(LED,GPIO_MODE_OUTPUT);// onfigura LED como sa\xedda digital\n\n gpio_pad_select_gpio(BTN); \n gpio_set_direction(BTN,GPIO_MODE_INPUT); // Configura LED como sa\xedda digital\n\n #ifdef PULLDOWN // Habilita pulldown\n\n gpio_pulldown_en(BTN);\n gpio_pullup_dis(BTN); \n\n #endif\n\n #ifdef PULLUP // Habilita pullup\n gpio_pullup_en(BTN);\n gpio_pulldown_dis(BTN);\n\n #endif\n\n// V\xe1riavel Local\nbool last_state_btn = 0; // Armazena o \xfaltimo estado do bot\xe3o \n\n while (1) { // Loop\n\n // V\xe1riavel Local \n bool state_btn = gpio_get_level(BTN); // Leitura do bot\xe3o\n\n if(!state_btn && !last_state_btn) {\n gpio_set_level(LED,ON); // Se bot\xe3o for zero ent\xe3o ... liga LED\n printf("LED LIGADO"); // Mostra informa\xe7\xe3o no monitor "LED LIGADO"\n last_state_btn = true; // Bot\xe3o pressionado\n }\n\n else if(state_btn && last_state_btn){\n gpio_set_level(LED,OFF); // Sen\xe3o... desliga LED\n printf ("LED DESLIGADO"); // Mostra informa\xe7\xe3o no monitor "LED DESLIGADO"\n last_state_btn = false; // Bot\xe3o solto\n }\n vTaskDelay(1/ portTICK_PERIOD_MS); // Rotina de Delay de 1 segundo\n fflush(stdout); // Descarrega os buffers de sa\xedda de dados \n\n }// endLoop\n\n}// endMain\n')),(0,i.kt)("p",null,"Voc\xea encontra o projeto completo na documenta\xe7\xe3o da Franzininho: ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("a",{parentName:"strong",href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/Button"},"Button"))),(0,i.kt)("p",null,"Caso ainda n\xe3o tenha instalado e configurado o IDF no seu computador ou tenha d\xfavidas sobre as ferramentas, acesse o tutorial de instala\xe7\xe3o (",(0,i.kt)("a",{parentName:"p",href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi-espidf/primeiros-passos"},"Clique Aqui"),")."),(0,i.kt)("h3",{id:"compila\xe7\xe3o"},"Compila\xe7\xe3o"),(0,i.kt)("p",null,"Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("em",{parentName:"strong"},"set-target"))," para ESP 32-S2:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"idf.py set-target esp32s2\n")),(0,i.kt)("p",null,"Ao final da compila\xe7\xe3o o resultado final deve ser semelhante \xe0 imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu c\xf3digo."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"resultado da compila\xe7\xe3o",src:a(5823).Z,width:"1064",height:"349"})),(0,i.kt)("p",null,"Ap\xf3s a etapa de compila\xe7\xe3o vamos enviar o c\xf3digo fonte para nossa placa, no editor pressione o \xedcone abaixo e aguarde alguns segundos para assim dar in\xedcio ao programa \u201cButton\u201d(seta preta) e para vermos a sa\xedda de dados do nosso projeto clique no \xedcone no formato de monitor (seta vermelha):"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"atalhos de compila\xe7\xe3o",src:a(3159).Z,width:"528",height:"54"})),(0,i.kt)("h2",{id:"resultados"},"Resultados"),(0,i.kt)("p",null,"Finalizando o exemplo de projeto o leitor deve ter observado que no programa Button, foram utilizadas as estruturas de condi\xe7\xe3o IF / ELSE IF para interagir com o estado atual do bot\xe3o, adicionou-se \xe0s uma nova label nativa para indicar as entradas digitais (GPIO_MODE_INPUT) e as fun\xe7\xf5es para indicar topologia do circuito ( gpio_pullup_en()/gpio pulldown_dis()) utilizado e verificar a leitura digital no pino definido no cabe\xe7alho do c\xf3digo."),(0,i.kt)("p",null,"Abaixo segue o resultado final dos dados de sa\xedda no monitor:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"sa\xedda monitor serial",src:a(4983).Z,width:"539",height:"168"})),(0,i.kt)("p",null,"Abaixo segue o nosso circuito do nosso projeto:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"teste na bancada",src:a(9331).Z,width:"1336",height:"668"})),(0,i.kt)("h2",{id:"conclus\xe3o"},"Conclus\xe3o"),(0,i.kt)("p",null,"Nesse projeto conclu\xedmos o estudo do perif\xe9rico base para iniciar no mundo dos microcontroladores, pois a partir desse conhecimento adquirido podemos reciclar para as outras fam\xedlias do ESP32, como tamb\xe9m em outros chips baseados na linguagem C para estruturar seu programa. Como mencionado na se\xe7\xe3o de Desenvolvimento, este segundo artigo deseja consolidar o conhecimento nesse perif\xe9rico (GPIO), por tanto deixo o desafio de criar um contador de pulsos de 0 at\xe9 10 e reiniciado sempre quando forma maior que 10, ao final de cada contagem deve-se acionar um LED e mostrar quantas contagens j\xe1 foram feitas. Desejo sorte \xe0queles que ir\xe3o realizar o desafio e bons estudos, que a ",(0,i.kt)("strong",{parentName:"p"},"for\xe7a esteja com todos n\xf3s.")),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Autor"),(0,i.kt)("th",{parentName:"tr",align:null},(0,i.kt)("a",{parentName:"th",href:"https://github.com/halyssonJr"},"Halysson Junior")))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Data:"),(0,i.kt)("td",{parentName:"tr",align:null},"01/06/2021")))))}c.isMDXComponent=!0},8346:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/1-124f6f4ee8bacde41bd8a9e355dc439a.png"},5823:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/2-9dcac030cd53ee20f535abf4683f595c.png"},3159:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/3-e82c6cff8b1723ecc738df1fa83a7f4d.png"},4983:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/4-398af45ebe97733b089183f9be584ceb.png"},9331:(e,o,a)=>{a.d(o,{Z:()=>t});const t=a.p+"assets/images/5-38b38892827b20fb4c4fad0565d3620c.png"}}]); \ No newline at end of file diff --git a/en/assets/js/f64cfe00.d95e9c32.js b/en/assets/js/f64cfe00.d95e9c32.js new file mode 100755 index 000000000..10beef9a4 --- /dev/null +++ b/en/assets/js/f64cfe00.d95e9c32.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9464],{29960:(e,o,i)=>{i.r(o),i.d(o,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>s,metadata:()=>t,toc:()=>l});var a=i(17624),n=i(95788);const s={id:"franzininho-wifi-espidf-02",title:"Entrada digital",slug:"/franzininho-wifi/exemplos-espidf/entrada-digital",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},r=void 0,t={id:"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02",title:"Entrada digital",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",source:"@site/docs/FranzininhoWifi/exemplos-espidf/0x02-entrada-digital.md",sourceDirName:"FranzininhoWifi/exemplos-espidf",slug:"/franzininho-wifi/exemplos-espidf/entrada-digital",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoWifi/exemplos-espidf/0x02-entrada-digital.md",tags:[],version:"current",frontMatter:{id:"franzininho-wifi-espidf-02",title:"Entrada digital",slug:"/franzininho-wifi/exemplos-espidf/entrada-digital",description:"Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital) e mostra seu estado no terminal.",author:"Halysson Junior"},sidebar:"docs",previous:{title:"Hello World! ESP-IDF",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf"},next:{title:"Entrada Anal\xf3gica",permalink:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica"}},d={},l=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"<strong>Recursos Necess\xe1rios</strong>",id:"recursos-necess\xe1rios-1",level:2},{value:"Desenvolvimento",id:"desenvolvimento",level:2},{value:"Esquem\xe1tico",id:"esquem\xe1tico",level:3},{value:"C\xf3digo",id:"c\xf3digo",level:3},{value:"Compila\xe7\xe3o",id:"compila\xe7\xe3o",level:3},{value:"Resultados",id:"resultados",level:2},{value:"Conclus\xe3o",id:"conclus\xe3o",level:2}];function c(e){const o={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.p,{children:"Seguindo nas aplica\xe7\xf5es com o ESP-IDF naa placa Franzininho WiFi vamos dar continuidade aos trabalhos com o perif\xe9rico de Entrada/Sa\xedda de Prop\xf3sito Geral ou do ingl\xeas General Purpose Input/Output (GPIO) . O objetivo deste texto \xe9 apresentar um exemplo de projeto para configurar os pinos como entrada digital. Ao final, estaremos preparados para manipular tanto as sa\xeddas digitais, vista anteriormente, quanto \xe0s entradas de digitais."}),"\n",(0,a.jsx)(o.h2,{id:"recursos-necess\xe1rios",children:"Recursos Necess\xe1rios"}),"\n",(0,a.jsx)(o.p,{children:"Os materiais necess\xe1rios para realizar esse exemplo s\xe3o:"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"Placa Franzininho WiFi;"}),"\n",(0,a.jsx)(o.li,{children:"Protoboard;"}),"\n",(0,a.jsx)(o.li,{children:"Bot\xe3o ou chave t\xe1ctil;"}),"\n",(0,a.jsx)(o.li,{children:"LED;"}),"\n",(0,a.jsx)(o.li,{children:"Resistor de 220 ou 330 Ohm;"}),"\n",(0,a.jsx)(o.li,{children:"Cabos Jumpers;"}),"\n",(0,a.jsx)(o.li,{children:"Computador com ESP-IDF instalado e configurado."}),"\n"]}),"\n",(0,a.jsx)(o.h2,{id:"recursos-necess\xe1rios-1",children:(0,a.jsx)(o.strong,{children:"Recursos Necess\xe1rios"})}),"\n",(0,a.jsx)(o.p,{children:"Os materiais necess\xe1rios para realizar esse exemplo s\xe3o:"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:"Placa Franzininho WiFi;"}),"\n",(0,a.jsx)(o.li,{children:"Protoboard;"}),"\n",(0,a.jsx)(o.li,{children:"Bot\xe3o ou chave t\xe1ctil;"}),"\n",(0,a.jsx)(o.li,{children:"LED;"}),"\n",(0,a.jsx)(o.li,{children:"Resistor de 220 ou 330 Ohm;"}),"\n",(0,a.jsx)(o.li,{children:"Cabos Jumpers;"}),"\n",(0,a.jsx)(o.li,{children:"Computador com ESP-IDF instalado e configurado."}),"\n"]}),"\n",(0,a.jsx)(o.h2,{id:"desenvolvimento",children:"Desenvolvimento"}),"\n",(0,a.jsx)(o.p,{children:"Nesse artigo vamos apresentar um exemplo de projeto utilizando as duas fun\xe7\xf5es do perif\xe9rico GPIO: entrada digital e sa\xedda digital. Na entrada digital vamos realizar a leitura do bot\xe3o t\xe1ctil e armazenar seu estado em uma vari\xe1vel que ir\xe1 interagir com o monitor e um LED externo, atuando como uma sa\xedda digital que ir\xe1 nos indicar o estado atual do bot\xe3o."}),"\n",(0,a.jsxs)(o.p,{children:["O programa desenvolvido possibilita utilizar duas topologias de circuito : ",(0,a.jsx)(o.a,{href:"https://www.embarcados.com.br/como-dimensionar-resistores-de-pull-up/",children:(0,a.jsx)(o.strong,{children:"pull up"})})," ou ",(0,a.jsx)(o.a,{href:"https://www.embarcados.com.br/resistor-de-pull-down/",children:(0,a.jsx)(o.strong,{children:"pull down"})}),", para mais informa\xe7\xf5es sobre essas topologias acesse os links referente a cada circuito. Nesse exemplo de projeto iremos utilizar a topologia com o pull up interno do processador, desta forma deve-se observar os coment\xe1rios ao longo do c\xf3digo a fim de habilitar ou desabilitar as topologias de circuito."]}),"\n",(0,a.jsx)(o.p,{children:"Na placa Franzininho WiFI temos 38 pinos program\xe1veis com o perif\xe9rico GPIO, encorajamos aos leitores que alterem o c\xf3digo da forma como achar necess\xe1rio e praticar a codifica\xe7\xe3o do programa a fim de consolidar o conhecimento adquirido."}),"\n",(0,a.jsx)(o.h3,{id:"esquem\xe1tico",children:"Esquem\xe1tico"}),"\n",(0,a.jsxs)(o.p,{children:["Para darmos in\xedcio ao projeto \xe9 importante realizar a montagem do circuito em protoboard observando com cuidado as conex\xf5es, iremos conectar um dos terminais do resistor no ",(0,a.jsx)(o.strong,{children:"GPIO 2"})," e outro no LED externo por fim ligamos a ",(0,a.jsx)(o.strong,{children:"GPIO 15"})," no bot\xe3o t\xe1ctil. Abaixo segue o esquem\xe1tico proposto:"]}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"circuito",src:i(29148).c+"",width:"1755",height:"702"})}),"\n",(0,a.jsx)(o.h3,{id:"c\xf3digo",children:"C\xf3digo"}),"\n",(0,a.jsxs)(o.p,{children:["O programa desenvolvido possui uma estrutura bem simples e n\xe3o \xe9 necess\xe1rio acrescentar nenhuma biblioteca, apenas a manuten\xe7\xe3o dos arquivos de cabe\xe7alho j\xe1 presentes no projeto. Ao criar um novo projeto no IDF automaticamente j\xe1 temos arquivos configurados e prontos para programa\xe7\xe3o do dispositivo, desta forma digite e comente as linhas do seguinte c\xf3digo no arquivo ",(0,a.jsx)(o.strong,{children:"main.c :"})]}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-c",children:'/*\n Autor : Halysson Junior\n Data: 31/03/21\n Descri\xe7\xe3o:\n Neste exemplo utilizou-se um bot\xe3o t\xe1ctil (entrada digital) para acionar um LED (sa\xedda digital)\n e mostra seu estado no terminal.\n\n*/\n\n// Inclus\xe3o arquivos de cabe\xe7alho\n\n#include <stdio.h>\n#include "freertos/FreeRTOS.h"\n#include "freertos/task.h"\n#include "driver/gpio.h"\n#include "sdkconfig.h"\n\n// Defini\xe7\xf5es de Pinos\n#define BTN 15\n#define LED 2\n\n// Defini\xe7\xe3o de habilita\xe7\xe3o (PULLUP / PULLDOWN)\n#define PULLUP\n// #define PULLDOWN (Para habilitar pulldown descomente aqui e comente -> " #define PULLUP ")\n\n// Defini\xe7\xf5es de estado l\xf3gico (caso altere para pulldown, deve-se inverter os estado l\xf3gicos)\n#define ON 1\n#define OFF 0\n\nvoid app_main(void){ // Main\n\n gpio_pad_select_gpio(LED); \n gpio_set_direction(LED,GPIO_MODE_OUTPUT);// onfigura LED como sa\xedda digital\n\n gpio_pad_select_gpio(BTN); \n gpio_set_direction(BTN,GPIO_MODE_INPUT); // Configura LED como sa\xedda digital\n\n #ifdef PULLDOWN // Habilita pulldown\n\n gpio_pulldown_en(BTN);\n gpio_pullup_dis(BTN); \n\n #endif\n\n #ifdef PULLUP // Habilita pullup\n gpio_pullup_en(BTN);\n gpio_pulldown_dis(BTN);\n\n #endif\n\n// V\xe1riavel Local\nbool last_state_btn = 0; // Armazena o \xfaltimo estado do bot\xe3o \n\n while (1) { // Loop\n\n // V\xe1riavel Local \n bool state_btn = gpio_get_level(BTN); // Leitura do bot\xe3o\n\n if(!state_btn && !last_state_btn) {\n gpio_set_level(LED,ON); // Se bot\xe3o for zero ent\xe3o ... liga LED\n printf("LED LIGADO"); // Mostra informa\xe7\xe3o no monitor "LED LIGADO"\n last_state_btn = true; // Bot\xe3o pressionado\n }\n\n else if(state_btn && last_state_btn){\n gpio_set_level(LED,OFF); // Sen\xe3o... desliga LED\n printf ("LED DESLIGADO"); // Mostra informa\xe7\xe3o no monitor "LED DESLIGADO"\n last_state_btn = false; // Bot\xe3o solto\n }\n vTaskDelay(1/ portTICK_PERIOD_MS); // Rotina de Delay de 1 segundo\n fflush(stdout); // Descarrega os buffers de sa\xedda de dados \n\n }// endLoop\n\n}// endMain\n'})}),"\n",(0,a.jsxs)(o.p,{children:["Voc\xea encontra o projeto completo na documenta\xe7\xe3o da Franzininho: ",(0,a.jsx)(o.strong,{children:(0,a.jsx)(o.a,{href:"https://github.com/Franzininho/exemplos-esp-idf/tree/main/exemplos/Button",children:"Button"})})]}),"\n",(0,a.jsxs)(o.p,{children:["Caso ainda n\xe3o tenha instalado e configurado o IDF no seu computador ou tenha d\xfavidas sobre as ferramentas, acesse o tutorial de instala\xe7\xe3o (",(0,a.jsx)(o.a,{href:"https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi-espidf/primeiros-passos",children:"Clique Aqui"}),")."]}),"\n",(0,a.jsx)(o.h3,{id:"compila\xe7\xe3o",children:"Compila\xe7\xe3o"}),"\n",(0,a.jsxs)(o.p,{children:["Ap\xf3s a codifica\xe7\xe3o vamos compilar o c\xf3digo, mas antes selecione o ",(0,a.jsx)(o.strong,{children:(0,a.jsx)(o.em,{children:"set-target"})})," para ESP 32-S2:"]}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-bash",children:"idf.py set-target esp32s2\n"})}),"\n",(0,a.jsx)(o.p,{children:"Ao final da compila\xe7\xe3o o resultado final deve ser semelhante \xe0 imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu c\xf3digo."}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"resultado da compila\xe7\xe3o",src:i(50380).c+"",width:"1064",height:"349"})}),"\n",(0,a.jsx)(o.p,{children:"Ap\xf3s a etapa de compila\xe7\xe3o vamos enviar o c\xf3digo fonte para nossa placa, no editor pressione o \xedcone abaixo e aguarde alguns segundos para assim dar in\xedcio ao programa \u201cButton\u201d(seta preta) e para vermos a sa\xedda de dados do nosso projeto clique no \xedcone no formato de monitor (seta vermelha):"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"atalhos de compila\xe7\xe3o",src:i(38100).c+"",width:"528",height:"54"})}),"\n",(0,a.jsx)(o.h2,{id:"resultados",children:"Resultados"}),"\n",(0,a.jsx)(o.p,{children:"Finalizando o exemplo de projeto o leitor deve ter observado que no programa Button, foram utilizadas as estruturas de condi\xe7\xe3o IF / ELSE IF para interagir com o estado atual do bot\xe3o, adicionou-se \xe0s uma nova label nativa para indicar as entradas digitais (GPIO_MODE_INPUT) e as fun\xe7\xf5es para indicar topologia do circuito ( gpio_pullup_en()/gpio pulldown_dis()) utilizado e verificar a leitura digital no pino definido no cabe\xe7alho do c\xf3digo."}),"\n",(0,a.jsx)(o.p,{children:"Abaixo segue o resultado final dos dados de sa\xedda no monitor:"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"sa\xedda monitor serial",src:i(11056).c+"",width:"539",height:"168"})}),"\n",(0,a.jsx)(o.p,{children:"Abaixo segue o nosso circuito do nosso projeto:"}),"\n",(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"teste na bancada",src:i(21604).c+"",width:"1336",height:"668"})}),"\n",(0,a.jsx)(o.h2,{id:"conclus\xe3o",children:"Conclus\xe3o"}),"\n",(0,a.jsxs)(o.p,{children:["Nesse projeto conclu\xedmos o estudo do perif\xe9rico base para iniciar no mundo dos microcontroladores, pois a partir desse conhecimento adquirido podemos reciclar para as outras fam\xedlias do ESP32, como tamb\xe9m em outros chips baseados na linguagem C para estruturar seu programa. Como mencionado na se\xe7\xe3o de Desenvolvimento, este segundo artigo deseja consolidar o conhecimento nesse perif\xe9rico (GPIO), por tanto deixo o desafio de criar um contador de pulsos de 0 at\xe9 10 e reiniciado sempre quando forma maior que 10, ao final de cada contagem deve-se acionar um LED e mostrar quantas contagens j\xe1 foram feitas. Desejo sorte \xe0queles que ir\xe3o realizar o desafio e bons estudos, que a ",(0,a.jsx)(o.strong,{children:"for\xe7a esteja com todos n\xf3s."})]}),"\n",(0,a.jsxs)(o.table,{children:[(0,a.jsx)(o.thead,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.th,{children:"Autor"}),(0,a.jsx)(o.th,{children:(0,a.jsx)(o.a,{href:"https://github.com/halyssonJr",children:"Halysson Junior"})})]})}),(0,a.jsx)(o.tbody,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"Data:"}),(0,a.jsx)(o.td,{children:"01/06/2021"})]})})]})]})}function p(e={}){const{wrapper:o}={...(0,n.MN)(),...e.components};return o?(0,a.jsx)(o,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},95788:(e,o,i)=>{i.d(o,{MN:()=>l});var a=i(11504);function n(e,o,i){return o in e?Object.defineProperty(e,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[o]=i,e}function s(e,o){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);o&&(a=a.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),i.push.apply(i,a)}return i}function r(e){for(var o=1;o<arguments.length;o++){var i=null!=arguments[o]?arguments[o]:{};o%2?s(Object(i),!0).forEach((function(o){n(e,o,i[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):s(Object(i)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(i,o))}))}return e}function t(e,o){if(null==e)return{};var i,a,n=function(e,o){if(null==e)return{};var i,a,n={},s=Object.keys(e);for(a=0;a<s.length;a++)i=s[a],o.indexOf(i)>=0||(n[i]=e[i]);return n}(e,o);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)i=s[a],o.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var d=a.createContext({}),l=function(e){var o=a.useContext(d),i=o;return e&&(i="function"==typeof e?e(o):r(r({},o),e)),i},c={inlineCode:"code",wrapper:function(e){var o=e.children;return a.createElement(a.Fragment,{},o)}},p=a.forwardRef((function(e,o){var i=e.components,n=e.mdxType,s=e.originalType,d=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),u=l(i),m=n,h=u["".concat(d,".").concat(m)]||u[m]||c[m]||s;return i?a.createElement(h,r(r({ref:o},p),{},{components:i})):a.createElement(h,r({ref:o},p))}));p.displayName="MDXCreateElement"},29148:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/1-124f6f4ee8bacde41bd8a9e355dc439a.png"},50380:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/2-9dcac030cd53ee20f535abf4683f595c.png"},38100:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/3-e82c6cff8b1723ecc738df1fa83a7f4d.png"},11056:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/4-398af45ebe97733b089183f9be584ceb.png"},21604:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/5-38b38892827b20fb4c4fad0565d3620c.png"}}]); \ No newline at end of file diff --git a/en/assets/js/f67a9ad7.7143bf2d.js b/en/assets/js/f67a9ad7.7143bf2d.js new file mode 100755 index 000000000..8f7e4984f --- /dev/null +++ b/en/assets/js/f67a9ad7.7143bf2d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8812],{10508:(e,o,i)=>{i.r(o),i.d(o,{assets:()=>t,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>d,toc:()=>c});var a=i(17624),n=i(95788);const r={id:"wokwi-intro",title:"Como simular a Franzininho DIY no Wokwi",slug:"/franzininho-diy/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY"},s=void 0,d={id:"FranzininhoDIY/wokwi/wokwi-intro",title:"Como simular a Franzininho DIY no Wokwi",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY",source:"@site/docs/FranzininhoDIY/wokwi/franzininho-wokwi.md",sourceDirName:"FranzininhoDIY/wokwi",slug:"/franzininho-diy/wokwi/primeiros-passos",permalink:"/en/docs/franzininho-diy/wokwi/primeiros-passos",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/wokwi/franzininho-wokwi.md",tags:[],version:"current",frontMatter:{id:"wokwi-intro",title:"Como simular a Franzininho DIY no Wokwi",slug:"/franzininho-diy/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY"},sidebar:"docs",previous:{title:"TODO",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/todo"},next:{title:"Franzininho DIY no PICSimLab",permalink:"/en/docs/franzininho-diy/picsimlab/primeiros-passos"}},t={},c=[{value:"Primeiros passos",id:"primeiros-passos",level:2},{value:"C\xf3digo do exemplo 1",id:"c\xf3digo-do-exemplo-1",level:3},{value:"Pe\xe7as",id:"pe\xe7as",level:2},{value:"Adicionando uma nova pe\xe7a",id:"adicionando-uma-nova-pe\xe7a",level:3},{value:"Rotacionando uma pe\xe7a",id:"rotacionando-uma-pe\xe7a",level:3},{value:"Removendo uma pe\xe7a",id:"removendo-uma-pe\xe7a",level:3},{value:"Liga\xe7\xf5es",id:"liga\xe7\xf5es",level:2},{value:"Cria\xe7\xe3o de uma liga\xe7\xe3o entre as duas pe\xe7as",id:"cria\xe7\xe3o-de-uma-liga\xe7\xe3o-entre-as-duas-pe\xe7as",level:3},{value:"Liga\xe7\xe3o entre os fios",id:"liga\xe7\xe3o-entre-os-fios",level:3},{value:"C\xf3digo do exemplo 2",id:"c\xf3digo-do-exemplo-2",level:3},{value:"Mudando a cor de um fio",id:"mudando-a-cor-de-um-fio",level:3},{value:"Atalhos do teclado",id:"atalhos-do-teclado",level:2},{value:"Desfazer / Refazer",id:"desfazer--refazer",level:2},{value:"Saiba mais",id:"saiba-mais",level:2},{value:"Exemplos no Simulador",id:"exemplos-no-simulador",level:2}];function l(e){const o={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.MN)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.p,{children:"Wokwi \xe9 um simulador online para Arduino e Eletr\xf4nica. Foi desenvolvido para makers, por makers."}),"\n",(0,a.jsx)(o.p,{children:"Voc\xea pode usar o Wokwi para aprender a programar o Franzininho DIY, criar prot\xf3tipos de suas id\xe9ias, e compartilhar seus projetos com outros makers."}),"\n",(0,a.jsx)("div",{style:{textAlign:"center"},children:(0,a.jsx)(o.p,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/new?template=franzininho",children:(0,a.jsx)(o.img,{alt:"Wokwi Franzininho DIY",src:i(13644).c+"",width:"280",height:"146"})})})}),"\n",(0,a.jsx)(o.admonition,{title:"Dica",type:"tip",children:(0,a.jsx)(o.p,{children:"Use o Template do Franzininho DIY clicando na imagem acima para come\xe7ar um novo projeto no Wokwi."})}),"\n",(0,a.jsx)(o.h2,{id:"primeiros-passos",children:"Primeiros passos"}),"\n",(0,a.jsxs)(o.p,{children:["Vamos come\xe7ar o nosso programa acendendo o ",(0,a.jsx)(o.code,{children:"LED1"})," do Franzinino DIY no simulador, para isso copie ou digite o c\xf3digo abaixo no editor do Wokwi conforme imagem abaixo."]}),"\n",(0,a.jsx)("div",{style:{textAlign:"center"},children:(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Wokwi Code Editor",src:i(68520).c+"",width:"640",height:"360"})})}),"\n",(0,a.jsx)(o.h3,{id:"c\xf3digo-do-exemplo-1",children:"C\xf3digo do exemplo 1"}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-cpp",children:"const byte LED1 = 1;\n\nvoid setup() {\n pinMode(LED1, OUTPUT); // Configura como pino de sa\xedda digital\n}\n\nvoid loop() {\n digitalWrite(LED1, HIGH); // Acende o LED interno\n delay(1000); // Aguarda um segundo\n digitalWrite(LED1, LOW); // Apaga o LED interno\n delay(1000); // Aguarda um segundo\n}\n"})}),"\n",(0,a.jsx)(o.p,{children:"Em seguida, vamos executar o nosso programa clicando no bot\xe3o verde conforme a imagem abaixo."}),"\n",(0,a.jsx)("div",{style:{textAlign:"center"},children:(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Wokwi Simulation",src:i(35904).c+"",width:"640",height:"360"})})}),"\n",(0,a.jsx)(o.h2,{id:"pe\xe7as",children:"Pe\xe7as"}),"\n",(0,a.jsxs)(o.p,{children:["Vamos chamar os novos m\xf3dulos ou componentes de ",(0,a.jsx)(o.em,{children:(0,a.jsx)(o.strong,{children:"pe\xe7as"})}),", que seriam como por exemplo, as pe\xe7as de um jogo de montagem, onde vamos adicionando cada uma para depois fazermos as liga\xe7\xf5es entre elas."]}),"\n",(0,a.jsxs)(o.p,{children:["Cada projeto de simula\xe7\xe3o cont\xe9m um arquivo ",(0,a.jsx)(o.a,{href:"#saiba-mais",children:"diagram.json"})," localizado no editor de c\xf3digo. Este arquivo define as pe\xe7as\nque ser\xe3o usadas para a simula\xe7\xe3o, suas propriedades e as conex\xf5es entre os componentes."]}),"\n",(0,a.jsx)(o.p,{children:"O editor de diagramas fornece uma maneira interativa de editar seu diagrama: adicionando pe\xe7as \xe0 simula\xe7\xe3o e definindo as conex\xf5es entre elas."}),"\n",(0,a.jsx)(o.h3,{id:"adicionando-uma-nova-pe\xe7a",children:"Adicionando uma nova pe\xe7a"}),"\n",(0,a.jsxs)(o.p,{children:["Para adicionar uma nova pe\xe7a, clique no bot\xe3o ",(0,a.jsx)(o.em,{children:(0,a.jsx)(o.strong,{children:'roxo "+"'})})," na parte superior do editor de diagramas."]}),"\n",(0,a.jsx)(o.p,{children:"Voc\xea ver\xe1 um menu com uma lista de pe\xe7as que voc\xea pode adicionar. Escolha uma pe\xe7a para adicion\xe1-la. A pe\xe7a ser\xe1 adicionada na posi\xe7\xe3o (0, 0), e ent\xe3o voc\xea pode arrast\xe1-la para a posi\xe7\xe3o desejada, conforme imagem abaixo."}),"\n",(0,a.jsx)("div",{style:{textAlign:"center"},children:(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Wokwi Add part",src:i(51898).c+"",width:"640",height:"360"})})}),"\n",(0,a.jsx)(o.h3,{id:"rotacionando-uma-pe\xe7a",children:"Rotacionando uma pe\xe7a"}),"\n",(0,a.jsxs)(o.p,{children:['Gire uma pe\xe7a clicando nela (para selecion\xe1-la) e pressionando "R". A pe\xe7a girar\xe1 90 graus no sentido hor\xe1rio. Se voc\xea precisar girar uma pe\xe7a\ncom um valor diferente (por exemplo, 45 graus), voc\xea pode conseguir isso editando o arquivo ',(0,a.jsx)(o.a,{href:"#saiba-mais",children:"diagram.json"})," no editor de c\xf3digo."]}),"\n",(0,a.jsx)(o.h3,{id:"removendo-uma-pe\xe7a",children:"Removendo uma pe\xe7a"}),"\n",(0,a.jsx)(o.p,{children:"Exclua uma pe\xe7a clicando nela (para selecion\xe1-la) e em seguida pressionando a tecla Delete."}),"\n",(0,a.jsx)(o.h2,{id:"liga\xe7\xf5es",children:"Liga\xe7\xf5es"}),"\n",(0,a.jsx)(o.h3,{id:"cria\xe7\xe3o-de-uma-liga\xe7\xe3o-entre-as-duas-pe\xe7as",children:"Cria\xe7\xe3o de uma liga\xe7\xe3o entre as duas pe\xe7as"}),"\n",(0,a.jsxs)(o.p,{children:["Para criar um ",(0,a.jsx)(o.em,{children:(0,a.jsx)(o.strong,{children:"novo fio"})})," entre duas pe\xe7as, clique em um dos pinos que deseja conectar. Em seguida, clique no segundo pino (alvo). Isso criar\xe1 o fio."]}),"\n",(0,a.jsx)("div",{style:{textAlign:"center"},children:(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Wokwi Add part",src:i(61464).c+"",width:"640",height:"360"})})}),"\n",(0,a.jsx)(o.p,{children:"Se quiser que o fio v\xe1 de uma maneira espec\xedfica, voc\xea pode gui\xe1-lo clicando para onde deseja que ele v\xe1 ap\xf3s selecionar o primeiro pino."}),"\n",(0,a.jsx)(o.p,{children:"Para cancelar um novo fio (exclua-o sem selecionar um pino de destino), clique com o bot\xe3o direito do mouse ou pressione Escape."}),"\n",(0,a.jsx)(o.p,{children:"Para excluir uma liga\xe7\xe3o apenas clique com o bot\xe3o esquerdo do mouse no fio que ele ser\xe1 removido."}),"\n",(0,a.jsx)("div",{style:{textAlign:"center"},children:(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Wokwi Add part",src:i(83576).c+"",width:"640",height:"360"})})}),"\n",(0,a.jsx)(o.h3,{id:"liga\xe7\xe3o-entre-os-fios",children:"Liga\xe7\xe3o entre os fios"}),"\n",(0,a.jsx)(o.p,{children:"Para fazer mais de uma liga\xe7\xe3o na mesma pe\xe7a, apenas arraste o fio at\xe9 o pino da pe\xe7a, conforme a imagem abaixo."}),"\n",(0,a.jsx)("div",{style:{textAlign:"center"},children:(0,a.jsx)(o.p,{children:(0,a.jsx)(o.img,{alt:"Wokwi Add part",src:i(92836).c+"",width:"640",height:"360"})})}),"\n",(0,a.jsx)(o.admonition,{title:"Aten\xe7\xe3o",type:"caution",children:(0,a.jsx)(o.p,{children:"Cuidado para n\xe3o clicar em cima de um fio existente ao arrastar o segundo fio e remov\xea-lo sem querer. Procure sempre clicar em cima do pino da pe\xe7a."})}),"\n",(0,a.jsx)(o.h3,{id:"c\xf3digo-do-exemplo-2",children:"C\xf3digo do exemplo 2"}),"\n",(0,a.jsx)(o.pre,{children:(0,a.jsx)(o.code,{className:"language-cpp",children:"const byte BUTTON = 0;\nconst byte LED1 = 1;\n\nint buttonState = 0;\n\nvoid setup() {\n pinMode(LED1, OUTPUT); // Configura como pino de sa\xedda digital\n pinMode(BUTTON, INPUT); // Configura como pino de entrada\n}\n\nvoid loop() {\n // L\xea o estado do bot\xe3o\n buttonState = digitalRead(BUTTON);\n\n // Verifica se est\xe1 pressionado\n if (buttonState == LOW) {\n digitalWrite(LED1, HIGH); // Acende o LED interno\n } else {\n digitalWrite(LED1, LOW); // Apaga o LED interno\n }\n}\n"})}),"\n",(0,a.jsx)(o.h3,{id:"mudando-a-cor-de-um-fio",children:"Mudando a cor de um fio"}),"\n",(0,a.jsx)(o.p,{children:"A cor dos novos fios \xe9 determinada automaticamente pela fun\xe7\xe3o do pino: os fios que come\xe7am nos pinos de aterramento s\xe3o pretos e os outros fios s\xe3o verdes."}),"\n",(0,a.jsxs)(o.p,{children:["O editor interativo n\xe3o oferece suporte para definir a cor dos fios. Voc\xea pode, no entanto, alterar a cor de qualquer fio editando o diagram.json, ",(0,a.jsx)(o.a,{href:"#saiba-mais",children:"saiba mais"}),"."]}),"\n",(0,a.jsx)(o.h2,{id:"atalhos-do-teclado",children:"Atalhos do teclado"}),"\n",(0,a.jsx)(o.p,{children:"A tabela a seguir resume os atalhos do teclado:"}),"\n",(0,a.jsxs)(o.table,{children:[(0,a.jsx)(o.thead,{children:(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.th,{children:"Tecla"}),(0,a.jsx)(o.th,{children:"Fun\xe7\xe3o"})]})}),(0,a.jsxs)(o.tbody,{children:[(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"-"}),(0,a.jsx)(o.td,{children:"Reduz o zoom"})]}),(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"+"}),(0,a.jsx)(o.td,{children:"Aumenta o zoom"})]}),(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"R"}),(0,a.jsx)(o.td,{children:"Gira a pe\xe7a selecionada"})]}),(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"Delete"}),(0,a.jsx)(o.td,{children:"Remove a pe\xe7a selecionada"})]}),(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"?"}),(0,a.jsx)(o.td,{children:"Abre a documenta\xe7\xe3o da pe\xe7a selecionada"})]}),(0,a.jsxs)(o.tr,{children:[(0,a.jsx)(o.td,{children:"Escape"}),(0,a.jsx)(o.td,{children:"Cancela o fio (no modo de fia\xe7\xe3o)"})]})]})]}),"\n",(0,a.jsx)(o.p,{children:'Usu\xe1rios do Firefox: se os atalhos do teclado n\xe3o funcionarem, certifique-se de que a configura\xe7\xe3o "Pesquisar texto ao come\xe7ar a digitar" esteja desabilitada.'}),"\n",(0,a.jsx)(o.h2,{id:"desfazer--refazer",children:"Desfazer / Refazer"}),"\n",(0,a.jsxs)(o.p,{children:["Qualquer mudan\xe7a que voc\xea fizer no editor interativo tamb\xe9m se refletir\xe1 em ",(0,a.jsx)(o.a,{href:"#saiba-mais",children:"diagram.json"}),"."]}),"\n",(0,a.jsxs)(o.p,{children:["O editor interativo ",(0,a.jsx)(o.strong,{children:"n\xe3o tem"})," o recurso de desfazer no momento (h\xe1 uma ",(0,a.jsx)(o.a,{href:"https://github.com/wokwi/wokwi-features/issues/77",children:"solicita\xe7\xe3o aberta para isso"}),")."]}),"\n",(0,a.jsx)(o.p,{children:'Voc\xea ainda pode obter o hist\xf3rico completo de Desfazer se selecionar a guia "diagram.json" no editor de c\xf3digo. Quaisquer altera\xe7\xf5es feitas no editor de diagramas interativo\nrefletir\xe1 imediatamente no editor de c\xf3digo e voc\xea poder\xe1 desfaz\xea-los clicando no editor de c\xf3digo e pressionando Ctrl+Z.'}),"\n",(0,a.jsx)(o.p,{children:'Observe que isso s\xf3 funciona se a guia "diagram.json" estiver ativa enquanto voc\xea faz altera\xe7\xf5es. Esta \xe9 uma solu\xe7\xe3o tempor\xe1ria at\xe9 implementarmos o Desfazer no editor de diagramas interativo.'}),"\n",(0,a.jsx)(o.h2,{id:"saiba-mais",children:"Saiba mais"}),"\n",(0,a.jsxs)(o.p,{children:["Caso queira saber mais sobre outras funcionalidades do simulador, d\xea uma olhada na lista abaixo. Voc\xea pode tamb\xe9m consultar as pe\xe7as na lista de ",(0,a.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/",children:"Refer\xeancia do Diagrama"}),", dispon\xedvel na documenta\xe7\xe3o do Wokwi."]}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/diagram-format",children:"Formato do diagram.json"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/keyboard-shortcuts",children:"Teclas de Atalho do Editor"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/serial-monitor",children:"O Monitor Serial"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/gdb-debugging",children:"Usando o GDB no Wokwi"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/logic-analyzer",children:"Guia do Analisador L\xf3gico"})}),"\n",(0,a.jsxs)(o.li,{children:[(0,a.jsx)(o.a,{href:"https://docs.wokwi.com/pt-BR/guides/libraries",children:"Lista completa das Bibliotecas Arduino"}),", atualmente dispon\xedveis no Wokwi."]}),"\n"]}),"\n",(0,a.jsx)(o.h2,{id:"exemplos-no-simulador",children:"Exemplos no Simulador"}),"\n",(0,a.jsxs)(o.ul,{children:["\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/301693553069785610",children:"Pisca LED"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/304646764687786560",children:"Dado eletr\xf4nico"})}),"\n",(0,a.jsxs)(o.li,{children:[(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/301751077214093834",children:"Sensor de Temperatura NTC"}),", usando Termistor NTC e SSD1306."]}),"\n",(0,a.jsxs)(o.li,{children:[(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/301745949656482317",children:"Sensor de Umidade e Temperatura Digital"}),", com DHT22 e SSD1306."]}),"\n",(0,a.jsxs)(o.li,{children:[(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/302020345098928648",children:"Sensor Ultra-s\xf4nico"}),", usando 74HC595 e HC-SR04."]}),"\n",(0,a.jsxs)(o.li,{children:[(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/302291615188255242",children:"Controle de posi\xe7\xe3o Servo Motor"}),", com um Motor Micro Servo e um LCD1602."]}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/302199144424931848",children:"Contador de pulsos externos"})}),"\n",(0,a.jsxs)(o.li,{children:[(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/301738586036765194",children:"Rel\xf3gio"}),", usando dois 74HC595 e RTC DS1307."]}),"\n",(0,a.jsxs)(o.li,{children:[(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/304826828859638336",children:"Letreiro"}),", com quatro MAX7219, um RTC DS1307 e um sensor DHT22."]}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/313076832346833472",children:"LCD 4 bits com 74HC595"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/311202006419112513",children:"Simula\xe7\xe3o de 6 portas l\xf3gicas com Franzininho DIY"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/310022133947302466",children:"LED Bar Graph"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/306670612160447042",children:"LED RGB "})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/311426763532010048",children:"Simon Game"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/301931601583931913",children:"Sem\xe1foro"})}),"\n",(0,a.jsx)(o.li,{children:(0,a.jsx)(o.a,{href:"https://wokwi.com/arduino/projects/314180422625919552",children:"Painel de senhas para atendimento"})}),"\n"]})]})}function m(e={}){const{wrapper:o}={...(0,n.MN)(),...e.components};return o?(0,a.jsx)(o,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},95788:(e,o,i)=>{i.d(o,{MN:()=>c});var a=i(11504);function n(e,o,i){return o in e?Object.defineProperty(e,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[o]=i,e}function r(e,o){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);o&&(a=a.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),i.push.apply(i,a)}return i}function s(e){for(var o=1;o<arguments.length;o++){var i=null!=arguments[o]?arguments[o]:{};o%2?r(Object(i),!0).forEach((function(o){n(e,o,i[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):r(Object(i)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(i,o))}))}return e}function d(e,o){if(null==e)return{};var i,a,n=function(e,o){if(null==e)return{};var i,a,n={},r=Object.keys(e);for(a=0;a<r.length;a++)i=r[a],o.indexOf(i)>=0||(n[i]=e[i]);return n}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)i=r[a],o.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var t=a.createContext({}),c=function(e){var o=a.useContext(t),i=o;return e&&(i="function"==typeof e?e(o):s(s({},o),e)),i},l={inlineCode:"code",wrapper:function(e){var o=e.children;return a.createElement(a.Fragment,{},o)}},m=a.forwardRef((function(e,o){var i=e.components,n=e.mdxType,r=e.originalType,t=e.parentName,m=d(e,["components","mdxType","originalType","parentName"]),p=c(i),h=n,u=p["".concat(t,".").concat(h)]||p[h]||l[h]||r;return i?a.createElement(u,s(s({ref:o},m),{},{components:i})):a.createElement(u,s({ref:o},m))}));m.displayName="MDXCreateElement"},51898:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/wokwi-add-part-926231e515ac4ee3870435dab3b57a96.gif"},92836:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/wokwi-button-example-48d78418193c8ce581aeaf830011cc9c.gif"},68520:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/wokwi-code-editor-47eee91a0ab6645263b94f6bd08f4a2d.gif"},13644:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/wokwi-franzininho-diy-0e10ac8a10de848902742f1eca4a1dd5.png"},35904:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/wokwi-simulation-d50447bbaca6bad8045412b26dcd3bdf.gif"},83576:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/wokwi-wire-delete-e7d78e867645f88f9ce03d0fbe96b94b.gif"},61464:(e,o,i)=>{i.d(o,{c:()=>a});const a=i.p+"assets/images/wokwi-wire-22136c43f0684fab1cd744b2fdd96e57.gif"}}]); \ No newline at end of file diff --git a/en/assets/js/f67a9ad7.c9822bd8.js b/en/assets/js/f67a9ad7.c9822bd8.js deleted file mode 100755 index 7381cb35c..000000000 --- a/en/assets/js/f67a9ad7.c9822bd8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3634],{3905:(e,a,o)=>{o.d(a,{Zo:()=>p,kt:()=>k});var t=o(7294);function i(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function n(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,t)}return o}function r(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?n(Object(o),!0).forEach((function(a){i(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function s(e,a){if(null==e)return{};var o,t,i=function(e,a){if(null==e)return{};var o,t,i={},n=Object.keys(e);for(t=0;t<n.length;t++)o=n[t],a.indexOf(o)>=0||(i[o]=e[o]);return i}(e,a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(t=0;t<n.length;t++)o=n[t],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var d=t.createContext({}),l=function(e){var a=t.useContext(d),o=a;return e&&(o="function"==typeof e?e(a):r(r({},a),e)),o},p=function(e){var a=l(e.components);return t.createElement(d.Provider,{value:a},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},c=t.forwardRef((function(e,a){var o=e.components,i=e.mdxType,n=e.originalType,d=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=l(o),c=i,k=m["".concat(d,".").concat(c)]||m[c]||u[c]||n;return o?t.createElement(k,r(r({ref:a},p),{},{components:o})):t.createElement(k,r({ref:a},p))}));function k(e,a){var o=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var n=o.length,r=new Array(n);r[0]=c;var s={};for(var d in a)hasOwnProperty.call(a,d)&&(s[d]=a[d]);s.originalType=e,s[m]="string"==typeof e?e:i,r[1]=s;for(var l=2;l<n;l++)r[l]=o[l];return t.createElement.apply(null,r)}return t.createElement.apply(null,o)}c.displayName="MDXCreateElement"},5350:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var t=o(3117),i=(o(7294),o(3905));const n={id:"wokwi-intro",title:"Como simular a Franzininho DIY no Wokwi",slug:"/franzininho-diy/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY"},r=void 0,s={unversionedId:"FranzininhoDIY/wokwi/wokwi-intro",id:"FranzininhoDIY/wokwi/wokwi-intro",title:"Como simular a Franzininho DIY no Wokwi",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY",source:"@site/docs/FranzininhoDIY/wokwi/franzininho-wokwi.md",sourceDirName:"FranzininhoDIY/wokwi",slug:"/franzininho-diy/wokwi/primeiros-passos",permalink:"/en/docs/franzininho-diy/wokwi/primeiros-passos",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/wokwi/franzininho-wokwi.md",tags:[],version:"current",frontMatter:{id:"wokwi-intro",title:"Como simular a Franzininho DIY no Wokwi",slug:"/franzininho-diy/wokwi/primeiros-passos",description:"Nesse t\xf3pico vamos ver como usar o WokWi para simular circuitos com a Franzininho DIY"},sidebar:"docs",previous:{title:"TODO",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/todo"},next:{title:"Franzininho DIY no PICSimLab",permalink:"/en/docs/franzininho-diy/picsimlab/primeiros-passos"}},d={},l=[{value:"Primeiros passos",id:"primeiros-passos",level:2},{value:"C\xf3digo do exemplo 1",id:"c\xf3digo-do-exemplo-1",level:3},{value:"Pe\xe7as",id:"pe\xe7as",level:2},{value:"Adicionando uma nova pe\xe7a",id:"adicionando-uma-nova-pe\xe7a",level:3},{value:"Rotacionando uma pe\xe7a",id:"rotacionando-uma-pe\xe7a",level:3},{value:"Removendo uma pe\xe7a",id:"removendo-uma-pe\xe7a",level:3},{value:"Liga\xe7\xf5es",id:"liga\xe7\xf5es",level:2},{value:"Cria\xe7\xe3o de uma liga\xe7\xe3o entre as duas pe\xe7as",id:"cria\xe7\xe3o-de-uma-liga\xe7\xe3o-entre-as-duas-pe\xe7as",level:3},{value:"Liga\xe7\xe3o entre os fios",id:"liga\xe7\xe3o-entre-os-fios",level:3},{value:"C\xf3digo do exemplo 2",id:"c\xf3digo-do-exemplo-2",level:3},{value:"Mudando a cor de um fio",id:"mudando-a-cor-de-um-fio",level:3},{value:"Atalhos do teclado",id:"atalhos-do-teclado",level:2},{value:"Desfazer / Refazer",id:"desfazer--refazer",level:2},{value:"Saiba mais",id:"saiba-mais",level:2},{value:"Exemplos no Simulador",id:"exemplos-no-simulador",level:2}],p={toc:l},m="wrapper";function u(e){let{components:a,...n}=e;return(0,i.kt)(m,(0,t.Z)({},p,n,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Wokwi \xe9 um simulador online para Arduino e Eletr\xf4nica. Foi desenvolvido para makers, por makers."),(0,i.kt)("p",null,"Voc\xea pode usar o Wokwi para aprender a programar o Franzininho DIY, criar prot\xf3tipos de suas id\xe9ias, e compartilhar seus projetos com outros makers."),(0,i.kt)("div",{style:{textAlign:"center"}},(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://wokwi.com/arduino/new?template=franzininho"},(0,i.kt)("img",{alt:"Wokwi Franzininho DIY",src:o(814).Z,width:"280",height:"146"})))),(0,i.kt)("admonition",{title:"Dica",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Use o Template do Franzininho DIY clicando na imagem acima para come\xe7ar um novo projeto no Wokwi.")),(0,i.kt)("h2",{id:"primeiros-passos"},"Primeiros passos"),(0,i.kt)("p",null,"Vamos come\xe7ar o nosso programa acendendo o ",(0,i.kt)("inlineCode",{parentName:"p"},"LED1")," do Franzinino DIY no simulador, para isso copie ou digite o c\xf3digo abaixo no editor do Wokwi conforme imagem abaixo."),(0,i.kt)("div",{style:{textAlign:"center"}},(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Wokwi Code Editor",src:o(6779).Z,width:"640",height:"360"}))),(0,i.kt)("h3",{id:"c\xf3digo-do-exemplo-1"},"C\xf3digo do exemplo 1"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"const byte LED1 = 1;\n\nvoid setup() {\n pinMode(LED1, OUTPUT); // Configura como pino de sa\xedda digital\n}\n\nvoid loop() {\n digitalWrite(LED1, HIGH); // Acende o LED interno\n delay(1000); // Aguarda um segundo\n digitalWrite(LED1, LOW); // Apaga o LED interno\n delay(1000); // Aguarda um segundo\n}\n")),(0,i.kt)("p",null,"Em seguida, vamos executar o nosso programa clicando no bot\xe3o verde conforme a imagem abaixo."),(0,i.kt)("div",{style:{textAlign:"center"}},(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Wokwi Simulation",src:o(6446).Z,width:"640",height:"360"}))),(0,i.kt)("h2",{id:"pe\xe7as"},"Pe\xe7as"),(0,i.kt)("p",null,"Vamos chamar os novos m\xf3dulos ou componentes de ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("em",{parentName:"strong"},"pe\xe7as")),", que seriam como por exemplo, as pe\xe7as de um jogo de montagem, onde vamos adicionando cada uma para depois fazermos as liga\xe7\xf5es entre elas."),(0,i.kt)("p",null,"Cada projeto de simula\xe7\xe3o cont\xe9m um arquivo ",(0,i.kt)("a",{parentName:"p",href:"#saiba-mais"},"diagram.json")," localizado no editor de c\xf3digo. Este arquivo define as pe\xe7as\nque ser\xe3o usadas para a simula\xe7\xe3o, suas propriedades e as conex\xf5es entre os componentes."),(0,i.kt)("p",null,"O editor de diagramas fornece uma maneira interativa de editar seu diagrama: adicionando pe\xe7as \xe0 simula\xe7\xe3o e definindo as conex\xf5es entre elas."),(0,i.kt)("h3",{id:"adicionando-uma-nova-pe\xe7a"},"Adicionando uma nova pe\xe7a"),(0,i.kt)("p",null,"Para adicionar uma nova pe\xe7a, clique no bot\xe3o ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("em",{parentName:"strong"},'roxo "+"'))," na parte superior do editor de diagramas."),(0,i.kt)("p",null,"Voc\xea ver\xe1 um menu com uma lista de pe\xe7as que voc\xea pode adicionar. Escolha uma pe\xe7a para adicion\xe1-la. A pe\xe7a ser\xe1 adicionada na posi\xe7\xe3o (0, 0), e ent\xe3o voc\xea pode arrast\xe1-la para a posi\xe7\xe3o desejada, conforme imagem abaixo."),(0,i.kt)("div",{style:{textAlign:"center"}},(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Wokwi Add part",src:o(5974).Z,width:"640",height:"360"}))),(0,i.kt)("h3",{id:"rotacionando-uma-pe\xe7a"},"Rotacionando uma pe\xe7a"),(0,i.kt)("p",null,'Gire uma pe\xe7a clicando nela (para selecion\xe1-la) e pressionando "R". A pe\xe7a girar\xe1 90 graus no sentido hor\xe1rio. Se voc\xea precisar girar uma pe\xe7a\ncom um valor diferente (por exemplo, 45 graus), voc\xea pode conseguir isso editando o arquivo ',(0,i.kt)("a",{parentName:"p",href:"#saiba-mais"},"diagram.json")," no editor de c\xf3digo."),(0,i.kt)("h3",{id:"removendo-uma-pe\xe7a"},"Removendo uma pe\xe7a"),(0,i.kt)("p",null,"Exclua uma pe\xe7a clicando nela (para selecion\xe1-la) e em seguida pressionando a tecla Delete."),(0,i.kt)("h2",{id:"liga\xe7\xf5es"},"Liga\xe7\xf5es"),(0,i.kt)("h3",{id:"cria\xe7\xe3o-de-uma-liga\xe7\xe3o-entre-as-duas-pe\xe7as"},"Cria\xe7\xe3o de uma liga\xe7\xe3o entre as duas pe\xe7as"),(0,i.kt)("p",null,"Para criar um ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("em",{parentName:"strong"},"novo fio"))," entre duas pe\xe7as, clique em um dos pinos que deseja conectar. Em seguida, clique no segundo pino (alvo). Isso criar\xe1 o fio."),(0,i.kt)("div",{style:{textAlign:"center"}},(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Wokwi Add part",src:o(4313).Z,width:"640",height:"360"}))),(0,i.kt)("p",null,"Se quiser que o fio v\xe1 de uma maneira espec\xedfica, voc\xea pode gui\xe1-lo clicando para onde deseja que ele v\xe1 ap\xf3s selecionar o primeiro pino."),(0,i.kt)("p",null,"Para cancelar um novo fio (exclua-o sem selecionar um pino de destino), clique com o bot\xe3o direito do mouse ou pressione Escape."),(0,i.kt)("p",null,"Para excluir uma liga\xe7\xe3o apenas clique com o bot\xe3o esquerdo do mouse no fio que ele ser\xe1 removido."),(0,i.kt)("div",{style:{textAlign:"center"}},(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Wokwi Add part",src:o(9559).Z,width:"640",height:"360"}))),(0,i.kt)("h3",{id:"liga\xe7\xe3o-entre-os-fios"},"Liga\xe7\xe3o entre os fios"),(0,i.kt)("p",null,"Para fazer mais de uma liga\xe7\xe3o na mesma pe\xe7a, apenas arraste o fio at\xe9 o pino da pe\xe7a, conforme a imagem abaixo."),(0,i.kt)("div",{style:{textAlign:"center"}},(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Wokwi Add part",src:o(8733).Z,width:"640",height:"360"}))),(0,i.kt)("admonition",{title:"Aten\xe7\xe3o",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"Cuidado para n\xe3o clicar em cima de um fio existente ao arrastar o segundo fio e remov\xea-lo sem querer. Procure sempre clicar em cima do pino da pe\xe7a.")),(0,i.kt)("h3",{id:"c\xf3digo-do-exemplo-2"},"C\xf3digo do exemplo 2"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cpp"},"const byte BUTTON = 0;\nconst byte LED1 = 1;\n\nint buttonState = 0;\n\nvoid setup() {\n pinMode(LED1, OUTPUT); // Configura como pino de sa\xedda digital\n pinMode(BUTTON, INPUT); // Configura como pino de entrada\n}\n\nvoid loop() {\n // L\xea o estado do bot\xe3o\n buttonState = digitalRead(BUTTON);\n\n // Verifica se est\xe1 pressionado\n if (buttonState == LOW) {\n digitalWrite(LED1, HIGH); // Acende o LED interno\n } else {\n digitalWrite(LED1, LOW); // Apaga o LED interno\n }\n}\n")),(0,i.kt)("h3",{id:"mudando-a-cor-de-um-fio"},"Mudando a cor de um fio"),(0,i.kt)("p",null,"A cor dos novos fios \xe9 determinada automaticamente pela fun\xe7\xe3o do pino: os fios que come\xe7am nos pinos de aterramento s\xe3o pretos e os outros fios s\xe3o verdes."),(0,i.kt)("p",null,"O editor interativo n\xe3o oferece suporte para definir a cor dos fios. Voc\xea pode, no entanto, alterar a cor de qualquer fio editando o diagram.json, ",(0,i.kt)("a",{parentName:"p",href:"#saiba-mais"},"saiba mais"),"."),(0,i.kt)("h2",{id:"atalhos-do-teclado"},"Atalhos do teclado"),(0,i.kt)("p",null,"A tabela a seguir resume os atalhos do teclado:"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Tecla"),(0,i.kt)("th",{parentName:"tr",align:null},"Fun\xe7\xe3o"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"-"),(0,i.kt)("td",{parentName:"tr",align:null},"Reduz o zoom")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"+"),(0,i.kt)("td",{parentName:"tr",align:null},"Aumenta o zoom")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"R"),(0,i.kt)("td",{parentName:"tr",align:null},"Gira a pe\xe7a selecionada")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Delete"),(0,i.kt)("td",{parentName:"tr",align:null},"Remove a pe\xe7a selecionada")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"?"),(0,i.kt)("td",{parentName:"tr",align:null},"Abre a documenta\xe7\xe3o da pe\xe7a selecionada")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Escape"),(0,i.kt)("td",{parentName:"tr",align:null},"Cancela o fio (no modo de fia\xe7\xe3o)")))),(0,i.kt)("p",null,'Usu\xe1rios do Firefox: se os atalhos do teclado n\xe3o funcionarem, certifique-se de que a configura\xe7\xe3o "Pesquisar texto ao come\xe7ar a digitar" esteja desabilitada.'),(0,i.kt)("h2",{id:"desfazer--refazer"},"Desfazer / Refazer"),(0,i.kt)("p",null,"Qualquer mudan\xe7a que voc\xea fizer no editor interativo tamb\xe9m se refletir\xe1 em ",(0,i.kt)("a",{parentName:"p",href:"#saiba-mais"},"diagram.json"),"."),(0,i.kt)("p",null,"O editor interativo ",(0,i.kt)("strong",{parentName:"p"},"n\xe3o tem")," o recurso de desfazer no momento (h\xe1 uma ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/wokwi/wokwi-features/issues/77"},"solicita\xe7\xe3o aberta para isso"),")."),(0,i.kt)("p",null,'Voc\xea ainda pode obter o hist\xf3rico completo de Desfazer se selecionar a guia "diagram.json" no editor de c\xf3digo. Quaisquer altera\xe7\xf5es feitas no editor de diagramas interativo\nrefletir\xe1 imediatamente no editor de c\xf3digo e voc\xea poder\xe1 desfaz\xea-los clicando no editor de c\xf3digo e pressionando Ctrl+Z.'),(0,i.kt)("p",null,'Observe que isso s\xf3 funciona se a guia "diagram.json" estiver ativa enquanto voc\xea faz altera\xe7\xf5es. Esta \xe9 uma solu\xe7\xe3o tempor\xe1ria at\xe9 implementarmos o Desfazer no editor de diagramas interativo.'),(0,i.kt)("h2",{id:"saiba-mais"},"Saiba mais"),(0,i.kt)("p",null,"Caso queira saber mais sobre outras funcionalidades do simulador, d\xea uma olhada na lista abaixo. Voc\xea pode tamb\xe9m consultar as pe\xe7as na lista de ",(0,i.kt)("a",{parentName:"p",href:"https://docs.wokwi.com/pt-BR/"},"Refer\xeancia do Diagrama"),", dispon\xedvel na documenta\xe7\xe3o do Wokwi."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/diagram-format"},"Formato do diagram.json")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/keyboard-shortcuts"},"Teclas de Atalho do Editor")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/serial-monitor"},"O Monitor Serial")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/gdb-debugging"},"Usando o GDB no Wokwi")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/logic-analyzer"},"Guia do Analisador L\xf3gico")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://docs.wokwi.com/pt-BR/guides/libraries"},"Lista completa das Bibliotecas Arduino"),", atualmente dispon\xedveis no Wokwi.")),(0,i.kt)("h2",{id:"exemplos-no-simulador"},"Exemplos no Simulador"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/301693553069785610"},"Pisca LED")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/304646764687786560"},"Dado eletr\xf4nico")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/301751077214093834"},"Sensor de Temperatura NTC"),", usando Termistor NTC e SSD1306."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/301745949656482317"},"Sensor de Umidade e Temperatura Digital"),", com DHT22 e SSD1306."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/302020345098928648"},"Sensor Ultra-s\xf4nico"),", usando 74HC595 e HC-SR04."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/302291615188255242"},"Controle de posi\xe7\xe3o Servo Motor"),", com um Motor Micro Servo e um LCD1602."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/302199144424931848"},"Contador de pulsos externos")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/301738586036765194"},"Rel\xf3gio"),", usando dois 74HC595 e RTC DS1307."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/304826828859638336"},"Letreiro"),", com quatro MAX7219, um RTC DS1307 e um sensor DHT22."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/313076832346833472"},"LCD 4 bits com 74HC595")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/311202006419112513"},"Simula\xe7\xe3o de 6 portas l\xf3gicas com Franzininho DIY")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/310022133947302466"},"LED Bar Graph")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/306670612160447042"},"LED RGB ")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/311426763532010048"},"Simon Game")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/301931601583931913"},"Sem\xe1foro")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://wokwi.com/arduino/projects/314180422625919552"},"Painel de senhas para atendimento"))))}u.isMDXComponent=!0},5974:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/wokwi-add-part-926231e515ac4ee3870435dab3b57a96.gif"},8733:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/wokwi-button-example-48d78418193c8ce581aeaf830011cc9c.gif"},6779:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/wokwi-code-editor-47eee91a0ab6645263b94f6bd08f4a2d.gif"},814:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/wokwi-franzininho-diy-0e10ac8a10de848902742f1eca4a1dd5.png"},6446:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/wokwi-simulation-d50447bbaca6bad8045412b26dcd3bdf.gif"},9559:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/wokwi-wire-delete-e7d78e867645f88f9ce03d0fbe96b94b.gif"},4313:(e,a,o)=>{o.d(a,{Z:()=>t});const t=o.p+"assets/images/wokwi-wire-22136c43f0684fab1cd744b2fdd96e57.gif"}}]); \ No newline at end of file diff --git a/en/assets/js/f6af7cfc.0d78bc13.js b/en/assets/js/f6af7cfc.0d78bc13.js new file mode 100755 index 000000000..8c30a9811 --- /dev/null +++ b/en/assets/js/f6af7cfc.0d78bc13.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1576],{59724:(e,o,i)=>{i.r(o),i.d(o,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>n,metadata:()=>t,toc:()=>c});var s=i(17624),a=i(95788);const n={id:"saida-digital",title:"Sa\xedda Digital",slug:"/franzininho-diy/exemplos-avr-libc/saida-digital",description:"Vamos entender como trabalhar com as sa\xeddas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},r=void 0,t={id:"FranzininhoDIY/exemplos-avr-libc/saida-digital",title:"Sa\xedda Digital",description:"Vamos entender como trabalhar com as sa\xeddas Digitais",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/saida-digital.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/saida-digital",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/saida-digital.md",tags:[],version:"current",frontMatter:{id:"saida-digital",title:"Sa\xedda Digital",slug:"/franzininho-diy/exemplos-avr-libc/saida-digital",description:"Vamos entender como trabalhar com as sa\xeddas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Hello, World!",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/hello-world"},next:{title:"Entrada Digital",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital"}},d={},c=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Pinos do ATtiny85",id:"pinos-do-attiny85",level:2},{value:"Algumas Particularidades do circuito da Franzininho DIY",id:"algumas-particularidades-do-circuito-da-franzininho-diy",level:3},{value:"Registradores respons\xe1veis pelos pinos de I/O",id:"registradores-respons\xe1veis-pelos-pinos-de-io",level:2},{value:"C\xf3digos",id:"c\xf3digos",level:2},{value:"Desafio",id:"desafio",level:2}];function l(e){const o={a:"a",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.MN)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.p,{children:"Agora que j\xe1 estamos com as ferramentas instaladas e a placa Franzininho DIY em m\xe3os, vamos dar in\xedcio aos estudos dos perif\xe9ricos internos do ATtiny85."}),"\n",(0,s.jsx)(o.p,{children:"Nesse artigo vamos explorar os pinos de I/O como sa\xedda digital. Ao final, voc\xea saber\xe1 como acionar dispositivos externos a Franzininho DIY."}),"\n",(0,s.jsx)(o.h2,{id:"recursos-necess\xe1rios",children:"Recursos Necess\xe1rios"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"Placa Franzininho DIY(com Micronucleus)"}),"\n",(0,s.jsx)(o.li,{children:"Computador com as ferramentas de software instaladas"}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"pinos-do-attiny85",children:"Pinos do ATtiny85"}),"\n",(0,s.jsx)(o.p,{children:"O ATtiny85 possui 8 pinos, sendo que 6 deles podemos usar como I/O (entradas ou sa\xeddas) digitais. Os pinos de I/O s\xe3o nomeados conforme a porta que eles pertencem. Na figura a seguir vemos que os pinos do ATtiny85 s\xe3o nomeados de PBx, onde x \xe9 o n\xfamero correspondente ao pino no registrador (n\xe3o se preocupe, vamos ver mais detalhes a seguir):"}),"\n",(0,s.jsx)(o.p,{children:(0,s.jsx)(o.img,{alt:"Pinagem do ATtiny85",src:i(42212).c+"",width:"2094",height:"498"})}),"\n",(0,s.jsx)(o.p,{children:"Cada pino de I/O pode ser usado como entrada ou sa\xedda e tamb\xe9m como outras fun\xe7\xf5es nesse momento s\xf3 vamos trabalhar com os pinos funcionando como GPIO (General Porpouse Input/Output)."}),"\n",(0,s.jsx)(o.p,{children:"Conforme exibido na imagem acima, temos os seguintes pinos dispon\xedveis no ATtiny85:"}),"\n",(0,s.jsx)(o.p,{children:"PB0, PB1, PB2, PB3, PB4, PB5."}),"\n",(0,s.jsx)(o.h3,{id:"algumas-particularidades-do-circuito-da-franzininho-diy",children:"Algumas Particularidades do circuito da Franzininho DIY"}),"\n",(0,s.jsx)(o.p,{children:"Os pinos de I/O s\xe3o marcados em Amarelo no Pinout da Franzininho DIY"}),"\n",(0,s.jsx)(o.p,{children:(0,s.jsx)(o.img,{alt:"pinout Franzininho DIY",src:i(12296).c+"",width:"1630",height:"1122"})}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"O pino PB5 \xe9 configurado como RESET na Franzininho DIY, sendo assim n\xe3o poderemos us\xe1-lo como I/O."}),"\n",(0,s.jsx)(o.li,{children:"Os pinos PB3 e PB4 s\xe3o usados para o circuito da USB, sendo assim temos que us\xe1-los com cautela. Geralmente esses pinos s\xe3o usados apenas como sa\xeddas digitais."}),"\n",(0,s.jsx)(o.li,{children:"O LED amarelo da placa est\xe1 ligado ao pino PB1."}),"\n",(0,s.jsx)(o.li,{children:"Os pinos PB0 E PB2 n\xe3o possuem circuito ligados a eles."}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"registradores-respons\xe1veis-pelos-pinos-de-io",children:"Registradores respons\xe1veis pelos pinos de I/O"}),"\n",(0,s.jsx)(o.p,{children:"Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsx)(o.li,{children:"PORTB: Registrador de dados. Respons\xe1vel pela escrita nos pinos;"}),"\n",(0,s.jsx)(o.li,{children:"DDRB: Registrador de dire\xe7\xe3o do pino. Respons\xe1vel pela configura\xe7\xe3o dos pinos para definir se ser\xe1 entrada ou sa\xedda;"}),"\n",(0,s.jsx)(o.li,{children:"PINB: Registrador de entrada da porta. Respons\xe1vel pela leitura do estado do pino."}),"\n"]}),"\n",(0,s.jsx)(o.p,{children:"Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos ter\xedamos os finais A, B,C, etc. Cada porta s\xf3 possui no m\xe1ximo 8 pinos."}),"\n",(0,s.jsx)(o.p,{children:"Na se\xe7\xe3o 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configura\xe7\xf5es poss\xedveis para os pinos:"}),"\n",(0,s.jsx)(o.p,{children:(0,s.jsx)(o.img,{alt:"configura\xe7\xe3o GPIO",src:i(64516).c+"",width:"1194",height:"339"})}),"\n",(0,s.jsx)(o.p,{children:"A figura abaixo exibe os registradores respons\xe1veis pelos pino de I/O do PORTB:"}),"\n",(0,s.jsx)(o.p,{children:(0,s.jsx)(o.img,{alt:"configura\xe7\xe3o GPIO",src:i(59336).c+"",width:"1448",height:"696"})}),"\n",(0,s.jsx)(o.p,{children:"Note que cada bit dos registradores \xe9 respons\xe1vel por pino sendo indexado pelo n\xfamero correspondente ao bit. Dessa forma, se quisermos usar o pino PB1 para acionar o LED, devemos configurar o registrador DDRB da seguinte forma:"}),"\n",(0,s.jsxs)(o.table,{children:[(0,s.jsx)(o.thead,{children:(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.th,{children:"7"}),(0,s.jsx)(o.th,{children:"6"}),(0,s.jsx)(o.th,{children:"5"}),(0,s.jsx)(o.th,{children:"4"}),(0,s.jsx)(o.th,{children:"3"}),(0,s.jsx)(o.th,{children:"2"}),(0,s.jsx)(o.th,{children:"1"}),(0,s.jsx)(o.th,{children:"0"})]})}),(0,s.jsx)(o.tbody,{children:(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:"-"}),(0,s.jsx)(o.td,{children:"-"}),(0,s.jsx)(o.td,{children:"0"}),(0,s.jsx)(o.td,{children:"0"}),(0,s.jsx)(o.td,{children:"0"}),(0,s.jsx)(o.td,{children:"0"}),(0,s.jsx)(o.td,{children:"1"}),(0,s.jsx)(o.td,{children:"0"})]})})]}),"\n",(0,s.jsx)(o.p,{children:"E para acionar ligar/deligar o LED devemos colocar 1 ou no bit correspondente no PORTB."}),"\n",(0,s.jsx)(o.p,{children:"Vamos a um exemplo para ficar mais claro."}),"\n",(0,s.jsx)(o.h2,{id:"c\xf3digos",children:"C\xf3digos"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-c",children:"#include <avr/io.h>\n#include <util/delay.h>\n\n#define F_CPU 16500000L // Frequ\xeancia do oscilador. usado para a fun\xe7\xe3o de delay\n\nint main(void)\n{\n DDRB = 0b00000010; // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n while (1)\n {\n PORTB = 0b00000010; // Liga o LED 1\n _delay_ms(250); // Aguarda 250 ms\n PORTB = 0b00000000; // Desliga o LED 1\n _delay_ms(250); // Aguarda 250 ms\n }\n\n return (0);\n}\n"})}),"\n",(0,s.jsx)(o.p,{children:"O exemplo acima pisca o LED em intervalos de 250 ms. A configura\xe7\xe3o do pino PB1 como sa\xedda foi feito colocando o bit1 de DDRB em 1. J\xe1 para ligar e desligar o LED foi manipulado o bit 1 de PORTB, hora em 1 hora em 0."}),"\n",(0,s.jsx)(o.p,{children:"Bacana, n\xe3o?"}),"\n",(0,s.jsxs)(o.p,{children:["podemos melhorar a manipula\xe7\xe3o dos bits dos registradores usando macros. As macros s\xe3o rotinas que facilitam nossas vidas. Recomendo que se voc\xea leia esse artigo para entender sobre as macros e as opera\xe7\xf5es efetuadas: ",(0,s.jsx)(o.a,{href:"https://www.embarcados.com.br/bits-em-linguagem-c/",children:"https://www.embarcados.com.br/bits-em-linguagem-c/"})]}),"\n",(0,s.jsx)(o.p,{children:"Vamos usar as seguintes macros:"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{children:"#define setBit(valor,bit) (valor |= (1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n"})}),"\n",(0,s.jsx)(o.p,{children:"Os nomes j\xe1 s\xe3o auto-explicativos mas vamos verificar como us\xe1-las no programa em C:"}),"\n",(0,s.jsx)(o.pre,{children:(0,s.jsx)(o.code,{className:"language-c",children:"#include <avr/io.h>\n#include <util/delay.h>\n\n#define F_CPU 16500000L\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n\nint main(void)\n{\n setBit(DDRB,PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n while (1)\n {\n toogleBit(PORTB, PB1); // Inverte o estado do pino\n _delay_ms(250); // Aguarda 250 ms\n }\n\n return (0);\n}\n"})}),"\n",(0,s.jsx)(o.p,{children:"Dessa forma manipulamos somente os bits desejados, n\xe3o alterando os valores dos outros que poder\xe3o ser usados para outras aplica\xe7\xf5es."}),"\n",(0,s.jsx)(o.h2,{id:"desafio",children:"Desafio"}),"\n",(0,s.jsx)(o.p,{children:"Coloque outro LED no pino PB0 e o acione alternadamente ao pino PB1, ou seja, quando LED no PB0 estiver ligado o LED em PB1 deve apagar e vice-versa."}),"\n",(0,s.jsxs)(o.table,{children:[(0,s.jsx)(o.thead,{children:(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.th,{children:"Autor"}),(0,s.jsx)(o.th,{children:(0,s.jsx)(o.a,{href:"https://github.com/FBSeletronica",children:"F\xe1bio Souza"})})]})}),(0,s.jsx)(o.tbody,{children:(0,s.jsxs)(o.tr,{children:[(0,s.jsx)(o.td,{children:"Data:"}),(0,s.jsx)(o.td,{children:"24/04/2021"})]})})]})]})}function p(e={}){const{wrapper:o}={...(0,a.MN)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},95788:(e,o,i)=>{i.d(o,{MN:()=>c});var s=i(11504);function a(e,o,i){return o in e?Object.defineProperty(e,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[o]=i,e}function n(e,o){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);o&&(s=s.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),i.push.apply(i,s)}return i}function r(e){for(var o=1;o<arguments.length;o++){var i=null!=arguments[o]?arguments[o]:{};o%2?n(Object(i),!0).forEach((function(o){a(e,o,i[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):n(Object(i)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(i,o))}))}return e}function t(e,o){if(null==e)return{};var i,s,a=function(e,o){if(null==e)return{};var i,s,a={},n=Object.keys(e);for(s=0;s<n.length;s++)i=n[s],o.indexOf(i)>=0||(a[i]=e[i]);return a}(e,o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(s=0;s<n.length;s++)i=n[s],o.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}var d=s.createContext({}),c=function(e){var o=s.useContext(d),i=o;return e&&(i="function"==typeof e?e(o):r(r({},o),e)),i},l={inlineCode:"code",wrapper:function(e){var o=e.children;return s.createElement(s.Fragment,{},o)}},p=s.forwardRef((function(e,o){var i=e.components,a=e.mdxType,n=e.originalType,d=e.parentName,p=t(e,["components","mdxType","originalType","parentName"]),m=c(i),h=a,u=m["".concat(d,".").concat(h)]||m[h]||l[h]||n;return i?s.createElement(u,r(r({ref:o},p),{},{components:i})):s.createElement(u,r({ref:o},p))}));p.displayName="MDXCreateElement"},12296:(e,o,i)=>{i.d(o,{c:()=>s});const s=i.p+"assets/images/Pinagem-Franzininho-DIY-V2RV2-42a18903012c4dc223f9d4c774730625.png"},64516:(e,o,i)=>{i.d(o,{c:()=>s});const s=i.p+"assets/images/config-gpio-5448c58ddfc3c042b28c64b3cedb300e.png"},42212:(e,o,i)=>{i.d(o,{c:()=>s});const s=i.p+"assets/images/pinagem-attiny85-8fa815c3f3e21f9c3b699b09c9a7f6f1.png"},59336:(e,o,i)=>{i.d(o,{c:()=>s});const s=i.p+"assets/images/registradores-port-B-f8a36498e9dd1043ec81211a0fb7103c.png"}}]); \ No newline at end of file diff --git a/en/assets/js/f6af7cfc.af56e9e3.js b/en/assets/js/f6af7cfc.af56e9e3.js deleted file mode 100755 index cb09c288d..000000000 --- a/en/assets/js/f6af7cfc.af56e9e3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1506],{3905:(e,a,o)=>{o.d(a,{Zo:()=>p,kt:()=>g});var n=o(7294);function t(e,a,o){return a in e?Object.defineProperty(e,a,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[a]=o,e}function i(e,a){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var a=1;a<arguments.length;a++){var o=null!=arguments[a]?arguments[a]:{};a%2?i(Object(o),!0).forEach((function(a){t(e,a,o[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(o,a))}))}return e}function s(e,a){if(null==e)return{};var o,n,t=function(e,a){if(null==e)return{};var o,n,t={},i=Object.keys(e);for(n=0;n<i.length;n++)o=i[n],a.indexOf(o)>=0||(t[o]=e[o]);return t}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)o=i[n],a.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(t[o]=e[o])}return t}var l=n.createContext({}),d=function(e){var a=n.useContext(l),o=a;return e&&(o="function"==typeof e?e(a):r(r({},a),e)),o},p=function(e){var a=d(e.components);return n.createElement(l.Provider,{value:a},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},m=n.forwardRef((function(e,a){var o=e.components,t=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=d(o),m=t,g=u["".concat(l,".").concat(m)]||u[m]||c[m]||i;return o?n.createElement(g,r(r({ref:a},p),{},{components:o})):n.createElement(g,r({ref:a},p))}));function g(e,a){var o=arguments,t=a&&a.mdxType;if("string"==typeof e||t){var i=o.length,r=new Array(i);r[0]=m;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[u]="string"==typeof e?e:t,r[1]=s;for(var d=2;d<i;d++)r[d]=o[d];return n.createElement.apply(null,r)}return n.createElement.apply(null,o)}m.displayName="MDXCreateElement"},5673:(e,a,o)=>{o.r(a),o.d(a,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var n=o(3117),t=(o(7294),o(3905));const i={id:"saida-digital",title:"Sa\xedda Digital",slug:"/franzininho-diy/exemplos-avr-libc/saida-digital",description:"Vamos entender como trabalhar com as sa\xeddas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},r=void 0,s={unversionedId:"FranzininhoDIY/exemplos-avr-libc/saida-digital",id:"FranzininhoDIY/exemplos-avr-libc/saida-digital",title:"Sa\xedda Digital",description:"Vamos entender como trabalhar com as sa\xeddas Digitais",source:"@site/docs/FranzininhoDIY/exemplos-avr-libc/saida-digital.md",sourceDirName:"FranzininhoDIY/exemplos-avr-libc",slug:"/franzininho-diy/exemplos-avr-libc/saida-digital",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-avr-libc/saida-digital.md",tags:[],version:"current",frontMatter:{id:"saida-digital",title:"Sa\xedda Digital",slug:"/franzininho-diy/exemplos-avr-libc/saida-digital",description:"Vamos entender como trabalhar com as sa\xeddas Digitais",authors:"F\xe1bio Souza",date:"24/04/2021",some_url:"https://github.com/FBSeletronica"},sidebar:"docs",previous:{title:"Hello, World!",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/hello-world"},next:{title:"Entrada Digital",permalink:"/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital"}},l={},d=[{value:"Recursos Necess\xe1rios",id:"recursos-necess\xe1rios",level:2},{value:"Pinos do ATtiny85",id:"pinos-do-attiny85",level:2},{value:"Algumas Particularidades do circuito da Franzininho DIY",id:"algumas-particularidades-do-circuito-da-franzininho-diy",level:3},{value:"Registradores respons\xe1veis pelos pinos de I/O",id:"registradores-respons\xe1veis-pelos-pinos-de-io",level:2},{value:"C\xf3digos",id:"c\xf3digos",level:2},{value:"Desafio",id:"desafio",level:2}],p={toc:d},u="wrapper";function c(e){let{components:a,...i}=e;return(0,t.kt)(u,(0,n.Z)({},p,i,{components:a,mdxType:"MDXLayout"}),(0,t.kt)("p",null,"Agora que j\xe1 estamos com as ferramentas instaladas e a placa Franzininho DIY em m\xe3os, vamos dar in\xedcio aos estudos dos perif\xe9ricos internos do ATtiny85."),(0,t.kt)("p",null,"Nesse artigo vamos explorar os pinos de I/O como sa\xedda digital. Ao final, voc\xea saber\xe1 como acionar dispositivos externos a Franzininho DIY."),(0,t.kt)("h2",{id:"recursos-necess\xe1rios"},"Recursos Necess\xe1rios"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"Placa Franzininho DIY(com Micronucleus)"),(0,t.kt)("li",{parentName:"ul"},"Computador com as ferramentas de software instaladas")),(0,t.kt)("h2",{id:"pinos-do-attiny85"},"Pinos do ATtiny85"),(0,t.kt)("p",null,"O ATtiny85 possui 8 pinos, sendo que 6 deles podemos usar como I/O (entradas ou sa\xeddas) digitais. Os pinos de I/O s\xe3o nomeados conforme a porta que eles pertencem. Na figura a seguir vemos que os pinos do ATtiny85 s\xe3o nomeados de PBx, onde x \xe9 o n\xfamero correspondente ao pino no registrador (n\xe3o se preocupe, vamos ver mais detalhes a seguir):"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"Pinagem do ATtiny85",src:o(2285).Z,width:"2094",height:"498"})),(0,t.kt)("p",null,"Cada pino de I/O pode ser usado como entrada ou sa\xedda e tamb\xe9m como outras fun\xe7\xf5es nesse momento s\xf3 vamos trabalhar com os pinos funcionando como GPIO (General Porpouse Input/Output)."),(0,t.kt)("p",null,"Conforme exibido na imagem acima, temos os seguintes pinos dispon\xedveis no ATtiny85:"),(0,t.kt)("p",null,"PB0, PB1, PB2, PB3, PB4, PB5."),(0,t.kt)("h3",{id:"algumas-particularidades-do-circuito-da-franzininho-diy"},"Algumas Particularidades do circuito da Franzininho DIY"),(0,t.kt)("p",null,"Os pinos de I/O s\xe3o marcados em Amarelo no Pinout da Franzininho DIY"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"pinout Franzininho DIY",src:o(8706).Z,width:"1630",height:"1122"})),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"O pino PB5 \xe9 configurado como RESET na Franzininho DIY, sendo assim n\xe3o poderemos us\xe1-lo como I/O."),(0,t.kt)("li",{parentName:"ul"},"Os pinos PB3 e PB4 s\xe3o usados para o circuito da USB, sendo assim temos que us\xe1-los com cautela. Geralmente esses pinos s\xe3o usados apenas como sa\xeddas digitais."),(0,t.kt)("li",{parentName:"ul"},"O LED amarelo da placa est\xe1 ligado ao pino PB1."),(0,t.kt)("li",{parentName:"ul"},"Os pinos PB0 E PB2 n\xe3o possuem circuito ligados a eles.")),(0,t.kt)("h2",{id:"registradores-respons\xe1veis-pelos-pinos-de-io"},"Registradores respons\xe1veis pelos pinos de I/O"),(0,t.kt)("p",null,"Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:"),(0,t.kt)("ul",null,(0,t.kt)("li",{parentName:"ul"},"PORTB: Registrador de dados. Respons\xe1vel pela escrita nos pinos;"),(0,t.kt)("li",{parentName:"ul"},"DDRB: Registrador de dire\xe7\xe3o do pino. Respons\xe1vel pela configura\xe7\xe3o dos pinos para definir se ser\xe1 entrada ou sa\xedda;"),(0,t.kt)("li",{parentName:"ul"},"PINB: Registrador de entrada da porta. Respons\xe1vel pela leitura do estado do pino.")),(0,t.kt)("p",null,"Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos ter\xedamos os finais A, B,C, etc. Cada porta s\xf3 possui no m\xe1ximo 8 pinos."),(0,t.kt)("p",null,"Na se\xe7\xe3o 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configura\xe7\xf5es poss\xedveis para os pinos:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"configura\xe7\xe3o GPIO",src:o(5368).Z,width:"1194",height:"339"})),(0,t.kt)("p",null,"A figura abaixo exibe os registradores respons\xe1veis pelos pino de I/O do PORTB:"),(0,t.kt)("p",null,(0,t.kt)("img",{alt:"configura\xe7\xe3o GPIO",src:o(9192).Z,width:"1448",height:"696"})),(0,t.kt)("p",null,"Note que cada bit dos registradores \xe9 respons\xe1vel por pino sendo indexado pelo n\xfamero correspondente ao bit. Dessa forma, se quisermos usar o pino PB1 para acionar o LED, devemos configurar o registrador DDRB da seguinte forma:"),(0,t.kt)("table",null,(0,t.kt)("thead",{parentName:"table"},(0,t.kt)("tr",{parentName:"thead"},(0,t.kt)("th",{parentName:"tr",align:null},"7"),(0,t.kt)("th",{parentName:"tr",align:null},"6"),(0,t.kt)("th",{parentName:"tr",align:null},"5"),(0,t.kt)("th",{parentName:"tr",align:null},"4"),(0,t.kt)("th",{parentName:"tr",align:null},"3"),(0,t.kt)("th",{parentName:"tr",align:null},"2"),(0,t.kt)("th",{parentName:"tr",align:null},"1"),(0,t.kt)("th",{parentName:"tr",align:null},"0"))),(0,t.kt)("tbody",{parentName:"table"},(0,t.kt)("tr",{parentName:"tbody"},(0,t.kt)("td",{parentName:"tr",align:null},"-"),(0,t.kt)("td",{parentName:"tr",align:null},"-"),(0,t.kt)("td",{parentName:"tr",align:null},"0"),(0,t.kt)("td",{parentName:"tr",align:null},"0"),(0,t.kt)("td",{parentName:"tr",align:null},"0"),(0,t.kt)("td",{parentName:"tr",align:null},"0"),(0,t.kt)("td",{parentName:"tr",align:null},"1"),(0,t.kt)("td",{parentName:"tr",align:null},"0")))),(0,t.kt)("p",null,"E para acionar ligar/deligar o LED devemos colocar 1 ou no bit correspondente no PORTB."),(0,t.kt)("p",null,"Vamos a um exemplo para ficar mais claro."),(0,t.kt)("h2",{id:"c\xf3digos"},"C\xf3digos"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},"#include <avr/io.h>\n#include <util/delay.h>\n\n#define F_CPU 16500000L // Frequ\xeancia do oscilador. usado para a fun\xe7\xe3o de delay\n\nint main(void)\n{\n DDRB = 0b00000010; // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n while (1)\n {\n PORTB = 0b00000010; // Liga o LED 1\n _delay_ms(250); // Aguarda 250 ms\n PORTB = 0b00000000; // Desliga o LED 1\n _delay_ms(250); // Aguarda 250 ms\n }\n\n return (0);\n}\n")),(0,t.kt)("p",null,"O exemplo acima pisca o LED em intervalos de 250 ms. A configura\xe7\xe3o do pino PB1 como sa\xedda foi feito colocando o bit1 de DDRB em 1. J\xe1 para ligar e desligar o LED foi manipulado o bit 1 de PORTB, hora em 1 hora em 0."),(0,t.kt)("p",null,"Bacana, n\xe3o?"),(0,t.kt)("p",null,"podemos melhorar a manipula\xe7\xe3o dos bits dos registradores usando macros. As macros s\xe3o rotinas que facilitam nossas vidas. Recomendo que se voc\xea leia esse artigo para entender sobre as macros e as opera\xe7\xf5es efetuadas: ",(0,t.kt)("a",{parentName:"p",href:"https://www.embarcados.com.br/bits-em-linguagem-c/"},"https://www.embarcados.com.br/bits-em-linguagem-c/")),(0,t.kt)("p",null,"Vamos usar as seguintes macros:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre"},"#define setBit(valor,bit) (valor |= (1<<bit))\n#define toogleBit(valor,bit) (valor ^= (1<<bit))\n")),(0,t.kt)("p",null,"Os nomes j\xe1 s\xe3o auto-explicativos mas vamos verificar como us\xe1-las no programa em C:"),(0,t.kt)("pre",null,(0,t.kt)("code",{parentName:"pre",className:"language-c"},"#include <avr/io.h>\n#include <util/delay.h>\n\n#define F_CPU 16500000L\n\n// Macros\n#define setBit(valor,bit) (valor |= (1 << bit))\n#define toogleBit(valor,bit) (valor ^= (1 << bit))\n\nint main(void)\n{\n setBit(DDRB,PB1); // Configura Pino PB1 como sa\xedda (Pino do LED)\n\n while (1)\n {\n toogleBit(PORTB, PB1); // Inverte o estado do pino\n _delay_ms(250); // Aguarda 250 ms\n }\n\n return (0);\n}\n")),(0,t.kt)("p",null,"Dessa forma manipulamos somente os bits desejados, n\xe3o alterando os valores dos outros que poder\xe3o ser usados para outras aplica\xe7\xf5es."),(0,t.kt)("h2",{id:"desafio"},"Desafio"),(0,t.kt)("p",null,"Coloque outro LED no pino PB0 e o acione alternadamente ao pino PB1, ou seja, quando LED no PB0 estiver ligado o LED em PB1 deve apagar e vice-versa."),(0,t.kt)("table",null,(0,t.kt)("thead",{parentName:"table"},(0,t.kt)("tr",{parentName:"thead"},(0,t.kt)("th",{parentName:"tr",align:null},"Autor"),(0,t.kt)("th",{parentName:"tr",align:null},(0,t.kt)("a",{parentName:"th",href:"https://github.com/FBSeletronica"},"F\xe1bio Souza")))),(0,t.kt)("tbody",{parentName:"table"},(0,t.kt)("tr",{parentName:"tbody"},(0,t.kt)("td",{parentName:"tr",align:null},"Data:"),(0,t.kt)("td",{parentName:"tr",align:null},"24/04/2021")))))}c.isMDXComponent=!0},8706:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/Pinagem-Franzininho-DIY-V2RV2-42a18903012c4dc223f9d4c774730625.png"},5368:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/config-gpio-5448c58ddfc3c042b28c64b3cedb300e.png"},2285:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/pinagem-attiny85-8fa815c3f3e21f9c3b699b09c9a7f6f1.png"},9192:(e,a,o)=>{o.d(a,{Z:()=>n});const n=o.p+"assets/images/registradores-port-B-f8a36498e9dd1043ec81211a0fb7103c.png"}}]); \ No newline at end of file diff --git a/en/assets/js/f6cbeee1.2a9c35a1.js b/en/assets/js/f6cbeee1.2a9c35a1.js new file mode 100755 index 000000000..e4bc474a5 --- /dev/null +++ b/en/assets/js/f6cbeee1.2a9c35a1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8504],{96912:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"welcome","metadata":{"permalink":"/en/blog/welcome","source":"@site/blog/2019-05-30-welcome.md","title":"Welcome","description":"Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!","date":"2019-05-30T00:00:00.000Z","tags":[{"label":"facebook","permalink":"/en/blog/tags/facebook"},{"label":"hello","permalink":"/en/blog/tags/hello"},{"label":"docusaurus","permalink":"/en/blog/tags/docusaurus"}],"readingTime":0.175,"hasTruncateMarker":false,"authors":[{"name":"Yangshun Tay","title":"Front End Engineer @ Facebook","url":"https://github.com/yangshun","imageURL":"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4"}],"frontMatter":{"slug":"welcome","title":"Welcome","author":"Yangshun Tay","author_title":"Front End Engineer @ Facebook","author_url":"https://github.com/yangshun","author_image_url":"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4","tags":["facebook","hello","docusaurus"]},"unlisted":false,"nextItem":{"title":"Hello","permalink":"/en/blog/hello-world"}},"content":"Blog features are powered by the blog plugin. Simply add files to the `blog` directory. It supports tags as well!\\n\\nDelete the whole directory if you don\'t want the blog features. As simple as that!"},{"id":"hello-world","metadata":{"permalink":"/en/blog/hello-world","source":"@site/blog/2019-05-29-hello-world.md","title":"Hello","description":"Welcome to this blog. This blog is created with Docusaurus 2 alpha.","date":"2019-05-29T00:00:00.000Z","tags":[{"label":"hello","permalink":"/en/blog/tags/hello"},{"label":"docusaurus","permalink":"/en/blog/tags/docusaurus"}],"readingTime":0.12,"hasTruncateMarker":true,"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4"}],"frontMatter":{"slug":"hello-world","title":"Hello","author":"Endilie Yacop Sucipto","author_title":"Maintainer of Docusaurus","author_url":"https://github.com/endiliey","author_image_url":"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4","tags":["hello","docusaurus"]},"unlisted":false,"prevItem":{"title":"Welcome","permalink":"/en/blog/welcome"},"nextItem":{"title":"Hola","permalink":"/en/blog/hola"}},"content":"Welcome to this blog. This blog is created with [**Docusaurus 2 alpha**](https://v2.docusaurus.io/).\\n\\n\x3c!--truncate--\x3e\\n\\nThis is a test post.\\n\\nA whole bunch of other information."},{"id":"hola","metadata":{"permalink":"/en/blog/hola","source":"@site/blog/2019-05-28-hola.md","title":"Hola","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","date":"2019-05-28T00:00:00.000Z","tags":[{"label":"hola","permalink":"/en/blog/tags/hola"},{"label":"docusaurus","permalink":"/en/blog/tags/docusaurus"}],"readingTime":0.12,"hasTruncateMarker":false,"authors":[{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","imageURL":"https://avatars1.githubusercontent.com/u/2055384?v=4"}],"frontMatter":{"slug":"hola","title":"Hola","author":"Gao Wei","author_title":"Docusaurus Core Team","author_url":"https://github.com/wgao19","author_image_url":"https://avatars1.githubusercontent.com/u/2055384?v=4","tags":["hola","docusaurus"]},"unlisted":false,"prevItem":{"title":"Hello","permalink":"/en/blog/hello-world"}},"content":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}]}')}}]); \ No newline at end of file diff --git a/en/assets/js/f6cbeee1.8abfa823.js b/en/assets/js/f6cbeee1.8abfa823.js deleted file mode 100755 index eb50314fb..000000000 --- a/en/assets/js/f6cbeee1.8abfa823.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3836],{4641:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"welcome","metadata":{"permalink":"/en/blog/welcome","source":"@site/blog/2019-05-30-welcome.md","title":"Welcome","description":"Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!","date":"2019-05-30T00:00:00.000Z","formattedDate":"May 30, 2019","tags":[{"label":"facebook","permalink":"/en/blog/tags/facebook"},{"label":"hello","permalink":"/en/blog/tags/hello"},{"label":"docusaurus","permalink":"/en/blog/tags/docusaurus"}],"readingTime":0.175,"hasTruncateMarker":false,"authors":[{"name":"Yangshun Tay","title":"Front End Engineer @ Facebook","url":"https://github.com/yangshun","imageURL":"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4"}],"frontMatter":{"slug":"welcome","title":"Welcome","author":"Yangshun Tay","author_title":"Front End Engineer @ Facebook","author_url":"https://github.com/yangshun","author_image_url":"https://avatars0.githubusercontent.com/u/1315101?s=400&v=4","tags":["facebook","hello","docusaurus"]},"nextItem":{"title":"Hello","permalink":"/en/blog/hello-world"}},"content":"Blog features are powered by the blog plugin. Simply add files to the `blog` directory. It supports tags as well!\\n\\nDelete the whole directory if you don\'t want the blog features. As simple as that!"},{"id":"hello-world","metadata":{"permalink":"/en/blog/hello-world","source":"@site/blog/2019-05-29-hello-world.md","title":"Hello","description":"Welcome to this blog. This blog is created with Docusaurus 2 alpha.","date":"2019-05-29T00:00:00.000Z","formattedDate":"May 29, 2019","tags":[{"label":"hello","permalink":"/en/blog/tags/hello"},{"label":"docusaurus","permalink":"/en/blog/tags/docusaurus"}],"readingTime":0.12,"hasTruncateMarker":true,"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4"}],"frontMatter":{"slug":"hello-world","title":"Hello","author":"Endilie Yacop Sucipto","author_title":"Maintainer of Docusaurus","author_url":"https://github.com/endiliey","author_image_url":"https://avatars1.githubusercontent.com/u/17883920?s=460&v=4","tags":["hello","docusaurus"]},"prevItem":{"title":"Welcome","permalink":"/en/blog/welcome"},"nextItem":{"title":"Hola","permalink":"/en/blog/hola"}},"content":"Welcome to this blog. This blog is created with [**Docusaurus 2 alpha**](https://v2.docusaurus.io/).\\n\\n\x3c!--truncate--\x3e\\n\\nThis is a test post.\\n\\nA whole bunch of other information."},{"id":"hola","metadata":{"permalink":"/en/blog/hola","source":"@site/blog/2019-05-28-hola.md","title":"Hola","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","date":"2019-05-28T00:00:00.000Z","formattedDate":"May 28, 2019","tags":[{"label":"hola","permalink":"/en/blog/tags/hola"},{"label":"docusaurus","permalink":"/en/blog/tags/docusaurus"}],"readingTime":0.12,"hasTruncateMarker":false,"authors":[{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","imageURL":"https://avatars1.githubusercontent.com/u/2055384?v=4"}],"frontMatter":{"slug":"hola","title":"Hola","author":"Gao Wei","author_title":"Docusaurus Core Team","author_url":"https://github.com/wgao19","author_image_url":"https://avatars1.githubusercontent.com/u/2055384?v=4","tags":["hola","docusaurus"]},"prevItem":{"title":"Hello","permalink":"/en/blog/hello-world"}},"content":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}]}')}}]); \ No newline at end of file diff --git a/en/assets/js/fba6c282.3ca9b1b4.js b/en/assets/js/fba6c282.3ca9b1b4.js new file mode 100755 index 000000000..9d9e0ba22 --- /dev/null +++ b/en/assets/js/fba6c282.3ca9b1b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3832],{75072:e=>{e.exports=JSON.parse('{"permalink":"/en/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/en/assets/js/fba6c282.7e361630.js b/en/assets/js/fba6c282.7e361630.js deleted file mode 100755 index 4ed83f75d..000000000 --- a/en/assets/js/fba6c282.7e361630.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[4364],{9501:e=>{e.exports=JSON.parse('{"permalink":"/en/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/en/assets/js/fd69b436.614f13fb.js b/en/assets/js/fd69b436.614f13fb.js deleted file mode 100755 index 80719f768..000000000 --- a/en/assets/js/fd69b436.614f13fb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[8504],{3905:(e,a,n)=>{n.d(a,{Zo:()=>c,kt:()=>h});var o=n(7294);function r(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function t(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);a&&(o=o.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var a=1;a<arguments.length;a++){var n=null!=arguments[a]?arguments[a]:{};a%2?t(Object(n),!0).forEach((function(a){r(e,a,n[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):t(Object(n)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(n,a))}))}return e}function l(e,a){if(null==e)return{};var n,o,r=function(e,a){if(null==e)return{};var n,o,r={},t=Object.keys(e);for(o=0;o<t.length;o++)n=t[o],a.indexOf(n)>=0||(r[n]=e[n]);return r}(e,a);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(o=0;o<t.length;o++)n=t[o],a.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var d=o.createContext({}),p=function(e){var a=o.useContext(d),n=a;return e&&(n="function"==typeof e?e(a):i(i({},a),e)),n},c=function(e){var a=p(e.components);return o.createElement(d.Provider,{value:a},e.children)},s="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return o.createElement(o.Fragment,{},a)}},u=o.forwardRef((function(e,a){var n=e.components,r=e.mdxType,t=e.originalType,d=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),s=p(n),u=r,h=s["".concat(d,".").concat(u)]||s[u]||m[u]||t;return n?o.createElement(h,i(i({ref:a},c),{},{components:n})):o.createElement(h,i({ref:a},c))}));function h(e,a){var n=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var t=n.length,i=new Array(t);i[0]=u;var l={};for(var d in a)hasOwnProperty.call(a,d)&&(l[d]=a[d]);l.originalType=e,l[s]="string"==typeof e?e:r,i[1]=l;for(var p=2;p<t;p++)i[p]=n[p];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}u.displayName="MDXCreateElement"},1337:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>d,contentTitle:()=>i,default:()=>m,frontMatter:()=>t,metadata:()=>l,toc:()=>p});var o=n(3117),r=(n(7294),n(3905));const t={id:"franzininho-diy",title:"Placa Franzininho DIY",slug:"/franzininho-diy/sobre",description:"Detalhes da Franzininho DIY"},i=void 0,l={unversionedId:"FranzininhoDIY/franzininho-diy",id:"FranzininhoDIY/franzininho-diy",title:"Placa Franzininho DIY",description:"Detalhes da Franzininho DIY",source:"@site/docs/FranzininhoDIY/franzininho-diy.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/sobre",permalink:"/en/docs/franzininho-diy/sobre",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/franzininho-diy.md",tags:[],version:"current",frontMatter:{id:"franzininho-diy",title:"Placa Franzininho DIY",slug:"/franzininho-diy/sobre",description:"Detalhes da Franzininho DIY"},sidebar:"docs",previous:{title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",permalink:"/en/docs/franzininho-c0/arduino-identificacao-pinos"},next:{title:"Lista de Materiais",permalink:"/en/docs/franzininho-diy/lista-de-materiais"}},d={},p=[{value:"Pinout",id:"pinout",level:2},{value:"Resumo de recursos",id:"resumo-de-recursos",level:2},{value:"Documenta\xe7\xe3o",id:"documenta\xe7\xe3o",level:2},{value:"Projeto Open Hardware",id:"projeto-open-hardware",level:2},{value:"Onde comprar",id:"onde-comprar",level:2},{value:"Varejo",id:"varejo",level:3},{value:"Atacado",id:"atacado",level:3}],c={toc:p},s="wrapper";function m(e){let{components:a,...t}=e;return(0,r.kt)(s,(0,o.Z)({},c,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"A Franzininho DIY foi desenvolvida com a proposta de \u201cFa\xe7a voc\xea mesmo\u201d e com base na plataforma Arduino. O objetivo \xe9 que as pessoas que a adquirem, trilhem a jornada do Maker de eletr\xf4nica, montando e programando a sua pr\xf3pria placa compat\xedvel com Arduino."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Placa Franzininho DIY",src:n(5613).Z,width:"500",height:"233"})),(0,r.kt)("p",null,"Ela \xe9 fornecida em formato de Kit para soldar, n\xe3o recomendamos que voc\xea adquira a Franzininho DIY j\xe1 soldada, pois o objetivo pedag\xf3gico compreende a jornada de montagem."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Kit Franzininho DIY",src:n(5988).Z,width:"600",height:"600"})),(0,r.kt)("p",null,"\xc9 uma excelente op\xe7\xe3o para oficinas de Soldagem eletr\xf4nica e primeiros passos com a programa\xe7\xe3o Arduino. Com componentes f\xe1ceis de identificar e tamb\xe9m de soldar, permite que qualquer pessoa com pouco ou nenhum conhecimento em soldagem consiga montar a sua placa tranquilamente e criar em pouco tempo projetos como, automa\xe7\xe3o, rob\xf4s, jogos entre outros(Veja os exemplos em nossa documenta\xe7\xe3o)."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Oficina Franzininho DIY",src:n(818).Z,width:"640",height:"428"})),(0,r.kt)("p",null,"A placa \xe9 baseada no microcontrolador ATtiny85 e foi criada para fins educacionais, \xe9 voltada para estudantes de curso t\xe9cnico e engenharia, makers e hobbistas que desejam aprender sobre prototipagem, soldagem, eletr\xf4nica e programa\xe7\xe3o em uma verdadeira experi\xeancia DIY."),(0,r.kt)("p",null,"A placa possui 5 pinos de I/O, LED indicador de Alimenta\xe7\xe3o, LED de uso geral, conector USB para alimenta\xe7\xe3o e grava\xe7\xe3o, conector para alimenta\xe7\xe3o externa e bot\xe3o de Reset."),(0,r.kt)("h2",{id:"pinout"},"Pinout"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"pinagem Franzininho DIY",src:n(6608).Z,width:"1209",height:"869"})),(0,r.kt)("admonition",{title:"Vers\xf5es de placas",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Houve uma altera\xe7\xe3o da numera\xe7\xe3o dos pinos 4 e 5 no silk a partir da V2RV2.\nAinda \xe9 necess\xe1rio ajustar no software")),(0,r.kt)("h2",{id:"resumo-de-recursos"},"Resumo de recursos"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Microcontrolador: ATtiny85"),(0,r.kt)("li",{parentName:"ul"},"Pinos de I/O: at\xe9 6"),(0,r.kt)("li",{parentName:"ul"},"Entradas Anal\xf3gicas: at\xe9 4"),(0,r.kt)("li",{parentName:"ul"},"PWM: 3"),(0,r.kt)("li",{parentName:"ul"},"I2C: 1"),(0,r.kt)("li",{parentName:"ul"},"SPI: 1"),(0,r.kt)("li",{parentName:"ul"},"Tens\xe3o de funcionamento: 5V"),(0,r.kt)("li",{parentName:"ul"},"Alimenta\xe7\xe3o: USB(5V) ou externa (de 7,5V \xe0 9V)")),(0,r.kt)("h2",{id:"documenta\xe7\xe3o"},"Documenta\xe7\xe3o"),(0,r.kt)("p",null,"Ela pode ser programada diretamente na IDE do Arduino inclusive com Ardublock. tamb\xe9m pode ser programada em linguagem C usando IDE mais avan\xe7adas."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/franzininho-diy-board/raw/main/Franzininho.pdf"},"Esquem\xe1tico")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/franzininho-diy-board"},"Reposit\xf3rio do Hardware")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"http://eepurl.com/gbR4P1"},"e-book Franzininho - Monte e Programe seu Pr\xf3prio Arduino")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.amazon.com.br/Franzininho-F%C3%A1bio-Souza/dp/8595680531/"},"Livro impresso: Franzininho - Monte e Programe seu Pr\xf3prio Arduino")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/Franzininho/franzininho-fritzing/blob/master/Franzininho-DIY/Franzininho-DIY-V2RV2.fzpz"},"Componentes para Fritzing"))),(0,r.kt)("h2",{id:"projeto-open-hardware"},"Projeto Open Hardware"),(0,r.kt)("p",null,"O projeto \xe9 open hardware e foi publicado em ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/franzininho-diy-board/blob/main/LICENSE"},"CC-BY-SA-4.0")),(0,r.kt)("p",null,"A Franzininho DIY est\xe1 certificada na ",(0,r.kt)("a",{parentName:"p",href:"https://certification.oshwa.org/br000003.html"},"OSHWA com UID BR000003")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"BR000003",src:n(3801).Z,width:"300",height:"220"})),(0,r.kt)("admonition",{title:"Importante",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"Para reprodu\xe7\xe3o do projeto ou deriva\xe7\xf5es, \xe9 importante verificar os requisitos da licen\xe7a , copyright e boas pr\xe1ticas.")),(0,r.kt)("h2",{id:"onde-comprar"},"Onde comprar"),(0,r.kt)("h3",{id:"varejo"},"Varejo"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.robocore.net/loja/embarcados/franzininho-diy"},"Robocore")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.robocore.net/loja/embarcados/franzininho-diy"},"FilipeFlop")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.casadarobotica.com/loja/produto.php?loja=650361&IdProd=4275&parceiro=1821"},"Casa da Rob\xf3tica"))),(0,r.kt)("h3",{id:"atacado"},"Atacado"),(0,r.kt)("p",null,"Entrar em contato: ",(0,r.kt)("a",{parentName:"p",href:"mailto:contato@franzininho.com.br"},"contato@franzininho.com.br")))}m.isMDXComponent=!0},3801:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/OSHW_mark_BR000003-9a04b78c44d300b64a9ce9f590de0f14.png"},6608:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/franzininho-diy-pinout-7047a8d5930175670acc131497791fcc.png"},5988:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/kit-franzininho-diy-af913d17d968738d4f79dd46e69b4b96.png"},818:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/oficina-franzininho-diy-7f71f5fbaed295a79256ba0d4ec975f9.jpg"},5613:(e,a,n)=>{n.d(a,{Z:()=>o});const o=n.p+"assets/images/placa-franzininho-diy-d8459c4e0e0d4c724d1c4d619ffc0350.png"}}]); \ No newline at end of file diff --git a/en/assets/js/fd69b436.a5b81ebc.js b/en/assets/js/fd69b436.a5b81ebc.js new file mode 100755 index 000000000..3aee8a04a --- /dev/null +++ b/en/assets/js/fd69b436.a5b81ebc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[9386],{92304:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=i(17624),a=i(95788);const o={id:"franzininho-diy",title:"Placa Franzininho DIY",slug:"/franzininho-diy/sobre",description:"Detalhes da Franzininho DIY"},t=void 0,s={id:"FranzininhoDIY/franzininho-diy",title:"Placa Franzininho DIY",description:"Detalhes da Franzininho DIY",source:"@site/docs/FranzininhoDIY/franzininho-diy.md",sourceDirName:"FranzininhoDIY",slug:"/franzininho-diy/sobre",permalink:"/en/docs/franzininho-diy/sobre",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/franzininho-diy.md",tags:[],version:"current",frontMatter:{id:"franzininho-diy",title:"Placa Franzininho DIY",slug:"/franzininho-diy/sobre",description:"Detalhes da Franzininho DIY"},sidebar:"docs",previous:{title:"Identifica\xe7\xe3o dos Pinos no Ambiente Arduino",permalink:"/en/docs/franzininho-c0/arduino-identificacao-pinos"},next:{title:"Lista de Materiais",permalink:"/en/docs/franzininho-diy/lista-de-materiais"}},c={},d=[{value:"Pinout",id:"pinout",level:2},{value:"Resumo de recursos",id:"resumo-de-recursos",level:2},{value:"Documenta\xe7\xe3o",id:"documenta\xe7\xe3o",level:2},{value:"Projeto Open Hardware",id:"projeto-open-hardware",level:2},{value:"Onde comprar",id:"onde-comprar",level:2},{value:"Varejo",id:"varejo",level:3},{value:"Atacado",id:"atacado",level:3}];function l(n){const e={a:"a",admonition:"admonition",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",ul:"ul",...(0,a.MN)(),...n.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.p,{children:"A Franzininho DIY foi desenvolvida com a proposta de \u201cFa\xe7a voc\xea mesmo\u201d e com base na plataforma Arduino. O objetivo \xe9 que as pessoas que a adquirem, trilhem a jornada do Maker de eletr\xf4nica, montando e programando a sua pr\xf3pria placa compat\xedvel com Arduino."}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Placa Franzininho DIY",src:i(11576).c+"",width:"500",height:"233"})}),"\n",(0,r.jsx)(e.p,{children:"Ela \xe9 fornecida em formato de Kit para soldar, n\xe3o recomendamos que voc\xea adquira a Franzininho DIY j\xe1 soldada, pois o objetivo pedag\xf3gico compreende a jornada de montagem."}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Kit Franzininho DIY",src:i(26812).c+"",width:"600",height:"600"})}),"\n",(0,r.jsx)(e.p,{children:"\xc9 uma excelente op\xe7\xe3o para oficinas de Soldagem eletr\xf4nica e primeiros passos com a programa\xe7\xe3o Arduino. Com componentes f\xe1ceis de identificar e tamb\xe9m de soldar, permite que qualquer pessoa com pouco ou nenhum conhecimento em soldagem consiga montar a sua placa tranquilamente e criar em pouco tempo projetos como, automa\xe7\xe3o, rob\xf4s, jogos entre outros(Veja os exemplos em nossa documenta\xe7\xe3o)."}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Oficina Franzininho DIY",src:i(95860).c+"",width:"640",height:"428"})}),"\n",(0,r.jsx)(e.p,{children:"A placa \xe9 baseada no microcontrolador ATtiny85 e foi criada para fins educacionais, \xe9 voltada para estudantes de curso t\xe9cnico e engenharia, makers e hobbistas que desejam aprender sobre prototipagem, soldagem, eletr\xf4nica e programa\xe7\xe3o em uma verdadeira experi\xeancia DIY."}),"\n",(0,r.jsx)(e.p,{children:"A placa possui 5 pinos de I/O, LED indicador de Alimenta\xe7\xe3o, LED de uso geral, conector USB para alimenta\xe7\xe3o e grava\xe7\xe3o, conector para alimenta\xe7\xe3o externa e bot\xe3o de Reset."}),"\n",(0,r.jsx)(e.h2,{id:"pinout",children:"Pinout"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"pinagem Franzininho DIY",src:i(16384).c+"",width:"1209",height:"869"})}),"\n",(0,r.jsx)(e.admonition,{title:"Vers\xf5es de placas",type:"tip",children:(0,r.jsx)(e.p,{children:"Houve uma altera\xe7\xe3o da numera\xe7\xe3o dos pinos 4 e 5 no silk a partir da V2RV2.\nAinda \xe9 necess\xe1rio ajustar no software"})}),"\n",(0,r.jsx)(e.h2,{id:"resumo-de-recursos",children:"Resumo de recursos"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"Microcontrolador: ATtiny85"}),"\n",(0,r.jsx)(e.li,{children:"Pinos de I/O: at\xe9 6"}),"\n",(0,r.jsx)(e.li,{children:"Entradas Anal\xf3gicas: at\xe9 4"}),"\n",(0,r.jsx)(e.li,{children:"PWM: 3"}),"\n",(0,r.jsx)(e.li,{children:"I2C: 1"}),"\n",(0,r.jsx)(e.li,{children:"SPI: 1"}),"\n",(0,r.jsx)(e.li,{children:"Tens\xe3o de funcionamento: 5V"}),"\n",(0,r.jsx)(e.li,{children:"Alimenta\xe7\xe3o: USB(5V) ou externa (de 7,5V \xe0 9V)"}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"documenta\xe7\xe3o",children:"Documenta\xe7\xe3o"}),"\n",(0,r.jsx)(e.p,{children:"Ela pode ser programada diretamente na IDE do Arduino inclusive com Ardublock. tamb\xe9m pode ser programada em linguagem C usando IDE mais avan\xe7adas."}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://github.com/Franzininho/franzininho-diy-board/raw/main/Franzininho.pdf",children:"Esquem\xe1tico"})}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://github.com/Franzininho/franzininho-diy-board",children:"Reposit\xf3rio do Hardware"})}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"http://eepurl.com/gbR4P1",children:"e-book Franzininho - Monte e Programe seu Pr\xf3prio Arduino"})}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://www.amazon.com.br/Franzininho-F%C3%A1bio-Souza/dp/8595680531/",children:"Livro impresso: Franzininho - Monte e Programe seu Pr\xf3prio Arduino"})}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://github.com/Franzininho/franzininho-fritzing/blob/master/Franzininho-DIY/Franzininho-DIY-V2RV2.fzpz",children:"Componentes para Fritzing"})}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"projeto-open-hardware",children:"Projeto Open Hardware"}),"\n",(0,r.jsxs)(e.p,{children:["O projeto \xe9 open hardware e foi publicado em ",(0,r.jsx)(e.a,{href:"https://github.com/Franzininho/franzininho-diy-board/blob/main/LICENSE",children:"CC-BY-SA-4.0"})]}),"\n",(0,r.jsxs)(e.p,{children:["A Franzininho DIY est\xe1 certificada na ",(0,r.jsx)(e.a,{href:"https://certification.oshwa.org/br000003.html",children:"OSHWA com UID BR000003"})]}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"BR000003",src:i(46216).c+"",width:"300",height:"220"})}),"\n",(0,r.jsx)(e.admonition,{title:"Importante",type:"important",children:(0,r.jsx)(e.p,{children:"Para reprodu\xe7\xe3o do projeto ou deriva\xe7\xf5es, \xe9 importante verificar os requisitos da licen\xe7a , copyright e boas pr\xe1ticas."})}),"\n",(0,r.jsx)(e.h2,{id:"onde-comprar",children:"Onde comprar"}),"\n",(0,r.jsx)(e.h3,{id:"varejo",children:"Varejo"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://www.robocore.net/loja/embarcados/franzininho-diy",children:"Robocore"})}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://www.robocore.net/loja/embarcados/franzininho-diy",children:"FilipeFlop"})}),"\n",(0,r.jsx)(e.li,{children:(0,r.jsx)(e.a,{href:"https://www.casadarobotica.com/loja/produto.php?loja=650361&IdProd=4275&parceiro=1821",children:"Casa da Rob\xf3tica"})}),"\n"]}),"\n",(0,r.jsx)(e.h3,{id:"atacado",children:"Atacado"}),"\n",(0,r.jsxs)(e.p,{children:["Entrar em contato: ",(0,r.jsx)(e.a,{href:"mailto:contato@franzininho.com.br",children:"contato@franzininho.com.br"})]})]})}function h(n={}){const{wrapper:e}={...(0,a.MN)(),...n.components};return e?(0,r.jsx)(e,{...n,children:(0,r.jsx)(l,{...n})}):l(n)}},95788:(n,e,i)=>{i.d(e,{MN:()=>d});var r=i(11504);function a(n,e,i){return e in n?Object.defineProperty(n,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):n[e]=i,n}function o(n,e){var i=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),i.push.apply(i,r)}return i}function t(n){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?o(Object(i),!0).forEach((function(e){a(n,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(i)):o(Object(i)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(i,e))}))}return n}function s(n,e){if(null==n)return{};var i,r,a=function(n,e){if(null==n)return{};var i,r,a={},o=Object.keys(n);for(r=0;r<o.length;r++)i=o[r],e.indexOf(i)>=0||(a[i]=n[i]);return a}(n,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);for(r=0;r<o.length;r++)i=o[r],e.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(n,i)&&(a[i]=n[i])}return a}var c=r.createContext({}),d=function(n){var e=r.useContext(c),i=e;return n&&(i="function"==typeof n?n(e):t(t({},e),n)),i},l={inlineCode:"code",wrapper:function(n){var e=n.children;return r.createElement(r.Fragment,{},e)}},h=r.forwardRef((function(n,e){var i=n.components,a=n.mdxType,o=n.originalType,c=n.parentName,h=s(n,["components","mdxType","originalType","parentName"]),p=d(i),m=a,u=p["".concat(c,".").concat(m)]||p[m]||l[m]||o;return i?r.createElement(u,t(t({ref:e},h),{},{components:i})):r.createElement(u,t({ref:e},h))}));h.displayName="MDXCreateElement"},46216:(n,e,i)=>{i.d(e,{c:()=>r});const r=i.p+"assets/images/OSHW_mark_BR000003-9a04b78c44d300b64a9ce9f590de0f14.png"},16384:(n,e,i)=>{i.d(e,{c:()=>r});const r=i.p+"assets/images/franzininho-diy-pinout-7047a8d5930175670acc131497791fcc.png"},26812:(n,e,i)=>{i.d(e,{c:()=>r});const r=i.p+"assets/images/kit-franzininho-diy-af913d17d968738d4f79dd46e69b4b96.png"},95860:(n,e,i)=>{i.d(e,{c:()=>r});const r=i.p+"assets/images/oficina-franzininho-diy-7f71f5fbaed295a79256ba0d4ec975f9.jpg"},11576:(n,e,i)=>{i.d(e,{c:()=>r});const r=i.p+"assets/images/placa-franzininho-diy-d8459c4e0e0d4c724d1c4d619ffc0350.png"}}]); \ No newline at end of file diff --git a/en/assets/js/ff1c69f3.0266ac9c.js b/en/assets/js/ff1c69f3.0266ac9c.js new file mode 100755 index 000000000..b10f61184 --- /dev/null +++ b/en/assets/js/ff1c69f3.0266ac9c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3420],{33300:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>x,frontMatter:()=>r,metadata:()=>o,toc:()=>a});var i=n(17624),l=n(95788);const r={id:"franzininhoc0-arduino-todolist",title:"Arduino IDE TODO List",slug:"/franzininho-c0/arduino-todolist",description:"Todo list para exemplos com Arduino"},s=void 0,o={id:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist",title:"Arduino IDE TODO List",description:"Todo list para exemplos com Arduino",source:"@site/docs/franzininhoSTM32C0/exemplos-arduino/exemplos-arduino-todolist.md",sourceDirName:"franzininhoSTM32C0/exemplos-arduino",slug:"/franzininho-c0/arduino-todolist",permalink:"/en/docs/franzininho-c0/arduino-todolist",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-arduino/exemplos-arduino-todolist.md",tags:[],version:"current",frontMatter:{id:"franzininhoc0-arduino-todolist",title:"Arduino IDE TODO List",slug:"/franzininho-c0/arduino-todolist",description:"Todo list para exemplos com Arduino"},sidebar:"docs",previous:{title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",permalink:"/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide"},next:{title:"Primeiros passos com Arduino",permalink:"/en/docs/franzininho-c0/arduino-primeiros-passos"}},d={},a=[{value:"Legenda:",id:"legenda",level:3},{value:"Reposit\xf3rio de Exemplos",id:"reposit\xf3rio-de-exemplos",level:2}];function c(e){const t={a:"a",h2:"h2",h3:"h3",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.MN)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programa\xe7\xe3o da placa Franzininho C0 na Arduino IDE usando o pacote STM32duino."}),"\n",(0,i.jsx)(t.p,{children:"Fique a vontade para colaborar na constru\xe7\xe3o dos materiais e c\xf3digos. Outros exemplos podem ser adicionados. Converse na comunidade."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Exemplos"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Status"}),(0,i.jsx)(t.th,{style:{textAlign:"left"},children:"Nota"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Primeiros passos"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Ferramentas necess\xe1rias, M\xe9todos de grava\xe7\xe3o, Reposit\xf3rio com os exemplos"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"01 - Blinky"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Piscando o LED usando delay"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"02 - Blinky Int"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Piscando o LED usando interrup\xe7\xe3o de timer"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"03 - Hello World"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Enviando mensagem pela serial (UART)"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"04 - E/S Digital"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Leitura de um bot\xe3o e acionamento de um LED"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"05 - Debounce"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Leitura de um bot\xe3o com realiza\xe7\xe3o de debounce"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"06 - ADC"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Leitura da posi\xe7\xe3o de um potenci\xf4metro"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"07 - PWM"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd34"}),(0,i.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"08 - Dimmer"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Controlando o brilho do LED por um potenci\xf4metro (ADC e PWM)"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"09 - Servo"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Controlando a posi\xe7\xe3o de um servo motor por um potenci\xf4metro (ADC e PWM)"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"10 - I2C (LCD)"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Conex\xe3o de display LCD alfanum\xe9rico via I2C"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"11 - I2C (OLED)"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Conex\xe3o de display OLED via I2C"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"12 - SPI (OLED)"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd35"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Conex\xe3o de display OLED via SPI"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Interrup\xe7\xe3o externa"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd34"}),(0,i.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Timers - PWM"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd34"}),(0,i.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"Timers - Temporizador"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd34"}),(0,i.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"DMA"}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd34"}),(0,i.jsx)(t.td,{style:{textAlign:"left"}})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{style:{textAlign:"left"}}),(0,i.jsx)(t.td,{style:{textAlign:"left"},children:"\ud83d\udd34"}),(0,i.jsx)(t.td,{style:{textAlign:"left"}})]})]})]}),"\n",(0,i.jsx)(t.h3,{id:"legenda",children:"Legenda:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"\ud83d\udfe2 Feito"}),"\n",(0,i.jsx)(t.li,{children:"\ud83d\udd35 Para revisar"}),"\n",(0,i.jsx)(t.li,{children:"\ud83d\udfe1 Em progresso"}),"\n",(0,i.jsx)(t.li,{children:"\ud83d\udd34 Ainda n\xe3o implementado"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"reposit\xf3rio-de-exemplos",children:"Reposit\xf3rio de Exemplos"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.a,{href:"https://github.com/Franzininho/franzininho-c0-exemplos-arduino",children:"GitHub - Franzininho/franzininho-c0-exemplos-arduino: Exemplos de c\xf3digo para Franzininho C0 na Arduino IDE"})})]})}function x(e={}){const{wrapper:t}={...(0,l.MN)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},95788:(e,t,n)=>{n.d(t,{MN:()=>a});var i=n(11504);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){l(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,i,l=function(e,t){if(null==e)return{};var n,i,l={},r=Object.keys(e);for(i=0;i<r.length;i++)n=r[i],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i<r.length;i++)n=r[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var d=i.createContext({}),a=function(e){var t=i.useContext(d),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},c={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},x=i.forwardRef((function(e,t){var n=e.components,l=e.mdxType,r=e.originalType,d=e.parentName,x=o(e,["components","mdxType","originalType","parentName"]),h=a(n),f=l,p=h["".concat(d,".").concat(f)]||h[f]||c[f]||r;return n?i.createElement(p,s(s({ref:t},x),{},{components:n})):i.createElement(p,s({ref:t},x))}));x.displayName="MDXCreateElement"}}]); \ No newline at end of file diff --git a/en/assets/js/ff1c69f3.b328e977.js b/en/assets/js/ff1c69f3.b328e977.js deleted file mode 100755 index cffdc53b3..000000000 --- a/en/assets/js/ff1c69f3.b328e977.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[970],{3905:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>c});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function o(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?o(Object(a),!0).forEach((function(e){r(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}function l(t,e){if(null==t)return{};var a,n,r=function(t,e){if(null==t)return{};var a,n,r={},o=Object.keys(t);for(n=0;n<o.length;n++)a=o[n],e.indexOf(a)>=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n<o.length;n++)a=o[n],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var d=n.createContext({}),p=function(t){var e=n.useContext(d),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},m=function(t){var e=p(t.components);return n.createElement(d.Provider,{value:e},t.children)},s="mdxType",f={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},u=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,o=t.originalType,d=t.parentName,m=l(t,["components","mdxType","originalType","parentName"]),s=p(a),u=r,c=s["".concat(d,".").concat(u)]||s[u]||f[u]||o;return a?n.createElement(c,i(i({ref:e},m),{},{components:a})):n.createElement(c,i({ref:e},m))}));function c(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var o=a.length,i=new Array(o);i[0]=u;var l={};for(var d in e)hasOwnProperty.call(e,d)&&(l[d]=e[d]);l.originalType=t,l[s]="string"==typeof t?t:r,i[1]=l;for(var p=2;p<o;p++)i[p]=a[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},7069:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>d,contentTitle:()=>i,default:()=>f,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=a(3117),r=(a(7294),a(3905));const o={id:"franzininhoc0-arduino-todolist",title:"Arduino IDE TODO List",slug:"/franzininho-c0/arduino-todolist",description:"Todo list para exemplos com Arduino"},i=void 0,l={unversionedId:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist",id:"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist",title:"Arduino IDE TODO List",description:"Todo list para exemplos com Arduino",source:"@site/docs/franzininhoSTM32C0/exemplos-arduino/exemplos-arduino-todolist.md",sourceDirName:"franzininhoSTM32C0/exemplos-arduino",slug:"/franzininho-c0/arduino-todolist",permalink:"/en/docs/franzininho-c0/arduino-todolist",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/franzininhoSTM32C0/exemplos-arduino/exemplos-arduino-todolist.md",tags:[],version:"current",frontMatter:{id:"franzininhoc0-arduino-todolist",title:"Arduino IDE TODO List",slug:"/franzininho-c0/arduino-todolist",description:"Todo list para exemplos com Arduino"},sidebar:"docs",previous:{title:"Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos",permalink:"/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide"},next:{title:"Primeiros passos com Arduino",permalink:"/en/docs/franzininho-c0/arduino-primeiros-passos"}},d={},p=[{value:"Legenda:",id:"legenda",level:3},{value:"Reposit\xf3rio de Exemplos",id:"reposit\xf3rio-de-exemplos",level:2}],m={toc:p},s="wrapper";function f(t){let{components:e,...a}=t;return(0,r.kt)(s,(0,n.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programa\xe7\xe3o da placa Franzininho C0 na Arduino IDE usando o pacote STM32duino."),(0,r.kt)("p",null,"Fique a vontade para colaborar na constru\xe7\xe3o dos materiais e c\xf3digos. Outros exemplos podem ser adicionados. Converse na comunidade."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Exemplos"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Status"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Nota"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Primeiros passos"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Ferramentas necess\xe1rias, M\xe9todos de grava\xe7\xe3o, Reposit\xf3rio com os exemplos")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"01 - Blinky"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Piscando o LED usando delay")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"02 - Blinky Int"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Piscando o LED usando interrup\xe7\xe3o de timer")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"03 - Hello World"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Enviando mensagem pela serial (UART)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"04 - E/S Digital"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Leitura de um bot\xe3o e acionamento de um LED")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"05 - Debounce"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Leitura de um bot\xe3o com realiza\xe7\xe3o de debounce")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"06 - ADC"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Leitura da posi\xe7\xe3o de um potenci\xf4metro")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"07 - PWM"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:"left"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"08 - Dimmer"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Controlando o brilho do LED por um potenci\xf4metro (ADC e PWM)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"09 - Servo"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Controlando a posi\xe7\xe3o de um servo motor por um potenci\xf4metro (ADC e PWM)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"10 - I2C (LCD)"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Conex\xe3o de display LCD alfanum\xe9rico via I2C")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"11 - I2C (OLED)"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Conex\xe3o de display OLED via I2C")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"12 - SPI (OLED)"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd35"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Conex\xe3o de display OLED via SPI")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Interrup\xe7\xe3o externa"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:"left"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Timers - PWM"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:"left"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"Timers - Temporizador"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:"left"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"DMA"),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:"left"})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"}),(0,r.kt)("td",{parentName:"tr",align:"left"},"\ud83d\udd34"),(0,r.kt)("td",{parentName:"tr",align:"left"})))),(0,r.kt)("h3",{id:"legenda"},"Legenda:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ud83d\udfe2 Feito"),(0,r.kt)("li",{parentName:"ul"},"\ud83d\udd35 Para revisar"),(0,r.kt)("li",{parentName:"ul"},"\ud83d\udfe1 Em progresso"),(0,r.kt)("li",{parentName:"ul"},"\ud83d\udd34 Ainda n\xe3o implementado")),(0,r.kt)("h2",{id:"reposit\xf3rio-de-exemplos"},"Reposit\xf3rio de Exemplos"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://github.com/Franzininho/franzininho-c0-exemplos-arduino"},"GitHub - Franzininho/franzininho-c0-exemplos-arduino: Exemplos de c\xf3digo para Franzininho C0 na Arduino IDE")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/en/assets/js/ff8b9623.676dae17.js b/en/assets/js/ff8b9623.676dae17.js deleted file mode 100755 index 89d9f0efe..000000000 --- a/en/assets/js/ff8b9623.676dae17.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[3931],{3905:(e,n,a)=>{a.d(n,{Zo:()=>d,kt:()=>g});var o=a(7294);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function t(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,o)}return a}function i(e){for(var n=1;n<arguments.length;n++){var a=null!=arguments[n]?arguments[n]:{};n%2?t(Object(a),!0).forEach((function(n){r(e,n,a[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):t(Object(a)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(a,n))}))}return e}function s(e,n){if(null==e)return{};var a,o,r=function(e,n){if(null==e)return{};var a,o,r={},t=Object.keys(e);for(o=0;o<t.length;o++)a=t[o],n.indexOf(a)>=0||(r[a]=e[a]);return r}(e,n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);for(o=0;o<t.length;o++)a=t[o],n.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=o.createContext({}),c=function(e){var n=o.useContext(l),a=n;return e&&(a="function"==typeof e?e(n):i(i({},n),e)),a},d=function(e){var n=c(e.components);return o.createElement(l.Provider,{value:n},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},m=o.forwardRef((function(e,n){var a=e.components,r=e.mdxType,t=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=c(a),m=r,g=p["".concat(l,".").concat(m)]||p[m]||u[m]||t;return a?o.createElement(g,i(i({ref:n},d),{},{components:a})):o.createElement(g,i({ref:n},d))}));function g(e,n){var a=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var t=a.length,i=new Array(t);i[0]=m;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s[p]="string"==typeof e?e:r,i[1]=s;for(var c=2;c<t;c++)i[c]=a[c];return o.createElement.apply(null,i)}return o.createElement.apply(null,a)}m.displayName="MDXCreateElement"},7933:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>t,metadata:()=>s,toc:()=>c});var o=a(3117),r=(a(7294),a(3905));const t={id:"entradas-analogicas",title:"Entradas Anal\xf3gicas",slug:"/franzininho-diy/entradas-analogicas",description:"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY"},i=void 0,s={unversionedId:"FranzininhoDIY/exemplos-arduino/entradas-analogicas",id:"FranzininhoDIY/exemplos-arduino/entradas-analogicas",title:"Entradas Anal\xf3gicas",description:"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-analogicas.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/entradas-analogicas",permalink:"/en/docs/franzininho-diy/entradas-analogicas",draft:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/entradas-analogicas.md",tags:[],version:"current",frontMatter:{id:"entradas-analogicas",title:"Entradas Anal\xf3gicas",slug:"/franzininho-diy/entradas-analogicas",description:"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY"},sidebar:"docs",previous:{title:"Entradas e Sa\xeddas Digitais",permalink:"/en/docs/franzininho-diy/entradas-saidas-digitais"},next:{title:"Sa\xeddas PWM",permalink:"/en/docs/franzininho-diy/saidas-pwm"}},l={},c=[{value:"Fun\xe7\xe3o",id:"fun\xe7\xe3o",level:2},{value:"Sintaxe",id:"sintaxe",level:3},{value:"Par\xe2metros",id:"par\xe2metros",level:3},{value:"Retorno",id:"retorno",level:3},{value:"Exemplo",id:"exemplo",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:3}],d={toc:c},p="wrapper";function u(e){let{components:n,...t}=e;return(0,r.kt)(p,(0,o.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Na Franzininho DIY alguns pinos que podem ser usados como entradas anal\xf3gicas:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Pinagem Franzininho DIY",src:a(4648).Z,width:"1209",height:"869"})),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"Devido as limita\xe7\xf5es de hardware da Franzininho DIY recomendamos apenas o uso da Entrada A1 para sinais anal\xf3gicos.\nAs demais entradas (A0,A2,A3) devem ser usadas com cautela e analisando o circuito para ver o circuito presente no pino n\xe3o atrapalhar\xe1 no sinal anal\xf3gico.")),(0,r.kt)("h2",{id:"fun\xe7\xe3o"},"Fun\xe7\xe3o"),(0,r.kt)("p",null,"Para a leitura de um sinal anal\xf3gico no pino que possui essa fun\xe7\xe3o, n\xe3o \xe9 necess\xe1rio configurar o pino como entrada anal\xf3gica. Isso \xe9 feito na fun\xe7\xe3o de leitura:"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"int analogRead(pino)")),(0,r.kt)("p",null,"L\xea o valor presente em um pino configurado como entrada anal\xf3gica. Internamente o Arduino possui um conversor A/D de 10 bits. Dessa forma o valor retornado por esta fun\xe7\xe3o estar\xe1 na faixa de 0 a 1023 conforme o valor presente no pino."),(0,r.kt)("h3",{id:"sintaxe"},"Sintaxe"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"analogRead(pino);")),(0,r.kt)("h3",{id:"par\xe2metros"},"Par\xe2metros"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"pino:")," n\xfamero do pino configurado como entrada anal\xf3gica ","(","0,1,2,3 na Franzininho",")"),(0,r.kt)("h3",{id:"retorno"},"Retorno"),(0,r.kt)("p",null,"int ","(","0 a 1023",")"),(0,r.kt)("h2",{id:"exemplo"},"Exemplo"),(0,r.kt)("p",null,"Vamos ler o valor de um potenci\xf4metro ligado ao pino P2","(","A1",")"," e acionar o LED quando a leitura atingir um valor definido:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Circuito",src:a(2395).Z,width:"1590",height:"1017"})),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"const byte LED = 1; //pino do LED\nconst byte POT = A1; //pino do Potenci\xf4metro\n\nvoid setup() {\n pinMode(LED,OUTPUT);\n}\n\nvoid loop() {\n\n int valor = analogRead(POT); // l\xea o valor do potenci\xf4metro\n\n if(valor> 511){ //se valor maior que 511\n digitalWrite(LED,HIGH); //liga LED\n }else{ //se n\xe3o\n digitalWrite(LED,LOW); //apaga LED\n }\n}\n")),(0,r.kt)("h3",{id:"simula\xe7\xe3o"},"Simula\xe7\xe3o"),(0,r.kt)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310739786993238592?view=diagram"}))}u.isMDXComponent=!0},2395:(e,n,a)=>{a.d(n,{Z:()=>o});const o=a.p+"assets/images/circuito-a6a0591bc42320cbe29b14bd9332f3c2.png"},4648:(e,n,a)=>{a.d(n,{Z:()=>o});const o=a.p+"assets/images/pinagem-V2-7047a8d5930175670acc131497791fcc.png"}}]); \ No newline at end of file diff --git a/en/assets/js/ff8b9623.769b61bb.js b/en/assets/js/ff8b9623.769b61bb.js new file mode 100755 index 000000000..7d9f123ee --- /dev/null +++ b/en/assets/js/ff8b9623.769b61bb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[6004],{4212:(n,e,a)=>{a.r(e),a.d(e,{assets:()=>c,contentTitle:()=>t,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=a(17624),i=a(95788);const o={id:"entradas-analogicas",title:"Entradas Anal\xf3gicas",slug:"/franzininho-diy/entradas-analogicas",description:"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY"},t=void 0,s={id:"FranzininhoDIY/exemplos-arduino/entradas-analogicas",title:"Entradas Anal\xf3gicas",description:"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY",source:"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-analogicas.md",sourceDirName:"FranzininhoDIY/exemplos-arduino",slug:"/franzininho-diy/entradas-analogicas",permalink:"/en/docs/franzininho-diy/entradas-analogicas",draft:!1,unlisted:!1,editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/docs/FranzininhoDIY/exemplos-arduino/entradas-analogicas.md",tags:[],version:"current",frontMatter:{id:"entradas-analogicas",title:"Entradas Anal\xf3gicas",slug:"/franzininho-diy/entradas-analogicas",description:"Nesse exemplo vamos aprender trabalhar com as entradas anal\xf3gicas presentes na Franzininho DIY"},sidebar:"docs",previous:{title:"Entradas e Sa\xeddas Digitais",permalink:"/en/docs/franzininho-diy/entradas-saidas-digitais"},next:{title:"Sa\xeddas PWM",permalink:"/en/docs/franzininho-diy/saidas-pwm"}},c={},d=[{value:"Fun\xe7\xe3o",id:"fun\xe7\xe3o",level:2},{value:"Sintaxe",id:"sintaxe",level:3},{value:"Par\xe2metros",id:"par\xe2metros",level:3},{value:"Retorno",id:"retorno",level:3},{value:"Exemplo",id:"exemplo",level:2},{value:"Simula\xe7\xe3o",id:"simula\xe7\xe3o",level:3}];function l(n){const e={admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",p:"p",pre:"pre",strong:"strong",...(0,i.MN)(),...n.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.p,{children:"Na Franzininho DIY alguns pinos que podem ser usados como entradas anal\xf3gicas:"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Pinagem Franzininho DIY",src:a(4428).c+"",width:"1209",height:"869"})}),"\n",(0,r.jsx)(e.admonition,{type:"warning",children:(0,r.jsx)(e.p,{children:"Devido as limita\xe7\xf5es de hardware da Franzininho DIY recomendamos apenas o uso da Entrada A1 para sinais anal\xf3gicos.\nAs demais entradas (A0,A2,A3) devem ser usadas com cautela e analisando o circuito para ver o circuito presente no pino n\xe3o atrapalhar\xe1 no sinal anal\xf3gico."})}),"\n",(0,r.jsx)(e.h2,{id:"fun\xe7\xe3o",children:"Fun\xe7\xe3o"}),"\n",(0,r.jsx)(e.p,{children:"Para a leitura de um sinal anal\xf3gico no pino que possui essa fun\xe7\xe3o, n\xe3o \xe9 necess\xe1rio configurar o pino como entrada anal\xf3gica. Isso \xe9 feito na fun\xe7\xe3o de leitura:"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.code,{children:"int analogRead(pino)"})}),"\n",(0,r.jsx)(e.p,{children:"L\xea o valor presente em um pino configurado como entrada anal\xf3gica. Internamente o Arduino possui um conversor A/D de 10 bits. Dessa forma o valor retornado por esta fun\xe7\xe3o estar\xe1 na faixa de 0 a 1023 conforme o valor presente no pino."}),"\n",(0,r.jsx)(e.h3,{id:"sintaxe",children:"Sintaxe"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.code,{children:"analogRead(pino);"})}),"\n",(0,r.jsx)(e.h3,{id:"par\xe2metros",children:"Par\xe2metros"}),"\n",(0,r.jsxs)(e.p,{children:[(0,r.jsx)(e.strong,{children:"pino:"})," n\xfamero do pino configurado como entrada anal\xf3gica (0,1,2,3 na Franzininho)"]}),"\n",(0,r.jsx)(e.h3,{id:"retorno",children:"Retorno"}),"\n",(0,r.jsx)(e.p,{children:"int (0 a 1023)"}),"\n",(0,r.jsx)(e.h2,{id:"exemplo",children:"Exemplo"}),"\n",(0,r.jsx)(e.p,{children:"Vamos ler o valor de um potenci\xf4metro ligado ao pino P2(A1) e acionar o LED quando a leitura atingir um valor definido:"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"Circuito",src:a(36936).c+"",width:"1590",height:"1017"})}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-cpp",children:"const byte LED = 1; //pino do LED\nconst byte POT = A1; //pino do Potenci\xf4metro\n\nvoid setup() {\n pinMode(LED,OUTPUT);\n}\n\nvoid loop() {\n\n int valor = analogRead(POT); // l\xea o valor do potenci\xf4metro\n\n if(valor> 511){ //se valor maior que 511\n digitalWrite(LED,HIGH); //liga LED\n }else{ //se n\xe3o\n digitalWrite(LED,LOW); //apaga LED\n }\n}\n"})}),"\n",(0,r.jsx)(e.h3,{id:"simula\xe7\xe3o",children:"Simula\xe7\xe3o"}),"\n",(0,r.jsx)("iframe",{width:"100%",height:"458px",src:"https://wokwi.com/arduino/projects/310739786993238592?view=diagram"})]})}function p(n={}){const{wrapper:e}={...(0,i.MN)(),...n.components};return e?(0,r.jsx)(e,{...n,children:(0,r.jsx)(l,{...n})}):l(n)}},95788:(n,e,a)=>{a.d(e,{MN:()=>d});var r=a(11504);function i(n,e,a){return e in n?Object.defineProperty(n,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[e]=a,n}function o(n,e){var a=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),a.push.apply(a,r)}return a}function t(n){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?o(Object(a),!0).forEach((function(e){i(n,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(a,e))}))}return n}function s(n,e){if(null==n)return{};var a,r,i=function(n,e){if(null==n)return{};var a,r,i={},o=Object.keys(n);for(r=0;r<o.length;r++)a=o[r],e.indexOf(a)>=0||(i[a]=n[a]);return i}(n,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);for(r=0;r<o.length;r++)a=o[r],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(n,a)&&(i[a]=n[a])}return i}var c=r.createContext({}),d=function(n){var e=r.useContext(c),a=e;return n&&(a="function"==typeof n?n(e):t(t({},e),n)),a},l={inlineCode:"code",wrapper:function(n){var e=n.children;return r.createElement(r.Fragment,{},e)}},p=r.forwardRef((function(n,e){var a=n.components,i=n.mdxType,o=n.originalType,c=n.parentName,p=s(n,["components","mdxType","originalType","parentName"]),u=d(a),m=i,h=u["".concat(c,".").concat(m)]||u[m]||l[m]||o;return a?r.createElement(h,t(t({ref:e},p),{},{components:a})):r.createElement(h,t({ref:e},p))}));p.displayName="MDXCreateElement"},36936:(n,e,a)=>{a.d(e,{c:()=>r});const r=a.p+"assets/images/circuito-a6a0591bc42320cbe29b14bd9332f3c2.png"},4428:(n,e,a)=>{a.d(e,{c:()=>r});const r=a.p+"assets/images/pinagem-V2-7047a8d5930175670acc131497791fcc.png"}}]); \ No newline at end of file diff --git a/en/assets/js/main.4c799f84.js b/en/assets/js/main.4c799f84.js deleted file mode 100755 index 58eaf7825..000000000 --- a/en/assets/js/main.4c799f84.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.4c799f84.js.LICENSE.txt */ -(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[179],{4334:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},7459:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(3117),i=n(8356),a=n.n(i),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1223)),"@theme/BlogTagsListPage",1223],"032edc05":[()=>n.e(9860).then(n.bind(n,2831)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/instalacao-ferramentas.md",2831],"06f5a5e3":[()=>n.e(6817).then(n.bind(n,7436)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x03-entrada-analogica.md",7436],"09e1b884":[()=>n.e(6250).then(n.t.bind(n,4469,19)),"/media/fabio/Dados/Projetos/docs-franzininho-site/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],17896441:[()=>Promise.all([n.e(532),n.e(9785),n.e(7918)]).then(n.bind(n,8945)),"@theme/DocItem",8945],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"21c04bfb":[()=>n.e(5634).then(n.bind(n,8583)),"@site/docs/FranzininhoDIY/exemplos-arduino/pacote.md",8583],"249d28c1":[()=>n.e(5123).then(n.bind(n,7866)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x04-LEDC.md",7866],27079279:[()=>n.e(4417).then(n.bind(n,629)),"@site/docs/Franzino/franzino.md",629],"2868cdab":[()=>n.e(4061).then(n.bind(n,1460)),"@site/blog/2019-05-30-welcome.md",1460],"2e8bb407":[()=>n.e(2687).then(n.bind(n,6722)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x00-Primeiros-passos.md",6722],"3570154c":[()=>n.e(3707).then(n.bind(n,9993)),"@site/blog/2019-05-29-hello-world.md?truncated=true",9993],"3ab35d9f":[()=>n.e(2517).then(n.bind(n,952)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/entrada-digital.md",952],"3ab9b561":[()=>n.e(1013).then(n.bind(n,8159)),"@site/docs/FranzininhoDIY/bootloader/bootloader.md",8159],"3bf4969f":[()=>n.e(2389).then(n.t.bind(n,9161,19)),"~blog/default/en-blog-tags-docusaurus-41c-list.json",9161],"3cf26f2f":[()=>n.e(6803).then(n.bind(n,1809)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/serial-console.md",1809],"43004a8a":[()=>n.e(270).then(n.t.bind(n,3769,19)),"/media/fabio/Dados/Projetos/docs-franzininho-site/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"445992cb":[()=>n.e(8407).then(n.bind(n,3934)),"@site/docs/LaboratorioSistemasIot/adaptadores/adaptador-arduino.md",3934],"449acc1f":[()=>n.e(9019).then(n.bind(n,1594)),"@site/docs/franzininhoSTM32C0/exemplos-arduino/primeiros-passos.md",1594],"45a448cc":[()=>n.e(8442).then(n.bind(n,1038)),"@site/docs/FranzininhoWifi/exemplos-arduino/dht11.md",1038],"4c503f6c":[()=>n.e(2536).then(n.bind(n,1110)),"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais.md",1110],"4cb2f106":[()=>n.e(1829).then(n.bind(n,3043)),"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/configurando-projeto-stmcubeide.md",3043],"4e4cd8a0":[()=>n.e(6657).then(n.bind(n,3127)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/servo-motor.md",3127],"4f3ccf13":[()=>n.e(7269).then(n.t.bind(n,5745,19)),"/media/fabio/Dados/Projetos/docs-franzininho-site/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"5115f6b0":[()=>n.e(1777).then(n.bind(n,9353)),"@site/docs/FranzininhoWifi/exemplos-arduino/arduino.md",9353],52090148:[()=>n.e(9948).then(n.bind(n,1493)),"@site/docs/FranzininhoDIY/exemplos-arduino/led-rgb.md",1493],"52fc124a":[()=>n.e(2749).then(n.bind(n,4925)),"@site/docs/FranzininhoTiny/franzininho-tiny.md",4925],"558e6545":[()=>n.e(5755).then(n.bind(n,6450)),"@site/docs/FranzininhoDIY/exemplos-arduino/i2c.md",6450],"55a63e59":[()=>n.e(4334).then(n.bind(n,3140)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/display-oled-i2c.md",3140],"55ee410e":[()=>n.e(2496).then(n.bind(n,5406)),"@site/docs/FranzininhoDIY/exemplos-arduino/tecla-liga-desliga.md",5406],58231389:[()=>n.e(9429).then(n.bind(n,9742)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/irrigacao.md",9742],"5c90fd8c":[()=>n.e(5016).then(n.bind(n,9272)),"@site/docs/FranzMakey/franzmakey.md",9272],"5cfa1a80":[()=>n.e(7600).then(n.bind(n,7663)),"@site/docs/FranzininhoDIY/exemplos-arduino/sensor-luz.md",7663],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"5f765f30":[()=>n.e(8601).then(n.bind(n,4809)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/pwm.md",4809],"5f9a86e6":[()=>n.e(3405).then(n.bind(n,7331)),"@site/docs/FranzininhoWifi/exemplos-micropython/entradas-saidas-digitais.md",7331],"62ad6a78":[()=>n.e(8434).then(n.t.bind(n,7088,19)),"~blog/default/en-blog-tags-facebook-f15.json",7088],"66e66c27":[()=>n.e(7932).then(n.bind(n,769)),"@site/docs/FranzininhoWifi/wokwi/franzininho-wifi-wokwi.md",769],"68401cc9":[()=>n.e(2654).then(n.bind(n,3965)),"@site/docs/FranzininhoDIY/identificando-componentes.md",3965],"6875c492":[()=>Promise.all([n.e(532),n.e(9785),n.e(6048),n.e(8610)]).then(n.bind(n,1714)),"@theme/BlogTagsPostsPage",1714],"69d6b121":[()=>n.e(6251).then(n.bind(n,5709)),"@site/docs/FranzininhoDIY/exemplos-arduino/elefante-colorido.md",5709],"6b289e1f":[()=>n.e(9226).then(n.bind(n,8732)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/avr-libc-todo.md",8732],"6d6d470f":[()=>n.e(3020).then(n.bind(n,239)),"@site/docs/FranzininhoWifi/franzininho-wifi-dev-edition.md",239],"6da7bcf7":[()=>n.e(9515).then(n.bind(n,2221)),"@site/docs/FranzininhoDIY/bootloader/drivers.md",2221],"6e2ab842":[()=>n.e(3567).then(n.bind(n,3192)),"@site/docs/Badge/badge.md",3192],"7561b0ae":[()=>n.e(157).then(n.bind(n,3852)),"@site/docs/FranzBoy/franzboy.md",3852],"7e45b7ad":[()=>n.e(694).then(n.bind(n,2402)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/buzzer.md",2402],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"8b8a5829":[()=>n.e(604).then(n.bind(n,1501)),"@site/docs/FranzininhoDIY/exemplos-arduino/theremim.md",1501],"8e9f0a8a":[()=>n.e(4035).then(n.bind(n,2684)),"@site/blog/2019-05-28-hola.md?truncated=true",2684],"8f70110c":[()=>n.e(6553).then(n.bind(n,7946)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-analogica.md",7946],"8f8a0b80":[()=>n.e(2559).then(n.bind(n,347)),"@site/docs/FranzininhoWifi/exemplos-arduino/onboard-rgb-led-example.md",347],"92ef60c0":[()=>n.e(6799).then(n.bind(n,3960)),"@site/docs/FranzininhoDIY/exemplos-arduino/pisca-led.md",3960],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"94c955d1":[()=>n.e(7347).then(n.bind(n,2134)),"@site/docs/franzininhoSTM32C0/exemplos-arduino/identificacao-pinos.md",2134],"9bdd22eb":[()=>n.e(2253).then(n.t.bind(n,5803,19)),"~blog/default/en-blog-tags-tags-c25.json",5803],"9ccd4375":[()=>n.e(4123).then(n.bind(n,7620)),"@site/docs/FranzininhoDIY/montagem.md",7620],"9cf82e51":[()=>n.e(9966).then(n.bind(n,4404)),"@site/docs/FranzininhoWifi/exemplos-arduino/blink.md",4404],"9e4087bc":[()=>n.e(3608).then(n.bind(n,3169)),"@theme/BlogArchivePage",3169],a1db8d77:[()=>n.e(6269).then(n.t.bind(n,4919,19)),"~blog/default/en-blog-tags-hello-477.json",4919],a34fb63a:[()=>n.e(1982).then(n.bind(n,4553)),"@site/docs/FranzininhoDIY/picsimlab/franzininho-picsimlab.md",4553],a47310cc:[()=>n.e(8615).then(n.bind(n,101)),"@site/docs/FranzininhoDIY/exemplos-arduino/semaforo.md",101],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(9785),n.e(6048),n.e(3089)]).then(n.bind(n,46)),"@theme/BlogListPage",46],af172acd:[()=>n.e(1449).then(n.bind(n,7498)),"@site/blog/2019-05-30-welcome.md?truncated=true",7498],af2b9553:[()=>n.e(8560).then(n.bind(n,641)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x05-AWS-IoT-Core.md",641],b0d3cd30:[()=>n.e(4669).then(n.bind(n,7779)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/hello-world.md",7779],b311b2c7:[()=>n.e(6631).then(n.bind(n,1933)),"@site/docs/LaboratorioSistemasIot/laboratorio-sistemas-iot.md",1933],b55e0f56:[()=>n.e(9821).then(n.bind(n,2403)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/hello-world.md",2403],b677b176:[()=>n.e(367).then(n.bind(n,7255)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/int-externa.md",7255],bb62ac18:[()=>n.e(9702).then(n.t.bind(n,1815,19)),"~blog/default/en-blog-tags-hola-c9e-list.json",1815],bb7fee19:[()=>n.e(1832).then(n.bind(n,3386)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0-int.md",3386],bc0ca366:[()=>n.e(4679).then(n.bind(n,9991)),"@site/docs/FranzMakey/primeiros-passos.md",9991],bc0f2708:[()=>n.e(7835).then(n.bind(n,3887)),"@site/docs/FranzininhoDIY/exemplos-arduino/introducao.md",3887],bc4100c0:[()=>n.e(4447).then(n.t.bind(n,6448,19)),"~blog/default/en-blog-tags-hello-477-list.json",6448],bc475886:[()=>n.e(5534).then(n.bind(n,9908)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/primeiros-passos.md",9908],bdb4d3e5:[()=>n.e(1524).then(n.bind(n,417)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/contadores.md",417],bdd709f1:[()=>n.e(4694).then(n.bind(n,6724)),"@site/blog/2019-05-28-hola.md",6724],be54388e:[()=>n.e(969).then(n.bind(n,7535)),"@site/docs/FranzininhoDIY/exemplos-arduino/pwm.md",7535],c397fa15:[()=>n.e(4253).then(n.bind(n,1365)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/circuitpython.md",1365],c4380c1f:[()=>n.e(2976).then(n.bind(n,2586)),"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW.md",2586],c4f5d8e4:[()=>Promise.all([n.e(532),n.e(4195)]).then(n.bind(n,4338)),"@site/src/pages/index.js",4338],c720cb85:[()=>n.e(310).then(n.bind(n,2639)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0.md",2639],ccc49370:[()=>Promise.all([n.e(532),n.e(9785),n.e(6048),n.e(6103)]).then(n.bind(n,5203)),"@theme/BlogPostPage",5203],cdcae78f:[()=>n.e(3518).then(n.bind(n,2729)),"@site/docs/FranzininhoWifi/franzininho-wifi.md",2729],cfe204fd:[()=>n.e(1793).then(n.bind(n,1693)),"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/stm32cube-ide-todolist.md",1693],d0c422fb:[()=>n.e(8811).then(n.bind(n,9358)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/dht11.md",9358],d268d7c6:[()=>n.e(8659).then(n.bind(n,416)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-saidas-digitais.md",416],d29449f8:[()=>n.e(4242).then(n.bind(n,6463)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/hcsr04.md",6463],d5f74b3b:[()=>n.e(5845).then(n.bind(n,4853)),"@site/docs/FranzininhoDIY/exemplos-arduino/leitura-tecla.md",4853],d610846f:[()=>n.e(6176).then(n.bind(n,1452)),"@site/blog/2019-05-29-hello-world.md",1452],d69ae106:[()=>n.e(7201).then(n.bind(n,1918)),"@site/docs/FranzininhoWifi/exemplos-micropython/primeiros-passos.md",1918],d7336970:[()=>n.e(2312).then(n.bind(n,4158)),"@site/docs/franzininhoSTM32C0/franzininho-stm32c0-board.md",4158],d75a6ad4:[()=>n.e(286).then(n.bind(n,8059)),"@site/docs/FranzininhoWiFiLAB01/franzininho-wifi-lab01.md",8059],d9a3a88a:[()=>n.e(7259).then(n.bind(n,129)),"@site/docs/FranzininhoDIY/exemplos-arduino/girassol-automatizado.md",129],daddf4d9:[()=>n.e(5193).then(n.bind(n,5244)),"@site/docs/Franzino/upload-com-arduino-uno.md",5244],db00da42:[()=>n.e(9267).then(n.bind(n,5797)),"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO.md",5797],dcf87b66:[()=>n.e(1375).then(n.bind(n,229)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x01-Hello-world.md",229],e510ad2d:[()=>n.e(3034).then(n.t.bind(n,2650,19)),"~blog/default/en-blog-tags-hola-c9e.json",2650],e586c302:[()=>n.e(6355).then(n.bind(n,9660)),"@site/docs/FranzininhoDIY/lista-de-materiais.md",9660],e6a1d5e9:[()=>n.e(3290).then(n.bind(n,203)),"@site/docs/Franzino/upload-conversor-serial.md",203],ec054302:[()=>n.e(8911).then(n.bind(n,4807)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/touch-capacitivo.md",4807],f2d382a4:[()=>n.e(7055).then(n.bind(n,1549)),"@site/i18n/en/docusaurus-plugin-content-docs/current/sobre.md",1549],f3019b90:[()=>n.e(467).then(n.bind(n,7987)),"@site/docs/FranzininhoDIY/exemplos-arduino/brilho-led.md",7987],f3dd2eb3:[()=>n.e(5904).then(n.t.bind(n,2452,19)),"~blog/default/en-blog-tags-facebook-f15-list.json",2452],f3f8ac04:[()=>n.e(1193).then(n.t.bind(n,8681,19)),"~blog/default/en-blog-tags-docusaurus-41c.json",8681],f64cfe00:[()=>n.e(5045).then(n.bind(n,593)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x02-entrada-digital.md",593],f67a9ad7:[()=>n.e(3634).then(n.bind(n,5350)),"@site/docs/FranzininhoDIY/wokwi/franzininho-wokwi.md",5350],f6af7cfc:[()=>n.e(1506).then(n.bind(n,5673)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/saida-digital.md",5673],f6cbeee1:[()=>n.e(3836).then(n.t.bind(n,4641,19)),"~blog/default/en-blog-archive-10f.json",4641],fba6c282:[()=>n.e(4364).then(n.t.bind(n,9501,19)),"~blog/default/en-blog-038.json",9501],fd69b436:[()=>n.e(8504).then(n.bind(n,1337)),"@site/docs/FranzininhoDIY/franzininho-diy.md",1337],ff1c69f3:[()=>n.e(970).then(n.bind(n,7069)),"@site/docs/franzininhoSTM32C0/exemplos-arduino/exemplos-arduino-todolist.md",7069],ff8b9623:[()=>n.e(3931).then(n.bind(n,7933)),"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-analogicas.md",7933]};function c(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(9670),d=n(226);function f(e,t){if("*"===e)return a()({loading:c,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const i=l[`${e}-${t}`],f={},p=[],m=[],h=(0,u.Z)(i);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),a().Map({loading:c,loader:f,modules:p,webpack:()=>m,render(t,n){const a=JSON.parse(JSON.stringify(i));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let i=a;const l=n.split(".");l.slice(0,-1).forEach((e=>{i=i[e]})),i[l[l.length-1]]=o}));const l=a.__comp;delete a.__comp;const s=a.__context;return delete a.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,o.Z)({},a,n)))}})}const p=[{path:"/en/blog",component:f("/en/blog","827"),exact:!0},{path:"/en/blog/archive",component:f("/en/blog/archive","3a3"),exact:!0},{path:"/en/blog/hello-world",component:f("/en/blog/hello-world","f4e"),exact:!0},{path:"/en/blog/hola",component:f("/en/blog/hola","8f7"),exact:!0},{path:"/en/blog/tags",component:f("/en/blog/tags","fba"),exact:!0},{path:"/en/blog/tags/docusaurus",component:f("/en/blog/tags/docusaurus","ac5"),exact:!0},{path:"/en/blog/tags/facebook",component:f("/en/blog/tags/facebook","360"),exact:!0},{path:"/en/blog/tags/hello",component:f("/en/blog/tags/hello","827"),exact:!0},{path:"/en/blog/tags/hola",component:f("/en/blog/tags/hola","3cb"),exact:!0},{path:"/en/blog/welcome",component:f("/en/blog/welcome","fe2"),exact:!0},{path:"/en/docs",component:f("/en/docs","834"),routes:[{path:"/en/docs/",component:f("/en/docs/","cb2"),exact:!0,sidebar:"docs"},{path:"/en/docs/badge/badge",component:f("/en/docs/badge/badge","f77"),exact:!0,sidebar:"docs"},{path:"/en/docs/FranzBoy/franzboy",component:f("/en/docs/FranzBoy/franzboy","36d"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-c0/arduino-identificacao-pinos",component:f("/en/docs/franzininho-c0/arduino-identificacao-pinos","5c8"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-c0/arduino-primeiros-passos",component:f("/en/docs/franzininho-c0/arduino-primeiros-passos","b8d"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-c0/arduino-todolist",component:f("/en/docs/franzininho-c0/arduino-todolist","8f2"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide",component:f("/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide","27c"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-c0/franzininho-c0-board",component:f("/en/docs/franzininho-c0/franzininho-c0-board","d8d"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist",component:f("/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist","030"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/bootloader",component:f("/en/docs/franzininho-diy/bootloader","c6c"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/brilho-led",component:f("/en/docs/franzininho-diy/brilho-led","aca"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/drivers-micronucleus",component:f("/en/docs/franzininho-diy/drivers-micronucleus","554"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/elefante-colorido",component:f("/en/docs/franzininho-diy/elefante-colorido","61f"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/entradas-analogicas",component:f("/en/docs/franzininho-diy/entradas-analogicas","ce6"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/entradas-saidas-digitais",component:f("/en/docs/franzininho-diy/entradas-saidas-digitais","af2"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/buzzer",component:f("/en/docs/franzininho-diy/exemplos-avr-libc/buzzer","41b"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/contadores",component:f("/en/docs/franzininho-diy/exemplos-avr-libc/contadores","e5f"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital",component:f("/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital","d90"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/hello-world",component:f("/en/docs/franzininho-diy/exemplos-avr-libc/hello-world","3a2"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/int-ext",component:f("/en/docs/franzininho-diy/exemplos-avr-libc/int-ext","aea"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos",component:f("/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos","6be"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital",component:f("/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital","b81"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0",component:f("/en/docs/franzininho-diy/exemplos-avr-libc/timer0","dbb"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int",component:f("/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int","1e4"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/todo",component:f("/en/docs/franzininho-diy/exemplos-avr-libc/todo","eef"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/girassol-automatizado",component:f("/en/docs/franzininho-diy/girassol-automatizado","b21"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/identificando-componentes",component:f("/en/docs/franzininho-diy/identificando-componentes","4f7"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/led-rgb",component:f("/en/docs/franzininho-diy/led-rgb","ca7"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/leitura-tecla",component:f("/en/docs/franzininho-diy/leitura-tecla","f59"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/lista-de-materiais",component:f("/en/docs/franzininho-diy/lista-de-materiais","6d9"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/montagem",component:f("/en/docs/franzininho-diy/montagem","a94"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/pacote",component:f("/en/docs/franzininho-diy/pacote","cef"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/picsimlab/primeiros-passos",component:f("/en/docs/franzininho-diy/picsimlab/primeiros-passos","0a2"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/pisca-led",component:f("/en/docs/franzininho-diy/pisca-led","deb"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/saidas-pwm",component:f("/en/docs/franzininho-diy/saidas-pwm","aef"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/semaforo",component:f("/en/docs/franzininho-diy/semaforo","b5d"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/sensor-luz-ldr",component:f("/en/docs/franzininho-diy/sensor-luz-ldr","2b0"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/sobre",component:f("/en/docs/franzininho-diy/sobre","0cf"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/tecla-liga-desliga",component:f("/en/docs/franzininho-diy/tecla-liga-desliga","28f"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/theremim",component:f("/en/docs/franzininho-diy/theremim","69f"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/tutoriais-i2c",component:f("/en/docs/franzininho-diy/tutoriais-i2c","8b8"),exact:!0},{path:"/en/docs/franzininho-diy/wokwi/primeiros-passos",component:f("/en/docs/franzininho-diy/wokwi/primeiros-passos","466"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-tiny/franzininho-tiny",component:f("/en/docs/franzininho-tiny/franzininho-tiny","d5f"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi-lab01",component:f("/en/docs/franzininho-wifi-lab01","a7c"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-arduino/blink",component:f("/en/docs/franzininho-wifi/exemplos-arduino/blink","756"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-arduino/dht11",component:f("/en/docs/franzininho-wifi/exemplos-arduino/dht11","094"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard",component:f("/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard","df7"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos",component:f("/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos","9a4"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/dht11",component:f("/en/docs/franzininho-wifi/exemplos-circuitpython/dht11","f0a"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",component:f("/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c","387"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",component:f("/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas","35a"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",component:f("/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais","ef0"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas",component:f("/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas","9da"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world",component:f("/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world","91d"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao",component:f("/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao","6f3"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos",component:f("/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos","d1e"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/pwm",component:f("/en/docs/franzininho-wifi/exemplos-circuitpython/pwm","48c"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",component:f("/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04","609"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console",component:f("/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console","eef"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor",component:f("/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor","04b"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",component:f("/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo","5e7"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-espidf/aws",component:f("/en/docs/franzininho-wifi/exemplos-espidf/aws","f4f"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica",component:f("/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica","f53"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital",component:f("/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital","55f"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",component:f("/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf","4cb"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-espidf/ledc",component:f("/en/docs/franzininho-wifi/exemplos-espidf/ledc","34f"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos",component:f("/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos","220"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",component:f("/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais","33a"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos",component:f("/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos","4bc"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/franzininho-wifi",component:f("/en/docs/franzininho-wifi/franzininho-wifi","df1"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/franzininho-wifi-dev-edition",component:f("/en/docs/franzininho-wifi/franzininho-wifi-dev-edition","19e"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/wokwi/primeiros-passos",component:f("/en/docs/franzininho-wifi/wokwi/primeiros-passos","389"),exact:!0,sidebar:"docs"},{path:"/en/docs/Franzino/franzino",component:f("/en/docs/Franzino/franzino","6b9"),exact:!0,sidebar:"docs"},{path:"/en/docs/Franzino/upload-com-arduino-uno",component:f("/en/docs/Franzino/upload-com-arduino-uno","c8c"),exact:!0,sidebar:"docs"},{path:"/en/docs/Franzino/upload-conversor-serial",component:f("/en/docs/Franzino/upload-conversor-serial","f64"),exact:!0,sidebar:"docs"},{path:"/en/docs/FranzMakey/franzmakey",component:f("/en/docs/FranzMakey/franzmakey","a8a"),exact:!0,sidebar:"docs"},{path:"/en/docs/FranzMakey/primeiros-passos",component:f("/en/docs/FranzMakey/primeiros-passos","58d"),exact:!0,sidebar:"docs"},{path:"/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno",component:f("/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno","f8d"),exact:!0,sidebar:"docs"},{path:"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",component:f("/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","1ca"),exact:!0,sidebar:"docs"},{path:"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO",component:f("/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO","3b3"),exact:!0,sidebar:"docs"},{path:"/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot",component:f("/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot","3e2"),exact:!0,sidebar:"docs"},{path:"/en/docs/programacao/tutoriais-introducao",component:f("/en/docs/programacao/tutoriais-introducao","97e"),exact:!0}]},{path:"/en/",component:f("/en/","0f3"),exact:!0},{path:"*",component:f("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>i});var r=n(7294);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},7221:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),i=n(3727),a=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(2295)];var c=n(723),u=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(3117),m=n(5742),h=n(2263),g=n(4996),b=n(6668),v=n(1944),y=n(4711),w=n(9727),k=n(3320),E=n(8780),x=n(197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function T(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),o=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,u.TH)();return e+(0,E.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),i=t?`${n}${t}`:o;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:i}),r.createElement("link",{rel:"canonical",href:i}))}function _(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(T,null),r.createElement(S,null),r.createElement(x.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const C=new Map;function z(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var A=n(8934),P=n(8940);function L(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=s.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const I=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,i=t.search===n.search;if(r&&o&&!i)return;const{hash:a}=t;if(a){const e=decodeURIComponent(a.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),L("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class N extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?L("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=L("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(I,{previousLocation:this.previousLocation,location:t},r.createElement(u.AW,{location:t,render:()=>e}))}}const D=N,O="__docusaurus-base-url-issue-banner-container",F="__docusaurus-base-url-issue-banner",M="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function j(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${O}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${F}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${M}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${M}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function U(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,r.useLayoutEffect)((()=>{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,j(e))),r.createElement("div",{id:O}))}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?r.createElement(U,null):null}function q(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:i}}=(0,h.Z)(),a=(0,g.Z)(e),{htmlLang:l,direction:s}=i[o];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:a}))}var H=n(4763),G=n(2389);function W(){const e=(0,G.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function Z(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return r.createElement(H.Z,null,r.createElement(P.M,null,r.createElement(A.t,null,r.createElement(f,null,r.createElement(q,null),r.createElement(_,null),r.createElement($,null),r.createElement(D,{location:z(t)},e)),r.createElement(W,null))))}var V=n(6887);const Y=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var K=n(9670);const Q=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Q.has(e))(e))return!1;Q.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(V).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Y(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),R(e))},te=Object.freeze(ee);if(l.Z.canUseDOM){window.docusaurus=te;const e=o.hydrate;R(window.location.pathname).then((()=>{e(r.createElement(a.B6,null,r.createElement(i.VK,null,r.createElement(Z,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>d});var r=n(7294),o=n(6809);const i=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/en/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/en/docs","mainDocId":"sobre","docs":[{"id":"Badge/badge","path":"/en/docs/badge/badge","sidebar":"docs"},{"id":"FranzBoy/franzboy","path":"/en/docs/FranzBoy/franzboy","sidebar":"docs"},{"id":"FranzininhoDIY/bootloader/bootloader","path":"/en/docs/franzininho-diy/bootloader","sidebar":"docs"},{"id":"FranzininhoDIY/bootloader/drivers-micronucleus","path":"/en/docs/franzininho-diy/drivers-micronucleus","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/brilho-led","path":"/en/docs/franzininho-diy/brilho-led","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/elefante-colorido","path":"/en/docs/franzininho-diy/elefante-colorido","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/entradas-analogicas","path":"/en/docs/franzininho-diy/entradas-analogicas","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais","path":"/en/docs/franzininho-diy/entradas-saidas-digitais","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/girassol-automatizado","path":"/en/docs/franzininho-diy/girassol-automatizado","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/led-rgb","path":"/en/docs/franzininho-diy/led-rgb","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/leitura-tecla","path":"/en/docs/franzininho-diy/leitura-tecla","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/pacote","path":"/en/docs/franzininho-diy/pacote","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/pisca-led","path":"/en/docs/franzininho-diy/pisca-led","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/saidas-pwm","path":"/en/docs/franzininho-diy/saidas-pwm","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/semaforo","path":"/en/docs/franzininho-diy/semaforo","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr","path":"/en/docs/franzininho-diy/sensor-luz-ldr","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga","path":"/en/docs/franzininho-diy/tecla-liga-desliga","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/theremim","path":"/en/docs/franzininho-diy/theremim","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-i2c","path":"/en/docs/franzininho-diy/tutoriais-i2c"},{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-introducao","path":"/en/docs/programacao/tutoriais-introducao"},{"id":"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo","path":"/en/docs/franzininho-diy/exemplos-avr-libc/todo","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/buzzer","path":"/en/docs/franzininho-diy/exemplos-avr-libc/buzzer","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/contadores","path":"/en/docs/franzininho-diy/exemplos-avr-libc/contadores","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/entrada-digital","path":"/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/hello-world","path":"/en/docs/franzininho-diy/exemplos-avr-libc/hello-world","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/int-externa","path":"/en/docs/franzininho-diy/exemplos-avr-libc/int-ext","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/primeiros-passos","path":"/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/saida-digital","path":"/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/timer0","path":"/en/docs/franzininho-diy/exemplos-avr-libc/timer0","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/timer0-int","path":"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int","sidebar":"docs"},{"id":"FranzininhoDIY/franzininho-diy","path":"/en/docs/franzininho-diy/sobre","sidebar":"docs"},{"id":"FranzininhoDIY/identificando-componentes","path":"/en/docs/franzininho-diy/identificando-componentes","sidebar":"docs"},{"id":"FranzininhoDIY/lista-de-materiais","path":"/en/docs/franzininho-diy/lista-de-materiais","sidebar":"docs"},{"id":"FranzininhoDIY/montagem","path":"/en/docs/franzininho-diy/montagem","sidebar":"docs"},{"id":"FranzininhoDIY/picsimlab/picsimlab-intro","path":"/en/docs/franzininho-diy/picsimlab/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoDIY/wokwi/wokwi-intro","path":"/en/docs/franzininho-diy/wokwi/primeiros-passos","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos","path":"/en/docs/franzininho-c0/arduino-identificacao-pinos","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos","path":"/en/docs/franzininho-c0/arduino-primeiros-passos","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist","path":"/en/docs/franzininho-c0/arduino-todolist","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide","path":"/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist","path":"/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist","sidebar":"docs"},{"id":"franzininhoSTM32C0/franzininho-stm32c0","path":"/en/docs/franzininho-c0/franzininho-c0-board","sidebar":"docs"},{"id":"FranzininhoTiny/franzininho-tiny","path":"/en/docs/franzininho-tiny/franzininho-tiny","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino","path":"/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino-blink","path":"/en/docs/franzininho-wifi/exemplos-arduino/blink","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino-dht11","path":"/en/docs/franzininho-wifi/exemplos-arduino/dht11","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino-neopixel","path":"/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/dht11","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/pwm","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00","path":"/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01","path":"/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02","path":"/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03","path":"/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04","path":"/en/docs/franzininho-wifi/exemplos-espidf/ledc","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05","path":"/en/docs/franzininho-wifi/exemplos-espidf/aws","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais","path":"/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos","path":"/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/franzininho-wifi","path":"/en/docs/franzininho-wifi/franzininho-wifi","sidebar":"docs"},{"id":"FranzininhoWifi/franzininho-wifi-dev-edition","path":"/en/docs/franzininho-wifi/franzininho-wifi-dev-edition","sidebar":"docs"},{"id":"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro","path":"/en/docs/franzininho-wifi/wokwi/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWiFiLAB01/franzininho-wifi-lab01","path":"/en/docs/franzininho-wifi-lab01","sidebar":"docs"},{"id":"Franzino/franzino","path":"/en/docs/Franzino/franzino","sidebar":"docs"},{"id":"Franzino/upload-com-arduino-uno","path":"/en/docs/Franzino/upload-com-arduino-uno","sidebar":"docs"},{"id":"Franzino/upload-conversor-serial","path":"/en/docs/Franzino/upload-conversor-serial","sidebar":"docs"},{"id":"FranzMakey/franzmakey","path":"/en/docs/FranzMakey/franzmakey","sidebar":"docs"},{"id":"FranzMakey/primeiros-passos","path":"/en/docs/FranzMakey/primeiros-passos","sidebar":"docs"},{"id":"LaboratorioSistemasIot/adaptadores/adaptador-arduino","path":"/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno","sidebar":"docs"},{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","path":"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","sidebar":"docs"},{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO","path":"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO","sidebar":"docs"},{"id":"LaboratorioSistemasIot/laboratorio-sistemas-iot","path":"/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot","sidebar":"docs"},{"id":"sobre","path":"/en/docs/","sidebar":"docs"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/en/docs/","label":"sobre"}}}}],"breadcrumbs":true}}}'),a=JSON.parse('{"defaultLocale":"pt-BR","locales":["pt-BR","en"],"path":"i18n","currentLocale":"en","localeConfigs":{"pt-BR":{"label":"Portugu\xeas (Brasil)","direction":"ltr","htmlLang":"pt-BR","calendar":"gregory","path":"pt-BR"},"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"1.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"}}}'),c={siteConfig:o.default,siteMetadata:s,globalData:i,i18n:a,codeTranslations:l},u=r.createContext(c);function d(e){let{children:t}=e;return r.createElement(u.Provider,{value:c},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(412),i=n(5742),a=n(8780),l=n(7961);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(c,{error:t}))}function c(e){let{error:t}=e;const n=(0,a.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function u(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(i.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(u,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294),o=n(405);function i(e){return r.createElement(o.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(3117),o=n(7294),i=n(3727),a=n(8780),l=n(2263),s=n(3919),c=n(412);const u=o.createContext({collectLink:()=>{}});var d=n(4996);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:k}=(0,d.C)(),E=(0,o.useContext)(u),x=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>x.current));const S=f||p;const T=(0,s.Z)(S),_=S?.replace("pathname://","");let C=void 0!==_?(z=_,b&&(e=>e.startsWith("/"))(z)?k(z):z):void 0;var z;C&&T&&(C=(0,a.applyTrailingSlash)(C,{trailingSlash:y,baseUrl:w}));const A=(0,o.useRef)(!1),P=n?i.OL:i.rU,L=c.Z.canUseIntersectionObserver,I=(0,o.useRef)(),R=()=>{A.current||null==C||(window.docusaurus.preload(C),A.current=!0)};(0,o.useEffect)((()=>(!L&&T&&null!=C&&window.docusaurus.prefetch(C),()=>{L&&I.current&&I.current.disconnect()})),[I,C,L,T]);const N=C?.startsWith("#")??!1,D=!C||!T||N;return D||g||E.collectLink(C),D?o.createElement("a",(0,r.Z)({ref:x,href:C},S&&!T&&{target:"_blank",rel:"noopener noreferrer"},v)):o.createElement(P,(0,r.Z)({},v,{onMouseEnter:R,onTouchStart:R,innerRef:e=>{x.current=e,L&&e&&T&&(I.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(I.current.unobserve(e),I.current.disconnect(),null!=C&&window.docusaurus.prefetch(C))}))})),I.current.observe(e))},to:C},n&&{isActive:h,activeClassName:m}))}const p=o.forwardRef(f)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=()=>null},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(7529);function a(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(a({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:i}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=a({message:t,id:n});return r.createElement(r.Fragment,null,o(l,i))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>a,Z:()=>l});var r=n(7294),o=n(2263),i=n(3919);function a(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:a=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,i.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return a?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=a();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294),o=n(8940);function i(){return(0,r.useContext)(o._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294),o=n(8934);function i(){return(0,r.useContext)(o._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[i,a]=n;const l=o?`${o}.${i}`:i;r(a)?e(a,l):t[l]=a}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>i});var r=n(7294);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),a=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return r.createElement(o.Provider,{value:a},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>f,_r:()=>u,Jo:()=>g,zh:()=>d,yW:()=>m,gB:()=>p});var r=n(6550),o=n(2263),i=n(9935);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const c={},u=()=>a("docusaurus-plugin-content-docs")??c,d=e=>function(e,t,n){void 0===t&&(t=i.m),void 0===n&&(n={});const r=a(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),i=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!i&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return i}(t,n,e)}function p(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const i={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function i(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},7961:(e,t,n)=>{"use strict";n.d(t,{Z:()=>dt});var r=n(7294),o=n(4334),i=n(4763),a=n(1944),l=n(3117),s=n(6550),c=n(5999),u=n(5936);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,c.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:o}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:o}),t))}var g=n(5281),b=n(9727);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(h,{className:v.skipToContent})}var w=n(6668),k=n(9689);function E(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:i=1.2,className:a,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:o,strokeWidth:i},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const x={closeButton:"closeButton_CVFx"};function S(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",x.closeButton,e.className)}),r.createElement(E,{width:14,height:14,strokeWidth:3.1}))}const T={content:"content_knG7"};function _(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,o.Z)(T.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const C={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function z(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:o,textColor:i,isCloseable:a}=e;return r.createElement("div",{className:C.announcementBar,style:{backgroundColor:o,color:i},role:"banner"},a&&r.createElement("div",{className:C.announcementBarPlaceholder}),r.createElement(_,{className:C.announcementBarContent}),a&&r.createElement(S,{onClick:n,className:C.announcementBarClose}))}var A=n(2961),P=n(2466);var L=n(902),I=n(3102);const R=r.createContext(null);function N(e){let{children:t}=e;const n=function(){const e=(0,A.e)(),t=(0,I.HY)(),[n,o]=(0,r.useState)(!1),i=null!==t.component,a=(0,L.D9)(i);return(0,r.useEffect)((()=>{i&&!a&&o(!0)}),[i,a]),(0,r.useEffect)((()=>{i?e.shown||o(!0):o(!1)}),[e.shown,i]),(0,r.useMemo)((()=>[n,o]),[n])}();return r.createElement(R.Provider,{value:n},t)}function D(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function O(){const e=(0,r.useContext)(R);if(!e)throw new L.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),i=(0,I.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:D(i)})),[o,i,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:i}=e;const{shown:a}=O();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},i)))}var M=n(2949),B=n(2389);function j(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:i,onChange:a}=e;const l=(0,B.Z)(),s=(0,c.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===i?(0,c.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)($.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",$.toggleButton,!l&&$.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===i?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(j,{className:(0,o.Z)($.toggleIcon,$.lightToggleIcon)}),r.createElement(U,{className:(0,o.Z)($.toggleIcon,$.darkToggleIcon)})))}const H=r.memo(q),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:i,setColorMode:a}=(0,M.I)();return o?null:r.createElement(H,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:i,onChange:a})}var Z=n(1327);function V(){return r.createElement(Z.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,A.e)();return r.createElement("button",{type:"button","aria-label":(0,c.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(E,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(V,null),r.createElement(W,{className:"margin-right--md"}),r.createElement(Y,null))}var Q=n(9960),X=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:i,label:a,html:s,isDropdownLink:c,prependBaseUrlToHref:u,...d}=e;const f=(0,X.Z)(o),p=(0,X.Z)(t),m=(0,X.Z)(i,{forcePrependBaseUrl:!0}),h=a&&i&&!(0,J.Z)(i),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,a,h&&r.createElement(te.Z,c&&{width:12,height:12}))};return i?r.createElement(Q.Z,(0,l.Z)({href:u?m:i},d,g)):r.createElement(Q.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...i}=e;const a=r.createElement(ne,(0,l.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},i));return n?r.createElement("li",null,a):a}function oe(e){let{className:t,isDropdownItem:n,...i}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,o.Z)("menu__link",t)},i)))}function ie(e){let{mobile:t=!1,position:n,...o}=e;const i=t?oe:re;return r.createElement(i,(0,l.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ae=n(6043),le=n(8596),se=n(2263);function ce(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:i,onClick:a,...s}=e;const c=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{c.current&&!c.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[c]),r.createElement("div",{ref:c,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",i)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(Se,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:i,onClick:a,...c}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ae.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},c,{onClick:e=>{e.preventDefault(),p()}}),c.children??c.label),r.createElement(ae.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(Se,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:a,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const o=t?de:ue;return r.createElement(o,n)}var pe=n(4711);function me(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var ge=n(1875);const be={searchBox:"searchBox_ZlJk"};function ve(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,be.searchBox)},t)}var ye=n(143),we=n(2802);var ke=n(373);const Ee=e=>e.docs.find((t=>t.id===e.mainDocId));const xe={default:ie,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...i}=e;const{i18n:{currentLocale:a,locales:u,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),h=[...n,...u.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===a?t?"menu__link--active":"dropdown__link--active":""}})),...o],g=t?(0,c.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[a].label;return r.createElement(fe,(0,l.Z)({},i,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ve,{className:n},r.createElement(ge.Z,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:i=!1,isDropdownItem:a=!1}=e;const l=a?"li":"div";return r.createElement(l,{className:(0,o.Z)({navbar__item:!i&&!a,"menu__list-item":i},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...i}=e;const{activeDoc:a}=(0,ye.Iw)(o),s=(0,we.vY)(t,o);return null===s?null:r.createElement(ie,(0,l.Z)({exact:!0},i,{isActive:()=>a?.path===s.path||!!a?.sidebar&&a.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...i}=e;const{activeDoc:a}=(0,ye.Iw)(o),s=(0,we.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ie,(0,l.Z)({exact:!0},i,{isActive:()=>a?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...i}=e;const a=(0,we.lO)(o)[0],s=t??a.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return r.createElement(ie,(0,l.Z)({},i,{label:s,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:i,dropdownItemsAfter:a,...u}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,ye.Iw)(n),m=(0,ye.gB)(n),{savePreferredVersionName:h}=(0,ke.J)(n),g=[...i,...m.map((e=>{const t=p.alternateDocVersions[e.name]??Ee(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),...a],b=(0,we.lO)(n)[0],v=t&&g.length>1?(0,c.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&g.length>1?void 0:Ee(b).path;return g.length<=1?r.createElement(ie,(0,l.Z)({},u,{mobile:t,label:v,to:y,isActive:o?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},u,{mobile:t,label:v,to:y,items:g,isActive:o?()=>!1:void 0}))}};function Se(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),i=xe[o];if(!i)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(i,n)}function Te(){const e=(0,A.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(Se,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function _e(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(c.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Ce(){const e=0===(0,w.L)().navbar.items.length,t=O();return r.createElement(r.Fragment,null,!e&&r.createElement(_e,{onClick:()=>t.hide()}),t.content)}function ze(){const e=(0,A.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(F,{header:r.createElement(K,null),primaryMenu:r.createElement(Te,null),secondaryMenu:r.createElement(Ce,null)}):null}const Ae={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Pe(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function Le(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:i}}=(0,w.L)(),a=(0,A.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),i=(0,r.useRef)(0),a=(0,r.useCallback)((e=>{null!==e&&(i.current=e.getBoundingClientRect().height)}),[]);return(0,P.RF)(((t,r)=>{let{scrollY:a}=t;if(!e)return;if(a<i.current)return void n(!0);if(o.current)return void(o.current=!1);const l=r?.scrollY,s=document.documentElement.scrollHeight-i.current,c=window.innerHeight;l&&a>=l?n(!1):a+c<s&&n(!0)})),(0,u.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:a,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,c.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Ae.navbarHideable,!s&&Ae.navbarHidden],{"navbar--dark":"dark"===i,"navbar--primary":"primary"===i,"navbar-sidebar--show":a.shown})},t,r.createElement(Pe,{onClick:a.toggle}),r.createElement(ze,null))}var Ie=n(8780);const Re={errorBoundaryError:"errorBoundaryError_a6uf"};function Ne(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(c.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function De(e){let{error:t}=e;const n=(0,Ie.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Re.errorBoundaryError},n)}class Oe extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Fe="right";function Me(e){let{width:t=30,height:n=30,className:o,...i}=e;return r.createElement("svg",(0,l.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},i),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Be(){const{toggle:e,shown:t}=(0,A.e)();return r.createElement("button",{onClick:e,"aria-label":(0,c.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Me,null))}const je={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Oe,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(Se,e)))))}function $e(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function qe(){const e=(0,A.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??Fe)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),i=t.find((e=>"search"===e.type));return r.createElement($e,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Be,null),r.createElement(V,null),r.createElement(Ue,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ue,{items:o}),r.createElement(W,{className:je.colorModeToggle}),!i&&r.createElement(ve,null,r.createElement(ge.Z,null)))})}function He(){return r.createElement(Le,null,r.createElement(qe,null))}function Ge(e){let{item:t}=e;const{to:n,href:o,label:i,prependBaseUrlToHref:a,...s}=t,c=(0,X.Z)(n),u=(0,X.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(Q.Z,(0,l.Z)({className:"footer__link-item"},o?{href:a?u:o}:{to:c},s),i,o&&!(0,J.Z)(o)&&r.createElement(te.Z,null))}function We(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Ge,{item:t}))}function Ze(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(We,{key:t,item:e})))))}function Ve(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(Ze,{key:t,column:e}))))}function Ye(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ke(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Ge,{item:t})}function Qe(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ke,{item:e}),t.length!==n+1&&r.createElement(Ye,null))))))}function Xe(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(Ve,{columns:t}):r.createElement(Qe,{links:t})}var Je=n(941);const et={footerLogoLink:"footerLogoLink_BH7S"};function tt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),i={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Je.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:i,width:t.width,height:t.height,style:t.style})}function nt(e){let{logo:t}=e;return t.href?r.createElement(Q.Z,{href:t.href,className:et.footerLogoLink,target:t.target},r.createElement(tt,{logo:t})):r.createElement(tt,{logo:t})}function rt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ot(e){let{style:t,links:n,logo:i,copyright:a}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(i||a)&&r.createElement("div",{className:"footer__bottom text--center"},i&&r.createElement("div",{className:"margin-bottom--sm"},i),a)))}function it(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:i}=e;return r.createElement(ot,{style:i,links:n&&n.length>0&&r.createElement(Xe,{links:n}),logo:o&&r.createElement(nt,{logo:o}),copyright:t&&r.createElement(rt,{copyright:t})})}const at=r.memo(it),lt=(0,L.Qc)([M.S,k.pl,P.OC,ke.L5,a.VC,function(e){let{children:t}=e;return r.createElement(I.n2,null,r.createElement(A.M,null,r.createElement(N,null,t)))}]);function st(e){let{children:t}=e;return r.createElement(lt,null,t)}function ct(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(c.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Ne,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(De,{error:t})))))}const ut={mainWrapper:"mainWrapper_z2l0"};function dt(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:c}=e;return(0,b.t)(),r.createElement(st,null,r.createElement(a.d,{title:s,description:c}),r.createElement(y,null),r.createElement(z,null),r.createElement(He,null),r.createElement("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,ut.mainWrapper,l)},r.createElement(i.Z,{fallback:e=>r.createElement(ct,e)},t)),!n&&r.createElement(at,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(3117),o=n(7294),i=n(9960),a=n(4996),l=n(2263),s=n(6668),c=n(941);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const i={light:(0,a.Z)(t.src),dark:(0,a.Z)(t.srcDark||t.src)},l=o.createElement(c.Z,{className:t.className,sources:i,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:c}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,a.Z)(c?.href||"/"),h=n?"":t,g=c?.alt??h;return o.createElement(i.Z,(0,r.Z)({to:m},p,c?.target&&{target:c.target}),c&&o.createElement(u,{logo:c,alt:g,imageClassName:d}),null!=n&&o.createElement("b",{className:f},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294),o=n(5742);function i(e){let{locale:t,version:n,tag:i}=e;const a=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),i&&r.createElement("meta",{name:"docusaurus_tag",content:i}),a&&r.createElement("meta",{name:"docsearch:language",content:a}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),i&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:i}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(3117),o=n(7294),i=n(4334),a=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function c(e){const t=(0,a.Z)(),{colorMode:n}=(0,l.I)(),{sources:c,className:u,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,p.map((e=>o.createElement("img",(0,r.Z)({key:e,src:c[e],alt:d,className:(0,i.Z)(s.themedImage,s[`themedImage--${e}`],u)},f)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>g});var r=n(3117),o=n(7294),i=n(412),a=n(1442);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),i=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:i}}const c={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?c:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const i=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,a.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!i.current)return d(e,n),void(i.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!i.Z.canUseDOM)return e?c:u}function m(e){let{as:t="div",collapsed:n,children:r,animation:i,onCollapseTransitionEnd:a,className:l,disableSSRStyle:s}=e;const c=(0,o.useRef)(null);return f({collapsibleRef:c,collapsed:n,animation:i}),o.createElement(t,{ref:c,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(c.current,n),a?.(n))},className:l},r)}function h(e){let{collapsed:t,...n}=e;const[i,a]=(0,o.useState)(!t),[l,s]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||a(!0)}),[t]),(0,o.useLayoutEffect)((()=>{i&&s(t)}),[i,t]),i?o.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return o.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),o=n(2389),i=n(12),a=n(902),l=n(6668);const s=(0,i.WA)("docusaurus.announcement.dismiss"),c=(0,i.WA)("docusaurus.announcement.id"),u=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.Z)(),[n,i]=(0,r.useState)((()=>!!t&&u()));(0,r.useEffect)((()=>{i(u())}),[]);const a=(0,r.useCallback)((()=>{d(!0),i(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&d(!1),!r&&u()||i(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:a})),[e,n,a])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new a.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),o=n(412),i=n(902),a=n(12),l=n(6668);const s=r.createContext(void 0),c="theme",u=(0,a.WA)(c),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{u.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,i]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&u.del()}),[t]);const a=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(i(t),o&&m(t)):(i(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),u.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=u.get();null!==t&&a(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,a]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:a(null)};return e.addListener(r),()=>e.removeListener(r)}),[a,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:a,get isDarkTheme(){return o===d.dark},setLightTheme(){a(d.light)},setDarkTheme(){a(d.dark)}})),[o,a])}();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new i.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>g});var r=n(7294),o=n(143),i=n(9935),a=n(6668),l=n(2802),s=n(902),c=n(12);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,c.WA)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(u(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,a.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[i,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[i,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function g(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=i.m);const t=(0,o.zh)(e),[n,a]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{a.savePreferredVersion(e,t)}),[a,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),o=n(902);const i=Symbol("EmptyContext"),a=r.createContext(i);function l(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(a.Provider,{value:i},t)}function s(){const e=(0,r.useContext)(a);if(e===i)throw new o.i6("DocsSidebarProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(7294),o=n(3102),i=n(7524),a=n(6550),l=(n(1688),n(902));function s(e){!function(e){const t=(0,a.k6)(),n=(0,l.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(6668);const u=r.createContext(void 0);function d(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,c.L)().navbar;return 0===t.length&&!e.component}(),t=(0,i.i)(),n=!e&&"mobile"===t,[a,l]=(0,r.useState)(!1);s((()=>{if(a)return l(!1),!1}));const u=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:a})),[e,n,u,a])}function f(e){let{children:t}=e;const n=d();return r.createElement(u.Provider,{value:n},t)}function p(){const e=r.useContext(u);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>a});var r=n(7294),o=n(902);const i=r.createContext(null);function a(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(i.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(i);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=a,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>i});var r=n(7294);const o="navigation-with-keyboard";function i(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>c});var r=n(7294),o=n(412);const i={desktop:"desktop",mobile:"mobile",ssr:"ssr"},a=996;function l(){return o.Z.canUseDOM?window.innerWidth>a?i.desktop:i.mobile:i.ssr}const s=!1;function c(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},2802:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>h,cE:()=>d,hI:()=>k,lO:()=>v,vY:()=>w,oz:()=>y,s1:()=>b});var r=n(7294),o=n(6550),i=n(8790),a=n(143),l=n(373),s=n(1116);function c(e){return Array.from(new Set(e))}var u=n(8596);const d=!!a._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,u.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const i of t)if("category"===i.type&&((0,u.Mg)(i.href,n)||e(i.items))||"link"===i.type&&(0,u.Mg)(i.href,n)){return r&&"category"!==i.type||o.unshift(i),!0}return!1}(t),o}function b(){const e=(0,s.V)(),{pathname:t}=(0,o.TH)(),n=(0,a.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function v(e){const{activeVersion:t}=(0,a.Iw)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,a.yW)(e);return(0,r.useMemo)((()=>c([t,n,o].filter(Boolean))),[t,n,o])}function y(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${c(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function k(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),a=t.routes,l=a.find((e=>(0,o.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,c=s?n.docsSidebars[s]:void 0;return{docElement:(0,i.H)(a),sidebarName:s,sidebarItems:c}}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>u,VC:()=>p});var r=n(7294),o=n(7459),i=n(5742),a=n(226);function l(){const e=r.useContext(a._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),c=n(2263);function u(e){let{title:t,description:n,keywords:o,image:a,children:l}=e;const u=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=a?d(a,{absolute:!0}):void 0;return r.createElement(i.Z,null,t&&r.createElement("title",null,u),t&&r.createElement("meta",{property:"og:title",content:u}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const a=r.useContext(d),l=(0,o.Z)(a,t);return r.createElement(d.Provider,{value:l},r.createElement(i.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),i=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,o.Z)(i,a)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>a,Qc:()=>c,Ql:()=>s,i6:()=>l,zX:()=>i});var r=n(7294);const o=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function i(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function a(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>a,Ns:()=>l});var r=n(7294),o=n(723),i=n(2263);function a(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,i.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>s,RF:()=>d});var r=n(7294),o=n(412),i=n(2389),a=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function c(){const e=(0,r.useContext)(l);if(null==e)throw new a.i6("ScrollControllerProvider");return e}const u=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),o=(0,r.useRef)(u()),i=(0,a.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();i(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[i,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,i.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>o});n(2263);const r="default";function o(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{WA:()=>s});n(7294),n(1688);const r="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const i=document.createEvent("StorageEvent");i.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(i)}function i(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,a||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),a=!0),null}var t}let a=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=i(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>a});var r=n(2263),o=n(6550),i=n(8780);function a(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:a,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,o.TH)(),c=(0,i.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),u=l===a?e:e.replace(`/${l}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===a?`${u}`:`${u}${e}/`}(n)}${d}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>a});var r=n(7294),o=n(6550),i=n(902);function a(e){const t=(0,o.TH)(),n=(0,i.D9)(t),a=(0,i.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&a({location:t,previousLocation:n})}),[a,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(2263);function o(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),i="/"===o||o===r?o:(a=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(a):function(e){return e.endsWith("/")?e.slice(0,-1):e}(a));var a;return e.replace(o,i)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var i=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>_,ob:()=>p,PP:()=>z,Ep:()=>f});var r=n(3117);function o(e){return"/"===e.charAt(0)}function i(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const a=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],a=t&&t.split("/")||[],l=e&&o(e),s=t&&o(t),c=l||s;if(e&&o(e)?a=r:r.length&&(a.pop(),a=a.concat(r)),!a.length)return"/";if(a.length){var u=a[a.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,f=a.length;f>=0;f--){var p=a[f];"."===p?i(a,f):".."===p?(i(a,f),d++):d&&(i(a,f),d--)}if(!c)for(;d--;d)a.unshift("..");!c||""===a[0]||a[0]&&o(a[0])||a.unshift("");var m=a.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(2177);function s(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function p(e,t,n,o){var i;"string"==typeof e?(i=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var i=t.indexOf("?");return-1!==i&&(n=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),i.state=t):(void 0===(i=(0,r.Z)({},e)).pathname&&(i.pathname=""),i.search?"?"!==i.search.charAt(0)&&(i.search="?"+i.search):i.search="",i.hash?"#"!==i.hash.charAt(0)&&(i.hash="#"+i.hash):i.hash="",void 0!==t&&void 0===i.state&&(i.state=t));try{i.pathname=decodeURI(i.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+i.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(i.key=n),o?i.pathname?"/"!==i.pathname.charAt(0)&&(i.pathname=a(i.pathname,o.pathname)):i.pathname=o.pathname:i.pathname||(i.pathname="/"),i}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var i="function"==typeof e?e(t,n):e;"string"==typeof i?"function"==typeof r?r(i,o):o(!0):o(!1!==i)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var h=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var b="popstate",v="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,i=!(-1===window.navigator.userAgent.indexOf("Trident")),a=e,c=a.forceRefresh,w=void 0!==c&&c,k=a.getUserConfirmation,E=void 0===k?g:k,x=a.keyLength,S=void 0===x?6:x,T=e.basename?d(s(e.basename)):"";function _(e){var t=e||{},n=t.key,r=t.state,o=window.location,i=o.pathname+o.search+o.hash;return T&&(i=u(i,T)),p(i,r,n)}function C(){return Math.random().toString(36).substr(2,S)}var z=m();function A(e){(0,r.Z)(U,e),U.length=n.length,z.notifyListeners(U.location,U.action)}function P(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||R(_(e.state))}function L(){R(_(y()))}var I=!1;function R(e){if(I)I=!1,A();else{z.confirmTransitionTo(e,"POP",E,(function(t){t?A({action:"POP",location:e}):function(e){var t=U.location,n=D.indexOf(t.key);-1===n&&(n=0);var r=D.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(I=!0,F(o))}(e)}))}}var N=_(y()),D=[N.key];function O(e){return T+f(e)}function F(e){n.go(e)}var M=0;function B(e){1===(M+=e)&&1===e?(window.addEventListener(b,P),i&&window.addEventListener(v,L)):0===M&&(window.removeEventListener(b,P),i&&window.removeEventListener(v,L))}var j=!1;var U={length:n.length,action:"POP",location:N,createHref:O,push:function(e,t){var r="PUSH",i=p(e,t,C(),U.location);z.confirmTransitionTo(i,r,E,(function(e){if(e){var t=O(i),a=i.key,l=i.state;if(o)if(n.pushState({key:a,state:l},null,t),w)window.location.href=t;else{var s=D.indexOf(U.location.key),c=D.slice(0,s+1);c.push(i.key),D=c,A({action:r,location:i})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",i=p(e,t,C(),U.location);z.confirmTransitionTo(i,r,E,(function(e){if(e){var t=O(i),a=i.key,l=i.state;if(o)if(n.replaceState({key:a,state:l},null,t),w)window.location.replace(t);else{var s=D.indexOf(U.location.key);-1!==s&&(D[s]=i.key),A({action:r,location:i})}else window.location.replace(t)}}))},go:F,goBack:function(){F(-1)},goForward:function(){F(1)},block:function(e){void 0===e&&(e=!1);var t=z.setPrompt(e);return j||(B(1),j=!0),function(){return j&&(j=!1,B(-1)),t()}},listen:function(e){var t=z.appendListener(e);return B(1),function(){B(-1),t()}}};return U}var k="hashchange",E={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:s},slash:{encodePath:s,decodePath:s}};function x(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function S(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function T(e){window.location.replace(x(window.location.href)+"#"+e)}function _(e){void 0===e&&(e={}),h||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,i=void 0===o?g:o,a=n.hashType,c=void 0===a?"slash":a,b=e.basename?d(s(e.basename)):"",v=E[c],y=v.encodePath,w=v.decodePath;function _(){var e=w(S());return b&&(e=u(e,b)),p(e)}var C=m();function z(e){(0,r.Z)(j,e),j.length=t.length,C.notifyListeners(j.location,j.action)}var A=!1,P=null;function L(){var e,t,n=S(),r=y(n);if(n!==r)T(r);else{var o=_(),a=j.location;if(!A&&(t=o,(e=a).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(P===f(o))return;P=null,function(e){if(A)A=!1,z();else{var t="POP";C.confirmTransitionTo(e,t,i,(function(n){n?z({action:t,location:e}):function(e){var t=j.location,n=D.lastIndexOf(f(t));-1===n&&(n=0);var r=D.lastIndexOf(f(e));-1===r&&(r=0);var o=n-r;o&&(A=!0,O(o))}(e)}))}}(o)}}var I=S(),R=y(I);I!==R&&T(R);var N=_(),D=[f(N)];function O(e){t.go(e)}var F=0;function M(e){1===(F+=e)&&1===e?window.addEventListener(k,L):0===F&&window.removeEventListener(k,L)}var B=!1;var j={length:t.length,action:"POP",location:N,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=x(window.location.href)),n+"#"+y(b+f(e))},push:function(e,t){var n="PUSH",r=p(e,void 0,void 0,j.location);C.confirmTransitionTo(r,n,i,(function(e){if(e){var t=f(r),o=y(b+t);if(S()!==o){P=t,function(e){window.location.hash=e}(o);var i=D.lastIndexOf(f(j.location)),a=D.slice(0,i+1);a.push(t),D=a,z({action:n,location:r})}else z()}}))},replace:function(e,t){var n="REPLACE",r=p(e,void 0,void 0,j.location);C.confirmTransitionTo(r,n,i,(function(e){if(e){var t=f(r),o=y(b+t);S()!==o&&(P=t,T(o));var i=D.indexOf(f(j.location));-1!==i&&(D[i]=t),z({action:n,location:r})}}))},go:O,goBack:function(){O(-1)},goForward:function(){O(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return B||(M(1),B=!0),function(){return B&&(B=!1,M(-1)),t()}},listen:function(e){var t=C.appendListener(e);return M(1),function(){M(-1),t()}}};return j}function C(e,t,n){return Math.min(Math.max(e,t),n)}function z(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,i=void 0===o?["/"]:o,a=t.initialIndex,l=void 0===a?0:a,s=t.keyLength,c=void 0===s?6:s,u=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,c)}var g=C(l,0,i.length-1),b=i.map((function(e){return p(e,void 0,"string"==typeof e?h():e.key||h())})),v=f;function y(e){var t=C(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[g],index:g,entries:b,createHref:v,push:function(e,t){var r="PUSH",o=p(e,t,h(),w.location);u.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,h(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?a:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=a;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=p(n);o&&o!==m&&e(t,o,r)}var a=u(n);d&&(a=a.concat(d(n)));for(var l=s(t),h=s(n),g=0;g<a.length;++g){var b=a[g];if(!(i[b]||r&&r[b]||h&&h[b]||l&&l[b])){var v=f(n,b);try{c(t,b,v)}catch(y){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,o,i,a,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,i,a,l],u=0;(s=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function i(e){return 100*(-1+e)}function a(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+i(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+i(e)+"%,0)"}:{"margin-left":i(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var i=n.render(!t),c=i.querySelector(r.barSelector),u=r.speed,d=r.easing;return i.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,a(e,u,d)),1===e?(s(i,{transition:"none",opacity:1}),i.offsetWidth,setTimeout((function(){s(i,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,a=t.querySelector(r.barSelector),l=e?"-100":i(n.status||0),c=document.querySelector(r.parent);return s(a,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&p(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,i=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+i)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function i(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&i(e,n,r);else i(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=f(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var i,a,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){for(var c in i=Object(arguments[s]))n.call(i,c)&&(l[c]=i[c]);if(t){a=t(i);for(var u=0;u<a.length;u++)r.call(i,a[u])&&(l[a[u]]=i[a[u]])}}return l}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,i;switch(n=n||{},r.util.type(t)){case"Object":if(i=r.util.objId(t),n[i])return n[i];for(var a in o={},n[i]=o,t)t.hasOwnProperty(a)&&(o[a]=e(t[a],n));return o;case"Array":return i=r.util.objId(t),n[i]?n[i]:(o=[],n[i]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var i=(o=o||r.languages)[e],a={};for(var l in i)if(i.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(a[s]=n[s]);n.hasOwnProperty(l)||(a[l]=i[l])}var c=o[e];return o[e]=a,r.languages.DFS(r.languages,(function(t,n){n===c&&t!=e&&(this[t]=a)})),a},DFS:function e(t,n,o,i){i=i||{};var a=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],o||l);var s=t[l],c=r.util.type(s);"Object"!==c||i[a(s)]?"Array"!==c||i[a(s)]||(i[a(s)]=!0,e(s,n,l,i)):(i[a(s)]=!0,e(s,n,null,i))}}},plugins:{},highlight:function(e,t,n){var i={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",i),i.tokens=r.tokenize(i.code,i.grammar),r.hooks.run("after-tokenize",i),o.stringify(r.util.encode(i.tokens),i.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new l;return s(o,o.head,e),a(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,i=0;o=n[i++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function i(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var i=o[1].length;o.index+=i,o[0]=o[0].slice(i)}return o}function a(e,t,n,l,u,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(d&&d.cause==f+","+m)return;var h=p[m],g=h.inside,b=!!h.lookbehind,v=!!h.greedy,y=h.alias;if(v&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var k=h.pattern||h,E=l.next,x=u;E!==t.tail&&!(d&&x>=d.reach);x+=E.value.length,E=E.next){var S=E.value;if(t.length>e.length)return;if(!(S instanceof o)){var T,_=1;if(v){if(!(T=i(k,x,e,b))||T.index>=e.length)break;var C=T.index,z=T.index+T[0].length,A=x;for(A+=E.value.length;C>=A;)A+=(E=E.next).value.length;if(x=A-=E.value.length,E.value instanceof o)continue;for(var P=E;P!==t.tail&&(A<z||"string"==typeof P.value);P=P.next)_++,A+=P.value.length;_--,S=e.slice(x,A),T.index-=x}else if(!(T=i(k,0,S,b)))continue;C=T.index;var L=T[0],I=S.slice(0,C),R=S.slice(C+L.length),N=x+S.length;d&&N>d.reach&&(d.reach=N);var D=E.prev;if(I&&(D=s(t,D,I),x+=I.length),c(t,D,_),E=s(t,D,new o(f,g?r.tokenize(L,g):L,y,L)),R&&s(t,E,R),_>1){var O={cause:f+","+m,reach:N};a(e,t,n,E.prev,x,O),d&&O.reach>d.reach&&(d.reach=O.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function c(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var i={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},a=t.alias;a&&(Array.isArray(a)?Array.prototype.push.apply(i.classes,a):i.classes.push(a)),r.hooks.run("wrap",i);var l="";for(var s in i.attributes)l+=" "+s+'="'+(i.attributes[s]||"").replace(/"/g,""")+'"';return"<"+i.tag+' class="'+i.classes.join(" ")+'"'+l+">"+i.content+"</"+i.tag+">"},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var i={};i[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",i)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=r.variable[1].inside,a=0;a<o.length;a++)i[o[a]]=e.languages.bash[o[a]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),i=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function a(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+i+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:a(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:a(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:a(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:a(i),lookbehind:!0,greedy:!0},number:{pattern:a(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),i=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+i+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+i+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+i+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o=t[n];if("code"===o.type){var i=o.content[1],a=o.content[3];if(i&&a&&"code-language"===i.type&&"code-block"===a.type&&"string"==typeof i.content){var l=i.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());a.alias?"string"==typeof a.alias?a.alias=[a.alias,s]:a.alias.push(s):a.alias=[s]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var i=t.classes[r],c=/language-(.+)/.exec(i);if(c){n=c[1];break}}var u,d=e.languages[n];if(d)t.content=e.highlight((u=t.content,u.replace(a,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var a=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var i=f(/^\($/,/^\)$/);if(-1===i)continue;for(;n<i;n++){var a=u(0);"variable"===a.type&&(p(a,"variable-input"),o.push(a.content))}n=i+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,p(u(0),"property-mutation"),o.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var c=t[s];"variable"===c.type&&o.indexOf(c.content)>=0&&p(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var o=1,i=n;i<t.length;i++){var a=t[i],l=a.content;if("punctuation"===a.type&&"string"==typeof l)if(e.test(l))o++;else if(r.test(l)&&0===--o)return i}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],i=r.pattern.source;function a(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function c(t){var n={};n["interpolation-punctuation"]=o;var i=e.tokenize(t,n);if(3===i.length){var a=[1,1];a.push.apply(a,s(i[1],e.languages.javascript,"javascript")),i.splice.apply(i,a)}return new e.Token("interpolation",i,r.alias,t)}function u(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(i),lookbehind:!0}}),a=0,u={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(a++,r)););return u[n]=o,n})).join(""),n,r),f=Object.keys(u);return a=0,function e(t){for(var n=0;n<t.length;n++){if(a>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=f[a],i="string"==typeof r?r:r.content,l=i.indexOf(o);if(-1!==l){++a;var s=i.substring(0,l),d=c(u[o]),p=i.substring(l+o.length),m=[];if(s&&m.push(s),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[a("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),a("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),a("svg",/\bsvg/.source),a("markdown",/\b(?:markdown|md)/.source),a("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),a("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r<o;r++){var i=n[r];if("string"!=typeof i){var a=i.content;if(Array.isArray(a))if("template-string"===i.type){var l=a[1];if(3===a.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),c=l.alias,d=Array.isArray(c)?c[0]:c,p=e.languages[d];if(!p)continue;a[1]=u(s,p,d)}}else t(a);else"string"!=typeof a&&t([a])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],i=e.languages.javascript[o];"RegExp"===e.util.type(i)&&(i=e.languages.javascript[o]={pattern:i});var a=i.inside||{};i.inside=a,a["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function i(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=i(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=i(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:i(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:i(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var a=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(a).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],i=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===a(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:a(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:i=!0),(i||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=a(o);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=a(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=a(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,i){if(n.language===r){var a=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof i&&!i(e))return e;for(var o,l=a.length;-1!==n.code.indexOf(o=t(r,l));)++l;return a[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,i=Object.keys(n.tokenStack);!function a(l){for(var s=0;s<l.length&&!(o>=i.length);s++){var c=l[s];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=i[o],d=n.tokenStack[u],f="string"==typeof c?c:c.content,p=t(r,u),m=f.indexOf(p);if(m>-1){++o;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];h&&v.push.apply(v,a([h])),v.push(g),b&&v.push.apply(v,a([b])),"string"==typeof c?l.splice.apply(l,[s,1].concat(v)):c.content=v}}else c.content&&a(c.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const i=o},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),o=n(9642),i=new Set;function a(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...i,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(a.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),i.add(e)}))}a.silent=!1,e.exports=a},6726:(e,t,n)=>{var r={"./":2885};function o(e){var t=i(e);return n(t)}function i(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=i,e.exports=o,o.id=6726},6500:(e,t,n)=>{var r={"./":2885};function o(e){var t=i(e);return n(t)}function i(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=i,e.exports=o,o.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function o(r,i){if(!(r in n)){i.push(r);var a=i.indexOf(r);if(a<i.length-1)throw new Error("Circular dependency: "+i.slice(a).join(" -> "));var l={},s=e[r];if(s){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var a in o(t,i),l[t]=!0,n[t])l[a]=!0}t(s.require,c),t(s.optional,c),t(s.modify,c)}n[r]=l,i.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(i,a,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var i=r[o];t[o]="string"==typeof i?{title:i}:i}}return t}(i),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var i=e[o];t(i&&i.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(s);a=a.map(c),l=(l||[]).map(c);var u=n(a),d=n(l);a.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var f,p=r(s),m=u;o(m);){for(var h in f={},m){var g=s[h];t(g&&g.modify,(function(e){e in d&&(f[e]=!0)}))}for(var b in d)if(!(b in u))for(var v in p(b))if(v in u){f[b]=!0;break}for(var y in m=f)u[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var i=o?o.series:void 0,a=o?o.parallel:e,l={},s={};function c(e){if(e in l)return l[e];s[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=r(e);else{var f=a(u.map((function(e){var t=c(e);return delete s[e],t})));i?o=i(f,(function(){return r(e)})):r(e)}return l[e]=o}for(var u in n)c(u);var d=[];for(var f in s)d.push(l[f]);return a(d)}(p,u,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),i=n(3840);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(a(227));function l(e,t,n,r,o,i,a,l,s){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(u){this.onError(u)}}var s=!1,c=null,u=!1,d=null,f={onError:function(e){s=!0,c=e}};function p(e,t,n,r,o,i,a,u,d){s=!1,c=null,l.apply(f,arguments)}var m=null,h=null,g=null;function b(e,t,n){var r=e.type||"unknown-event";e.currentTarget=g(n),function(e,t,n,r,o,i,l,f,m){if(p.apply(this,arguments),s){if(!s)throw Error(a(198));var h=c;s=!1,c=null,u||(u=!0,d=h)}}(r,t,void 0,e),e.currentTarget=null}var v=null,y={};function w(){if(v)for(var e in y){var t=y[e],n=v.indexOf(e);if(!(-1<n))throw Error(a(96,e));if(!E[n]){if(!t.extractEvents)throw Error(a(97,e));for(var r in E[n]=t,n=t.eventTypes){var o=void 0,i=n[r],l=t,s=r;if(x.hasOwnProperty(s))throw Error(a(99,s));x[s]=i;var c=i.phasedRegistrationNames;if(c){for(o in c)c.hasOwnProperty(o)&&k(c[o],l,s);o=!0}else i.registrationName?(k(i.registrationName,l,s),o=!0):o=!1;if(!o)throw Error(a(98,r,e))}}}}function k(e,t,n){if(S[e])throw Error(a(100,e));S[e]=t,T[e]=t.eventTypes[n].dependencies}var E=[],x={},S={},T={};function _(e){var t,n=!1;for(t in e)if(e.hasOwnProperty(t)){var r=e[t];if(!y.hasOwnProperty(t)||y[t]!==r){if(y[t])throw Error(a(102,t));y[t]=r,n=!0}}n&&w()}var C=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),z=null,A=null,P=null;function L(e){if(e=h(e)){if("function"!=typeof z)throw Error(a(280));var t=e.stateNode;t&&(t=m(t),z(e.stateNode,e.type,t))}}function I(e){A?P?P.push(e):P=[e]:A=e}function R(){if(A){var e=A,t=P;if(P=A=null,L(e),t)for(e=0;e<t.length;e++)L(t[e])}}function N(e,t){return e(t)}function D(e,t,n,r,o){return e(t,n,r,o)}function O(){}var F=N,M=!1,B=!1;function j(){null===A&&null===P||(O(),R())}function U(e,t,n){if(B)return e(t,n);B=!0;try{return F(e,t,n)}finally{B=!1,j()}}var $=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,q=Object.prototype.hasOwnProperty,H={},G={};function W(e,t,n,r,o,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i}var Z={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){Z[e]=new W(e,0,!1,e,null,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];Z[t]=new W(t,1,!1,e[1],null,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){Z[e]=new W(e,2,!1,e.toLowerCase(),null,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){Z[e]=new W(e,2,!1,e,null,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){Z[e]=new W(e,3,!1,e.toLowerCase(),null,!1)})),["checked","multiple","muted","selected"].forEach((function(e){Z[e]=new W(e,3,!0,e,null,!1)})),["capture","download"].forEach((function(e){Z[e]=new W(e,4,!1,e,null,!1)})),["cols","rows","size","span"].forEach((function(e){Z[e]=new W(e,6,!1,e,null,!1)})),["rowSpan","start"].forEach((function(e){Z[e]=new W(e,5,!1,e.toLowerCase(),null,!1)}));var V=/[\-:]([a-z])/g;function Y(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(V,Y);Z[t]=new W(t,1,!1,e,null,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(V,Y);Z[t]=new W(t,1,!1,e,"http://www.w3.org/1999/xlink",!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(V,Y);Z[t]=new W(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1)})),["tabIndex","crossOrigin"].forEach((function(e){Z[e]=new W(e,1,!1,e.toLowerCase(),null,!1)})),Z.xlinkHref=new W("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0),["src","href","action","formAction"].forEach((function(e){Z[e]=new W(e,1,!1,e.toLowerCase(),null,!0)}));var K=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function Q(e,t,n,r){var o=Z.hasOwnProperty(t)?Z[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!q.call(G,e)||!q.call(H,e)&&($.test(e)?G[e]=!0:(H[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}K.hasOwnProperty("ReactCurrentDispatcher")||(K.ReactCurrentDispatcher={current:null}),K.hasOwnProperty("ReactCurrentBatchConfig")||(K.ReactCurrentBatchConfig={suspense:null});var X=/^(.*)[\\\/]/,J="function"==typeof Symbol&&Symbol.for,ee=J?Symbol.for("react.element"):60103,te=J?Symbol.for("react.portal"):60106,ne=J?Symbol.for("react.fragment"):60107,re=J?Symbol.for("react.strict_mode"):60108,oe=J?Symbol.for("react.profiler"):60114,ie=J?Symbol.for("react.provider"):60109,ae=J?Symbol.for("react.context"):60110,le=J?Symbol.for("react.concurrent_mode"):60111,se=J?Symbol.for("react.forward_ref"):60112,ce=J?Symbol.for("react.suspense"):60113,ue=J?Symbol.for("react.suspense_list"):60120,de=J?Symbol.for("react.memo"):60115,fe=J?Symbol.for("react.lazy"):60116,pe=J?Symbol.for("react.block"):60121,me="function"==typeof Symbol&&Symbol.iterator;function he(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=me&&e[me]||e["@@iterator"])?e:null}function ge(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case ne:return"Fragment";case te:return"Portal";case oe:return"Profiler";case re:return"StrictMode";case ce:return"Suspense";case ue:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case ae:return"Context.Consumer";case ie:return"Context.Provider";case se:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case de:return ge(e.type);case pe:return ge(e.render);case fe:if(e=1===e._status?e._result:null)return ge(e)}return null}function be(e){var t="";do{e:switch(e.tag){case 3:case 4:case 6:case 7:case 10:case 9:var n="";break e;default:var r=e._debugOwner,o=e._debugSource,i=ge(e.type);n=null,r&&(n=ge(r.type)),r=i,i="",o?i=" (at "+o.fileName.replace(X,"")+":"+o.lineNumber+")":n&&(i=" (created by "+n+")"),n="\n in "+(r||"Unknown")+i}t+=n,e=e.return}while(e);return t}function ve(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function ye(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function we(e){e._valueTracker||(e._valueTracker=function(e){var t=ye(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,i.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function ke(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=ye(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function Ee(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function xe(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=ve(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function Se(e,t){null!=(t=t.checked)&&Q(e,"checked",t,!1)}function Te(e,t){Se(e,t);var n=ve(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?Ce(e,t.type,n):t.hasOwnProperty("defaultValue")&&Ce(e,t.type,ve(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function _e(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function Ce(e,t,n){"number"===t&&e.ownerDocument.activeElement===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ze(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function Ae(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+ve(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function Pe(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function Le(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:ve(n)}}function Ie(e,t){var n=ve(t.value),r=ve(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function Re(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var Ne="http://www.w3.org/1999/xhtml",De="http://www.w3.org/2000/svg";function Oe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Fe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?Oe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var Me,Be,je=(Be=function(e,t){if(e.namespaceURI!==De||"innerHTML"in e)e.innerHTML=t;else{for((Me=Me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=Me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return Be(e,t)}))}:Be);function Ue(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}function $e(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var qe={animationend:$e("Animation","AnimationEnd"),animationiteration:$e("Animation","AnimationIteration"),animationstart:$e("Animation","AnimationStart"),transitionend:$e("Transition","TransitionEnd")},He={},Ge={};function We(e){if(He[e])return He[e];if(!qe[e])return e;var t,n=qe[e];for(t in n)if(n.hasOwnProperty(t)&&t in Ge)return He[e]=n[t];return e}C&&(Ge=document.createElement("div").style,"AnimationEvent"in window||(delete qe.animationend.animation,delete qe.animationiteration.animation,delete qe.animationstart.animation),"TransitionEvent"in window||delete qe.transitionend.transition);var Ze=We("animationend"),Ve=We("animationiteration"),Ye=We("animationstart"),Ke=We("transitionend"),Qe="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Xe=new("function"==typeof WeakMap?WeakMap:Map);function Je(e){var t=Xe.get(e);return void 0===t&&(t=new Map,Xe.set(e,t)),t}function et(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).effectTag)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function tt(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function nt(e){if(et(e)!==e)throw Error(a(188))}function rt(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=et(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(r=o.return)){n=r;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return nt(o),e;if(i===r)return nt(o),t;i=i.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=i;else{for(var l=!1,s=o.child;s;){if(s===n){l=!0,n=o,r=i;break}if(s===r){l=!0,r=o,n=i;break}s=s.sibling}if(!l){for(s=i.child;s;){if(s===n){l=!0,n=i,r=o;break}if(s===r){l=!0,r=i,n=o;break}s=s.sibling}if(!l)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function ot(e,t){if(null==t)throw Error(a(30));return null==e?t:Array.isArray(e)?Array.isArray(t)?(e.push.apply(e,t),e):(e.push(t),e):Array.isArray(t)?[e].concat(t):[e,t]}function it(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}var at=null;function lt(e){if(e){var t=e._dispatchListeners,n=e._dispatchInstances;if(Array.isArray(t))for(var r=0;r<t.length&&!e.isPropagationStopped();r++)b(e,t[r],n[r]);else t&&b(e,t,n);e._dispatchListeners=null,e._dispatchInstances=null,e.isPersistent()||e.constructor.release(e)}}function st(e){if(null!==e&&(at=ot(at,e)),e=at,at=null,e){if(it(e,lt),at)throw Error(a(95));if(u)throw e=d,u=!1,d=null,e}}function ct(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}function ut(e){if(!C)return!1;var t=(e="on"+e)in document;return t||((t=document.createElement("div")).setAttribute(e,"return;"),t="function"==typeof t[e]),t}var dt=[];function ft(e){e.topLevelType=null,e.nativeEvent=null,e.targetInst=null,e.ancestors.length=0,10>dt.length&&dt.push(e)}function pt(e,t,n,r){if(dt.length){var o=dt.pop();return o.topLevelType=e,o.eventSystemFlags=r,o.nativeEvent=t,o.targetInst=n,o}return{topLevelType:e,eventSystemFlags:r,nativeEvent:t,targetInst:n,ancestors:[]}}function mt(e){var t=e.targetInst,n=t;do{if(!n){e.ancestors.push(n);break}var r=n;if(3===r.tag)r=r.stateNode.containerInfo;else{for(;r.return;)r=r.return;r=3!==r.tag?null:r.stateNode.containerInfo}if(!r)break;5!==(t=n.tag)&&6!==t||e.ancestors.push(n),n=Rn(r)}while(n);for(n=0;n<e.ancestors.length;n++){t=e.ancestors[n];var o=ct(e.nativeEvent);r=e.topLevelType;var i=e.nativeEvent,a=e.eventSystemFlags;0===n&&(a|=64);for(var l=null,s=0;s<E.length;s++){var c=E[s];c&&(c=c.extractEvents(r,t,i,o,a))&&(l=ot(l,c))}st(l)}}function ht(e,t,n){if(!n.has(e)){switch(e){case"scroll":Yt(t,"scroll",!0);break;case"focus":case"blur":Yt(t,"focus",!0),Yt(t,"blur",!0),n.set("blur",null),n.set("focus",null);break;case"cancel":case"close":ut(e)&&Yt(t,e,!0);break;case"invalid":case"submit":case"reset":break;default:-1===Qe.indexOf(e)&&Vt(e,t)}n.set(e,null)}}var gt,bt,vt,yt=!1,wt=[],kt=null,Et=null,xt=null,St=new Map,Tt=new Map,_t=[],Ct="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput close cancel copy cut paste click change contextmenu reset submit".split(" "),zt="focus blur dragenter dragleave mouseover mouseout pointerover pointerout gotpointercapture lostpointercapture".split(" ");function At(e,t,n,r,o){return{blockedOn:e,topLevelType:t,eventSystemFlags:32|n,nativeEvent:o,container:r}}function Pt(e,t){switch(e){case"focus":case"blur":kt=null;break;case"dragenter":case"dragleave":Et=null;break;case"mouseover":case"mouseout":xt=null;break;case"pointerover":case"pointerout":St.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Tt.delete(t.pointerId)}}function Lt(e,t,n,r,o,i){return null===e||e.nativeEvent!==i?(e=At(t,n,r,o,i),null!==t&&(null!==(t=Nn(t))&&bt(t)),e):(e.eventSystemFlags|=r,e)}function It(e){var t=Rn(e.target);if(null!==t){var n=et(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=tt(n)))return e.blockedOn=t,void i.unstable_runWithPriority(e.priority,(function(){vt(n)}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Rt(e){if(null!==e.blockedOn)return!1;var t=Jt(e.topLevelType,e.eventSystemFlags,e.container,e.nativeEvent);if(null!==t){var n=Nn(t);return null!==n&&bt(n),e.blockedOn=t,!1}return!0}function Nt(e,t,n){Rt(e)&&n.delete(t)}function Dt(){for(yt=!1;0<wt.length;){var e=wt[0];if(null!==e.blockedOn){null!==(e=Nn(e.blockedOn))&>(e);break}var t=Jt(e.topLevelType,e.eventSystemFlags,e.container,e.nativeEvent);null!==t?e.blockedOn=t:wt.shift()}null!==kt&&Rt(kt)&&(kt=null),null!==Et&&Rt(Et)&&(Et=null),null!==xt&&Rt(xt)&&(xt=null),St.forEach(Nt),Tt.forEach(Nt)}function Ot(e,t){e.blockedOn===t&&(e.blockedOn=null,yt||(yt=!0,i.unstable_scheduleCallback(i.unstable_NormalPriority,Dt)))}function Ft(e){function t(t){return Ot(t,e)}if(0<wt.length){Ot(wt[0],e);for(var n=1;n<wt.length;n++){var r=wt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==kt&&Ot(kt,e),null!==Et&&Ot(Et,e),null!==xt&&Ot(xt,e),St.forEach(t),Tt.forEach(t),n=0;n<_t.length;n++)(r=_t[n]).blockedOn===e&&(r.blockedOn=null);for(;0<_t.length&&null===(n=_t[0]).blockedOn;)It(n),null===n.blockedOn&&_t.shift()}var Mt={},Bt=new Map,jt=new Map,Ut=["abort","abort",Ze,"animationEnd",Ve,"animationIteration",Ye,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Ke,"transitionEnd","waiting","waiting"];function $t(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1],i="on"+(o[0].toUpperCase()+o.slice(1));i={phasedRegistrationNames:{bubbled:i,captured:i+"Capture"},dependencies:[r],eventPriority:t},jt.set(r,t),Bt.set(r,i),Mt[o]=i}}$t("blur blur cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focus focus input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),$t("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),$t(Ut,2);for(var qt="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),Ht=0;Ht<qt.length;Ht++)jt.set(qt[Ht],0);var Gt=i.unstable_UserBlockingPriority,Wt=i.unstable_runWithPriority,Zt=!0;function Vt(e,t){Yt(t,e,!1)}function Yt(e,t,n){var r=jt.get(t);switch(void 0===r?2:r){case 0:r=Kt.bind(null,t,1,e);break;case 1:r=Qt.bind(null,t,1,e);break;default:r=Xt.bind(null,t,1,e)}n?e.addEventListener(t,r,!0):e.addEventListener(t,r,!1)}function Kt(e,t,n,r){M||O();var o=Xt,i=M;M=!0;try{D(o,e,t,n,r)}finally{(M=i)||j()}}function Qt(e,t,n,r){Wt(Gt,Xt.bind(null,e,t,n,r))}function Xt(e,t,n,r){if(Zt)if(0<wt.length&&-1<Ct.indexOf(e))e=At(null,e,t,n,r),wt.push(e);else{var o=Jt(e,t,n,r);if(null===o)Pt(e,r);else if(-1<Ct.indexOf(e))e=At(o,e,t,n,r),wt.push(e);else if(!function(e,t,n,r,o){switch(t){case"focus":return kt=Lt(kt,e,t,n,r,o),!0;case"dragenter":return Et=Lt(Et,e,t,n,r,o),!0;case"mouseover":return xt=Lt(xt,e,t,n,r,o),!0;case"pointerover":var i=o.pointerId;return St.set(i,Lt(St.get(i)||null,e,t,n,r,o)),!0;case"gotpointercapture":return i=o.pointerId,Tt.set(i,Lt(Tt.get(i)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r)){Pt(e,r),e=pt(e,r,null,t);try{U(mt,e)}finally{ft(e)}}}}function Jt(e,t,n,r){if(null!==(n=Rn(n=ct(r)))){var o=et(n);if(null===o)n=null;else{var i=o.tag;if(13===i){if(null!==(n=tt(o)))return n;n=null}else if(3===i){if(o.stateNode.hydrate)return 3===o.tag?o.stateNode.containerInfo:null;n=null}else o!==n&&(n=null)}}e=pt(e,r,n,t);try{U(mt,e)}finally{ft(e)}return null}var en={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},tn=["Webkit","ms","Moz","O"];function nn(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||en.hasOwnProperty(e)&&en[e]?(""+t).trim():t+"px"}function rn(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=nn(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(en).forEach((function(e){tn.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),en[t]=en[e]}))}));var on=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function an(e,t){if(t){if(on[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e,""));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62,""))}}function ln(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var sn=Ne;function cn(e,t){var n=Je(e=9===e.nodeType||11===e.nodeType?e:e.ownerDocument);t=T[t];for(var r=0;r<t.length;r++)ht(t[r],e,n)}function un(){}function dn(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function fn(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function pn(e,t){var n,r=fn(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=fn(r)}}function mn(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mn(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function hn(){for(var e=window,t=dn();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=dn((e=t.contentWindow).document)}return t}function gn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var bn="$",vn="/$",yn="$?",wn="$!",kn=null,En=null;function xn(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Sn(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Tn="function"==typeof setTimeout?setTimeout:void 0,_n="function"==typeof clearTimeout?clearTimeout:void 0;function Cn(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function zn(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if(n===bn||n===wn||n===yn){if(0===t)return e;t--}else n===vn&&t++}e=e.previousSibling}return null}var An=Math.random().toString(36).slice(2),Pn="__reactInternalInstance$"+An,Ln="__reactEventHandlers$"+An,In="__reactContainere$"+An;function Rn(e){var t=e[Pn];if(t)return t;for(var n=e.parentNode;n;){if(t=n[In]||n[Pn]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=zn(e);null!==e;){if(n=e[Pn])return n;e=zn(e)}return t}n=(e=n).parentNode}return null}function Nn(e){return!(e=e[Pn]||e[In])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function Dn(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function On(e){return e[Ln]||null}function Fn(e){do{e=e.return}while(e&&5!==e.tag);return e||null}function Mn(e,t){var n=e.stateNode;if(!n)return null;var r=m(n);if(!r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}function Bn(e,t,n){(t=Mn(e,n.dispatchConfig.phasedRegistrationNames[t]))&&(n._dispatchListeners=ot(n._dispatchListeners,t),n._dispatchInstances=ot(n._dispatchInstances,e))}function jn(e){if(e&&e.dispatchConfig.phasedRegistrationNames){for(var t=e._targetInst,n=[];t;)n.push(t),t=Fn(t);for(t=n.length;0<t--;)Bn(n[t],"captured",e);for(t=0;t<n.length;t++)Bn(n[t],"bubbled",e)}}function Un(e,t,n){e&&n&&n.dispatchConfig.registrationName&&(t=Mn(e,n.dispatchConfig.registrationName))&&(n._dispatchListeners=ot(n._dispatchListeners,t),n._dispatchInstances=ot(n._dispatchInstances,e))}function $n(e){e&&e.dispatchConfig.registrationName&&Un(e._targetInst,null,e)}function qn(e){it(e,jn)}var Hn=null,Gn=null,Wn=null;function Zn(){if(Wn)return Wn;var e,t,n=Gn,r=n.length,o="value"in Hn?Hn.value:Hn.textContent,i=o.length;for(e=0;e<r&&n[e]===o[e];e++);var a=r-e;for(t=1;t<=a&&n[r-t]===o[i-t];t++);return Wn=o.slice(e,1<t?1-t:void 0)}function Vn(){return!0}function Yn(){return!1}function Kn(e,t,n,r){for(var o in this.dispatchConfig=e,this._targetInst=t,this.nativeEvent=n,e=this.constructor.Interface)e.hasOwnProperty(o)&&((t=e[o])?this[o]=t(n):"target"===o?this.target=r:this[o]=n[o]);return this.isDefaultPrevented=(null!=n.defaultPrevented?n.defaultPrevented:!1===n.returnValue)?Vn:Yn,this.isPropagationStopped=Yn,this}function Qn(e,t,n,r){if(this.eventPool.length){var o=this.eventPool.pop();return this.call(o,e,t,n,r),o}return new this(e,t,n,r)}function Xn(e){if(!(e instanceof this))throw Error(a(279));e.destructor(),10>this.eventPool.length&&this.eventPool.push(e)}function Jn(e){e.eventPool=[],e.getPooled=Qn,e.release=Xn}o(Kn.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=Vn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=Vn)},persist:function(){this.isPersistent=Vn},isPersistent:Yn,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=Yn,this._dispatchInstances=this._dispatchListeners=null}}),Kn.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},Kn.extend=function(e){function t(){}function n(){return r.apply(this,arguments)}var r=this;t.prototype=r.prototype;var i=new t;return o(i,n.prototype),n.prototype=i,n.prototype.constructor=n,n.Interface=o({},r.Interface,e),n.extend=r.extend,Jn(n),n},Jn(Kn);var er=Kn.extend({data:null}),tr=Kn.extend({data:null}),nr=[9,13,27,32],rr=C&&"CompositionEvent"in window,or=null;C&&"documentMode"in document&&(or=document.documentMode);var ir=C&&"TextEvent"in window&&!or,ar=C&&(!rr||or&&8<or&&11>=or),lr=String.fromCharCode(32),sr={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},cr=!1;function ur(e,t){switch(e){case"keyup":return-1!==nr.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function dr(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var fr=!1;var pr={eventTypes:sr,extractEvents:function(e,t,n,r){var o;if(rr)e:{switch(e){case"compositionstart":var i=sr.compositionStart;break e;case"compositionend":i=sr.compositionEnd;break e;case"compositionupdate":i=sr.compositionUpdate;break e}i=void 0}else fr?ur(e,n)&&(i=sr.compositionEnd):"keydown"===e&&229===n.keyCode&&(i=sr.compositionStart);return i?(ar&&"ko"!==n.locale&&(fr||i!==sr.compositionStart?i===sr.compositionEnd&&fr&&(o=Zn()):(Gn="value"in(Hn=r)?Hn.value:Hn.textContent,fr=!0)),i=er.getPooled(i,t,n,r),o?i.data=o:null!==(o=dr(n))&&(i.data=o),qn(i),o=i):o=null,(e=ir?function(e,t){switch(e){case"compositionend":return dr(t);case"keypress":return 32!==t.which?null:(cr=!0,lr);case"textInput":return(e=t.data)===lr&&cr?null:e;default:return null}}(e,n):function(e,t){if(fr)return"compositionend"===e||!rr&&ur(e,t)?(e=Zn(),Wn=Gn=Hn=null,fr=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return ar&&"ko"!==t.locale?null:t.data}}(e,n))?((t=tr.getPooled(sr.beforeInput,t,n,r)).data=e,qn(t)):t=null,null===o?t:null===t?o:[o,t]}},mr={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function hr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!mr[e.type]:"textarea"===t}var gr={change:{phasedRegistrationNames:{bubbled:"onChange",captured:"onChangeCapture"},dependencies:"blur change click focus input keydown keyup selectionchange".split(" ")}};function br(e,t,n){return(e=Kn.getPooled(gr.change,e,t,n)).type="change",I(n),qn(e),e}var vr=null,yr=null;function wr(e){st(e)}function kr(e){if(ke(Dn(e)))return e}function Er(e,t){if("change"===e)return t}var xr=!1;function Sr(){vr&&(vr.detachEvent("onpropertychange",Tr),yr=vr=null)}function Tr(e){if("value"===e.propertyName&&kr(yr))if(e=br(yr,e,ct(e)),M)st(e);else{M=!0;try{N(wr,e)}finally{M=!1,j()}}}function _r(e,t,n){"focus"===e?(Sr(),yr=n,(vr=t).attachEvent("onpropertychange",Tr)):"blur"===e&&Sr()}function Cr(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return kr(yr)}function zr(e,t){if("click"===e)return kr(t)}function Ar(e,t){if("input"===e||"change"===e)return kr(t)}C&&(xr=ut("input")&&(!document.documentMode||9<document.documentMode));var Pr={eventTypes:gr,_isInputEventSupported:xr,extractEvents:function(e,t,n,r){var o=t?Dn(t):window,i=o.nodeName&&o.nodeName.toLowerCase();if("select"===i||"input"===i&&"file"===o.type)var a=Er;else if(hr(o))if(xr)a=Ar;else{a=Cr;var l=_r}else(i=o.nodeName)&&"input"===i.toLowerCase()&&("checkbox"===o.type||"radio"===o.type)&&(a=zr);if(a&&(a=a(e,t)))return br(a,n,r);l&&l(e,o,t),"blur"===e&&(e=o._wrapperState)&&e.controlled&&"number"===o.type&&Ce(o,"number",o.value)}},Lr=Kn.extend({view:null,detail:null}),Ir={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Rr(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Ir[e])&&!!t[e]}function Nr(){return Rr}var Dr=0,Or=0,Fr=!1,Mr=!1,Br=Lr.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:Nr,button:null,buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},movementX:function(e){if("movementX"in e)return e.movementX;var t=Dr;return Dr=e.screenX,Fr?"mousemove"===e.type?e.screenX-t:0:(Fr=!0,0)},movementY:function(e){if("movementY"in e)return e.movementY;var t=Or;return Or=e.screenY,Mr?"mousemove"===e.type?e.screenY-t:0:(Mr=!0,0)}}),jr=Br.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),Ur={mouseEnter:{registrationName:"onMouseEnter",dependencies:["mouseout","mouseover"]},mouseLeave:{registrationName:"onMouseLeave",dependencies:["mouseout","mouseover"]},pointerEnter:{registrationName:"onPointerEnter",dependencies:["pointerout","pointerover"]},pointerLeave:{registrationName:"onPointerLeave",dependencies:["pointerout","pointerover"]}},$r={eventTypes:Ur,extractEvents:function(e,t,n,r,o){var i="mouseover"===e||"pointerover"===e,a="mouseout"===e||"pointerout"===e;if(i&&0==(32&o)&&(n.relatedTarget||n.fromElement)||!a&&!i)return null;(i=r.window===r?r:(i=r.ownerDocument)?i.defaultView||i.parentWindow:window,a)?(a=t,null!==(t=(t=n.relatedTarget||n.toElement)?Rn(t):null)&&(t!==et(t)||5!==t.tag&&6!==t.tag)&&(t=null)):a=null;if(a===t)return null;if("mouseout"===e||"mouseover"===e)var l=Br,s=Ur.mouseLeave,c=Ur.mouseEnter,u="mouse";else"pointerout"!==e&&"pointerover"!==e||(l=jr,s=Ur.pointerLeave,c=Ur.pointerEnter,u="pointer");if(e=null==a?i:Dn(a),i=null==t?i:Dn(t),(s=l.getPooled(s,a,n,r)).type=u+"leave",s.target=e,s.relatedTarget=i,(n=l.getPooled(c,t,n,r)).type=u+"enter",n.target=i,n.relatedTarget=e,u=t,(r=a)&&u)e:{for(c=u,a=0,e=l=r;e;e=Fn(e))a++;for(e=0,t=c;t;t=Fn(t))e++;for(;0<a-e;)l=Fn(l),a--;for(;0<e-a;)c=Fn(c),e--;for(;a--;){if(l===c||l===c.alternate)break e;l=Fn(l),c=Fn(c)}l=null}else l=null;for(c=l,l=[];r&&r!==c&&(null===(a=r.alternate)||a!==c);)l.push(r),r=Fn(r);for(r=[];u&&u!==c&&(null===(a=u.alternate)||a!==c);)r.push(u),u=Fn(u);for(u=0;u<l.length;u++)Un(l[u],"bubbled",s);for(u=r.length;0<u--;)Un(r[u],"captured",n);return 0==(64&o)?[s]:[s,n]}};var qr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},Hr=Object.prototype.hasOwnProperty;function Gr(e,t){if(qr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!Hr.call(t,n[r])||!qr(e[n[r]],t[n[r]]))return!1;return!0}var Wr=C&&"documentMode"in document&&11>=document.documentMode,Zr={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange".split(" ")}},Vr=null,Yr=null,Kr=null,Qr=!1;function Xr(e,t){var n=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;return Qr||null==Vr||Vr!==dn(n)?null:("selectionStart"in(n=Vr)&&gn(n)?n={start:n.selectionStart,end:n.selectionEnd}:n={anchorNode:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset},Kr&&Gr(Kr,n)?null:(Kr=n,(e=Kn.getPooled(Zr.select,Yr,e,t)).type="select",e.target=Vr,qn(e),e))}var Jr={eventTypes:Zr,extractEvents:function(e,t,n,r,o,i){if(!(i=!(o=i||(r.window===r?r.document:9===r.nodeType?r:r.ownerDocument)))){e:{o=Je(o),i=T.onSelect;for(var a=0;a<i.length;a++)if(!o.has(i[a])){o=!1;break e}o=!0}i=!o}if(i)return null;switch(o=t?Dn(t):window,e){case"focus":(hr(o)||"true"===o.contentEditable)&&(Vr=o,Yr=t,Kr=null);break;case"blur":Kr=Yr=Vr=null;break;case"mousedown":Qr=!0;break;case"contextmenu":case"mouseup":case"dragend":return Qr=!1,Xr(n,r);case"selectionchange":if(Wr)break;case"keydown":case"keyup":return Xr(n,r)}return null}},eo=Kn.extend({animationName:null,elapsedTime:null,pseudoElement:null}),to=Kn.extend({clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),no=Lr.extend({relatedTarget:null});function ro(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}var oo={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},io={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},ao=Lr.extend({key:function(e){if(e.key){var t=oo[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=ro(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?io[e.keyCode]||"Unidentified":""},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Nr,charCode:function(e){return"keypress"===e.type?ro(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?ro(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),lo=Br.extend({dataTransfer:null}),so=Lr.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Nr}),co=Kn.extend({propertyName:null,elapsedTime:null,pseudoElement:null}),uo=Br.extend({deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null}),fo={eventTypes:Mt,extractEvents:function(e,t,n,r){var o=Bt.get(e);if(!o)return null;switch(e){case"keypress":if(0===ro(n))return null;case"keydown":case"keyup":e=ao;break;case"blur":case"focus":e=no;break;case"click":if(2===n.button)return null;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":e=Br;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":e=lo;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":e=so;break;case Ze:case Ve:case Ye:e=eo;break;case Ke:e=co;break;case"scroll":e=Lr;break;case"wheel":e=uo;break;case"copy":case"cut":case"paste":e=to;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":e=jr;break;default:e=Kn}return qn(t=e.getPooled(o,t,n,r)),t}};if(v)throw Error(a(101));v=Array.prototype.slice.call("ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin".split(" ")),w(),m=On,h=Nn,g=Dn,_({SimpleEventPlugin:fo,EnterLeaveEventPlugin:$r,ChangeEventPlugin:Pr,SelectEventPlugin:Jr,BeforeInputEventPlugin:pr});var po=[],mo=-1;function ho(e){0>mo||(e.current=po[mo],po[mo]=null,mo--)}function go(e,t){mo++,po[mo]=e.current,e.current=t}var bo={},vo={current:bo},yo={current:!1},wo=bo;function ko(e,t){var n=e.type.contextTypes;if(!n)return bo;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,i={};for(o in n)i[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function Eo(e){return null!=(e=e.childContextTypes)}function xo(){ho(yo),ho(vo)}function So(e,t,n){if(vo.current!==bo)throw Error(a(168));go(vo,t),go(yo,n)}function To(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var i in r=r.getChildContext())if(!(i in e))throw Error(a(108,ge(t)||"Unknown",i));return o({},n,{},r)}function _o(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||bo,wo=vo.current,go(vo,e),go(yo,yo.current),!0}function Co(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=To(e,t,wo),r.__reactInternalMemoizedMergedChildContext=e,ho(yo),ho(vo),go(vo,e)):ho(yo),go(yo,n)}var zo=i.unstable_runWithPriority,Ao=i.unstable_scheduleCallback,Po=i.unstable_cancelCallback,Lo=i.unstable_requestPaint,Io=i.unstable_now,Ro=i.unstable_getCurrentPriorityLevel,No=i.unstable_ImmediatePriority,Do=i.unstable_UserBlockingPriority,Oo=i.unstable_NormalPriority,Fo=i.unstable_LowPriority,Mo=i.unstable_IdlePriority,Bo={},jo=i.unstable_shouldYield,Uo=void 0!==Lo?Lo:function(){},$o=null,qo=null,Ho=!1,Go=Io(),Wo=1e4>Go?Io:function(){return Io()-Go};function Zo(){switch(Ro()){case No:return 99;case Do:return 98;case Oo:return 97;case Fo:return 96;case Mo:return 95;default:throw Error(a(332))}}function Vo(e){switch(e){case 99:return No;case 98:return Do;case 97:return Oo;case 96:return Fo;case 95:return Mo;default:throw Error(a(332))}}function Yo(e,t){return e=Vo(e),zo(e,t)}function Ko(e,t,n){return e=Vo(e),Ao(e,t,n)}function Qo(e){return null===$o?($o=[e],qo=Ao(No,Jo)):$o.push(e),Bo}function Xo(){if(null!==qo){var e=qo;qo=null,Po(e)}Jo()}function Jo(){if(!Ho&&null!==$o){Ho=!0;var e=0;try{var t=$o;Yo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),$o=null}catch(n){throw null!==$o&&($o=$o.slice(e+1)),Ao(No,Xo),n}finally{Ho=!1}}}function ei(e,t,n){return 1073741821-(1+((1073741821-e+t/10)/(n/=10)|0))*n}function ti(e,t){if(e&&e.defaultProps)for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}var ni={current:null},ri=null,oi=null,ii=null;function ai(){ii=oi=ri=null}function li(e){var t=ni.current;ho(ni),e.type._context._currentValue=t}function si(e,t){for(;null!==e;){var n=e.alternate;if(e.childExpirationTime<t)e.childExpirationTime=t,null!==n&&n.childExpirationTime<t&&(n.childExpirationTime=t);else{if(!(null!==n&&n.childExpirationTime<t))break;n.childExpirationTime=t}e=e.return}}function ci(e,t){ri=e,ii=oi=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(e.expirationTime>=t&&(Oa=!0),e.firstContext=null)}function ui(e,t){if(ii!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(ii=e,t=1073741823),t={context:e,observedBits:t,next:null},null===oi){if(null===ri)throw Error(a(308));oi=t,ri.dependencies={expirationTime:0,firstContext:t,responders:null}}else oi=oi.next=t;return e._currentValue}var di=!1;function fi(e){e.updateQueue={baseState:e.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}function pi(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,baseQueue:e.baseQueue,shared:e.shared,effects:e.effects})}function mi(e,t){return(e={expirationTime:e,suspenseConfig:t,tag:0,payload:null,callback:null,next:null}).next=e}function hi(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function gi(e,t){var n=e.alternate;null!==n&&pi(n,e),null===(n=(e=e.updateQueue).baseQueue)?(e.baseQueue=t.next=t,t.next=t):(t.next=n.next,n.next=t)}function bi(e,t,n,r){var i=e.updateQueue;di=!1;var a=i.baseQueue,l=i.shared.pending;if(null!==l){if(null!==a){var s=a.next;a.next=l.next,l.next=s}a=l,i.shared.pending=null,null!==(s=e.alternate)&&(null!==(s=s.updateQueue)&&(s.baseQueue=l))}if(null!==a){s=a.next;var c=i.baseState,u=0,d=null,f=null,p=null;if(null!==s)for(var m=s;;){if((l=m.expirationTime)<r){var h={expirationTime:m.expirationTime,suspenseConfig:m.suspenseConfig,tag:m.tag,payload:m.payload,callback:m.callback,next:null};null===p?(f=p=h,d=c):p=p.next=h,l>u&&(u=l)}else{null!==p&&(p=p.next={expirationTime:1073741823,suspenseConfig:m.suspenseConfig,tag:m.tag,payload:m.payload,callback:m.callback,next:null}),Es(l,m.suspenseConfig);e:{var g=e,b=m;switch(l=t,h=n,b.tag){case 1:if("function"==typeof(g=b.payload)){c=g.call(h,c,l);break e}c=g;break e;case 3:g.effectTag=-4097&g.effectTag|64;case 0:if(null==(l="function"==typeof(g=b.payload)?g.call(h,c,l):g))break e;c=o({},c,l);break e;case 2:di=!0}}null!==m.callback&&(e.effectTag|=32,null===(l=i.effects)?i.effects=[m]:l.push(m))}if(null===(m=m.next)||m===s){if(null===(l=i.shared.pending))break;m=a.next=l.next,l.next=s,i.baseQueue=a=l,i.shared.pending=null}}null===p?d=c:p.next=f,i.baseState=d,i.baseQueue=p,xs(u),e.expirationTime=u,e.memoizedState=c}}function vi(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=o,o=n,"function"!=typeof r)throw Error(a(191,r));r.call(o)}}}var yi=K.ReactCurrentBatchConfig,wi=(new r.Component).refs;function ki(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.expirationTime&&(e.updateQueue.baseState=n)}var Ei={isMounted:function(e){return!!(e=e._reactInternalFiber)&&et(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternalFiber;var r=cs(),o=yi.suspense;(o=mi(r=us(r,e,o),o)).payload=t,null!=n&&(o.callback=n),hi(e,o),ds(e,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternalFiber;var r=cs(),o=yi.suspense;(o=mi(r=us(r,e,o),o)).tag=1,o.payload=t,null!=n&&(o.callback=n),hi(e,o),ds(e,r)},enqueueForceUpdate:function(e,t){e=e._reactInternalFiber;var n=cs(),r=yi.suspense;(r=mi(n=us(n,e,r),r)).tag=2,null!=t&&(r.callback=t),hi(e,r),ds(e,n)}};function xi(e,t,n,r,o,i,a){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,i,a):!t.prototype||!t.prototype.isPureReactComponent||(!Gr(n,r)||!Gr(o,i))}function Si(e,t,n){var r=!1,o=bo,i=t.contextType;return"object"==typeof i&&null!==i?i=ui(i):(o=Eo(t)?wo:vo.current,i=(r=null!=(r=t.contextTypes))?ko(e,o):bo),t=new t(n,i),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=Ei,e.stateNode=t,t._reactInternalFiber=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=i),t}function Ti(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&Ei.enqueueReplaceState(t,t.state,null)}function _i(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=wi,fi(e);var i=t.contextType;"object"==typeof i&&null!==i?o.context=ui(i):(i=Eo(t)?wo:vo.current,o.context=ko(e,i)),bi(e,n,o,r),o.state=e.memoizedState,"function"==typeof(i=t.getDerivedStateFromProps)&&(ki(e,t,i,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&Ei.enqueueReplaceState(o,o.state,null),bi(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.effectTag|=4)}var Ci=Array.isArray;function zi(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===wi&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function Ai(e,t){if("textarea"!==e.type)throw Error(a(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t,""))}function Pi(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.effectTag=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=qs(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.effectTag=2,n):r:(t.effectTag=2,n):n}function l(t){return e&&null===t.alternate&&(t.effectTag=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ws(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=zi(e,t,n),r.return=e,r):((r=Hs(n.type,n.key,n.props,null,e.mode,r)).ref=zi(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Zs(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,i){return null===t||7!==t.tag?((t=Gs(n,e.mode,r,i)).return=e,t):((t=o(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ws(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case ee:return(n=Hs(t.type,t.key,t.props,null,e.mode,n)).ref=zi(e,null,t),n.return=e,n;case te:return(t=Zs(t,e.mode,n)).return=e,t}if(Ci(t)||he(t))return(t=Gs(t,e.mode,n,null)).return=e,t;Ai(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case ee:return n.key===o?n.type===ne?d(e,t,n.props.children,r,o):c(e,t,n,r):null;case te:return n.key===o?u(e,t,n,r):null}if(Ci(n)||he(n))return null!==o?null:d(e,t,n,r,null);Ai(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case ee:return e=e.get(null===r.key?n:r.key)||null,r.type===ne?d(t,e,r.props.children,o,r.key):c(t,e,r,o);case te:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(Ci(r)||he(r))return d(t,e=e.get(n)||null,r,o,null);Ai(t,r)}return null}function h(o,a,l,s){for(var c=null,u=null,d=a,h=a=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var b=p(o,d,l[h],s);if(null===b){null===d&&(d=g);break}e&&d&&null===b.alternate&&t(o,d),a=i(b,a,h),null===u?c=b:u.sibling=b,u=b,d=g}if(h===l.length)return n(o,d),c;if(null===d){for(;h<l.length;h++)null!==(d=f(o,l[h],s))&&(a=i(d,a,h),null===u?c=d:u.sibling=d,u=d);return c}for(d=r(o,d);h<l.length;h++)null!==(g=m(d,o,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),a=i(g,a,h),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach((function(e){return t(o,e)})),c}function g(o,l,s,c){var u=he(s);if("function"!=typeof u)throw Error(a(150));if(null==(s=u.call(s)))throw Error(a(151));for(var d=u=null,h=l,g=l=0,b=null,v=s.next();null!==h&&!v.done;g++,v=s.next()){h.index>g?(b=h,h=null):b=h.sibling;var y=p(o,h,v.value,c);if(null===y){null===h&&(h=b);break}e&&h&&null===y.alternate&&t(o,h),l=i(y,l,g),null===d?u=y:d.sibling=y,d=y,h=b}if(v.done)return n(o,h),u;if(null===h){for(;!v.done;g++,v=s.next())null!==(v=f(o,v.value,c))&&(l=i(v,l,g),null===d?u=v:d.sibling=v,d=v);return u}for(h=r(o,h);!v.done;g++,v=s.next())null!==(v=m(h,o,g,v.value,c))&&(e&&null!==v.alternate&&h.delete(null===v.key?g:v.key),l=i(v,l,g),null===d?u=v:d.sibling=v,d=v);return e&&h.forEach((function(e){return t(o,e)})),u}return function(e,r,i,s){var c="object"==typeof i&&null!==i&&i.type===ne&&null===i.key;c&&(i=i.props.children);var u="object"==typeof i&&null!==i;if(u)switch(i.$$typeof){case ee:e:{for(u=i.key,c=r;null!==c;){if(c.key===u){if(7===c.tag){if(i.type===ne){n(e,c.sibling),(r=o(c,i.props.children)).return=e,e=r;break e}}else if(c.elementType===i.type){n(e,c.sibling),(r=o(c,i.props)).ref=zi(e,c,i),r.return=e,e=r;break e}n(e,c);break}t(e,c),c=c.sibling}i.type===ne?((r=Gs(i.props.children,e.mode,s,i.key)).return=e,e=r):((s=Hs(i.type,i.key,i.props,null,e.mode,s)).ref=zi(e,r,i),s.return=e,e=s)}return l(e);case te:e:{for(c=i.key;null!==r;){if(r.key===c){if(4===r.tag&&r.stateNode.containerInfo===i.containerInfo&&r.stateNode.implementation===i.implementation){n(e,r.sibling),(r=o(r,i.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Zs(i,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof i||"number"==typeof i)return i=""+i,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,i)).return=e,e=r):(n(e,r),(r=Ws(i,e.mode,s)).return=e,e=r),l(e);if(Ci(i))return h(e,r,i,s);if(he(i))return g(e,r,i,s);if(u&&Ai(e,i),void 0===i&&!c)switch(e.tag){case 1:case 0:throw e=e.type,Error(a(152,e.displayName||e.name||"Component"))}return n(e,r)}}var Li=Pi(!0),Ii=Pi(!1),Ri={},Ni={current:Ri},Di={current:Ri},Oi={current:Ri};function Fi(e){if(e===Ri)throw Error(a(174));return e}function Mi(e,t){switch(go(Oi,t),go(Di,e),go(Ni,Ri),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:Fe(null,"");break;default:t=Fe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}ho(Ni),go(Ni,t)}function Bi(){ho(Ni),ho(Di),ho(Oi)}function ji(e){Fi(Oi.current);var t=Fi(Ni.current),n=Fe(t,e.type);t!==n&&(go(Di,e),go(Ni,n))}function Ui(e){Di.current===e&&(ho(Ni),ho(Di))}var $i={current:0};function qi(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||n.data===yn||n.data===wn))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.effectTag))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}function Hi(e,t){return{responder:e,props:t}}var Gi=K.ReactCurrentDispatcher,Wi=K.ReactCurrentBatchConfig,Zi=0,Vi=null,Yi=null,Ki=null,Qi=!1;function Xi(){throw Error(a(321))}function Ji(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!qr(e[n],t[n]))return!1;return!0}function ea(e,t,n,r,o,i){if(Zi=i,Vi=t,t.memoizedState=null,t.updateQueue=null,t.expirationTime=0,Gi.current=null===e||null===e.memoizedState?xa:Sa,e=n(r,o),t.expirationTime===Zi){i=0;do{if(t.expirationTime=0,!(25>i))throw Error(a(301));i+=1,Ki=Yi=null,t.updateQueue=null,Gi.current=Ta,e=n(r,o)}while(t.expirationTime===Zi)}if(Gi.current=Ea,t=null!==Yi&&null!==Yi.next,Zi=0,Ki=Yi=Vi=null,Qi=!1,t)throw Error(a(300));return e}function ta(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===Ki?Vi.memoizedState=Ki=e:Ki=Ki.next=e,Ki}function na(){if(null===Yi){var e=Vi.alternate;e=null!==e?e.memoizedState:null}else e=Yi.next;var t=null===Ki?Vi.memoizedState:Ki.next;if(null!==t)Ki=t,Yi=e;else{if(null===e)throw Error(a(310));e={memoizedState:(Yi=e).memoizedState,baseState:Yi.baseState,baseQueue:Yi.baseQueue,queue:Yi.queue,next:null},null===Ki?Vi.memoizedState=Ki=e:Ki=Ki.next=e}return Ki}function ra(e,t){return"function"==typeof t?t(e):t}function oa(e){var t=na(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=Yi,o=r.baseQueue,i=n.pending;if(null!==i){if(null!==o){var l=o.next;o.next=i.next,i.next=l}r.baseQueue=o=i,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var s=l=i=null,c=o;do{var u=c.expirationTime;if(u<Zi){var d={expirationTime:c.expirationTime,suspenseConfig:c.suspenseConfig,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null};null===s?(l=s=d,i=r):s=s.next=d,u>Vi.expirationTime&&(Vi.expirationTime=u,xs(u))}else null!==s&&(s=s.next={expirationTime:1073741823,suspenseConfig:c.suspenseConfig,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null}),Es(u,c.suspenseConfig),r=c.eagerReducer===e?c.eagerState:e(r,c.action);c=c.next}while(null!==c&&c!==o);null===s?i=r:s.next=l,qr(r,t.memoizedState)||(Oa=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function ia(e){var t=na(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{i=e(i,l.action),l=l.next}while(l!==o);qr(i,t.memoizedState)||(Oa=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function aa(e){var t=ta();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ra,lastRenderedState:e}).dispatch=ka.bind(null,Vi,e),[t.memoizedState,e]}function la(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Vi.updateQueue)?(t={lastEffect:null},Vi.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function sa(){return na().memoizedState}function ca(e,t,n,r){var o=ta();Vi.effectTag|=e,o.memoizedState=la(1|t,n,void 0,void 0===r?null:r)}function ua(e,t,n,r){var o=na();r=void 0===r?null:r;var i=void 0;if(null!==Yi){var a=Yi.memoizedState;if(i=a.destroy,null!==r&&Ji(r,a.deps))return void la(t,n,i,r)}Vi.effectTag|=e,o.memoizedState=la(1|t,n,i,r)}function da(e,t){return ca(516,4,e,t)}function fa(e,t){return ua(516,4,e,t)}function pa(e,t){return ua(4,2,e,t)}function ma(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function ha(e,t,n){return n=null!=n?n.concat([e]):null,ua(4,2,ma.bind(null,t,e),n)}function ga(){}function ba(e,t){return ta().memoizedState=[e,void 0===t?null:t],e}function va(e,t){var n=na();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Ji(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function ya(e,t){var n=na();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Ji(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function wa(e,t,n){var r=Zo();Yo(98>r?98:r,(function(){e(!0)})),Yo(97<r?97:r,(function(){var r=Wi.suspense;Wi.suspense=void 0===t?null:t;try{e(!1),n()}finally{Wi.suspense=r}}))}function ka(e,t,n){var r=cs(),o=yi.suspense;o={expirationTime:r=us(r,e,o),suspenseConfig:o,action:n,eagerReducer:null,eagerState:null,next:null};var i=t.pending;if(null===i?o.next=o:(o.next=i.next,i.next=o),t.pending=o,i=e.alternate,e===Vi||null!==i&&i===Vi)Qi=!0,o.expirationTime=Zi,Vi.expirationTime=Zi;else{if(0===e.expirationTime&&(null===i||0===i.expirationTime)&&null!==(i=t.lastRenderedReducer))try{var a=t.lastRenderedState,l=i(a,n);if(o.eagerReducer=i,o.eagerState=l,qr(l,a))return}catch(s){}ds(e,r)}}var Ea={readContext:ui,useCallback:Xi,useContext:Xi,useEffect:Xi,useImperativeHandle:Xi,useLayoutEffect:Xi,useMemo:Xi,useReducer:Xi,useRef:Xi,useState:Xi,useDebugValue:Xi,useResponder:Xi,useDeferredValue:Xi,useTransition:Xi},xa={readContext:ui,useCallback:ba,useContext:ui,useEffect:da,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,ca(4,2,ma.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ca(4,2,e,t)},useMemo:function(e,t){var n=ta();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=ta();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=ka.bind(null,Vi,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},ta().memoizedState=e},useState:aa,useDebugValue:ga,useResponder:Hi,useDeferredValue:function(e,t){var n=aa(e),r=n[0],o=n[1];return da((function(){var n=Wi.suspense;Wi.suspense=void 0===t?null:t;try{o(e)}finally{Wi.suspense=n}}),[e,t]),r},useTransition:function(e){var t=aa(!1),n=t[0];return t=t[1],[ba(wa.bind(null,t,e),[t,e]),n]}},Sa={readContext:ui,useCallback:va,useContext:ui,useEffect:fa,useImperativeHandle:ha,useLayoutEffect:pa,useMemo:ya,useReducer:oa,useRef:sa,useState:function(){return oa(ra)},useDebugValue:ga,useResponder:Hi,useDeferredValue:function(e,t){var n=oa(ra),r=n[0],o=n[1];return fa((function(){var n=Wi.suspense;Wi.suspense=void 0===t?null:t;try{o(e)}finally{Wi.suspense=n}}),[e,t]),r},useTransition:function(e){var t=oa(ra),n=t[0];return t=t[1],[va(wa.bind(null,t,e),[t,e]),n]}},Ta={readContext:ui,useCallback:va,useContext:ui,useEffect:fa,useImperativeHandle:ha,useLayoutEffect:pa,useMemo:ya,useReducer:ia,useRef:sa,useState:function(){return ia(ra)},useDebugValue:ga,useResponder:Hi,useDeferredValue:function(e,t){var n=ia(ra),r=n[0],o=n[1];return fa((function(){var n=Wi.suspense;Wi.suspense=void 0===t?null:t;try{o(e)}finally{Wi.suspense=n}}),[e,t]),r},useTransition:function(e){var t=ia(ra),n=t[0];return t=t[1],[va(wa.bind(null,t,e),[t,e]),n]}},_a=null,Ca=null,za=!1;function Aa(e,t){var n=Us(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.effectTag=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Pa(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function La(e){if(za){var t=Ca;if(t){var n=t;if(!Pa(e,t)){if(!(t=Cn(n.nextSibling))||!Pa(e,t))return e.effectTag=-1025&e.effectTag|2,za=!1,void(_a=e);Aa(_a,n)}_a=e,Ca=Cn(t.firstChild)}else e.effectTag=-1025&e.effectTag|2,za=!1,_a=e}}function Ia(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;_a=e}function Ra(e){if(e!==_a)return!1;if(!za)return Ia(e),za=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Sn(t,e.memoizedProps))for(t=Ca;t;)Aa(e,t),t=Cn(t.nextSibling);if(Ia(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if(n===vn){if(0===t){Ca=Cn(e.nextSibling);break e}t--}else n!==bn&&n!==wn&&n!==yn||t++}e=e.nextSibling}Ca=null}}else Ca=_a?Cn(e.stateNode.nextSibling):null;return!0}function Na(){Ca=_a=null,za=!1}var Da=K.ReactCurrentOwner,Oa=!1;function Fa(e,t,n,r){t.child=null===e?Ii(t,null,n,r):Li(t,e.child,n,r)}function Ma(e,t,n,r,o){n=n.render;var i=t.ref;return ci(t,o),r=ea(e,t,n,r,i,o),null===e||Oa?(t.effectTag|=1,Fa(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=o&&(e.expirationTime=0),tl(e,t,o))}function Ba(e,t,n,r,o,i){if(null===e){var a=n.type;return"function"!=typeof a||$s(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Hs(n.type,null,r,null,t.mode,i)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,ja(e,t,a,r,o,i))}return a=e.child,o<i&&(o=a.memoizedProps,(n=null!==(n=n.compare)?n:Gr)(o,r)&&e.ref===t.ref)?tl(e,t,i):(t.effectTag|=1,(e=qs(a,r)).ref=t.ref,e.return=t,t.child=e)}function ja(e,t,n,r,o,i){return null!==e&&Gr(e.memoizedProps,r)&&e.ref===t.ref&&(Oa=!1,o<i)?(t.expirationTime=e.expirationTime,tl(e,t,i)):$a(e,t,n,r,i)}function Ua(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.effectTag|=128)}function $a(e,t,n,r,o){var i=Eo(n)?wo:vo.current;return i=ko(t,i),ci(t,o),n=ea(e,t,n,r,i,o),null===e||Oa?(t.effectTag|=1,Fa(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=o&&(e.expirationTime=0),tl(e,t,o))}function qa(e,t,n,r,o){if(Eo(n)){var i=!0;_o(t)}else i=!1;if(ci(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),Si(t,n,r),_i(t,n,r,o),r=!0;else if(null===e){var a=t.stateNode,l=t.memoizedProps;a.props=l;var s=a.context,c=n.contextType;"object"==typeof c&&null!==c?c=ui(c):c=ko(t,c=Eo(n)?wo:vo.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof a.getSnapshotBeforeUpdate;d||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(l!==r||s!==c)&&Ti(t,a,r,c),di=!1;var f=t.memoizedState;a.state=f,bi(t,r,a,o),s=t.memoizedState,l!==r||f!==s||yo.current||di?("function"==typeof u&&(ki(t,n,u,r),s=t.memoizedState),(l=di||xi(t,n,l,r,f,s,c))?(d||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||("function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),"function"==typeof a.componentDidMount&&(t.effectTag|=4)):("function"==typeof a.componentDidMount&&(t.effectTag|=4),t.memoizedProps=r,t.memoizedState=s),a.props=r,a.state=s,a.context=c,r=l):("function"==typeof a.componentDidMount&&(t.effectTag|=4),r=!1)}else a=t.stateNode,pi(e,t),l=t.memoizedProps,a.props=t.type===t.elementType?l:ti(t.type,l),s=a.context,"object"==typeof(c=n.contextType)&&null!==c?c=ui(c):c=ko(t,c=Eo(n)?wo:vo.current),(d="function"==typeof(u=n.getDerivedStateFromProps)||"function"==typeof a.getSnapshotBeforeUpdate)||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(l!==r||s!==c)&&Ti(t,a,r,c),di=!1,s=t.memoizedState,a.state=s,bi(t,r,a,o),f=t.memoizedState,l!==r||s!==f||yo.current||di?("function"==typeof u&&(ki(t,n,u,r),f=t.memoizedState),(u=di||xi(t,n,l,r,s,f,c))?(d||"function"!=typeof a.UNSAFE_componentWillUpdate&&"function"!=typeof a.componentWillUpdate||("function"==typeof a.componentWillUpdate&&a.componentWillUpdate(r,f,c),"function"==typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(r,f,c)),"function"==typeof a.componentDidUpdate&&(t.effectTag|=4),"function"==typeof a.getSnapshotBeforeUpdate&&(t.effectTag|=256)):("function"!=typeof a.componentDidUpdate||l===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=4),"function"!=typeof a.getSnapshotBeforeUpdate||l===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=256),t.memoizedProps=r,t.memoizedState=f),a.props=r,a.state=f,a.context=c,r=u):("function"!=typeof a.componentDidUpdate||l===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=4),"function"!=typeof a.getSnapshotBeforeUpdate||l===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=256),r=!1);return Ha(e,t,n,r,i,o)}function Ha(e,t,n,r,o,i){Ua(e,t);var a=0!=(64&t.effectTag);if(!r&&!a)return o&&Co(t,n,!1),tl(e,t,i);r=t.stateNode,Da.current=t;var l=a&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.effectTag|=1,null!==e&&a?(t.child=Li(t,e.child,null,i),t.child=Li(t,null,l,i)):Fa(e,t,l,i),t.memoizedState=r.state,o&&Co(t,n,!0),t.child}function Ga(e){var t=e.stateNode;t.pendingContext?So(0,t.pendingContext,t.pendingContext!==t.context):t.context&&So(0,t.context,!1),Mi(e,t.containerInfo)}var Wa,Za,Va,Ya,Ka={dehydrated:null,retryTime:0};function Qa(e,t,n){var r,o=t.mode,i=t.pendingProps,a=$i.current,l=!1;if((r=0!=(64&t.effectTag))||(r=0!=(2&a)&&(null===e||null!==e.memoizedState)),r?(l=!0,t.effectTag&=-65):null!==e&&null===e.memoizedState||void 0===i.fallback||!0===i.unstable_avoidThisFallback||(a|=1),go($i,1&a),null===e){if(void 0!==i.fallback&&La(t),l){if(l=i.fallback,(i=Gs(null,o,0,null)).return=t,0==(2&t.mode))for(e=null!==t.memoizedState?t.child.child:t.child,i.child=e;null!==e;)e.return=i,e=e.sibling;return(n=Gs(l,o,n,null)).return=t,i.sibling=n,t.memoizedState=Ka,t.child=i,n}return o=i.children,t.memoizedState=null,t.child=Ii(t,null,o,n)}if(null!==e.memoizedState){if(o=(e=e.child).sibling,l){if(i=i.fallback,(n=qs(e,e.pendingProps)).return=t,0==(2&t.mode)&&(l=null!==t.memoizedState?t.child.child:t.child)!==e.child)for(n.child=l;null!==l;)l.return=n,l=l.sibling;return(o=qs(o,i)).return=t,n.sibling=o,n.childExpirationTime=0,t.memoizedState=Ka,t.child=n,o}return n=Li(t,e.child,i.children,n),t.memoizedState=null,t.child=n}if(e=e.child,l){if(l=i.fallback,(i=Gs(null,o,0,null)).return=t,i.child=e,null!==e&&(e.return=i),0==(2&t.mode))for(e=null!==t.memoizedState?t.child.child:t.child,i.child=e;null!==e;)e.return=i,e=e.sibling;return(n=Gs(l,o,n,null)).return=t,i.sibling=n,n.effectTag|=2,i.childExpirationTime=0,t.memoizedState=Ka,t.child=i,n}return t.memoizedState=null,t.child=Li(t,e,i.children,n)}function Xa(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.alternate;null!==n&&n.expirationTime<t&&(n.expirationTime=t),si(e.return,t)}function Ja(e,t,n,r,o,i){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailExpiration:0,tailMode:o,lastEffect:i}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailExpiration=0,a.tailMode=o,a.lastEffect=i)}function el(e,t,n){var r=t.pendingProps,o=r.revealOrder,i=r.tail;if(Fa(e,t,r.children,n),0!=(2&(r=$i.current)))r=1&r|2,t.effectTag|=64;else{if(null!==e&&0!=(64&e.effectTag))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Xa(e,n);else if(19===e.tag)Xa(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(go($i,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===qi(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),Ja(t,!1,o,n,i,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===qi(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}Ja(t,!0,n,null,i,t.lastEffect);break;case"together":Ja(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function tl(e,t,n){null!==e&&(t.dependencies=e.dependencies);var r=t.expirationTime;if(0!==r&&xs(r),t.childExpirationTime<n)return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=qs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=qs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function nl(e,t){switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function rl(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return Eo(t.type)&&xo(),null;case 3:return Bi(),ho(yo),ho(vo),(n=t.stateNode).pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),null!==e&&null!==e.child||!Ra(t)||(t.effectTag|=4),Za(t),null;case 5:Ui(t),n=Fi(Oi.current);var i=t.type;if(null!==e&&null!=t.stateNode)Va(e,t,i,r,n),e.ref!==t.ref&&(t.effectTag|=128);else{if(!r){if(null===t.stateNode)throw Error(a(166));return null}if(e=Fi(Ni.current),Ra(t)){r=t.stateNode,i=t.type;var l=t.memoizedProps;switch(r[Pn]=t,r[Ln]=l,i){case"iframe":case"object":case"embed":Vt("load",r);break;case"video":case"audio":for(e=0;e<Qe.length;e++)Vt(Qe[e],r);break;case"source":Vt("error",r);break;case"img":case"image":case"link":Vt("error",r),Vt("load",r);break;case"form":Vt("reset",r),Vt("submit",r);break;case"details":Vt("toggle",r);break;case"input":xe(r,l),Vt("invalid",r),cn(n,"onChange");break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Vt("invalid",r),cn(n,"onChange");break;case"textarea":Le(r,l),Vt("invalid",r),cn(n,"onChange")}for(var s in an(i,l),e=null,l)if(l.hasOwnProperty(s)){var c=l[s];"children"===s?"string"==typeof c?r.textContent!==c&&(e=["children",c]):"number"==typeof c&&r.textContent!==""+c&&(e=["children",""+c]):S.hasOwnProperty(s)&&null!=c&&cn(n,s)}switch(i){case"input":we(r),_e(r,l,!0);break;case"textarea":we(r),Re(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=un)}n=e,t.updateQueue=n,null!==n&&(t.effectTag|=4)}else{switch(s=9===n.nodeType?n:n.ownerDocument,e===sn&&(e=Oe(i)),e===sn?"script"===i?((e=s.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=s.createElement(i,{is:r.is}):(e=s.createElement(i),"select"===i&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,i),e[Pn]=t,e[Ln]=r,Wa(e,t,!1,!1),t.stateNode=e,s=ln(i,r),i){case"iframe":case"object":case"embed":Vt("load",e),c=r;break;case"video":case"audio":for(c=0;c<Qe.length;c++)Vt(Qe[c],e);c=r;break;case"source":Vt("error",e),c=r;break;case"img":case"image":case"link":Vt("error",e),Vt("load",e),c=r;break;case"form":Vt("reset",e),Vt("submit",e),c=r;break;case"details":Vt("toggle",e),c=r;break;case"input":xe(e,r),c=Ee(e,r),Vt("invalid",e),cn(n,"onChange");break;case"option":c=ze(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},c=o({},r,{value:void 0}),Vt("invalid",e),cn(n,"onChange");break;case"textarea":Le(e,r),c=Pe(e,r),Vt("invalid",e),cn(n,"onChange");break;default:c=r}an(i,c);var u=c;for(l in u)if(u.hasOwnProperty(l)){var d=u[l];"style"===l?rn(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&je(e,d):"children"===l?"string"==typeof d?("textarea"!==i||""!==d)&&Ue(e,d):"number"==typeof d&&Ue(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(S.hasOwnProperty(l)?null!=d&&cn(n,l):null!=d&&Q(e,l,d,s))}switch(i){case"input":we(e),_e(e,r,!1);break;case"textarea":we(e),Re(e);break;case"option":null!=r.value&&e.setAttribute("value",""+ve(r.value));break;case"select":e.multiple=!!r.multiple,null!=(n=r.value)?Ae(e,!!r.multiple,n,!1):null!=r.defaultValue&&Ae(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof c.onClick&&(e.onclick=un)}xn(i,r)&&(t.effectTag|=4)}null!==t.ref&&(t.effectTag|=128)}return null;case 6:if(e&&null!=t.stateNode)Ya(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));n=Fi(Oi.current),Fi(Ni.current),Ra(t)?(n=t.stateNode,r=t.memoizedProps,n[Pn]=t,n.nodeValue!==r&&(t.effectTag|=4)):((n=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Pn]=t,t.stateNode=n)}return null;case 13:return ho($i),r=t.memoizedState,0!=(64&t.effectTag)?(t.expirationTime=n,t):(n=null!==r,r=!1,null===e?void 0!==t.memoizedProps.fallback&&Ra(t):(r=null!==(i=e.memoizedState),n||null===i||null!==(i=e.child.sibling)&&(null!==(l=t.firstEffect)?(t.firstEffect=i,i.nextEffect=l):(t.firstEffect=t.lastEffect=i,i.nextEffect=null),i.effectTag=8)),n&&!r&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&$i.current)?ql===Rl&&(ql=Ol):(ql!==Rl&&ql!==Ol||(ql=Fl),0!==Vl&&null!==jl&&(Ks(jl,$l),Qs(jl,Vl)))),(n||r)&&(t.effectTag|=4),null);case 4:return Bi(),Za(t),null;case 10:return li(t),null;case 19:if(ho($i),null===(r=t.memoizedState))return null;if(i=0!=(64&t.effectTag),null===(l=r.rendering)){if(i)nl(r,!1);else if(ql!==Rl||null!==e&&0!=(64&e.effectTag))for(l=t.child;null!==l;){if(null!==(e=qi(l))){for(t.effectTag|=64,nl(r,!1),null!==(i=e.updateQueue)&&(t.updateQueue=i,t.effectTag|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=t.child;null!==r;)l=n,(i=r).effectTag&=2,i.nextEffect=null,i.firstEffect=null,i.lastEffect=null,null===(e=i.alternate)?(i.childExpirationTime=0,i.expirationTime=l,i.child=null,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null):(i.childExpirationTime=e.childExpirationTime,i.expirationTime=e.expirationTime,i.child=e.child,i.memoizedProps=e.memoizedProps,i.memoizedState=e.memoizedState,i.updateQueue=e.updateQueue,l=e.dependencies,i.dependencies=null===l?null:{expirationTime:l.expirationTime,firstContext:l.firstContext,responders:l.responders}),r=r.sibling;return go($i,1&$i.current|2),t.child}l=l.sibling}}else{if(!i)if(null!==(e=qi(l))){if(t.effectTag|=64,i=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.effectTag|=4),nl(r,!0),null===r.tail&&"hidden"===r.tailMode&&!l.alternate)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Wo()-r.renderingStartTime>r.tailExpiration&&1<n&&(t.effectTag|=64,i=!0,nl(r,!1),t.expirationTime=t.childExpirationTime=n-1);r.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=r.last)?n.sibling=l:t.child=l,r.last=l)}return null!==r.tail?(0===r.tailExpiration&&(r.tailExpiration=Wo()+500),n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Wo(),n.sibling=null,t=$i.current,go($i,i?1&t|2:1&t),n):null}throw Error(a(156,t.tag))}function ol(e){switch(e.tag){case 1:Eo(e.type)&&xo();var t=e.effectTag;return 4096&t?(e.effectTag=-4097&t|64,e):null;case 3:if(Bi(),ho(yo),ho(vo),0!=(64&(t=e.effectTag)))throw Error(a(285));return e.effectTag=-4097&t|64,e;case 5:return Ui(e),null;case 13:return ho($i),4096&(t=e.effectTag)?(e.effectTag=-4097&t|64,e):null;case 19:return ho($i),null;case 4:return Bi(),null;case 10:return li(e),null;default:return null}}function il(e,t){return{value:e,source:t,stack:be(t)}}Wa=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Za=function(){},Va=function(e,t,n,r,i){var a=e.memoizedProps;if(a!==r){var l,s,c=t.stateNode;switch(Fi(Ni.current),e=null,n){case"input":a=Ee(c,a),r=Ee(c,r),e=[];break;case"option":a=ze(c,a),r=ze(c,r),e=[];break;case"select":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),e=[];break;case"textarea":a=Pe(c,a),r=Pe(c,r),e=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(c.onclick=un)}for(l in an(n,r),n=null,a)if(!r.hasOwnProperty(l)&&a.hasOwnProperty(l)&&null!=a[l])if("style"===l)for(s in c=a[l])c.hasOwnProperty(s)&&(n||(n={}),n[s]="");else"dangerouslySetInnerHTML"!==l&&"children"!==l&&"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(S.hasOwnProperty(l)?e||(e=[]):(e=e||[]).push(l,null));for(l in r){var u=r[l];if(c=null!=a?a[l]:void 0,r.hasOwnProperty(l)&&u!==c&&(null!=u||null!=c))if("style"===l)if(c){for(s in c)!c.hasOwnProperty(s)||u&&u.hasOwnProperty(s)||(n||(n={}),n[s]="");for(s in u)u.hasOwnProperty(s)&&c[s]!==u[s]&&(n||(n={}),n[s]=u[s])}else n||(e||(e=[]),e.push(l,n)),n=u;else"dangerouslySetInnerHTML"===l?(u=u?u.__html:void 0,c=c?c.__html:void 0,null!=u&&c!==u&&(e=e||[]).push(l,u)):"children"===l?c===u||"string"!=typeof u&&"number"!=typeof u||(e=e||[]).push(l,""+u):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&(S.hasOwnProperty(l)?(null!=u&&cn(i,l),e||c===u||(e=[])):(e=e||[]).push(l,u))}n&&(e=e||[]).push("style",n),i=e,(t.updateQueue=i)&&(t.effectTag|=4)}},Ya=function(e,t,n,r){n!==r&&(t.effectTag|=4)};var al="function"==typeof WeakSet?WeakSet:Set;function ll(e,t){var n=t.source,r=t.stack;null===r&&null!==n&&(r=be(n)),null!==n&&ge(n.type),t=t.value,null!==e&&1===e.tag&&ge(e.type);try{console.error(t)}catch(o){setTimeout((function(){throw o}))}}function sl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){Ds(e,n)}else t.current=null}function cl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 3:case 5:case 6:case 4:case 17:return;case 1:if(256&t.effectTag&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:ti(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return}throw Error(a(163))}function ul(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.destroy;n.destroy=void 0,void 0!==r&&r()}n=n.next}while(n!==t)}}function dl(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function fl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:return void dl(3,n);case 1:if(e=n.stateNode,4&n.effectTag)if(null===t)e.componentDidMount();else{var r=n.elementType===n.type?t.memoizedProps:ti(n.type,t.memoizedProps);e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate)}return void(null!==(t=n.updateQueue)&&vi(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}vi(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.effectTag&&xn(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Ft(n)))))}throw Error(a(163))}function pl(e,t,n){switch("function"==typeof Bs&&Bs(t),t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var r=e.next;Yo(97<n?97:n,(function(){var e=r;do{var n=e.destroy;if(void 0!==n){var o=t;try{n()}catch(i){Ds(o,i)}}e=e.next}while(e!==r)}))}break;case 1:sl(t),"function"==typeof(n=t.stateNode).componentWillUnmount&&function(e,t){try{t.props=e.memoizedProps,t.state=e.memoizedState,t.componentWillUnmount()}catch(n){Ds(e,n)}}(t,n);break;case 5:sl(t);break;case 4:yl(e,t,n)}}function ml(e){var t=e.alternate;e.return=null,e.child=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.alternate=null,e.firstEffect=null,e.lastEffect=null,e.pendingProps=null,e.memoizedProps=null,e.stateNode=null,null!==t&&ml(t)}function hl(e){return 5===e.tag||3===e.tag||4===e.tag}function gl(e){e:{for(var t=e.return;null!==t;){if(hl(t)){var n=t;break e}t=t.return}throw Error(a(160))}switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(a(161))}16&n.effectTag&&(Ue(t,""),n.effectTag&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||hl(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.effectTag)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.effectTag)){n=n.stateNode;break e}}r?bl(e,n,t):vl(e,n,t)}function bl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=un));else if(4!==r&&null!==(e=e.child))for(bl(e,t,n),e=e.sibling;null!==e;)bl(e,t,n),e=e.sibling}function vl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(vl(e,t,n),e=e.sibling;null!==e;)vl(e,t,n),e=e.sibling}function yl(e,t,n){for(var r,o,i=t,l=!1;;){if(!l){l=i.return;e:for(;;){if(null===l)throw Error(a(160));switch(r=l.stateNode,l.tag){case 5:o=!1;break e;case 3:case 4:r=r.containerInfo,o=!0;break e}l=l.return}l=!0}if(5===i.tag||6===i.tag){e:for(var s=e,c=i,u=n,d=c;;)if(pl(s,d,u),null!==d.child&&4!==d.tag)d.child.return=d,d=d.child;else{if(d===c)break e;for(;null===d.sibling;){if(null===d.return||d.return===c)break e;d=d.return}d.sibling.return=d.return,d=d.sibling}o?(s=r,c=i.stateNode,8===s.nodeType?s.parentNode.removeChild(c):s.removeChild(c)):r.removeChild(i.stateNode)}else if(4===i.tag){if(null!==i.child){r=i.stateNode.containerInfo,o=!0,i.child.return=i,i=i.child;continue}}else if(pl(e,i,n),null!==i.child){i.child.return=i,i=i.child;continue}if(i===t)break;for(;null===i.sibling;){if(null===i.return||i.return===t)return;4===(i=i.return).tag&&(l=!1)}i.sibling.return=i.return,i=i.sibling}}function wl(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:return void ul(3,t);case 1:case 12:case 17:return;case 5:var n=t.stateNode;if(null!=n){var r=t.memoizedProps,o=null!==e?e.memoizedProps:r;e=t.type;var i=t.updateQueue;if(t.updateQueue=null,null!==i){for(n[Ln]=r,"input"===e&&"radio"===r.type&&null!=r.name&&Se(n,r),ln(e,o),t=ln(e,r),o=0;o<i.length;o+=2){var l=i[o],s=i[o+1];"style"===l?rn(n,s):"dangerouslySetInnerHTML"===l?je(n,s):"children"===l?Ue(n,s):Q(n,l,s,t)}switch(e){case"input":Te(n,r);break;case"textarea":Ie(n,r);break;case"select":t=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(e=r.value)?Ae(n,!!r.multiple,e,!1):t!==!!r.multiple&&(null!=r.defaultValue?Ae(n,!!r.multiple,r.defaultValue,!0):Ae(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(a(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((t=t.stateNode).hydrate&&(t.hydrate=!1,Ft(t.containerInfo)));case 13:if(n=t,null===t.memoizedState?r=!1:(r=!0,n=t.child,Kl=Wo()),null!==n)e:for(e=n;;){if(5===e.tag)i=e.stateNode,r?"function"==typeof(i=i.style).setProperty?i.setProperty("display","none","important"):i.display="none":(i=e.stateNode,o=null!=(o=e.memoizedProps.style)&&o.hasOwnProperty("display")?o.display:null,i.style.display=nn("display",o));else if(6===e.tag)e.stateNode.nodeValue=r?"":e.memoizedProps;else{if(13===e.tag&&null!==e.memoizedState&&null===e.memoizedState.dehydrated){(i=e.child.sibling).return=e,e=i;continue}if(null!==e.child){e.child.return=e,e=e.child;continue}}if(e===n)break;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}return void kl(t);case 19:return void kl(t)}throw Error(a(163))}function kl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new al),t.forEach((function(t){var r=Fs.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}var El="function"==typeof WeakMap?WeakMap:Map;function xl(e,t,n){(n=mi(n,null)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Jl||(Jl=!0,es=r),ll(e,t)},n}function Sl(e,t,n){(n=mi(n,null)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return ll(e,t),r(o)}}var i=e.stateNode;return null!==i&&"function"==typeof i.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===ts?ts=new Set([this]):ts.add(this),ll(e,t));var n=t.stack;this.componentDidCatch(t.value,{componentStack:null!==n?n:""})}),n}var Tl,_l=Math.ceil,Cl=K.ReactCurrentDispatcher,zl=K.ReactCurrentOwner,Al=0,Pl=8,Ll=16,Il=32,Rl=0,Nl=1,Dl=2,Ol=3,Fl=4,Ml=5,Bl=Al,jl=null,Ul=null,$l=0,ql=Rl,Hl=null,Gl=1073741823,Wl=1073741823,Zl=null,Vl=0,Yl=!1,Kl=0,Ql=500,Xl=null,Jl=!1,es=null,ts=null,ns=!1,rs=null,os=90,is=null,as=0,ls=null,ss=0;function cs(){return(Bl&(Ll|Il))!==Al?1073741821-(Wo()/10|0):0!==ss?ss:ss=1073741821-(Wo()/10|0)}function us(e,t,n){if(0==(2&(t=t.mode)))return 1073741823;var r=Zo();if(0==(4&t))return 99===r?1073741823:1073741822;if((Bl&Ll)!==Al)return $l;if(null!==n)e=ei(e,0|n.timeoutMs||5e3,250);else switch(r){case 99:e=1073741823;break;case 98:e=ei(e,150,100);break;case 97:case 96:e=ei(e,5e3,250);break;case 95:e=2;break;default:throw Error(a(326))}return null!==jl&&e===$l&&--e,e}function ds(e,t){if(50<as)throw as=0,ls=null,Error(a(185));if(null!==(e=fs(e,t))){var n=Zo();1073741823===t?(Bl&Pl)!==Al&&(Bl&(Ll|Il))===Al?gs(e):(ms(e),Bl===Al&&Xo()):ms(e),(4&Bl)===Al||98!==n&&99!==n||(null===is?is=new Map([[e,t]]):(void 0===(n=is.get(e))||n>t)&&is.set(e,t))}}function fs(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.alternate;null!==n&&n.expirationTime<t&&(n.expirationTime=t);var r=e.return,o=null;if(null===r&&3===e.tag)o=e.stateNode;else for(;null!==r;){if(n=r.alternate,r.childExpirationTime<t&&(r.childExpirationTime=t),null!==n&&n.childExpirationTime<t&&(n.childExpirationTime=t),null===r.return&&3===r.tag){o=r.stateNode;break}r=r.return}return null!==o&&(jl===o&&(xs(t),ql===Fl&&Ks(o,$l)),Qs(o,t)),o}function ps(e){var t=e.lastExpiredTime;if(0!==t)return t;if(!Ys(e,t=e.firstPendingTime))return t;var n=e.lastPingedTime;return 2>=(e=n>(e=e.nextKnownPendingLevel)?n:e)&&t!==e?0:e}function ms(e){if(0!==e.lastExpiredTime)e.callbackExpirationTime=1073741823,e.callbackPriority=99,e.callbackNode=Qo(gs.bind(null,e));else{var t=ps(e),n=e.callbackNode;if(0===t)null!==n&&(e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90);else{var r=cs();if(1073741823===t?r=99:1===t||2===t?r=95:r=0>=(r=10*(1073741821-t)-10*(1073741821-r))?99:250>=r?98:5250>=r?97:95,null!==n){var o=e.callbackPriority;if(e.callbackExpirationTime===t&&o>=r)return;n!==Bo&&Po(n)}e.callbackExpirationTime=t,e.callbackPriority=r,t=1073741823===t?Qo(gs.bind(null,e)):Ko(r,hs.bind(null,e),{timeout:10*(1073741821-t)-Wo()}),e.callbackNode=t}}}function hs(e,t){if(ss=0,t)return Xs(e,t=cs()),ms(e),null;var n=ps(e);if(0!==n){if(t=e.callbackNode,(Bl&(Ll|Il))!==Al)throw Error(a(327));if(Is(),e===jl&&n===$l||ys(e,n),null!==Ul){var r=Bl;Bl|=Ll;for(var o=ks();;)try{Ts();break}catch(s){ws(e,s)}if(ai(),Bl=r,Cl.current=o,ql===Nl)throw t=Hl,ys(e,n),Ks(e,n),ms(e),t;if(null===Ul)switch(o=e.finishedWork=e.current.alternate,e.finishedExpirationTime=n,r=ql,jl=null,r){case Rl:case Nl:throw Error(a(345));case Dl:Xs(e,2<n?2:n);break;case Ol:if(Ks(e,n),n===(r=e.lastSuspendedTime)&&(e.nextKnownPendingLevel=zs(o)),1073741823===Gl&&10<(o=Kl+Ql-Wo())){if(Yl){var i=e.lastPingedTime;if(0===i||i>=n){e.lastPingedTime=n,ys(e,n);break}}if(0!==(i=ps(e))&&i!==n)break;if(0!==r&&r!==n){e.lastPingedTime=r;break}e.timeoutHandle=Tn(As.bind(null,e),o);break}As(e);break;case Fl:if(Ks(e,n),n===(r=e.lastSuspendedTime)&&(e.nextKnownPendingLevel=zs(o)),Yl&&(0===(o=e.lastPingedTime)||o>=n)){e.lastPingedTime=n,ys(e,n);break}if(0!==(o=ps(e))&&o!==n)break;if(0!==r&&r!==n){e.lastPingedTime=r;break}if(1073741823!==Wl?r=10*(1073741821-Wl)-Wo():1073741823===Gl?r=0:(r=10*(1073741821-Gl)-5e3,0>(r=(o=Wo())-r)&&(r=0),(n=10*(1073741821-n)-o)<(r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*_l(r/1960))-r)&&(r=n)),10<r){e.timeoutHandle=Tn(As.bind(null,e),r);break}As(e);break;case Ml:if(1073741823!==Gl&&null!==Zl){i=Gl;var l=Zl;if(0>=(r=0|l.busyMinDurationMs)?r=0:(o=0|l.busyDelayMs,r=(i=Wo()-(10*(1073741821-i)-(0|l.timeoutMs||5e3)))<=o?0:o+r-i),10<r){Ks(e,n),e.timeoutHandle=Tn(As.bind(null,e),r);break}}As(e);break;default:throw Error(a(329))}if(ms(e),e.callbackNode===t)return hs.bind(null,e)}}return null}function gs(e){var t=e.lastExpiredTime;if(t=0!==t?t:1073741823,(Bl&(Ll|Il))!==Al)throw Error(a(327));if(Is(),e===jl&&t===$l||ys(e,t),null!==Ul){var n=Bl;Bl|=Ll;for(var r=ks();;)try{Ss();break}catch(o){ws(e,o)}if(ai(),Bl=n,Cl.current=r,ql===Nl)throw n=Hl,ys(e,t),Ks(e,t),ms(e),n;if(null!==Ul)throw Error(a(261));e.finishedWork=e.current.alternate,e.finishedExpirationTime=t,jl=null,As(e),ms(e)}return null}function bs(e,t){var n=Bl;Bl|=1;try{return e(t)}finally{(Bl=n)===Al&&Xo()}}function vs(e,t){var n=Bl;Bl&=-2,Bl|=Pl;try{return e(t)}finally{(Bl=n)===Al&&Xo()}}function ys(e,t){e.finishedWork=null,e.finishedExpirationTime=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,_n(n)),null!==Ul)for(n=Ul.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&xo();break;case 3:Bi(),ho(yo),ho(vo);break;case 5:Ui(r);break;case 4:Bi();break;case 13:case 19:ho($i);break;case 10:li(r)}n=n.return}jl=e,Ul=qs(e.current,null),$l=t,ql=Rl,Hl=null,Wl=Gl=1073741823,Zl=null,Vl=0,Yl=!1}function ws(e,t){for(;;){try{if(ai(),Gi.current=Ea,Qi)for(var n=Vi.memoizedState;null!==n;){var r=n.queue;null!==r&&(r.pending=null),n=n.next}if(Zi=0,Ki=Yi=Vi=null,Qi=!1,null===Ul||null===Ul.return)return ql=Nl,Hl=t,Ul=null;e:{var o=e,i=Ul.return,a=Ul,l=t;if(t=$l,a.effectTag|=2048,a.firstEffect=a.lastEffect=null,null!==l&&"object"==typeof l&&"function"==typeof l.then){var s=l;if(0==(2&a.mode)){var c=a.alternate;c?(a.updateQueue=c.updateQueue,a.memoizedState=c.memoizedState,a.expirationTime=c.expirationTime):(a.updateQueue=null,a.memoizedState=null)}var u=0!=(1&$i.current),d=i;do{var f;if(f=13===d.tag){var p=d.memoizedState;if(null!==p)f=null!==p.dehydrated;else{var m=d.memoizedProps;f=void 0!==m.fallback&&(!0!==m.unstable_avoidThisFallback||!u)}}if(f){var h=d.updateQueue;if(null===h){var g=new Set;g.add(s),d.updateQueue=g}else h.add(s);if(0==(2&d.mode)){if(d.effectTag|=64,a.effectTag&=-2981,1===a.tag)if(null===a.alternate)a.tag=17;else{var b=mi(1073741823,null);b.tag=2,hi(a,b)}a.expirationTime=1073741823;break e}l=void 0,a=t;var v=o.pingCache;if(null===v?(v=o.pingCache=new El,l=new Set,v.set(s,l)):void 0===(l=v.get(s))&&(l=new Set,v.set(s,l)),!l.has(a)){l.add(a);var y=Os.bind(null,o,s,a);s.then(y,y)}d.effectTag|=4096,d.expirationTime=t;break e}d=d.return}while(null!==d);l=Error((ge(a.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display."+be(a))}ql!==Ml&&(ql=Dl),l=il(l,a),d=i;do{switch(d.tag){case 3:s=l,d.effectTag|=4096,d.expirationTime=t,gi(d,xl(d,s,t));break e;case 1:s=l;var w=d.type,k=d.stateNode;if(0==(64&d.effectTag)&&("function"==typeof w.getDerivedStateFromError||null!==k&&"function"==typeof k.componentDidCatch&&(null===ts||!ts.has(k)))){d.effectTag|=4096,d.expirationTime=t,gi(d,Sl(d,s,t));break e}}d=d.return}while(null!==d)}Ul=Cs(Ul)}catch(E){t=E;continue}break}}function ks(){var e=Cl.current;return Cl.current=Ea,null===e?Ea:e}function Es(e,t){e<Gl&&2<e&&(Gl=e),null!==t&&e<Wl&&2<e&&(Wl=e,Zl=t)}function xs(e){e>Vl&&(Vl=e)}function Ss(){for(;null!==Ul;)Ul=_s(Ul)}function Ts(){for(;null!==Ul&&!jo();)Ul=_s(Ul)}function _s(e){var t=Tl(e.alternate,e,$l);return e.memoizedProps=e.pendingProps,null===t&&(t=Cs(e)),zl.current=null,t}function Cs(e){Ul=e;do{var t=Ul.alternate;if(e=Ul.return,0==(2048&Ul.effectTag)){if(t=rl(t,Ul,$l),1===$l||1!==Ul.childExpirationTime){for(var n=0,r=Ul.child;null!==r;){var o=r.expirationTime,i=r.childExpirationTime;o>n&&(n=o),i>n&&(n=i),r=r.sibling}Ul.childExpirationTime=n}if(null!==t)return t;null!==e&&0==(2048&e.effectTag)&&(null===e.firstEffect&&(e.firstEffect=Ul.firstEffect),null!==Ul.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=Ul.firstEffect),e.lastEffect=Ul.lastEffect),1<Ul.effectTag&&(null!==e.lastEffect?e.lastEffect.nextEffect=Ul:e.firstEffect=Ul,e.lastEffect=Ul))}else{if(null!==(t=ol(Ul)))return t.effectTag&=2047,t;null!==e&&(e.firstEffect=e.lastEffect=null,e.effectTag|=2048)}if(null!==(t=Ul.sibling))return t;Ul=e}while(null!==Ul);return ql===Rl&&(ql=Ml),null}function zs(e){var t=e.expirationTime;return t>(e=e.childExpirationTime)?t:e}function As(e){var t=Zo();return Yo(99,Ps.bind(null,e,t)),null}function Ps(e,t){do{Is()}while(null!==rs);if((Bl&(Ll|Il))!==Al)throw Error(a(327));var n=e.finishedWork,r=e.finishedExpirationTime;if(null===n)return null;if(e.finishedWork=null,e.finishedExpirationTime=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackExpirationTime=0,e.callbackPriority=90,e.nextKnownPendingLevel=0;var o=zs(n);if(e.firstPendingTime=o,r<=e.lastSuspendedTime?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:r<=e.firstSuspendedTime&&(e.firstSuspendedTime=r-1),r<=e.lastPingedTime&&(e.lastPingedTime=0),r<=e.lastExpiredTime&&(e.lastExpiredTime=0),e===jl&&(Ul=jl=null,$l=0),1<n.effectTag?null!==n.lastEffect?(n.lastEffect.nextEffect=n,o=n.firstEffect):o=n:o=n.firstEffect,null!==o){var i=Bl;Bl|=Il,zl.current=null,kn=Zt;var l=hn();if(gn(l)){if("selectionStart"in l)var s={start:l.selectionStart,end:l.selectionEnd};else e:{var c=(s=(s=l.ownerDocument)&&s.defaultView||window).getSelection&&s.getSelection();if(c&&0!==c.rangeCount){s=c.anchorNode;var u=c.anchorOffset,d=c.focusNode;c=c.focusOffset;try{s.nodeType,d.nodeType}catch(_){s=null;break e}var f=0,p=-1,m=-1,h=0,g=0,b=l,v=null;t:for(;;){for(var y;b!==s||0!==u&&3!==b.nodeType||(p=f+u),b!==d||0!==c&&3!==b.nodeType||(m=f+c),3===b.nodeType&&(f+=b.nodeValue.length),null!==(y=b.firstChild);)v=b,b=y;for(;;){if(b===l)break t;if(v===s&&++h===u&&(p=f),v===d&&++g===c&&(m=f),null!==(y=b.nextSibling))break;v=(b=v).parentNode}b=y}s=-1===p||-1===m?null:{start:p,end:m}}else s=null}s=s||{start:0,end:0}}else s=null;En={activeElementDetached:null,focusedElem:l,selectionRange:s},Zt=!1,Xl=o;do{try{Ls()}catch(_){if(null===Xl)throw Error(a(330));Ds(Xl,_),Xl=Xl.nextEffect}}while(null!==Xl);Xl=o;do{try{for(l=e,s=t;null!==Xl;){var w=Xl.effectTag;if(16&w&&Ue(Xl.stateNode,""),128&w){var k=Xl.alternate;if(null!==k){var E=k.ref;null!==E&&("function"==typeof E?E(null):E.current=null)}}switch(1038&w){case 2:gl(Xl),Xl.effectTag&=-3;break;case 6:gl(Xl),Xl.effectTag&=-3,wl(Xl.alternate,Xl);break;case 1024:Xl.effectTag&=-1025;break;case 1028:Xl.effectTag&=-1025,wl(Xl.alternate,Xl);break;case 4:wl(Xl.alternate,Xl);break;case 8:yl(l,u=Xl,s),ml(u)}Xl=Xl.nextEffect}}catch(_){if(null===Xl)throw Error(a(330));Ds(Xl,_),Xl=Xl.nextEffect}}while(null!==Xl);if(E=En,k=hn(),w=E.focusedElem,s=E.selectionRange,k!==w&&w&&w.ownerDocument&&mn(w.ownerDocument.documentElement,w)){null!==s&&gn(w)&&(k=s.start,void 0===(E=s.end)&&(E=k),"selectionStart"in w?(w.selectionStart=k,w.selectionEnd=Math.min(E,w.value.length)):(E=(k=w.ownerDocument||document)&&k.defaultView||window).getSelection&&(E=E.getSelection(),u=w.textContent.length,l=Math.min(s.start,u),s=void 0===s.end?l:Math.min(s.end,u),!E.extend&&l>s&&(u=s,s=l,l=u),u=pn(w,l),d=pn(w,s),u&&d&&(1!==E.rangeCount||E.anchorNode!==u.node||E.anchorOffset!==u.offset||E.focusNode!==d.node||E.focusOffset!==d.offset)&&((k=k.createRange()).setStart(u.node,u.offset),E.removeAllRanges(),l>s?(E.addRange(k),E.extend(d.node,d.offset)):(k.setEnd(d.node,d.offset),E.addRange(k))))),k=[];for(E=w;E=E.parentNode;)1===E.nodeType&&k.push({element:E,left:E.scrollLeft,top:E.scrollTop});for("function"==typeof w.focus&&w.focus(),w=0;w<k.length;w++)(E=k[w]).element.scrollLeft=E.left,E.element.scrollTop=E.top}Zt=!!kn,En=kn=null,e.current=n,Xl=o;do{try{for(w=e;null!==Xl;){var x=Xl.effectTag;if(36&x&&fl(w,Xl.alternate,Xl),128&x){k=void 0;var S=Xl.ref;if(null!==S){var T=Xl.stateNode;Xl.tag,k=T,"function"==typeof S?S(k):S.current=k}}Xl=Xl.nextEffect}}catch(_){if(null===Xl)throw Error(a(330));Ds(Xl,_),Xl=Xl.nextEffect}}while(null!==Xl);Xl=null,Uo(),Bl=i}else e.current=n;if(ns)ns=!1,rs=e,os=t;else for(Xl=o;null!==Xl;)t=Xl.nextEffect,Xl.nextEffect=null,Xl=t;if(0===(t=e.firstPendingTime)&&(ts=null),1073741823===t?e===ls?as++:(as=0,ls=e):as=0,"function"==typeof Ms&&Ms(n.stateNode,r),ms(e),Jl)throw Jl=!1,e=es,es=null,e;return(Bl&Pl)!==Al||Xo(),null}function Ls(){for(;null!==Xl;){var e=Xl.effectTag;0!=(256&e)&&cl(Xl.alternate,Xl),0==(512&e)||ns||(ns=!0,Ko(97,(function(){return Is(),null}))),Xl=Xl.nextEffect}}function Is(){if(90!==os){var e=97<os?97:os;return os=90,Yo(e,Rs)}}function Rs(){if(null===rs)return!1;var e=rs;if(rs=null,(Bl&(Ll|Il))!==Al)throw Error(a(331));var t=Bl;for(Bl|=Il,e=e.current.firstEffect;null!==e;){try{var n=e;if(0!=(512&n.effectTag))switch(n.tag){case 0:case 11:case 15:case 22:ul(5,n),dl(5,n)}}catch(r){if(null===e)throw Error(a(330));Ds(e,r)}n=e.nextEffect,e.nextEffect=null,e=n}return Bl=t,Xo(),!0}function Ns(e,t,n){hi(e,t=xl(e,t=il(n,t),1073741823)),null!==(e=fs(e,1073741823))&&ms(e)}function Ds(e,t){if(3===e.tag)Ns(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Ns(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===ts||!ts.has(r))){hi(n,e=Sl(n,e=il(t,e),1073741823)),null!==(n=fs(n,1073741823))&&ms(n);break}}n=n.return}}function Os(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),jl===e&&$l===n?ql===Fl||ql===Ol&&1073741823===Gl&&Wo()-Kl<Ql?ys(e,$l):Yl=!0:Ys(e,n)&&(0!==(t=e.lastPingedTime)&&t<n||(e.lastPingedTime=n,ms(e)))}function Fs(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(t=us(t=cs(),e,null)),null!==(e=fs(e,t))&&ms(e)}Tl=function(e,t,n){var r=t.expirationTime;if(null!==e){var o=t.pendingProps;if(e.memoizedProps!==o||yo.current)Oa=!0;else{if(r<n){switch(Oa=!1,t.tag){case 3:Ga(t),Na();break;case 5:if(ji(t),4&t.mode&&1!==n&&o.hidden)return t.expirationTime=t.childExpirationTime=1,null;break;case 1:Eo(t.type)&&_o(t);break;case 4:Mi(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value,o=t.type._context,go(ni,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!==(r=t.child.childExpirationTime)&&r>=n?Qa(e,t,n):(go($i,1&$i.current),null!==(t=tl(e,t,n))?t.sibling:null);go($i,1&$i.current);break;case 19:if(r=t.childExpirationTime>=n,0!=(64&e.effectTag)){if(r)return el(e,t,n);t.effectTag|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null),go($i,$i.current),!r)return null}return tl(e,t,n)}Oa=!1}}else Oa=!1;switch(t.expirationTime=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),e=t.pendingProps,o=ko(t,vo.current),ci(t,n),o=ea(null,t,r,e,o,n),t.effectTag|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,Eo(r)){var i=!0;_o(t)}else i=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,fi(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&ki(t,r,l,e),o.updater=Ei,t.stateNode=o,o._reactInternalFiber=t,_i(t,r,e,n),t=Ha(null,t,r,!0,i,n)}else t.tag=0,Fa(null,t,o,n),t=t.child;return t;case 16:e:{if(o=t.elementType,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),e=t.pendingProps,function(e){if(-1===e._status){e._status=0;var t=e._ctor;t=t(),e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}}(o),1!==o._status)throw o._result;switch(o=o._result,t.type=o,i=t.tag=function(e){if("function"==typeof e)return $s(e)?1:0;if(null!=e){if((e=e.$$typeof)===se)return 11;if(e===de)return 14}return 2}(o),e=ti(o,e),i){case 0:t=$a(null,t,o,e,n);break e;case 1:t=qa(null,t,o,e,n);break e;case 11:t=Ma(null,t,o,e,n);break e;case 14:t=Ba(null,t,o,ti(o.type,e),r,n);break e}throw Error(a(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,$a(e,t,r,o=t.elementType===r?o:ti(r,o),n);case 1:return r=t.type,o=t.pendingProps,qa(e,t,r,o=t.elementType===r?o:ti(r,o),n);case 3:if(Ga(t),r=t.updateQueue,null===e||null===r)throw Error(a(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,pi(e,t),bi(t,r,null,n),(r=t.memoizedState.element)===o)Na(),t=tl(e,t,n);else{if((o=t.stateNode.hydrate)&&(Ca=Cn(t.stateNode.containerInfo.firstChild),_a=t,o=za=!0),o)for(n=Ii(t,null,r,n),t.child=n;n;)n.effectTag=-3&n.effectTag|1024,n=n.sibling;else Fa(e,t,r,n),Na();t=t.child}return t;case 5:return ji(t),null===e&&La(t),r=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,l=o.children,Sn(r,o)?l=null:null!==i&&Sn(r,i)&&(t.effectTag|=16),Ua(e,t),4&t.mode&&1!==n&&o.hidden?(t.expirationTime=t.childExpirationTime=1,t=null):(Fa(e,t,l,n),t=t.child),t;case 6:return null===e&&La(t),null;case 13:return Qa(e,t,n);case 4:return Mi(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Li(t,null,r,n):Fa(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Ma(e,t,r,o=t.elementType===r?o:ti(r,o),n);case 7:return Fa(e,t,t.pendingProps,n),t.child;case 8:case 12:return Fa(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,l=t.memoizedProps,i=o.value;var s=t.type._context;if(go(ni,s._currentValue),s._currentValue=i,null!==l)if(s=l.value,0===(i=qr(s,i)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,i):1073741823))){if(l.children===o.children&&!yo.current){t=tl(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var c=s.dependencies;if(null!==c){l=s.child;for(var u=c.firstContext;null!==u;){if(u.context===r&&0!=(u.observedBits&i)){1===s.tag&&((u=mi(n,null)).tag=2,hi(s,u)),s.expirationTime<n&&(s.expirationTime=n),null!==(u=s.alternate)&&u.expirationTime<n&&(u.expirationTime=n),si(s.return,n),c.expirationTime<n&&(c.expirationTime=n);break}u=u.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Fa(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(i=t.pendingProps).children,ci(t,n),r=r(o=ui(o,i.unstable_observedBits)),t.effectTag|=1,Fa(e,t,r,n),t.child;case 14:return i=ti(o=t.type,t.pendingProps),Ba(e,t,o,i=ti(o.type,i),r,n);case 15:return ja(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ti(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),t.tag=1,Eo(r)?(e=!0,_o(t)):e=!1,ci(t,n),Si(t,r,o),_i(t,r,o,n),Ha(null,t,r,!0,e,n);case 19:return el(e,t,n)}throw Error(a(156,t.tag))};var Ms=null,Bs=null;function js(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Us(e,t,n,r){return new js(e,t,n,r)}function $s(e){return!(!(e=e.prototype)||!e.isReactComponent)}function qs(e,t){var n=e.alternate;return null===n?((n=Us(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.effectTag=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childExpirationTime=e.childExpirationTime,n.expirationTime=e.expirationTime,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{expirationTime:t.expirationTime,firstContext:t.firstContext,responders:t.responders},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Hs(e,t,n,r,o,i){var l=2;if(r=e,"function"==typeof e)$s(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case ne:return Gs(n.children,o,i,t);case le:l=8,o|=7;break;case re:l=8,o|=1;break;case oe:return(e=Us(12,n,t,8|o)).elementType=oe,e.type=oe,e.expirationTime=i,e;case ce:return(e=Us(13,n,t,o)).type=ce,e.elementType=ce,e.expirationTime=i,e;case ue:return(e=Us(19,n,t,o)).elementType=ue,e.expirationTime=i,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case ie:l=10;break e;case ae:l=9;break e;case se:l=11;break e;case de:l=14;break e;case fe:l=16,r=null;break e;case pe:l=22;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Us(l,n,t,o)).elementType=e,t.type=r,t.expirationTime=i,t}function Gs(e,t,n,r){return(e=Us(7,e,r,t)).expirationTime=n,e}function Ws(e,t,n){return(e=Us(6,e,null,t)).expirationTime=n,e}function Zs(e,t,n){return(t=Us(4,null!==e.children?e.children:[],e.key,t)).expirationTime=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Vs(e,t,n){this.tag=t,this.current=null,this.containerInfo=e,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function Ys(e,t){var n=e.firstSuspendedTime;return e=e.lastSuspendedTime,0!==n&&n>=t&&e<=t}function Ks(e,t){var n=e.firstSuspendedTime,r=e.lastSuspendedTime;n<t&&(e.firstSuspendedTime=t),(r>t||0===n)&&(e.lastSuspendedTime=t),t<=e.lastPingedTime&&(e.lastPingedTime=0),t<=e.lastExpiredTime&&(e.lastExpiredTime=0)}function Qs(e,t){t>e.firstPendingTime&&(e.firstPendingTime=t);var n=e.firstSuspendedTime;0!==n&&(t>=n?e.firstSuspendedTime=e.lastSuspendedTime=e.nextKnownPendingLevel=0:t>=e.lastSuspendedTime&&(e.lastSuspendedTime=t+1),t>e.nextKnownPendingLevel&&(e.nextKnownPendingLevel=t))}function Xs(e,t){var n=e.lastExpiredTime;(0===n||n>t)&&(e.lastExpiredTime=t)}function Js(e,t,n,r){var o=t.current,i=cs(),l=yi.suspense;i=us(i,o,l);e:if(n){t:{if(et(n=n._reactInternalFiber)!==n||1!==n.tag)throw Error(a(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(Eo(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(a(171))}if(1===n.tag){var c=n.type;if(Eo(c)){n=To(n,c,s);break e}}n=s}else n=bo;return null===t.context?t.context=n:t.pendingContext=n,(t=mi(i,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),hi(o,t),ds(o,i),i}function ec(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tc(e,t){null!==(e=e.memoizedState)&&null!==e.dehydrated&&e.retryTime<t&&(e.retryTime=t)}function nc(e,t){tc(e,t),(e=e.alternate)&&tc(e,t)}function rc(e,t,n){var r=new Vs(e,t,n=null!=n&&!0===n.hydrate),o=Us(3,null,null,2===t?7:1===t?3:0);r.current=o,o.stateNode=r,fi(o),e[In]=r.current,n&&0!==t&&function(e,t){var n=Je(t);Ct.forEach((function(e){ht(e,t,n)})),zt.forEach((function(e){ht(e,t,n)}))}(0,9===e.nodeType?e:e.ownerDocument),this._internalRoot=r}function oc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function ic(e,t,n,r,o){var i=n._reactRootContainer;if(i){var a=i._internalRoot;if("function"==typeof o){var l=o;o=function(){var e=ec(a);l.call(e)}}Js(t,a,e,o)}else{if(i=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new rc(e,0,t?{hydrate:!0}:void 0)}(n,r),a=i._internalRoot,"function"==typeof o){var s=o;o=function(){var e=ec(a);s.call(e)}}vs((function(){Js(t,a,e,o)}))}return ec(a)}function ac(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!oc(t))throw Error(a(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:te,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}rc.prototype.render=function(e){Js(e,this._internalRoot,null,null)},rc.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Js(null,e,null,(function(){t[In]=null}))},gt=function(e){if(13===e.tag){var t=ei(cs(),150,100);ds(e,t),nc(e,t)}},bt=function(e){13===e.tag&&(ds(e,3),nc(e,3))},vt=function(e){if(13===e.tag){var t=cs();ds(e,t=us(t,e,null)),nc(e,t)}},z=function(e,t,n){switch(t){case"input":if(Te(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=On(r);if(!o)throw Error(a(90));ke(r),Te(r,o)}}}break;case"textarea":Ie(e,n);break;case"select":null!=(t=n.value)&&Ae(e,!!n.multiple,t,!1)}},N=bs,D=function(e,t,n,r,o){var i=Bl;Bl|=4;try{return Yo(98,e.bind(null,t,n,r,o))}finally{(Bl=i)===Al&&Xo()}},O=function(){(Bl&(1|Ll|Il))===Al&&(function(){if(null!==is){var e=is;is=null,e.forEach((function(e,t){Xs(t,e),ms(t)})),Xo()}}(),Is())},F=function(e,t){var n=Bl;Bl|=2;try{return e(t)}finally{(Bl=n)===Al&&Xo()}};var lc={Events:[Nn,Dn,On,_,x,qn,function(e){it(e,$n)},I,R,Xt,st,Is,{current:!1}]};!function(e){var t=e.findFiberByHostInstance;(function(e){if("undefined"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)return!0;try{var n=t.inject(e);Ms=function(e){try{t.onCommitFiberRoot(n,e,void 0,64==(64&e.current.effectTag))}catch(r){}},Bs=function(e){try{t.onCommitFiberUnmount(n,e)}catch(r){}}}catch(r){}})(o({},e,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:K.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=rt(e))?null:e.stateNode},findFiberByHostInstance:function(e){return t?t(e):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null}))}({findFiberByHostInstance:Rn,bundleType:0,version:"16.14.0",rendererPackageName:"react-dom"}),t.hydrate=function(e,t,n){if(!oc(t))throw Error(a(200));return ic(null,e,t,!0,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function i(e,a){if(e===a)return!0;if(e&&a&&"object"==typeof e&&"object"==typeof a){if(e.constructor!==a.constructor)return!1;var l,s,c,u;if(Array.isArray(e)){if((l=e.length)!=a.length)return!1;for(s=l;0!=s--;)if(!i(e[s],a[s]))return!1;return!0}if(n&&e instanceof Map&&a instanceof Map){if(e.size!==a.size)return!1;for(u=e.entries();!(s=u.next()).done;)if(!a.has(s.value[0]))return!1;for(u=e.entries();!(s=u.next()).done;)if(!i(s.value[1],a.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&a instanceof Set){if(e.size!==a.size)return!1;for(u=e.entries();!(s=u.next()).done;)if(!a.has(s.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(a)){if((l=e.length)!=a.length)return!1;for(s=l;0!=s--;)if(e[s]!==a[s])return!1;return!0}if(e.constructor===RegExp)return e.source===a.source&&e.flags===a.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof a.valueOf)return e.valueOf()===a.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof a.toString)return e.toString()===a.toString();if((l=(c=Object.keys(e)).length)!==Object.keys(a).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(a,c[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==c[s]&&"__v"!==c[s]&&"__o"!==c[s]||!e.$$typeof)&&!i(e[c[s]],a[c[s]]))return!1;return!0}return e!=e&&a!=a}e.exports=function(e,t){try{return i(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>G,ql:()=>J});var r=n(7294),o=n(5697),i=n.n(o),a=n(9590),l=n.n(a),s=n(1143),c=n.n(s),u=n(6774),d=n.n(u);function f(){return f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},f.apply(this,arguments)}function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t.indexOf(n=i[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},E=Object.keys(k).reduce((function(e,t){return e[k[t]]=t,e}),{}),x=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},S=function(e){var t=x(e,g.TITLE),n=x(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=x(e,"defaultTitle");return t||r||void 0},T=function(e){return x(e,"onChangeClientState")||function(){}},_=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},C=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var i=r[o].toLowerCase();if(-1!==e.indexOf(i)&&n[i])return t.concat(n)}return t}),[])},z=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,i=Object.keys(e),a=0;a<i.length;a+=1){var l=i[a],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][c]&&(o[n][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var i=Object.keys(o),a=0;a<i.length;a+=1){var l=i[a],s=f({},r[l],o[l]);r[l]=s}return e}),[]).reverse()},A=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},P=function(e){return Array.isArray(e)?e.join(""):e},L=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},I=function(e,t){var n;return f({},e,((n={})[t]=void 0,n))},R=[g.NOSCRIPT,g.SCRIPT,g.STYLE],N=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},D=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},O=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[k[n]||n]=e[n],t}),t)},F=function(e,t){return t.map((function(t,n){var o,i=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=k[e]||e;"innerHTML"===n||"cssText"===n?i.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:i[n]=t[e]})),r.createElement(e,i)}))},M=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,i=O(n,o),[r.createElement(g.TITLE,i,e)];var e,n,o,i},toString:function(){return function(e,t,n,r){var o=D(n),i=P(t);return o?"<"+e+' data-rh="true" '+o+">"+N(i,r)+"</"+e+">":"<"+e+' data-rh="true">'+N(i,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return O(t)},toString:function(){return D(t)}};default:return{toComponent:function(){return F(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+N(r[t],n)+'"';return e?e+" "+o:o}),""),i=r.innerHTML||r.cssText||"",a=-1===R.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(a?"/>":">"+i+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,i=e.noscriptTags,a=e.styleTags,l=e.title,s=void 0===l?"":l,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=L(e.metaTags,y),i=L(t,b),a=L(n,v);return{priorityMethods:{toComponent:function(){return[].concat(F(g.META,o.priority),F(g.LINK,i.priority),F(g.SCRIPT,a.priority))},toString:function(){return M(g.META,o.priority,r)+" "+M(g.LINK,i.priority,r)+" "+M(g.SCRIPT,a.priority,r)}},metaTags:o.default,linkTags:i.default,scriptTags:a.default}}(e);p=m.priorityMethods,u=m.linkTags,d=m.metaTags,f=m.scriptTags}return{priority:p,base:M(g.BASE,t,r),bodyAttributes:M("bodyAttributes",n,r),htmlAttributes:M("htmlAttributes",o,r),link:M(g.LINK,u,r),meta:M(g.META,d,r),noscript:M(g.NOSCRIPT,i,r),script:M(g.SCRIPT,f,r),style:M(g.STYLE,a,r),title:M(g.TITLE,{title:s,titleAttributes:c},r)}},j=[],U=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?j:n.instances},add:function(e){(n.canUseDOM?j:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?j:n.instances).indexOf(e);(n.canUseDOM?j:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=r.createContext({}),q=i().shape({setHelmet:i().func,helmetInstances:i().shape({get:i().func,add:i().func,remove:i().func})}),H="undefined"!=typeof document,G=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new U(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);G.canUseDOM=H,G.propTypes={context:i().shape({helmet:i().shape()}),children:i().node.isRequired},G.defaultProps={context:{}},G.displayName="HelmetProvider";var W=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),i=[].slice.call(o),a=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),i.some((function(e,t){return n=t,r.isEqualNode(e)}))?i.splice(n,1):a.push(r)})),i.forEach((function(e){return e.parentNode.removeChild(e)})),a.forEach((function(e){return r.appendChild(e)})),{oldTags:i,newTags:a}},Z=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],i=[].concat(o),a=Object.keys(t),l=0;l<a.length;l+=1){var s=a[l],c=t[s]||"";n.getAttribute(s)!==c&&n.setAttribute(s,c),-1===o.indexOf(s)&&o.push(s);var u=i.indexOf(s);-1!==u&&i.splice(u,1)}for(var d=i.length-1;d>=0;d-=1)n.removeAttribute(i[d]);o.length===i.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==a.join(",")&&n.setAttribute("data-rh",a.join(","))}},V=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,i=e.metaTags,a=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;Z(g.BODY,e.bodyAttributes),Z(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=P(e)),Z(g.TITLE,t)}(u,d);var f={baseTag:W(g.BASE,n),linkTags:W(g.LINK,o),metaTags:W(g.META,i),noscriptTags:W(g.NOSCRIPT,a),scriptTags:W(g.SCRIPT,s),styleTags:W(g.STYLE,c)},p={},m={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(m[e]=f[e].oldTags)})),t&&t(),l(e,p,m)},Y=null,K=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,i=(e=n.helmetInstances.get().map((function(e){var t=f({},e.props);return delete t.context,t})),{baseTag:C(["href"],e),bodyAttributes:_("bodyAttributes",e),defer:x(e,"defer"),encode:x(e,"encodeSpecialCharacters"),htmlAttributes:_("htmlAttributes",e),linkTags:z(g.LINK,["rel","href"],e),metaTags:z(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:z(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:T(e),scriptTags:z(g.SCRIPT,["src","innerHTML"],e),styleTags:z(g.STYLE,["cssText"],e),title:S(e),titleAttributes:_("titleAttributes",e),prioritizeSeoTags:A(e,"prioritizeSeoTags")});G.canUseDOM?(t=i,Y&&cancelAnimationFrame(Y),t.defer?Y=requestAnimationFrame((function(){V(t,(function(){Y=null}))})):(V(t),Y=null)):B&&(o=B(i)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);K.propTypes={context:q.isRequired},K.displayName="HelmetDispatcher";var Q=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(I(this.props,"helmetData"),I(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,i=e.newChildProps,a=e.nestedChildren;switch(r.type){case g.TITLE:return f({},o,((t={})[r.type]=a,t.titleAttributes=f({},i),t));case g.BODY:return f({},o,{bodyAttributes:f({},i)});case g.HTML:return f({},o,{htmlAttributes:f({},i)});default:return f({},o,((n={})[r.type]=f({},i),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,i=r.children,a=h(r,Q),l=Object.keys(a).reduce((function(e,t){return e[E[t]||t]=a[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,i),s){case g.FRAGMENT:t=n.mapChildrenToProps(i,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:l,nestedChildren:i});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:i})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,X),o=f({},n),i=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!i||i instanceof U||(i=new U(i.context,i.instances)),i?r.createElement(K,f({},o,{context:i.value,helmetData:void 0})):r.createElement($.Consumer,null,(function(e){return r.createElement(K,f({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:i().object,bodyAttributes:i().object,children:i().oneOfType([i().arrayOf(i().node),i().node]),defaultTitle:i().string,defer:i().bool,encodeSpecialCharacters:i().bool,htmlAttributes:i().object,link:i().arrayOf(i().object),meta:i().arrayOf(i().object),noscript:i().arrayOf(i().object),onChangeClientState:i().func,script:i().arrayOf(i().object),style:i().arrayOf(i().object),title:i().string,titleAttributes:i().object,titleTemplate:i().string,prioritizeSeoTags:i().bool,helmetData:i().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,i=n?Symbol.for("react.fragment"):60107,a=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case i:case l:case a:case p:return e;default:switch(e=e&&e.$$typeof){case c:case f:case g:case h:case s:return e;default:return t}}case o:return t}}}function E(e){return k(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=i,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=l,t.StrictMode=a,t.Suspense=p,t.isAsyncMode=function(e){return E(e)||k(e)===u},t.isConcurrentMode=E,t.isContextConsumer=function(e){return k(e)===c},t.isContextProvider=function(e){return k(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===f},t.isFragment=function(e){return k(e)===i},t.isLazy=function(e){return k(e)===g},t.isMemo=function(e){return k(e)===h},t.isPortal=function(e){return k(e)===o},t.isProfiler=function(e){return k(e)===l},t.isStrictMode=function(e){return k(e)===a},t.isSuspense=function(e){return k(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===i||e===d||e===l||e===a||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===s||e.$$typeof===c||e.$$typeof===f||e.$$typeof===v||e.$$typeof===y||e.$$typeof===w||e.$$typeof===b)},t.typeOf=k},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(){return a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}var l=n(7294),s=n(5697),c=[],u=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=a({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return c.push(g),"function"==typeof m.webpack&&u.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),f=d=function(t){function n(n){var r;return i(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};var a=n.prototype;return a.UNSAFE_componentWillMount=function(){this._loadModule()},a.componentDidMount=function(){this._mounted=!0},a._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},a.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},a._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},a.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),i(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(f,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}i(g,"propTypes",{report:s.func.isRequired}),i(g,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){b(c).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){b(u).then(e,e)}))},e.exports=h},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>a});var r=n(6550),o=n(3117),i=n(7294);function a(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&a(e.routes,t,n)),o})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?i.createElement(r.rs,n,e.map((function(e,n){return i.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):i.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>y,VK:()=>u,rU:()=>g});var r=n(6550),o=n(144),i=n(7294),a=n(9318),l=(n(5697),n(3117)),s=n(102),c=n(2177),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,a.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return i.createElement(r.F0,{history:this.history,children:this.props.children})},t}(i.Component);i.Component;var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,a.ob)(e,null,null,t):e},p=function(e){return e},m=i.forwardRef;void 0===m&&(m=p);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,a=(0,s.Z)(e,["innerRef","navigate","onClick"]),c=a.target,u=(0,l.Z)({},a,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=p!==m&&t||n,i.createElement("a",u)}));var g=m((function(e,t){var n=e.component,o=void 0===n?h:n,u=e.replace,g=e.to,b=e.innerRef,v=(0,s.Z)(e,["component","replace","to","innerRef"]);return i.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=e.history,r=f(d(g,e.location),e.location),s=r?n.createHref(r):"",h=(0,l.Z)({},v,{href:s,navigate:function(){var t=d(g,e.location),r=(0,a.Ep)(e.location)===(0,a.Ep)(f(t));(u||r?n.replace:n.push)(t)}});return p!==m?h.ref=t||b:h.innerRef=b,i.createElement(o,h)}))})),b=function(e){return e},v=i.forwardRef;void 0===v&&(v=b);var y=v((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,a=e.activeClassName,u=void 0===a?"active":a,p=e.activeStyle,m=e.className,h=e.exact,y=e.isActive,w=e.location,k=e.sensitive,E=e.strict,x=e.style,S=e.to,T=e.innerRef,_=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return i.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=w||e.location,a=f(d(S,n),n),s=a.pathname,C=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),z=C?(0,r.LX)(n.pathname,{path:C,exact:h,sensitive:k,strict:E}):null,A=!!(y?y(z,n):z),P="function"==typeof m?m(A):m,L="function"==typeof x?x(A):x;A&&(P=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(P,u),L=(0,l.Z)({},L,p));var I=(0,l.Z)({"aria-current":A&&o||null,className:P,style:L,to:a},_);return b!==v?I.ref=t||T:I.innerRef=T,i.createElement(g,I)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>S,F0:()=>y,LX:()=>x,TH:()=>R,k6:()=>I,rs:()=>P,s6:()=>v});var r=n(144),o=n(7294),i=n(5697),a=n.n(i),l=n(9318),s=n(2177),c=n(3117),u=n(9658),d=n.n(u),f=(n(9864),n(102)),p=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=o.createContext||function(e,t){var n,i,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n,r,o=arguments.length,i=new Array(o),a=0;a<o;a++)i[a]=arguments[a];return(t=e.call.apply(e,[this].concat(i))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((i=r)===(a=o)?0!==i||1/i==1/a:i!=i&&a!=a)?n=0:(n="function"==typeof t?t(r,o):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var i,a},o.render=function(){return this.props.children},n}(o.Component);s.childContextTypes=((n={})[l]=a().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?p:t},o.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},o.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},o.getValue=function(){return this.context[l]?this.context[l].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return c.contextTypes=((i={})[l]=a().object,i),{Provider:s,Consumer:c}},g=function(e){var t=h();return t.displayName=e,t},b=g("Router-History"),v=g("Router"),y=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(v.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},k=1e4,E=0;function x(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,i=void 0!==o&&o,a=n.strict,l=void 0!==a&&a,s=n.sensitive,c=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],i={regexp:d()(e,o,t),keys:o};return E<k&&(r[e]=i,E++),i}(n,{end:i,strict:l,sensitive:c}),o=r.regexp,a=r.keys,s=o.exec(e);if(!s)return null;var u=s[0],f=s.slice(1),p=e===u;return i&&!p?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:p,params:a.reduce((function(e,t,n){return e[t.name]=f[n],e}),{})}}),null)}var S=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?x(n.pathname,e.props):t.match,i=(0,c.Z)({},t,{location:n,match:r}),a=e.props,l=a.children,u=a.component,d=a.render;return Array.isArray(l)&&function(e){return 0===o.Children.count(e)}(l)&&(l=null),o.createElement(v.Provider,{value:i},i.match?l?"function"==typeof l?l(i):l:u?o.createElement(u,i):d?d(i):null:"function"==typeof l?l(i):null)}))},t}(o.Component);function T(e){return"/"===e.charAt(0)?e:"/"+e}function _(e,t){if(!e)return t;var n=T(e);return 0!==t.pathname.indexOf(n)?t:(0,c.Z)({},t,{pathname:t.pathname.substr(n.length)})}function C(e){return"string"==typeof e?e:(0,l.Ep)(e)}function z(e){return function(){(0,s.Z)(!1)}}function A(){}o.Component;var P=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n,r,i=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var a=e.props.path||e.props.from;r=a?x(i.pathname,(0,c.Z)({},e.props,{path:a})):t.match}})),r?o.cloneElement(n,{location:i,computedMatch:r}):null}))},t}(o.Component);var L=o.useContext;function I(){return L(b)}function R(){return L(v).location}},9658:(e,t,n)=>{var r=n(5826);e.exports=p,e.exports.parse=i,e.exports.compile=function(e,t){return l(i(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function i(e,t){for(var n,r=[],i=0,a=0,l="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(a,p),a=p+d.length,f)l+=f[1];else{var m=e[a],h=n[2],g=n[3],b=n[4],v=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=h&&null!=m&&m!==h,E="+"===y||"*"===y,x="?"===y||"*"===y,S=n[2]||u,T=b||v;r.push({name:g||i++,prefix:h||"",delimiter:S,optional:x,repeat:E,partial:k,asterisk:!!w,pattern:T?c(T):w?".*":"[^"+s(S)+"]+?"})}}return a<e.length&&(l+=e.substr(a)),l&&r.push(l),r}function a(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var i="",l=t||{},s=(o||{}).pretty?a:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,f=l[u.name];if(null==f){if(u.optional){u.partial&&(i+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(r(f)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[c].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");i+=(0===p?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[c].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');i+=u.prefix+d}}else i+=u}return i}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,i=!1!==n.end,a="",l=0;l<e.length;l++){var c=e[l];if("string"==typeof c)a+=s(c);else{var f=s(c.prefix),p="(?:"+c.pattern+")";t.push(c),c.repeat&&(p+="(?:"+f+p+")*"),a+=p=c.optional?c.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var m=s(n.delimiter||"/"),h=a.slice(-m.length)===m;return o||(a=(h?a.slice(0,-m.length):a)+"(?:"+m+"(?=$))?"),a+=i?"$":o&&h?"":"(?="+m+"|$)",u(new RegExp("^"+a,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(p(e[o],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(i(e,n),t,n)}(e,t,n)}},2408:(e,t,n)=>{"use strict";var r=n(7418),o="function"==typeof Symbol&&Symbol.for,i=o?Symbol.for("react.element"):60103,a=o?Symbol.for("react.portal"):60106,l=o?Symbol.for("react.fragment"):60107,s=o?Symbol.for("react.strict_mode"):60108,c=o?Symbol.for("react.profiler"):60114,u=o?Symbol.for("react.provider"):60109,d=o?Symbol.for("react.context"):60110,f=o?Symbol.for("react.forward_ref"):60112,p=o?Symbol.for("react.suspense"):60113,m=o?Symbol.for("react.memo"):60115,h=o?Symbol.for("react.lazy"):60116,g="function"==typeof Symbol&&Symbol.iterator;function b(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var v={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},y={};function w(e,t,n){this.props=e,this.context=t,this.refs=y,this.updater=n||v}function k(){}function E(e,t,n){this.props=e,this.context=t,this.refs=y,this.updater=n||v}w.prototype.isReactComponent={},w.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(b(85));this.updater.enqueueSetState(this,e,t,"setState")},w.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},k.prototype=w.prototype;var x=E.prototype=new k;x.constructor=E,r(x,w.prototype),x.isPureReactComponent=!0;var S={current:null},T=Object.prototype.hasOwnProperty,_={key:!0,ref:!0,__self:!0,__source:!0};function C(e,t,n){var r,o={},a=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(a=""+t.key),t)T.call(t,r)&&!_.hasOwnProperty(r)&&(o[r]=t[r]);var s=arguments.length-2;if(1===s)o.children=n;else if(1<s){for(var c=Array(s),u=0;u<s;u++)c[u]=arguments[u+2];o.children=c}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===o[r]&&(o[r]=s[r]);return{$$typeof:i,type:e,key:a,ref:l,props:o,_owner:S.current}}function z(e){return"object"==typeof e&&null!==e&&e.$$typeof===i}var A=/\/+/g,P=[];function L(e,t,n,r){if(P.length){var o=P.pop();return o.result=e,o.keyPrefix=t,o.func=n,o.context=r,o.count=0,o}return{result:e,keyPrefix:t,func:n,context:r,count:0}}function I(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>P.length&&P.push(e)}function R(e,t,n,r){var o=typeof e;"undefined"!==o&&"boolean"!==o||(e=null);var l=!1;if(null===e)l=!0;else switch(o){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case i:case a:l=!0}}if(l)return n(r,e,""===t?"."+D(e,0):t),1;if(l=0,t=""===t?".":t+":",Array.isArray(e))for(var s=0;s<e.length;s++){var c=t+D(o=e[s],s);l+=R(o,c,n,r)}else if(null===e||"object"!=typeof e?c=null:c="function"==typeof(c=g&&e[g]||e["@@iterator"])?c:null,"function"==typeof c)for(e=c.call(e),s=0;!(o=e.next()).done;)l+=R(o=o.value,c=t+D(o,s++),n,r);else if("object"===o)throw n=""+e,Error(b(31,"[object Object]"===n?"object with keys {"+Object.keys(e).join(", ")+"}":n,""));return l}function N(e,t,n){return null==e?0:R(e,"",t,n)}function D(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,(function(e){return t[e]}))}(e.key):t.toString(36)}function O(e,t){e.func.call(e.context,t,e.count++)}function F(e,t,n){var r=e.result,o=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?M(e,r,n,(function(e){return e})):null!=e&&(z(e)&&(e=function(e,t){return{$$typeof:i,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(e,o+(!e.key||t&&t.key===e.key?"":(""+e.key).replace(A,"$&/")+"/")+n)),r.push(e))}function M(e,t,n,r,o){var i="";null!=n&&(i=(""+n).replace(A,"$&/")+"/"),N(e,F,t=L(t,i,r,o)),I(t)}var B={current:null};function j(){var e=B.current;if(null===e)throw Error(b(321));return e}var U={ReactCurrentDispatcher:B,ReactCurrentBatchConfig:{suspense:null},ReactCurrentOwner:S,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:function(e,t,n){if(null==e)return e;var r=[];return M(e,r,null,t,n),r},forEach:function(e,t,n){if(null==e)return e;N(e,O,t=L(null,null,t,n)),I(t)},count:function(e){return N(e,(function(){return null}),null)},toArray:function(e){var t=[];return M(e,t,null,(function(e){return e})),t},only:function(e){if(!z(e))throw Error(b(143));return e}},t.Component=w,t.Fragment=l,t.Profiler=c,t.PureComponent=E,t.StrictMode=s,t.Suspense=p,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=U,t.cloneElement=function(e,t,n){if(null==e)throw Error(b(267,e));var o=r({},e.props),a=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=S.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(u in t)T.call(t,u)&&!_.hasOwnProperty(u)&&(o[u]=void 0===t[u]&&void 0!==c?c[u]:t[u])}var u=arguments.length-2;if(1===u)o.children=n;else if(1<u){c=Array(u);for(var d=0;d<u;d++)c[d]=arguments[d+2];o.children=c}return{$$typeof:i,type:e.type,key:a,ref:l,props:o,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:d,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:u,_context:e},e.Consumer=e},t.createElement=C,t.createFactory=function(e){var t=C.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:f,render:e}},t.isValidElement=z,t.lazy=function(e){return{$$typeof:h,_ctor:e,_status:-1,_result:null}},t.memo=function(e,t){return{$$typeof:m,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return j().useCallback(e,t)},t.useContext=function(e,t){return j().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return j().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return j().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return j().useLayoutEffect(e,t)},t.useMemo=function(e,t){return j().useMemo(e,t)},t.useReducer=function(e,t,n){return j().useReducer(e,t,n)},t.useRef=function(e){return j().useRef(e)},t.useState=function(e){return j().useState(e)},t.version="16.14.0"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,o,i,a;if("undefined"==typeof window||"function"!=typeof MessageChannel){var l=null,s=null,c=function(){if(null!==l)try{var e=t.unstable_now();l(!0,e),l=null}catch(n){throw setTimeout(c,0),n}},u=Date.now();t.unstable_now=function(){return Date.now()-u},n=function(e){null!==l?setTimeout(n,0,e):(l=e,setTimeout(c,0))},r=function(e,t){s=setTimeout(e,t)},o=function(){clearTimeout(s)},i=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var d=window.performance,f=window.Date,p=window.setTimeout,m=window.clearTimeout;if("undefined"!=typeof console){var h=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),"function"!=typeof h&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")}if("object"==typeof d&&"function"==typeof d.now)t.unstable_now=function(){return d.now()};else{var g=f.now();t.unstable_now=function(){return f.now()-g}}var b=!1,v=null,y=-1,w=5,k=0;i=function(){return t.unstable_now()>=k},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported"):w=0<e?Math.floor(1e3/e):5};var E=new MessageChannel,x=E.port2;E.port1.onmessage=function(){if(null!==v){var e=t.unstable_now();k=e+w;try{v(!0,e)?x.postMessage(null):(b=!1,v=null)}catch(n){throw x.postMessage(null),n}}else b=!1},n=function(e){v=e,b||(b=!0,x.postMessage(null))},r=function(e,n){y=p((function(){e(t.unstable_now())}),n)},o=function(){m(y),y=-1}}function S(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<C(o,t)))break e;e[r]=t,e[n]=o,n=r}}function T(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var i=2*(r+1)-1,a=e[i],l=i+1,s=e[l];if(void 0!==a&&0>C(a,n))void 0!==s&&0>C(s,a)?(e[r]=s,e[l]=n,r=l):(e[r]=a,e[i]=n,r=i);else{if(!(void 0!==s&&0>C(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function C(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var z=[],A=[],P=1,L=null,I=3,R=!1,N=!1,D=!1;function O(e){for(var t=T(A);null!==t;){if(null===t.callback)_(A);else{if(!(t.startTime<=e))break;_(A),t.sortIndex=t.expirationTime,S(z,t)}t=T(A)}}function F(e){if(D=!1,O(e),!N)if(null!==T(z))N=!0,n(M);else{var t=T(A);null!==t&&r(F,t.startTime-e)}}function M(e,n){N=!1,D&&(D=!1,o()),R=!0;var a=I;try{for(O(n),L=T(z);null!==L&&(!(L.expirationTime>n)||e&&!i());){var l=L.callback;if(null!==l){L.callback=null,I=L.priorityLevel;var s=l(L.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?L.callback=s:L===T(z)&&_(z),O(n)}else _(z);L=T(z)}if(null!==L)var c=!0;else{var u=T(A);null!==u&&r(F,u.startTime-n),c=!1}return c}finally{L=null,I=a,R=!1}}function B(e){switch(e){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var j=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||R||(N=!0,n(M))},t.unstable_getCurrentPriorityLevel=function(){return I},t.unstable_getFirstCallbackNode=function(){return T(z)},t.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=j,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},t.unstable_scheduleCallback=function(e,i,a){var l=t.unstable_now();if("object"==typeof a&&null!==a){var s=a.delay;s="number"==typeof s&&0<s?l+s:l,a="number"==typeof a.timeout?a.timeout:B(e)}else a=B(e),s=l;return e={id:P++,callback:i,priorityLevel:e,startTime:s,expirationTime:a=s+a,sortIndex:-1},s>l?(e.sortIndex=s,S(A,e),null===T(z)&&e===T(A)&&(D?o():D=!0,r(F,s-l))):(e.sortIndex=a,S(z,e),N||R||(N=!0,n(M))),e},t.unstable_shouldYield=function(){var e=t.unstable_now();O(e);var n=T(z);return n!==L&&null!==L&&null!==n&&null!==n.callback&&n.startTime<=e&&n.expirationTime<L.expirationTime||i()},t.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var i=Object.keys(e),a=Object.keys(t);if(i.length!==a.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<i.length;s++){var c=i[s];if(!l(c))return!1;var u=e[c],d=t[c];if(!1===(o=n?n.call(r,u,d,c):void 0)||void 0===o&&u!==d)return!1}return!0}},2177:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r="Invariant failed";const o=function(e,t){if(!e)throw new Error(r)}},3250:(e,t,n)=>{"use strict";var r=n(7294);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},i=r.useState,a=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(r){return!0}}var u="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=i({inst:{value:n,getSnapshot:t}}),o=r[0].inst,u=r[1];return l((function(){o.value=n,o.getSnapshot=t,c(o)&&u({inst:o})}),[e,n,t]),a((function(){return c(o)&&u({inst:o}),e((function(){c(o)&&u({inst:o})}))}),[e]),s(n),n};void 0!==r.useSyncExternalStore&&r.useSyncExternalStore},1688:(e,t,n)=>{"use strict";n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Franzininho",tagline:"O projeto Franzininho tem o objetivo de incentivar as pessoas na tecnologia atrav\xe9s da cultura maker e do fa\xe7a voc\xea mesmo.",url:"https://franzininho.github.io",baseUrl:"/en/",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",favicon:"img/favicon.png",organizationName:"Franzininho",projectName:"docs-franzininho-site",themeConfig:{image:"img/logo.svg",metadata:[{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"630"}],navbar:{title:"Franzininho",logo:{alt:"Logo do site",src:"img/logo.svg",href:"https://franzininho.com.br/"},items:[{to:"/docs",activeBasePath:"/docs",label:"Documenta\xe7\xe3o",position:"left"},{href:"https://franzininho.com.br/",label:"Site",position:"right"},{href:"https://franzininho.com.br/blog/",label:"Blog",position:"right"},{href:"https://franzininho.com.br/#contato",label:"Contato",position:"right"},{type:"localeDropdown",position:"right",dropdownItemsBefore:[],dropdownItemsAfter:[]}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Documenta\xe7\xe3o",items:[{label:"Franzininho DIY",to:"docs/franzininho-diy/sobre"},{label:"Franzininho WiFi",to:"docs/franzininho-wifi/franzininho-wifi"}]},{title:"Comunidade",items:[{label:"Discord",href:"https://discord.gg/H5kENmWGaz"},{label:"Grupo no Facebook",href:"https://www.facebook.com/groups/299236843857849/"}]},{title:"Redes Sociais",items:[{label:"Instagram",href:"https://www.instagram.com/franzininho/"},{label:"Facebook",href:"https://facebook.com/franzininho/"},{label:"Youtube",href:"https://www.youtube.com/channel/UCxyabOm4teS0kx0EgJW78_g"}]},{title:"Mais",items:[{label:"Site",href:"https://franzininho.com.br/"},{label:"GitHub",href:"https://github.com/franzininho"},{label:"Contato",href:"mailto:contato@franzininho.com.br"}]}],copyright:"Copyright \xa9 2021 Franzininho. Built with Docusaurus."},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},prism:{additionalLanguages:[],theme:{plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"/media/fabio/Dados/Projetos/docs-franzininho-site/sidebars.js",editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/"},theme:{customCss:"/media/fabio/Dados/Projetos/docs-franzininho-site/src/css/custom.css"}}]],i18n:{defaultLocale:"pt-BR",locales:["pt-BR","en"],localeConfigs:{"pt-BR":{label:"Portugu\xeas (Brasil)",direction:"ltr"},en:{label:"English",direction:"ltr"}},path:"i18n"},baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},plugins:[],themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},3117:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},144:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},102:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},7529:e=>{"use strict";e.exports=JSON.parse('{"theme.NotFound.title":"Page Not Found","theme.NotFound.p1":"We could not find what you were looking for.","theme.NotFound.p2":"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.","theme.AnnouncementBar.closeButtonAriaLabel":"Close","theme.blog.post.readingTime.plurals":"One min read|{readingTime} min read","theme.tags.tagsListLabel":"Tags:","theme.blog.post.readMore":"Read More","theme.blog.paginator.navAriaLabel":"Blog list page navigation","theme.blog.paginator.newerEntries":"Newer Entries","theme.blog.paginator.olderEntries":"Older Entries","theme.blog.post.paginator.navAriaLabel":"Blog post page navigation","theme.blog.post.paginator.newerPost":"Newer Post","theme.blog.post.paginator.olderPost":"Older Post","theme.tags.tagsPageTitle":"Tags","theme.blog.post.plurals":"One post|{count} posts","theme.blog.tagTitle":"{nPosts} tagged with \\"{tagName}\\"","theme.tags.tagsPageLink":"View All Tags","theme.CodeBlock.copyButtonAriaLabel":"Copy code to clipboard","theme.CodeBlock.copied":"Copied","theme.CodeBlock.copy":"Copy","theme.docs.sidebar.expandButtonTitle":"Expand sidebar","theme.docs.sidebar.expandButtonAriaLabel":"Expand sidebar","theme.docs.paginator.navAriaLabel":"Docs pages navigation","theme.docs.paginator.previous":"Previous","theme.docs.paginator.next":"Next","theme.docs.sidebar.responsiveCloseButtonLabel":"Close menu","theme.docs.sidebar.responsiveOpenButtonLabel":"Open menu","theme.docs.sidebar.collapseButtonTitle":"Collapse sidebar","theme.docs.sidebar.collapseButtonAriaLabel":"Collapse sidebar","theme.docs.versions.unreleasedVersionLabel":"This is unreleased documentation for {siteTitle} {versionLabel} version.","theme.docs.versions.unmaintainedVersionLabel":"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.","theme.docs.versions.latestVersionSuggestionLabel":"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).","theme.docs.versions.latestVersionLinkLabel":"latest version","theme.common.editThisPage":"Edit this page","theme.common.headingLinkTitle":"Direct link to heading","theme.lastUpdated.atDate":" on {date}","theme.lastUpdated.byUser":" by {user}","theme.lastUpdated.lastUpdatedAtBy":"Last updated{atDate}{byUser}","theme.common.skipToMainContent":"Skip to main content","theme.SearchPage.documentsFound.plurals":"One document found|{count} documents found","theme.SearchPage.existingResultsTitle":"Search results for \\"{query}\\"","theme.SearchPage.emptyResultsTitle":"Search the documentation","theme.SearchPage.inputPlaceholder":"Type your search here","theme.SearchPage.inputLabel":"Search","theme.SearchPage.algoliaLabel":"Search by Algolia","theme.SearchPage.noResultsText":"No results were found","theme.SearchPage.fetchingNewResults":"Fetching new results...","theme.SearchBar.label":"Search"}')},6887:e=>{"use strict";e.exports=JSON.parse('{"/en/blog-827":{"__comp":"a6aa9e1f","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"},{"content":"3570154c"},{"content":"8e9f0a8a"}],"metadata":"fba6c282"},"/en/blog/archive-3a3":{"__comp":"9e4087bc","__context":{"plugin":"09e1b884"},"archive":"f6cbeee1"},"/en/blog/hello-world-f4e":{"__comp":"ccc49370","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","content":"d610846f"},"/en/blog/hola-8f7":{"__comp":"ccc49370","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","content":"bdd709f1"},"/en/blog/tags-fba":{"__comp":"01a85c17","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","tags":"9bdd22eb"},"/en/blog/tags/docusaurus-ac5":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"},{"content":"3570154c"},{"content":"8e9f0a8a"}],"tag":"f3f8ac04","listMetadata":"3bf4969f"},"/en/blog/tags/facebook-360":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"}],"tag":"62ad6a78","listMetadata":"f3dd2eb3"},"/en/blog/tags/hello-827":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"},{"content":"3570154c"}],"tag":"a1db8d77","listMetadata":"bc4100c0"},"/en/blog/tags/hola-3cb":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"8e9f0a8a"}],"tag":"e510ad2d","listMetadata":"bb62ac18"},"/en/blog/welcome-fe2":{"__comp":"ccc49370","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","content":"2868cdab"},"/en/docs-834":{"__comp":"1be78505","__context":{"plugin":"43004a8a"},"versionMetadata":"935f2afb"},"/en/docs/-cb2":{"__comp":"17896441","content":"f2d382a4"},"/en/docs/badge/badge-f77":{"__comp":"17896441","content":"6e2ab842"},"/en/docs/FranzBoy/franzboy-36d":{"__comp":"17896441","content":"7561b0ae"},"/en/docs/franzininho-c0/arduino-identificacao-pinos-5c8":{"__comp":"17896441","content":"94c955d1"},"/en/docs/franzininho-c0/arduino-primeiros-passos-b8d":{"__comp":"17896441","content":"449acc1f"},"/en/docs/franzininho-c0/arduino-todolist-8f2":{"__comp":"17896441","content":"ff1c69f3"},"/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide-27c":{"__comp":"17896441","content":"4cb2f106"},"/en/docs/franzininho-c0/franzininho-c0-board-d8d":{"__comp":"17896441","content":"d7336970"},"/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist-030":{"__comp":"17896441","content":"cfe204fd"},"/en/docs/franzininho-diy/bootloader-c6c":{"__comp":"17896441","content":"3ab9b561"},"/en/docs/franzininho-diy/brilho-led-aca":{"__comp":"17896441","content":"f3019b90"},"/en/docs/franzininho-diy/drivers-micronucleus-554":{"__comp":"17896441","content":"6da7bcf7"},"/en/docs/franzininho-diy/elefante-colorido-61f":{"__comp":"17896441","content":"69d6b121"},"/en/docs/franzininho-diy/entradas-analogicas-ce6":{"__comp":"17896441","content":"ff8b9623"},"/en/docs/franzininho-diy/entradas-saidas-digitais-af2":{"__comp":"17896441","content":"4c503f6c"},"/en/docs/franzininho-diy/exemplos-avr-libc/buzzer-41b":{"__comp":"17896441","content":"7e45b7ad"},"/en/docs/franzininho-diy/exemplos-avr-libc/contadores-e5f":{"__comp":"17896441","content":"bdb4d3e5"},"/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital-d90":{"__comp":"17896441","content":"3ab35d9f"},"/en/docs/franzininho-diy/exemplos-avr-libc/hello-world-3a2":{"__comp":"17896441","content":"b55e0f56"},"/en/docs/franzininho-diy/exemplos-avr-libc/int-ext-aea":{"__comp":"17896441","content":"b677b176"},"/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos-6be":{"__comp":"17896441","content":"bc475886"},"/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital-b81":{"__comp":"17896441","content":"f6af7cfc"},"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-dbb":{"__comp":"17896441","content":"c720cb85"},"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int-1e4":{"__comp":"17896441","content":"bb7fee19"},"/en/docs/franzininho-diy/exemplos-avr-libc/todo-eef":{"__comp":"17896441","content":"6b289e1f"},"/en/docs/franzininho-diy/girassol-automatizado-b21":{"__comp":"17896441","content":"d9a3a88a"},"/en/docs/franzininho-diy/identificando-componentes-4f7":{"__comp":"17896441","content":"68401cc9"},"/en/docs/franzininho-diy/led-rgb-ca7":{"__comp":"17896441","content":"52090148"},"/en/docs/franzininho-diy/leitura-tecla-f59":{"__comp":"17896441","content":"d5f74b3b"},"/en/docs/franzininho-diy/lista-de-materiais-6d9":{"__comp":"17896441","content":"e586c302"},"/en/docs/franzininho-diy/montagem-a94":{"__comp":"17896441","content":"9ccd4375"},"/en/docs/franzininho-diy/pacote-cef":{"__comp":"17896441","content":"21c04bfb"},"/en/docs/franzininho-diy/picsimlab/primeiros-passos-0a2":{"__comp":"17896441","content":"a34fb63a"},"/en/docs/franzininho-diy/pisca-led-deb":{"__comp":"17896441","content":"92ef60c0"},"/en/docs/franzininho-diy/saidas-pwm-aef":{"__comp":"17896441","content":"be54388e"},"/en/docs/franzininho-diy/semaforo-b5d":{"__comp":"17896441","content":"a47310cc"},"/en/docs/franzininho-diy/sensor-luz-ldr-2b0":{"__comp":"17896441","content":"5cfa1a80"},"/en/docs/franzininho-diy/sobre-0cf":{"__comp":"17896441","content":"fd69b436"},"/en/docs/franzininho-diy/tecla-liga-desliga-28f":{"__comp":"17896441","content":"55ee410e"},"/en/docs/franzininho-diy/theremim-69f":{"__comp":"17896441","content":"8b8a5829"},"/en/docs/franzininho-diy/tutoriais-i2c-8b8":{"__comp":"17896441","content":"558e6545"},"/en/docs/franzininho-diy/wokwi/primeiros-passos-466":{"__comp":"17896441","content":"f67a9ad7"},"/en/docs/franzininho-tiny/franzininho-tiny-d5f":{"__comp":"17896441","content":"52fc124a"},"/en/docs/franzininho-wifi-lab01-a7c":{"__comp":"17896441","content":"d75a6ad4"},"/en/docs/franzininho-wifi/exemplos-arduino/blink-756":{"__comp":"17896441","content":"9cf82e51"},"/en/docs/franzininho-wifi/exemplos-arduino/dht11-094":{"__comp":"17896441","content":"45a448cc"},"/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard-df7":{"__comp":"17896441","content":"8f8a0b80"},"/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos-9a4":{"__comp":"17896441","content":"5115f6b0"},"/en/docs/franzininho-wifi/exemplos-circuitpython/dht11-f0a":{"__comp":"17896441","content":"d0c422fb"},"/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c-387":{"__comp":"17896441","content":"55a63e59"},"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas-35a":{"__comp":"17896441","content":"8f70110c"},"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais-ef0":{"__comp":"17896441","content":"d268d7c6"},"/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas-9da":{"__comp":"17896441","content":"032edc05"},"/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world-91d":{"__comp":"17896441","content":"b0d3cd30"},"/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao-6f3":{"__comp":"17896441","content":"58231389"},"/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos-d1e":{"__comp":"17896441","content":"c397fa15"},"/en/docs/franzininho-wifi/exemplos-circuitpython/pwm-48c":{"__comp":"17896441","content":"5f765f30"},"/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04-609":{"__comp":"17896441","content":"d29449f8"},"/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console-eef":{"__comp":"17896441","content":"3cf26f2f"},"/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor-04b":{"__comp":"17896441","content":"4e4cd8a0"},"/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo-5e7":{"__comp":"17896441","content":"ec054302"},"/en/docs/franzininho-wifi/exemplos-espidf/aws-f4f":{"__comp":"17896441","content":"af2b9553"},"/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica-f53":{"__comp":"17896441","content":"06f5a5e3"},"/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital-55f":{"__comp":"17896441","content":"f64cfe00"},"/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf-4cb":{"__comp":"17896441","content":"dcf87b66"},"/en/docs/franzininho-wifi/exemplos-espidf/ledc-34f":{"__comp":"17896441","content":"249d28c1"},"/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos-220":{"__comp":"17896441","content":"2e8bb407"},"/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais-33a":{"__comp":"17896441","content":"5f9a86e6"},"/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos-4bc":{"__comp":"17896441","content":"d69ae106"},"/en/docs/franzininho-wifi/franzininho-wifi-df1":{"__comp":"17896441","content":"cdcae78f"},"/en/docs/franzininho-wifi/franzininho-wifi-dev-edition-19e":{"__comp":"17896441","content":"6d6d470f"},"/en/docs/franzininho-wifi/wokwi/primeiros-passos-389":{"__comp":"17896441","content":"66e66c27"},"/en/docs/Franzino/franzino-6b9":{"__comp":"17896441","content":"27079279"},"/en/docs/Franzino/upload-com-arduino-uno-c8c":{"__comp":"17896441","content":"daddf4d9"},"/en/docs/Franzino/upload-conversor-serial-f64":{"__comp":"17896441","content":"e6a1d5e9"},"/en/docs/FranzMakey/franzmakey-a8a":{"__comp":"17896441","content":"5c90fd8c"},"/en/docs/FranzMakey/primeiros-passos-58d":{"__comp":"17896441","content":"bc0ca366"},"/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno-f8d":{"__comp":"17896441","content":"445992cb"},"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-1ca":{"__comp":"17896441","content":"c4380c1f"},"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO-3b3":{"__comp":"17896441","content":"db00da42"},"/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot-3e2":{"__comp":"17896441","content":"b311b2c7"},"/en/docs/programacao/tutoriais-introducao-97e":{"__comp":"17896441","content":"bc0f2708"},"/en/-0f3":{"__comp":"c4f5d8e4","__context":{"plugin":"4f3ccf13"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=7221,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/en/assets/js/main.58f8a81d.js b/en/assets/js/main.58f8a81d.js new file mode 100755 index 000000000..4128285a6 --- /dev/null +++ b/en/assets/js/main.58f8a81d.js @@ -0,0 +1,2 @@ +/*! For license information please see main.58f8a81d.js.LICENSE.txt */ +(self.webpackChunkFranzininho=self.webpackChunkFranzininho||[]).push([[1590],{628:(e,t,n)=>{"use strict";n.d(t,{c:()=>p});n(11504);var r=n(98852),o=n.n(r),a=n(14504);const i={"01a85c17":[()=>Promise.all([n.e(2176),n.e(8412)]).then(n.bind(n,43024)),"@theme/BlogTagsListPage",43024],"032edc05":[()=>n.e(1288).then(n.bind(n,25444)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/instalacao-ferramentas.md",25444],"06f5a5e3":[()=>n.e(7952).then(n.bind(n,15644)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x03-entrada-analogica.md",15644],"09e1b884":[()=>n.e(7804).then(n.t.bind(n,6792,19)),"/media/fabio/Dados/Projetos/docs-franzininho-site/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",6792],17896441:[()=>Promise.all([n.e(2176),n.e(9968),n.e(6752)]).then(n.bind(n,29752)),"@theme/DocItem",29752],"21c04bfb":[()=>n.e(8968).then(n.bind(n,93232)),"@site/docs/FranzininhoDIY/exemplos-arduino/pacote.md",93232],"249d28c1":[()=>n.e(6332).then(n.bind(n,58960)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x04-LEDC.md",58960],27079279:[()=>n.e(468).then(n.bind(n,5372)),"@site/docs/Franzino/franzino.md",5372],"2868cdab":[()=>n.e(1784).then(n.bind(n,49116)),"@site/blog/2019-05-30-welcome.md",49116],"2e8bb407":[()=>n.e(5240).then(n.bind(n,28388)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x00-Primeiros-passos.md",28388],"3570154c":[()=>n.e(1052).then(n.bind(n,86444)),"@site/blog/2019-05-29-hello-world.md?truncated=true",86444],"3ab35d9f":[()=>n.e(6550).then(n.bind(n,57632)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/entrada-digital.md",57632],"3ab9b561":[()=>n.e(8817).then(n.bind(n,75080)),"@site/docs/FranzininhoDIY/bootloader/bootloader.md",75080],"3bf4969f":[()=>n.e(8384).then(n.t.bind(n,35066,19)),"~blog/default/en-blog-tags-docusaurus-41c-list.json",35066],"3cf26f2f":[()=>n.e(1680).then(n.bind(n,38988)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/serial-console.md",38988],"43004a8a":[()=>n.e(400).then(n.t.bind(n,2080,19)),"/media/fabio/Dados/Projetos/docs-franzininho-site/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",2080],"445992cb":[()=>n.e(6980).then(n.bind(n,87004)),"@site/docs/LaboratorioSistemasIot/adaptadores/adaptador-arduino.md",87004],"449acc1f":[()=>n.e(1208).then(n.bind(n,90752)),"@site/docs/franzininhoSTM32C0/exemplos-arduino/primeiros-passos.md",90752],"45a448cc":[()=>n.e(1456).then(n.bind(n,48832)),"@site/docs/FranzininhoWifi/exemplos-arduino/dht11.md",48832],"4c503f6c":[()=>n.e(6472).then(n.bind(n,20188)),"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais.md",20188],"4cb2f106":[()=>n.e(3280).then(n.bind(n,28020)),"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/configurando-projeto-stmcubeide.md",28020],"4e4cd8a0":[()=>n.e(2160).then(n.bind(n,24888)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/servo-motor.md",24888],"4f3ccf13":[()=>n.e(9508).then(n.t.bind(n,50590,19)),"/media/fabio/Dados/Projetos/docs-franzininho-site/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",50590],"5115f6b0":[()=>n.e(5336).then(n.bind(n,63816)),"@site/docs/FranzininhoWifi/exemplos-arduino/arduino.md",63816],52090148:[()=>n.e(8324).then(n.bind(n,26936)),"@site/docs/FranzininhoDIY/exemplos-arduino/led-rgb.md",26936],"52fc124a":[()=>n.e(3744).then(n.bind(n,4060)),"@site/docs/FranzininhoTiny/franzininho-tiny.md",4060],"558e6545":[()=>n.e(1020).then(n.bind(n,70760)),"@site/docs/FranzininhoDIY/exemplos-arduino/i2c.md",70760],"55a63e59":[()=>n.e(6312).then(n.bind(n,22796)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/display-oled-i2c.md",22796],"55ee410e":[()=>n.e(1196).then(n.bind(n,85452)),"@site/docs/FranzininhoDIY/exemplos-arduino/tecla-liga-desliga.md",85452],58231389:[()=>n.e(1520).then(n.bind(n,89172)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/irrigacao.md",89172],"5c90fd8c":[()=>n.e(2212).then(n.bind(n,29456)),"@site/docs/FranzMakey/franzmakey.md",29456],"5cfa1a80":[()=>n.e(6780).then(n.bind(n,61184)),"@site/docs/FranzininhoDIY/exemplos-arduino/sensor-luz.md",61184],"5e95c892":[()=>n.e(4304).then(n.bind(n,43564)),"@theme/DocsRoot",43564],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,97768)),"@generated/docusaurus.config",97768],"5f765f30":[()=>n.e(7024).then(n.bind(n,77092)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/pwm.md",77092],"5f9a86e6":[()=>n.e(6280).then(n.bind(n,51032)),"@site/docs/FranzininhoWifi/exemplos-micropython/entradas-saidas-digitais.md",51032],"62ad6a78":[()=>n.e(3800).then(n.t.bind(n,77744,19)),"~blog/default/en-blog-tags-facebook-f15.json",77744],"66e66c27":[()=>n.e(1676).then(n.bind(n,66016)),"@site/docs/FranzininhoWifi/wokwi/franzininho-wifi-wokwi.md",66016],"68401cc9":[()=>n.e(1168).then(n.bind(n,19864)),"@site/docs/FranzininhoDIY/identificando-componentes.md",19864],"6875c492":[()=>Promise.all([n.e(2176),n.e(9968),n.e(2220),n.e(2392)]).then(n.bind(n,62948)),"@theme/BlogTagsPostsPage",62948],"69d6b121":[()=>n.e(6316).then(n.bind(n,2788)),"@site/docs/FranzininhoDIY/exemplos-arduino/elefante-colorido.md",2788],"6b289e1f":[()=>n.e(7560).then(n.bind(n,92472)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/avr-libc-todo.md",92472],"6d6d470f":[()=>n.e(8448).then(n.bind(n,2008)),"@site/docs/FranzininhoWifi/franzininho-wifi-dev-edition.md",2008],"6da7bcf7":[()=>n.e(8292).then(n.bind(n,69484)),"@site/docs/FranzininhoDIY/bootloader/drivers.md",69484],"6e2ab842":[()=>n.e(4268).then(n.bind(n,23156)),"@site/docs/Badge/badge.md",23156],"7561b0ae":[()=>n.e(9488).then(n.bind(n,89976)),"@site/docs/FranzBoy/franzboy.md",89976],"7e45b7ad":[()=>n.e(4124).then(n.bind(n,84220)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/buzzer.md",84220],"814f3328":[()=>n.e(5512).then(n.t.bind(n,4352,19)),"~blog/default/blog-post-list-prop-default.json",4352],"8b8a5829":[()=>n.e(6116).then(n.bind(n,82076)),"@site/docs/FranzininhoDIY/exemplos-arduino/theremim.md",82076],"8e9f0a8a":[()=>n.e(3496).then(n.bind(n,75224)),"@site/blog/2019-05-28-hola.md?truncated=true",75224],"8f70110c":[()=>n.e(2496).then(n.bind(n,99920)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-analogica.md",99920],"8f8a0b80":[()=>n.e(5752).then(n.bind(n,60060)),"@site/docs/FranzininhoWifi/exemplos-arduino/onboard-rgb-led-example.md",60060],"92ef60c0":[()=>n.e(9964).then(n.bind(n,86100)),"@site/docs/FranzininhoDIY/exemplos-arduino/pisca-led.md",86100],"935f2afb":[()=>n.e(5696).then(n.t.bind(n,35988,19)),"~docs/default/version-current-metadata-prop-751.json",35988],"94c955d1":[()=>n.e(6200).then(n.bind(n,6604)),"@site/docs/franzininhoSTM32C0/exemplos-arduino/identificacao-pinos.md",6604],"9bdd22eb":[()=>n.e(7824).then(n.t.bind(n,4358,19)),"~blog/default/en-blog-tags-tags-c25.json",4358],"9ccd4375":[()=>n.e(4640).then(n.bind(n,97192)),"@site/docs/FranzininhoDIY/montagem.md",97192],"9cf82e51":[()=>n.e(4608).then(n.bind(n,16560)),"@site/docs/FranzininhoWifi/exemplos-arduino/blink.md",16560],"9e4087bc":[()=>n.e(7028).then(n.bind(n,56140)),"@theme/BlogArchivePage",56140],a1db8d77:[()=>n.e(2720).then(n.t.bind(n,33788,19)),"~blog/default/en-blog-tags-hello-477.json",33788],a34fb63a:[()=>n.e(8336).then(n.bind(n,70676)),"@site/docs/FranzininhoDIY/picsimlab/franzininho-picsimlab.md",70676],a47310cc:[()=>n.e(2976).then(n.bind(n,38568)),"@site/docs/FranzininhoDIY/exemplos-arduino/semaforo.md",38568],a6aa9e1f:[()=>Promise.all([n.e(2176),n.e(9968),n.e(2220),n.e(4976)]).then(n.bind(n,16960)),"@theme/BlogListPage",16960],a7bd4aaa:[()=>n.e(6500).then(n.bind(n,22e3)),"@theme/DocVersionRoot",22e3],a94703ab:[()=>Promise.all([n.e(2176),n.e(4666)]).then(n.bind(n,20996)),"@theme/DocRoot",20996],acecf23e:[()=>n.e(6360).then(n.t.bind(n,81112,19)),"~blog/default/blogMetadata-default.json",81112],af172acd:[()=>n.e(1560).then(n.bind(n,92368)),"@site/blog/2019-05-30-welcome.md?truncated=true",92368],af2b9553:[()=>n.e(2660).then(n.bind(n,68240)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x05-AWS-IoT-Core.md",68240],b0d3cd30:[()=>n.e(5632).then(n.bind(n,73412)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/hello-world.md",73412],b311b2c7:[()=>n.e(3183).then(n.bind(n,70512)),"@site/docs/LaboratorioSistemasIot/laboratorio-sistemas-iot.md",70512],b55e0f56:[()=>n.e(576).then(n.bind(n,56068)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/hello-world.md",56068],b677b176:[()=>n.e(7296).then(n.bind(n,94024)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/int-externa.md",94024],bb62ac18:[()=>n.e(4772).then(n.t.bind(n,69264,19)),"~blog/default/en-blog-tags-hola-c9e-list.json",69264],bb7fee19:[()=>n.e(1392).then(n.bind(n,6567)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0-int.md",6567],bc0ca366:[()=>n.e(9628).then(n.bind(n,60108)),"@site/docs/FranzMakey/primeiros-passos.md",60108],bc0f2708:[()=>n.e(148).then(n.bind(n,37092)),"@site/docs/FranzininhoDIY/exemplos-arduino/introducao.md",37092],bc4100c0:[()=>n.e(9404).then(n.t.bind(n,15808,19)),"~blog/default/en-blog-tags-hello-477-list.json",15808],bc475886:[()=>n.e(6974).then(n.bind(n,50308)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/primeiros-passos.md",50308],bdb4d3e5:[()=>n.e(9484).then(n.bind(n,41828)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/contadores.md",41828],bdd709f1:[()=>n.e(2760).then(n.bind(n,59436)),"@site/blog/2019-05-28-hola.md",59436],be54388e:[()=>n.e(8040).then(n.bind(n,24892)),"@site/docs/FranzininhoDIY/exemplos-arduino/pwm.md",24892],c397fa15:[()=>n.e(5280).then(n.bind(n,18276)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/circuitpython.md",18276],c4380c1f:[()=>n.e(6776).then(n.bind(n,6580)),"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW.md",6580],c4f5d8e4:[()=>Promise.all([n.e(2176),n.e(2632)]).then(n.bind(n,15908)),"@site/src/pages/index.js",15908],c720cb85:[()=>n.e(3916).then(n.bind(n,77584)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/timer0.md",77584],ccc49370:[()=>Promise.all([n.e(2176),n.e(9968),n.e(2220),n.e(6344)]).then(n.bind(n,26448)),"@theme/BlogPostPage",26448],cdcae78f:[()=>n.e(7272).then(n.bind(n,67340)),"@site/docs/FranzininhoWifi/franzininho-wifi.md",67340],cfe204fd:[()=>n.e(8658).then(n.bind(n,37904)),"@site/docs/franzininhoSTM32C0/exemplos-stm32cube-IDE/stm32cube-ide-todolist.md",37904],d0c422fb:[()=>n.e(5944).then(n.bind(n,73880)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/dht11.md",73880],d268d7c6:[()=>n.e(3630).then(n.bind(n,87604)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/entrada-saidas-digitais.md",87604],d29449f8:[()=>n.e(560).then(n.bind(n,61052)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/hcsr04.md",61052],d5f74b3b:[()=>n.e(7888).then(n.bind(n,89360)),"@site/docs/FranzininhoDIY/exemplos-arduino/leitura-tecla.md",89360],d610846f:[()=>n.e(6552).then(n.bind(n,41508)),"@site/blog/2019-05-29-hello-world.md",41508],d69ae106:[()=>n.e(8930).then(n.bind(n,21204)),"@site/docs/FranzininhoWifi/exemplos-micropython/primeiros-passos.md",21204],d7336970:[()=>n.e(7073).then(n.bind(n,24236)),"@site/docs/franzininhoSTM32C0/franzininho-stm32c0-board.md",24236],d75a6ad4:[()=>n.e(1363).then(n.bind(n,44972)),"@site/docs/FranzininhoWiFiLAB01/franzininho-wifi-lab01.md",44972],d9a3a88a:[()=>n.e(4672).then(n.bind(n,18208)),"@site/docs/FranzininhoDIY/exemplos-arduino/girassol-automatizado.md",18208],daddf4d9:[()=>n.e(1140).then(n.bind(n,5472)),"@site/docs/Franzino/upload-com-arduino-uno.md",5472],db00da42:[()=>n.e(6728).then(n.bind(n,27652)),"@site/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO.md",27652],dcf87b66:[()=>n.e(4298).then(n.bind(n,40620)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x01-Hello-world.md",40620],e510ad2d:[()=>n.e(5884).then(n.t.bind(n,57508,19)),"~blog/default/en-blog-tags-hola-c9e.json",57508],e586c302:[()=>n.e(872).then(n.bind(n,24400)),"@site/docs/FranzininhoDIY/lista-de-materiais.md",24400],e6a1d5e9:[()=>n.e(5758).then(n.bind(n,1996)),"@site/docs/Franzino/upload-conversor-serial.md",1996],ec054302:[()=>n.e(1880).then(n.bind(n,66376)),"@site/docs/FranzininhoWifi/exemplos-circuitpython/touch-capacitivo.md",66376],f2d382a4:[()=>n.e(7568).then(n.bind(n,16972)),"@site/i18n/en/docusaurus-plugin-content-docs/current/sobre.md",16972],f3019b90:[()=>n.e(952).then(n.bind(n,71484)),"@site/docs/FranzininhoDIY/exemplos-arduino/brilho-led.md",71484],f3dd2eb3:[()=>n.e(8556).then(n.t.bind(n,15720,19)),"~blog/default/en-blog-tags-facebook-f15-list.json",15720],f3f8ac04:[()=>n.e(2899).then(n.t.bind(n,98848,19)),"~blog/default/en-blog-tags-docusaurus-41c.json",98848],f64cfe00:[()=>n.e(9464).then(n.bind(n,29960)),"@site/docs/FranzininhoWifi/exemplos-espidf/0x02-entrada-digital.md",29960],f67a9ad7:[()=>n.e(8812).then(n.bind(n,10508)),"@site/docs/FranzininhoDIY/wokwi/franzininho-wokwi.md",10508],f6af7cfc:[()=>n.e(1576).then(n.bind(n,59724)),"@site/docs/FranzininhoDIY/exemplos-avr-libc/saida-digital.md",59724],f6cbeee1:[()=>n.e(8504).then(n.t.bind(n,96912,19)),"~blog/default/en-blog-archive-10f.json",96912],fba6c282:[()=>n.e(3832).then(n.t.bind(n,75072,19)),"~blog/default/en-blog-038.json",75072],fd69b436:[()=>n.e(9386).then(n.bind(n,92304)),"@site/docs/FranzininhoDIY/franzininho-diy.md",92304],ff1c69f3:[()=>n.e(3420).then(n.bind(n,33300)),"@site/docs/franzininhoSTM32C0/exemplos-arduino/exemplos-arduino-todolist.md",33300],ff8b9623:[()=>n.e(6004).then(n.bind(n,4212)),"@site/docs/FranzininhoDIY/exemplos-arduino/entradas-analogicas.md",4212]};var s=n(17624);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(78120),u=n(25548);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(4552).then(n.bind(n,54552)),modules:["@theme/NotFound"],webpack:()=>[54552],render(e,t){const n=e.default;return(0,s.jsx)(u.Y,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],h=(0,c.c)(r);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,s.jsx)(u.Y,{value:i,children:(0,s.jsx)(a,{...o,...n})})}})}const p=[{path:"/en/",component:d("/en/","5da"),exact:!0},{path:"/en/blog",component:d("/en/blog","827"),exact:!0},{path:"/en/blog/archive",component:d("/en/blog/archive","3a3"),exact:!0},{path:"/en/blog/hello-world",component:d("/en/blog/hello-world","bcc"),exact:!0},{path:"/en/blog/hola",component:d("/en/blog/hola","ed9"),exact:!0},{path:"/en/blog/tags",component:d("/en/blog/tags","fba"),exact:!0},{path:"/en/blog/tags/docusaurus",component:d("/en/blog/tags/docusaurus","ac5"),exact:!0},{path:"/en/blog/tags/facebook",component:d("/en/blog/tags/facebook","360"),exact:!0},{path:"/en/blog/tags/hello",component:d("/en/blog/tags/hello","827"),exact:!0},{path:"/en/blog/tags/hola",component:d("/en/blog/tags/hola","3cb"),exact:!0},{path:"/en/blog/welcome",component:d("/en/blog/welcome","e2d"),exact:!0},{path:"/en/docs",component:d("/en/docs","abd"),routes:[{path:"/en/docs",component:d("/en/docs","54d"),routes:[{path:"/en/docs",component:d("/en/docs","7f4"),routes:[{path:"/en/docs/",component:d("/en/docs/","d27"),exact:!0,sidebar:"docs"},{path:"/en/docs/badge/badge",component:d("/en/docs/badge/badge","abc"),exact:!0,sidebar:"docs"},{path:"/en/docs/FranzBoy/franzboy",component:d("/en/docs/FranzBoy/franzboy","bbc"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-c0/arduino-identificacao-pinos",component:d("/en/docs/franzininho-c0/arduino-identificacao-pinos","b6e"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-c0/arduino-primeiros-passos",component:d("/en/docs/franzininho-c0/arduino-primeiros-passos","f81"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-c0/arduino-todolist",component:d("/en/docs/franzininho-c0/arduino-todolist","a12"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide",component:d("/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide","87c"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-c0/franzininho-c0-board",component:d("/en/docs/franzininho-c0/franzininho-c0-board","79f"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist",component:d("/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist","139"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/bootloader",component:d("/en/docs/franzininho-diy/bootloader","3df"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/brilho-led",component:d("/en/docs/franzininho-diy/brilho-led","700"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/drivers-micronucleus",component:d("/en/docs/franzininho-diy/drivers-micronucleus","e4b"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/elefante-colorido",component:d("/en/docs/franzininho-diy/elefante-colorido","284"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/entradas-analogicas",component:d("/en/docs/franzininho-diy/entradas-analogicas","610"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/entradas-saidas-digitais",component:d("/en/docs/franzininho-diy/entradas-saidas-digitais","dd3"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/buzzer",component:d("/en/docs/franzininho-diy/exemplos-avr-libc/buzzer","2d1"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/contadores",component:d("/en/docs/franzininho-diy/exemplos-avr-libc/contadores","616"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital",component:d("/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital","1e5"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/hello-world",component:d("/en/docs/franzininho-diy/exemplos-avr-libc/hello-world","429"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/int-ext",component:d("/en/docs/franzininho-diy/exemplos-avr-libc/int-ext","655"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos",component:d("/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos","ebc"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital",component:d("/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital","124"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0",component:d("/en/docs/franzininho-diy/exemplos-avr-libc/timer0","dd2"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int",component:d("/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int","f1f"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/exemplos-avr-libc/todo",component:d("/en/docs/franzininho-diy/exemplos-avr-libc/todo","df5"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/girassol-automatizado",component:d("/en/docs/franzininho-diy/girassol-automatizado","4c2"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/identificando-componentes",component:d("/en/docs/franzininho-diy/identificando-componentes","111"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/led-rgb",component:d("/en/docs/franzininho-diy/led-rgb","c3d"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/leitura-tecla",component:d("/en/docs/franzininho-diy/leitura-tecla","66c"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/lista-de-materiais",component:d("/en/docs/franzininho-diy/lista-de-materiais","f29"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/montagem",component:d("/en/docs/franzininho-diy/montagem","efd"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/pacote",component:d("/en/docs/franzininho-diy/pacote","a47"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/picsimlab/primeiros-passos",component:d("/en/docs/franzininho-diy/picsimlab/primeiros-passos","09e"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/pisca-led",component:d("/en/docs/franzininho-diy/pisca-led","081"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/saidas-pwm",component:d("/en/docs/franzininho-diy/saidas-pwm","946"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/semaforo",component:d("/en/docs/franzininho-diy/semaforo","971"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/sensor-luz-ldr",component:d("/en/docs/franzininho-diy/sensor-luz-ldr","4c1"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/sobre",component:d("/en/docs/franzininho-diy/sobre","cdc"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/tecla-liga-desliga",component:d("/en/docs/franzininho-diy/tecla-liga-desliga","cf3"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/theremim",component:d("/en/docs/franzininho-diy/theremim","e7c"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-diy/tutoriais-i2c",component:d("/en/docs/franzininho-diy/tutoriais-i2c","b02"),exact:!0},{path:"/en/docs/franzininho-diy/wokwi/primeiros-passos",component:d("/en/docs/franzininho-diy/wokwi/primeiros-passos","03e"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-tiny/franzininho-tiny",component:d("/en/docs/franzininho-tiny/franzininho-tiny","f0a"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi-lab01",component:d("/en/docs/franzininho-wifi-lab01","59a"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-arduino/blink",component:d("/en/docs/franzininho-wifi/exemplos-arduino/blink","da4"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-arduino/dht11",component:d("/en/docs/franzininho-wifi/exemplos-arduino/dht11","d79"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard",component:d("/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard","4d3"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos",component:d("/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos","6e8"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/dht11",component:d("/en/docs/franzininho-wifi/exemplos-circuitpython/dht11","0c7"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c",component:d("/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c","98c"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas",component:d("/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas","a90"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais",component:d("/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais","b49"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas",component:d("/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas","bfe"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world",component:d("/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world","a77"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao",component:d("/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao","9bf"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos",component:d("/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos","07b"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/pwm",component:d("/en/docs/franzininho-wifi/exemplos-circuitpython/pwm","586"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04",component:d("/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04","59a"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console",component:d("/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console","894"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor",component:d("/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor","d9c"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo",component:d("/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo","3d6"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-espidf/aws",component:d("/en/docs/franzininho-wifi/exemplos-espidf/aws","694"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica",component:d("/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica","7fb"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital",component:d("/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital","f6b"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf",component:d("/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf","2dd"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-espidf/ledc",component:d("/en/docs/franzininho-wifi/exemplos-espidf/ledc","579"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos",component:d("/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos","bbf"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais",component:d("/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais","6c0"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos",component:d("/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos","f78"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/franzininho-wifi",component:d("/en/docs/franzininho-wifi/franzininho-wifi","d2f"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/franzininho-wifi-dev-edition",component:d("/en/docs/franzininho-wifi/franzininho-wifi-dev-edition","80f"),exact:!0,sidebar:"docs"},{path:"/en/docs/franzininho-wifi/wokwi/primeiros-passos",component:d("/en/docs/franzininho-wifi/wokwi/primeiros-passos","f20"),exact:!0,sidebar:"docs"},{path:"/en/docs/Franzino/franzino",component:d("/en/docs/Franzino/franzino","233"),exact:!0,sidebar:"docs"},{path:"/en/docs/Franzino/upload-com-arduino-uno",component:d("/en/docs/Franzino/upload-com-arduino-uno","8e0"),exact:!0,sidebar:"docs"},{path:"/en/docs/Franzino/upload-conversor-serial",component:d("/en/docs/Franzino/upload-conversor-serial","5a4"),exact:!0,sidebar:"docs"},{path:"/en/docs/FranzMakey/franzmakey",component:d("/en/docs/FranzMakey/franzmakey","24e"),exact:!0,sidebar:"docs"},{path:"/en/docs/FranzMakey/primeiros-passos",component:d("/en/docs/FranzMakey/primeiros-passos","34a"),exact:!0,sidebar:"docs"},{path:"/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno",component:d("/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno","454"),exact:!0,sidebar:"docs"},{path:"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW",component:d("/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","a1c"),exact:!0,sidebar:"docs"},{path:"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO",component:d("/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO","37c"),exact:!0,sidebar:"docs"},{path:"/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot",component:d("/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot","689"),exact:!0,sidebar:"docs"},{path:"/en/docs/programacao/tutoriais-introducao",component:d("/en/docs/programacao/tutoriais-introducao","3e8"),exact:!0}]}]}]},{path:"*",component:d("*")}]},30240:(e,t,n)=>{"use strict";n.d(t,{e:()=>a,g:()=>i});var r=n(11504),o=n(17624);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},28808:(e,t,n)=>{"use strict";var r=n(11504),o=n(28352),a=n(70440),i=n(32160),s=n(98684);const l=[n(1462),n(85396),n(31976),n(71496)];var c=n(628),u=n(55592),d=n(85464),p=n(17624);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var h=n(56952),m=n(28264),g=n(70964),b=n(21824),y=n(68900),v=n(1616),w=n(60204),x=n(14456),k=n(15684),S=n(48712);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,m.c)(),r=(0,v.D)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,p.jsxs)(h.c,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,m.c)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,m.c)(),{pathname:r}=(0,u.IT)();return e+(0,k.applyTrailingSlash)((0,g.c)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,p.jsxs)(h.c,{children:[(0,p.jsx)("meta",{property:"og:url",content:o}),(0,p.jsx)("link",{rel:"canonical",href:o})]})}function z(){const{i18n:{currentLocale:e}}=(0,m.c)(),{metadata:t,image:n}=(0,b.y)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(h.c,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:w.m})]}),n&&(0,p.jsx)(y.U7,{image:n}),(0,p.jsx)(_,{}),(0,p.jsx)(E,{}),(0,p.jsx)(S.c,{tag:x.e6,locale:e}),(0,p.jsx)(h.c,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.C)(c.c,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var j=n(30240),L=n(136),A=n(95288);function F(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=l.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,A.c)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),F("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function P(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.C)(c.c,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class R extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.c.canUseDOM?F("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=F("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),P(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,p.jsx)(N,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(u.kX,{location:t,render:()=>e})})}}const D=R,I="__docusaurus-base-url-issue-banner-container",O="__docusaurus-base-url-issue-banner",M="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${I}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${O}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${M}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n document.body.prepend(bannerContainer);\n var suggestionContainer = document.getElementById('${M}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function U(){const{siteConfig:{baseUrl:e}}=(0,m.c)();return(0,p.jsx)(p.Fragment,{children:!s.c.canUseDOM&&(0,p.jsx)(h.c,{children:(0,p.jsx)("script",{children:B(e)})})})}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,m.c)(),{pathname:n}=(0,u.IT)();return t&&n===e?(0,p.jsx)(U,{}):null}function q(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:o}}=(0,m.c)(),a=(0,g.c)(e),{htmlLang:i,direction:s}=o[r];return(0,p.jsxs)(h.c,{children:[(0,p.jsx)("html",{lang:i,dir:s}),(0,p.jsx)("title",{children:t}),(0,p.jsx)("meta",{property:"og:title",content:t}),(0,p.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,p.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,p.jsx)("link",{rel:"icon",href:a})]})}var W=n(75852),H=n(93664);function G(){const e=(0,H.c)();return(0,p.jsx)(h.c,{children:(0,p.jsx)("html",{"data-has-hydrated":e})})}function V(){const e=(0,d.k)(c.c),t=(0,u.IT)();return(0,p.jsx)(W.c,{children:(0,p.jsx)(L.y,{children:(0,p.jsxs)(j.g,{children:[(0,p.jsxs)(f,{children:[(0,p.jsx)(q,{}),(0,p.jsx)(z,{}),(0,p.jsx)($,{}),(0,p.jsx)(D,{location:T(t),children:e})]}),(0,p.jsx)(G,{})]})})})}var Y=n(14504);const Q=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var K=n(78120);const X=new Set,Z=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!Z.has(e)&&!X.has(e))(e))return!1;X.add(e);const t=(0,d.C)(c.c,e).flatMap((e=>{return t=e.route.path,Object.entries(Y).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.c)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Q(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!Z.has(e))(e)&&(Z.add(e),P(e))},te=Object.freeze(ee),ne=Boolean(!0);if(s.c.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(i.EN,{children:(0,p.jsx)(a.kn,{children:(0,p.jsx)(V,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},s=()=>{if(ne)r.startTransition((()=>{o.hydrateRoot(e,t,{onRecoverableError:n})}));else{const a=o.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{a.render(t)}))}};P(window.location.pathname).then(s)}},136:(e,t,n)=>{"use strict";n.d(t,{e:()=>d,y:()=>p});var r=n(11504),o=n(97768);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/en/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/en/docs","mainDocId":"sobre","docs":[{"id":"Badge/badge","path":"/en/docs/badge/badge","sidebar":"docs"},{"id":"FranzBoy/franzboy","path":"/en/docs/FranzBoy/franzboy","sidebar":"docs"},{"id":"FranzininhoDIY/bootloader/bootloader","path":"/en/docs/franzininho-diy/bootloader","sidebar":"docs"},{"id":"FranzininhoDIY/bootloader/drivers-micronucleus","path":"/en/docs/franzininho-diy/drivers-micronucleus","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/brilho-led","path":"/en/docs/franzininho-diy/brilho-led","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/elefante-colorido","path":"/en/docs/franzininho-diy/elefante-colorido","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/entradas-analogicas","path":"/en/docs/franzininho-diy/entradas-analogicas","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/entradas-saidas-digitais","path":"/en/docs/franzininho-diy/entradas-saidas-digitais","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/girassol-automatizado","path":"/en/docs/franzininho-diy/girassol-automatizado","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/led-rgb","path":"/en/docs/franzininho-diy/led-rgb","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/leitura-tecla","path":"/en/docs/franzininho-diy/leitura-tecla","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/pacote","path":"/en/docs/franzininho-diy/pacote","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/pisca-led","path":"/en/docs/franzininho-diy/pisca-led","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/saidas-pwm","path":"/en/docs/franzininho-diy/saidas-pwm","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/semaforo","path":"/en/docs/franzininho-diy/semaforo","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/sensor-luz-ldr","path":"/en/docs/franzininho-diy/sensor-luz-ldr","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/tecla-liga-desliga","path":"/en/docs/franzininho-diy/tecla-liga-desliga","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/theremim","path":"/en/docs/franzininho-diy/theremim","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-i2c","path":"/en/docs/franzininho-diy/tutoriais-i2c"},{"id":"FranzininhoDIY/exemplos-arduino/tutoriais-introducao","path":"/en/docs/programacao/tutoriais-introducao"},{"id":"FranzininhoDIY/exemplos-avr-libc/avr-libc-todo","path":"/en/docs/franzininho-diy/exemplos-avr-libc/todo","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/buzzer","path":"/en/docs/franzininho-diy/exemplos-avr-libc/buzzer","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/contadores","path":"/en/docs/franzininho-diy/exemplos-avr-libc/contadores","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/entrada-digital","path":"/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/hello-world","path":"/en/docs/franzininho-diy/exemplos-avr-libc/hello-world","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/int-externa","path":"/en/docs/franzininho-diy/exemplos-avr-libc/int-ext","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/primeiros-passos","path":"/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/saida-digital","path":"/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/timer0","path":"/en/docs/franzininho-diy/exemplos-avr-libc/timer0","sidebar":"docs"},{"id":"FranzininhoDIY/exemplos-avr-libc/timer0-int","path":"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int","sidebar":"docs"},{"id":"FranzininhoDIY/franzininho-diy","path":"/en/docs/franzininho-diy/sobre","sidebar":"docs"},{"id":"FranzininhoDIY/identificando-componentes","path":"/en/docs/franzininho-diy/identificando-componentes","sidebar":"docs"},{"id":"FranzininhoDIY/lista-de-materiais","path":"/en/docs/franzininho-diy/lista-de-materiais","sidebar":"docs"},{"id":"FranzininhoDIY/montagem","path":"/en/docs/franzininho-diy/montagem","sidebar":"docs"},{"id":"FranzininhoDIY/picsimlab/picsimlab-intro","path":"/en/docs/franzininho-diy/picsimlab/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoDIY/wokwi/wokwi-intro","path":"/en/docs/franzininho-diy/wokwi/primeiros-passos","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-identificacao-pinos","path":"/en/docs/franzininho-c0/arduino-identificacao-pinos","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-primeiros-passos","path":"/en/docs/franzininho-c0/arduino-primeiros-passos","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-arduino/franzininhoc0-arduino-todolist","path":"/en/docs/franzininho-c0/arduino-todolist","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/config-franzininho-c0-stm32cubeide","path":"/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide","sidebar":"docs"},{"id":"franzininhoSTM32C0/exemplos-stm32cube-IDE/franzininho-stm32c0-stm32cubeide-todolist","path":"/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist","sidebar":"docs"},{"id":"franzininhoSTM32C0/franzininho-stm32c0","path":"/en/docs/franzininho-c0/franzininho-c0-board","sidebar":"docs"},{"id":"FranzininhoTiny/franzininho-tiny","path":"/en/docs/franzininho-tiny/franzininho-tiny","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino","path":"/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino-blink","path":"/en/docs/franzininho-wifi/exemplos-arduino/blink","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino-dht11","path":"/en/docs/franzininho-wifi/exemplos-arduino/dht11","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-arduino/arduino-neopixel","path":"/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-dht11","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/dht11","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-display-oled-i2c","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-analogicas","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-entradas-saidas-digitais","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-ferramentas","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-hello-world","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-primeiros-passos","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-pwm","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/pwm","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sensor-hcsr04","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-serial-console","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-servo-motor","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-sistema-de-irriga\xe7\xe3o","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-circuitpython/circuitpython-touch-capacitivo","path":"/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-00","path":"/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-01","path":"/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-02","path":"/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-03","path":"/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-04","path":"/en/docs/franzininho-wifi/exemplos-espidf/ledc","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-espidf/franzininho-wifi-espidf-05","path":"/en/docs/franzininho-wifi/exemplos-espidf/aws","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-micropython/micropython-entradas-saidas-digitais","path":"/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais","sidebar":"docs"},{"id":"FranzininhoWifi/exemplos-micropython/micropython-primeiros-passos","path":"/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWifi/franzininho-wifi","path":"/en/docs/franzininho-wifi/franzininho-wifi","sidebar":"docs"},{"id":"FranzininhoWifi/franzininho-wifi-dev-edition","path":"/en/docs/franzininho-wifi/franzininho-wifi-dev-edition","sidebar":"docs"},{"id":"FranzininhoWifi/wokwi/franzininho-wifi-wokwi-intro","path":"/en/docs/franzininho-wifi/wokwi/primeiros-passos","sidebar":"docs"},{"id":"FranzininhoWiFiLAB01/franzininho-wifi-lab01","path":"/en/docs/franzininho-wifi-lab01","sidebar":"docs"},{"id":"Franzino/franzino","path":"/en/docs/Franzino/franzino","sidebar":"docs"},{"id":"Franzino/upload-com-arduino-uno","path":"/en/docs/Franzino/upload-com-arduino-uno","sidebar":"docs"},{"id":"Franzino/upload-conversor-serial","path":"/en/docs/Franzino/upload-conversor-serial","sidebar":"docs"},{"id":"FranzMakey/franzmakey","path":"/en/docs/FranzMakey/franzmakey","sidebar":"docs"},{"id":"FranzMakey/primeiros-passos","path":"/en/docs/FranzMakey/primeiros-passos","sidebar":"docs"},{"id":"LaboratorioSistemasIot/adaptadores/adaptador-arduino","path":"/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno","sidebar":"docs"},{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","path":"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW","sidebar":"docs"},{"id":"LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-ARDUNO","path":"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO","sidebar":"docs"},{"id":"LaboratorioSistemasIot/laboratorio-sistemas-iot","path":"/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot","sidebar":"docs"},{"id":"sobre","path":"/en/docs/","sidebar":"docs"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/en/docs/","label":"sobre"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"pt-BR","locales":["pt-BR","en"],"path":"i18n","currentLocale":"en","localeConfigs":{"pt-BR":{"label":"Portugu\xeas (Brasil)","direction":"ltr","htmlLang":"pt-BR","calendar":"gregory","path":"pt-BR"},"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(60144);const l=JSON.parse('{"docusaurusVersion":"3.2.1","siteVersion":"1.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.2.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.2.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.2.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.2.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.2.1"}}}');var c=n(17624);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},75852:(e,t,n)=>{"use strict";n.d(t,{c:()=>m});var r=n(11504),o=n(98684),a=n(56952),i=n(15684),s=n(99012),l=n(25548),c=n(17624);function u(e){let{error:t,tryAgain:n}=e;return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,c.jsx)(l.Y,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)(p,{children:(0,c.jsxs)(m,{fallback:()=>(0,c.jsx)(u,{error:t,tryAgain:n}),children:[(0,c.jsx)(a.c,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(s.c,{children:(0,c.jsx)(u,{error:t,tryAgain:n})})]})})}const h=e=>(0,c.jsx)(f,{...e});class m extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.c.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??h)(e)}return e??null}}},98684:(e,t,n)=>{"use strict";n.d(t,{c:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},56952:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});n(11504);var r=n(32160),o=n(17624);function a(e){return(0,o.jsx)(r.So,{...e})}},10867:(e,t,n)=>{"use strict";n.d(t,{c:()=>f});var r=n(11504),o=n(70440),a=n(15684),i=n(28264),s=n(18136),l=n(98684),c=n(5976),u=n(70964),d=n(17624);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:h,isActive:m,"data-noBrokenLinkCheck":g,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,i.c)(),{withBaseUrl:x}=(0,u.E)(),k=(0,c.c)(),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const E=p||f;const _=(0,s.c)(E),z=E?.replace("pathname://","");let C=void 0!==z?(T=z,b&&(e=>e.startsWith("/"))(T)?x(T):T):void 0;var T;C&&_&&(C=(0,a.applyTrailingSlash)(C,{trailingSlash:v,baseUrl:w}));const j=(0,r.useRef)(!1),L=n?o.Af:o.cH,A=l.c.canUseIntersectionObserver,F=(0,r.useRef)(),N=()=>{j.current||null==C||(window.docusaurus.preload(C),j.current=!0)};(0,r.useEffect)((()=>(!A&&_&&null!=C&&window.docusaurus.prefetch(C),()=>{A&&F.current&&F.current.disconnect()})),[F,C,A,_]);const P=C?.startsWith("#")??!1,R=!y.target||"_self"===y.target,D=!C||!_||!R||P;return g||!P&&D||k.collectLink(C),y.id&&k.collectAnchor(y.id),D?(0,d.jsx)("a",{ref:S,href:C,...E&&!_&&{target:"_blank",rel:"noopener noreferrer"},...y}):(0,d.jsx)(L,{...y,onMouseEnter:N,onTouchStart:N,innerRef:e=>{S.current=e,A&&e&&_&&(F.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(F.current.unobserve(e),F.current.disconnect(),null!=C&&window.docusaurus.prefetch(C))}))})),F.current.observe(e))},to:C,...n&&{isActive:m,activeClassName:h}})}const f=r.forwardRef(p)},82944:(e,t,n)=>{"use strict";n.d(t,{c:()=>r});const r=()=>null},84357:(e,t,n)=>{"use strict";n.d(t,{c:()=>c,G:()=>l});var r=n(11504),o=n(17624);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(60144);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const i=s({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},52488:(e,t,n)=>{"use strict";n.d(t,{M:()=>r});const r="default"},18136:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{_:()=>r,c:()=>o})},70964:(e,t,n)=>{"use strict";n.d(t,{E:()=>i,c:()=>s});var r=n(11504),o=n(28264),a=n(18136);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.c)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a._)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},5976:(e,t,n)=>{"use strict";n.d(t,{c:()=>i});var r=n(11504);n(17624);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},28264:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(11504),o=n(136);function a(){return(0,r.useContext)(o.e)}},93664:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(11504),o=n(30240);function a(){return(0,r.useContext)(o.e)}},95288:(e,t,n)=>{"use strict";n.d(t,{c:()=>o});var r=n(11504);const o=n(98684).c.canUseDOM?r.useLayoutEffect:r.useEffect},85308:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=n(11504),o=n(25548);function a(){const e=r.useContext(o.e);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}},78120:(e,t,n)=>{"use strict";n.d(t,{c:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i}))}(e),t}},25548:(e,t,n)=>{"use strict";n.d(t,{Y:()=>i,e:()=>a});var r=n(11504),o=n(17624);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:s,children:t})}},62840:(e,t,n)=>{"use strict";n.d(t,{wB:()=>m,UF:()=>p,L0:()=>u,i8:()=>g,OK:()=>d,aA:()=>h,gN:()=>f});var r=n(55592),o=n(28264),a=n(52488);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.c)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=function(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.ot)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.ot)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>{try{return function(e,t,n){void 0===t&&(t=a.M),void 0===n&&(n={});const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function p(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.IT)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.ot)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){return d(e).versions}function h(e){const t=d(e);return s(t)}function m(e){const t=d(e),{pathname:n}=(0,r.IT)();return l(t,n)}function g(e){const t=d(e),{pathname:n}=(0,r.IT)();return function(e,t){const n=s(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},31976:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(22272),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},85396:(e,t,n)=>{"use strict";n.r(t);var r=n(46756),o=n(97768);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(71808),n(58660)(`./prism-${e}`)})),delete globalThis.Prism}(r.sp)},56448:(e,t,n)=>{"use strict";n.d(t,{c:()=>u});n(11504);var r=n(34064),o=n(84357),a=n(21824),i=n(10867),s=n(5976);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(17624);function u(e){let{as:t,id:n,...u}=e;const d=(0,s.c)(),{navbar:{hideOnScroll:p}}=(0,a.y)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const f=(0,o.G)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.c)("anchor",p?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(i.c,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},3232:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});n(11504);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(17624);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},99012:(e,t,n)=>{"use strict";n.d(t,{c:()=>ft});var r=n(11504),o=n(34064),a=n(75852),i=n(68900),s=n(55592),l=n(84357),c=n(27124),u=n(17624);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.Uz)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.c)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const h=(0,l.G)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function m(e){const t=e.children??h,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":h,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var g=n(45864),b=n(60204);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(m,{className:y.skipToContent})}var w=n(21824),x=n(43868);function k(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.G)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.c)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(k,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function z(e){const{announcementBar:t}=(0,w.y)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.c)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const C={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,w.y)(),{isActive:t,close:n}=(0,x.el)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:C.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:C.announcementBarPlaceholder}),(0,u.jsx)(z,{className:C.announcementBarContent}),a&&(0,u.jsx)(E,{onClick:n,className:C.announcementBarClose})]})}var j=n(41336),L=n(53943);var A=n(91100),F=n(45168);const N=r.createContext(null);function P(e){let{children:t}=e;const n=function(){const e=(0,j.q)(),t=(0,F.MF)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,A.i0)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,u.jsx)(N.Provider,{value:n,children:t})}function R(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function D(){const e=(0,r.useContext)(N);if(!e)throw new A.AH("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,F.MF)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:R(a)})),[o,a,t])}function I(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=D();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.c)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var O=n(66528),M=n(93664);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function U(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,M.c)(),s=(0,l.G)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.G)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.G)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.c)($.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.c)("clean-btn",$.toggleButton,!i&&$.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(B,{className:(0,o.c)($.toggleIcon,$.lightToggleIcon)}),(0,u.jsx)(U,{className:(0,o.c)($.toggleIcon,$.darkToggleIcon)})]})})}const W=r.memo(q),H={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function G(e){let{className:t}=e;const n=(0,w.y)().navbar.style,r=(0,w.y)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,O.U)();return r?null:(0,u.jsx)(W,{className:t,buttonClassName:"dark"===n?H.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var V=n(68164);function Y(){return(0,u.jsx)(V.c,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Q(){const e=(0,j.q)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.G)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(k,{color:"var(--ifm-color-emphasis-600)"})})}function K(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(Y,{}),(0,u.jsx)(G,{className:"margin-right--md"}),(0,u.jsx)(Q,{})]})}var X=n(10867),Z=n(70964),J=n(18136);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3232);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,Z.c)(r),p=(0,Z.c)(t),f=(0,Z.c)(o,{forcePrependBaseUrl:!0}),h=a&&o&&!(0,J.c)(o),m=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,h&&(0,u.jsx)(te.c,{...s&&{width:12,height:12}})]})};return o?(0,u.jsx)(X.c,{href:l?f:o,...c,...m}):(0,u.jsx)(X.c,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...c,...m})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,u.jsx)(ne,{className:(0,o.c)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.c)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,u.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(58448),se=n(13376),le=n(28264);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.Sc)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.c)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.c)("navbar__link",a),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(_e,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:a,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.c)(),{pathname:t}=(0,s.IT)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:h}=(0,ie.a)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&h(!d)}),[c,d,h]),(0,u.jsxs)("li",{className:(0,o.c)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.c)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(ie.U,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(_e,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var he=n(1616);function me(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const ge="iconLanguage_nlXk";var be=n(82944);const ye={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ve(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,o.c)(n,ye.navbarSearchContainer),children:t})}var we=n(62840),xe=n(79940);var ke=n(94592);const Se=e=>e.docs.find((t=>t.id===e.mainDocId));const Ee={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.c)(),p=(0,he.D)(),{search:f,hash:h}=(0,s.IT)(),m=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${h}${o}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],g=t?(0,l.G)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(fe,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(me,{className:ge}),g]}),items:m})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(ve,{className:n,children:(0,u.jsx)(be.c,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,u.jsx)(i,{className:(0,o.c)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.wB)(r),i=(0,xe.Qf)(t,r),s=a?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>s||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.wB)(r),i=(0,xe.Ab)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,xe.b7)(r)[0],i=t??a.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ae,{...o,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:c,hash:d}=(0,s.IT)(),p=(0,we.wB)(n),f=(0,we.gN)(n),{savePreferredVersionName:h}=(0,ke.iy)(n),m=[...o,...f.map((e=>{const t=p.alternateDocVersions[e.name]??Se(e);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),...a],g=(0,xe.b7)(n)[0],b=t&&m.length>1?(0,l.G)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):g.label,y=t&&m.length>1?void 0:Se(g).path;return m.length<=1?(0,u.jsx)(ae,{...i,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,u.jsx)(fe,{...i,mobile:t,label:b,to:y,items:m,isActive:r?()=>!1:void 0})}};function _e(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Ee[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...n})}function ze(){const e=(0,j.q)(),t=(0,w.y)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(_e,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ce(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.c,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Te(){const e=0===(0,w.y)().navbar.items.length,t=D();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(Ce,{onClick:()=>t.hide()}),t.content]})}function je(){const e=(0,j.q)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(I,{header:(0,u.jsx)(K,{}),primaryMenu:(0,u.jsx)(ze,{}),secondaryMenu:(0,u.jsx)(Te,{})}):null}const Le={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ae(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.c)("navbar-sidebar__backdrop",e.className)})}function Fe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.y)(),i=(0,j.q)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,L.SM)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void n(!0);if(o.current)return void(o.current=!1);const s=r?.scrollY,l=document.documentElement.scrollHeight-a.current,c=window.innerHeight;s&&i>=s?n(!1):i+c<l&&n(!0)})),(0,c.c)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.G)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.c)("navbar","navbar--fixed-top",n&&[Le.navbarHideable,!d&&Le.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Ae,{onClick:i.toggle}),(0,u.jsx)(je,{})]})}var Ne=n(15684);const Pe={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function Re(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(l.c,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function De(e){let{error:t}=e;const n=(0,Ne.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:Pe.errorBoundaryError,children:n})}class Ie extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Oe="right";function Me(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Be(){const{toggle:e,shown:t}=(0,j.q)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.G)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(Me,{})})}const Ue={colorModeToggle:"colorModeToggle_DEke"};function $e(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(Ie,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(_e,{...e})},t)))})}function qe(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function We(){const e=(0,j.q)(),t=(0,w.y)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Oe)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(qe,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(Be,{}),(0,u.jsx)(Y,{}),(0,u.jsx)($e,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)($e,{items:r}),(0,u.jsx)(G,{className:Ue.colorModeToggle}),!o&&(0,u.jsx)(ve,{children:(0,u.jsx)(be.c,{})})]})})}function He(){return(0,u.jsx)(Fe,{children:(0,u.jsx)(We,{})})}function Ge(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,s=(0,Z.c)(n),l=(0,Z.c)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(X.c,{className:"footer__link-item",...r?{href:a?l:r}:{to:s},...i,children:[o,r&&!(0,J.c)(r)&&(0,u.jsx)(te.c,{})]})}function Ve(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(Ge,{item:t})},t.href??t.to)}function Ye(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(Ve,{item:e},t)))})]})}function Qe(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(Ye,{column:e},t)))})}function Ke(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Xe(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(Ge,{item:t})}function Ze(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(Xe,{item:e}),t.length!==n+1&&(0,u.jsx)(Ke,{})]},n)))})})}function Je(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(Qe,{columns:t}):(0,u.jsx)(Ze,{links:t})}var et=n(61964);const tt={footerLogoLink:"footerLogoLink_BH7S"};function nt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,Z.E)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(et.c,{className:(0,o.c)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function rt(e){let{logo:t}=e;return t.href?(0,u.jsx)(X.c,{href:t.href,className:tt.footerLogoLink,target:t.target,children:(0,u.jsx)(nt,{logo:t})}):(0,u.jsx)(nt,{logo:t})}function ot(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function at(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.c)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function it(){const{footer:e}=(0,w.y)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(at,{style:o,links:n&&n.length>0&&(0,u.jsx)(Je,{links:n}),logo:r&&(0,u.jsx)(rt,{logo:r}),copyright:t&&(0,u.jsx)(ot,{copyright:t})})}const st=r.memo(it),lt=(0,A.qY)([O.C,x.qu,L.S2,ke.gc,i.w7,function(e){let{children:t}=e;return(0,u.jsx)(F.Ub,{children:(0,u.jsx)(j.y,{children:(0,u.jsx)(P,{children:t})})})}]);function ct(e){let{children:t}=e;return(0,u.jsx)(lt,{children:t})}var ut=n(56448);function dt(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(ut.c,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.c,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(Re,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(De,{error:t})})]})})})}const pt={mainWrapper:"mainWrapper_z2l0"};function ft(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,b.W)(),(0,u.jsxs)(ct,{children:[(0,u.jsx)(i.U7,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(T,{}),(0,u.jsx)(He,{}),(0,u.jsx)("div",{id:d,className:(0,o.c)(g.W.wrapper.main,pt.mainWrapper,r),children:(0,u.jsx)(a.c,{fallback:e=>(0,u.jsx)(dt,{...e}),children:t})}),!n&&(0,u.jsx)(st,{})]})}},68164:(e,t,n)=>{"use strict";n.d(t,{c:()=>u});n(11504);var r=n(10867),o=n(70964),a=n(28264),i=n(21824),s=n(61964),l=n(17624);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.c)(t.src),dark:(0,o.c)(t.srcDark||t.src)},i=(0,l.jsx)(s.c,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,a.c)(),{navbar:{title:n,logo:s}}=(0,i.y)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,o.c)(s?.href||"/"),h=n?"":t,m=s?.alt??h;return(0,l.jsxs)(r.c,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:m,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},48712:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});n(11504);var r=n(56952),o=n(17624);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.c,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},61964:(e,t,n)=>{"use strict";n.d(t,{c:()=>u});var r=n(11504),o=n(15420),a=n(93664),i=n(66528);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(17624);function c(e){let{className:t,children:n}=e;const c=(0,a.c)(),{colorMode:u}=(0,i.U)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.c)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},58448:(e,t,n)=>{"use strict";n.d(t,{U:()=>b,a:()=>c});var r=n(11504),o=n(98684),a=n(95288),i=n(13856),s=n(17624);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,i.I)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function h(e){if(!o.c.canUseDOM)return e?u:d}function m(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),(0,s.jsx)(t,{ref:u,style:c?void 0:h(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),i?.(n))},className:l,children:o})}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,a.c)((()=>{t||i(!0)}),[t]),(0,a.c)((()=>{o&&c(t)}),[o,t]),o?(0,s.jsx)(m,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?g:m;return(0,s.jsx)(r,{...n})}},43868:(e,t,n)=>{"use strict";n.d(t,{el:()=>m,qu:()=>h});var r=n(11504),o=n(93664),a=n(21148),i=n(91100),s=n(21824),l=n(17624);const c=(0,a.GS)("docusaurus.announcement.dismiss"),u=(0,a.GS)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function h(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.y)(),t=(0,o.c)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.AH("AnnouncementBarProvider");return e}},66528:(e,t,n)=>{"use strict";n.d(t,{C:()=>g,U:()=>b});var r=n(11504),o=n(98684),a=n(91100),i=n(21148),s=n(21824),l=n(17624);const c=r.createContext(void 0),u="theme",d=(0,i.GS)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,h=e=>o.c.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{d.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.y)(),[o,a]=(0,r.useState)(h(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(c);if(null==e)throw new a.AH("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},94592:(e,t,n)=>{"use strict";n.d(t,{gc:()=>b,iy:()=>v});var r=n(11504),o=n(62840),a=n(52488),i=n(21824),s=n(79940),l=n(91100),c=n(21148),u=n(17624);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,c.GS)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.GS)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.GS)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const h=r.createContext(null);function m(){const e=(0,o.L0)(),t=(0,i.y)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return(0,u.jsx)(h.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return s.c1?(0,u.jsx)(g,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function y(){const e=(0,r.useContext)(h);if(!e)throw new l.AH("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.M);const t=(0,o.OK)(e),[n,i]=y(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},46192:(e,t,n)=>{"use strict";n.d(t,{m:()=>c,y:()=>l});var r=n(11504),o=n(91100),a=n(17624);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new o.AH("DocsSidebarProvider");return e}},69920:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,Q:()=>s});var r=n(11504),o=n(91100),a=n(17624);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new o.AH("DocsVersionProvider");return e}},41336:(e,t,n)=>{"use strict";n.d(t,{y:()=>f,q:()=>h});var r=n(11504),o=n(45168),a=n(11432),i=n(55592),s=n(91100);function l(e){!function(e){const t=(0,i.Uz)(),n=(0,s.yA)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(21824),u=n(17624);const d=r.createContext(void 0);function p(){const e=function(){const e=(0,o.MF)(),{items:t}=(0,c.y)().navbar;return 0===t.length&&!e.component}(),t=(0,a.U)(),n=!e&&"mobile"===t,[i,s]=(0,r.useState)(!1);l((()=>{if(i)return s(!1),!1}));const u=(0,r.useCallback)((()=>{s((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:i})),[e,n,u,i])}function f(e){let{children:t}=e;const n=p();return(0,u.jsx)(d.Provider,{value:n,children:t})}function h(){const e=r.useContext(d);if(void 0===e)throw new s.AH("NavbarMobileSidebarProvider");return e}},45168:(e,t,n)=>{"use strict";n.d(t,{MF:()=>l,Mx:()=>c,Ub:()=>s});var r=n(11504),o=n(91100),a=n(17624);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new o.AH("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.AH("NavbarSecondaryMenuContentProvider");const[,s]=a,l=(0,o.Mh)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},60204:(e,t,n)=>{"use strict";n.d(t,{m:()=>o,W:()=>a});var r=n(11504);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},11432:(e,t,n)=>{"use strict";n.d(t,{U:()=>s});var r=n(11504),o=n(98684);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!o.c.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},45864:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"}}},13856:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{I:()=>r})},79940:(e,t,n)=>{"use strict";n.d(t,{Gw:()=>f,Md:()=>g,c1:()=>p,Uj:()=>E,b7:()=>x,Qf:()=>S,Ab:()=>k,js:()=>w,mg:()=>y});var r=n(11504),o=n(55592),a=n(85464),i=n(62840),s=n(94592),l=n(69920),c=n(46192);function u(e){return Array.from(new Set(e))}var d=n(13376);const p=!!i.L0;function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}const h=(e,t)=>void 0!==e&&(0,d.Sc)(e,t),m=(e,t)=>e.some((e=>g(e,t)));function g(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||m(e.items,t))}function b(e,t){switch(e.type){case"category":return g(e,t)||e.items.some((e=>b(e,t)));case"link":return!e.unlisted||g(e,t);default:return!0}}function y(e,t){return(0,r.useMemo)((()=>e.filter((e=>b(e,t)))),[e,t])}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.Sc)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.Sc)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function w(){const e=(0,c.m)(),{pathname:t}=(0,o.IT)(),n=(0,i.UF)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function x(e){const{activeVersion:t}=(0,i.wB)(e),{preferredVersion:n}=(0,s.iy)(e),o=(0,i.aA)(e);return(0,r.useMemo)((()=>u([t,n,o].filter(Boolean))),[t,n,o])}function k(e,t){const n=x(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=x(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t}=e;const n=(0,o.IT)(),r=(0,l.E)(),i=t.routes,s=i.find((e=>(0,o.ot)(n.pathname,e)));if(!s)return null;const c=s.sidebar,u=c?r.docsSidebars[c]:void 0;return{docElement:(0,a.k)(i),sidebarName:c,sidebarItems:u}}},68900:(e,t,n)=>{"use strict";n.d(t,{cr:()=>p,U7:()=>u,w7:()=>f});var r=n(11504),o=n(15420),a=n(56952),i=n(85308),s=n(70964),l=n(28264);var c=n(17624);function u(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const u=function(e){const{siteConfig:t}=(0,l.c)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.E)(),p=o?d(o,{absolute:!0}):void 0;return(0,c.jsxs)(a.c,{children:[t&&(0,c.jsx)("title",{children:u}),t&&(0,c.jsx)("meta",{property:"og:title",content:u}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,c.jsx)("meta",{property:"og:image",content:p}),p&&(0,c.jsx)("meta",{name:"twitter:image",content:p}),i]})}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),s=(0,o.c)(i,t);return(0,c.jsxs)(d.Provider,{value:s,children:[(0,c.jsx)(a.c,{children:(0,c.jsx)("html",{className:s})}),n]})}function f(e){let{children:t}=e;const n=(0,i.c)(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(p,{className:(0,o.c)(r,a),children:t})}},91100:(e,t,n)=>{"use strict";n.d(t,{AH:()=>l,Mh:()=>c,i0:()=>s,qY:()=>u,yA:()=>i});var r=n(11504),o=n(95288),a=n(17624);function i(e){const t=(0,r.useRef)(e);return(0,o.c)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,o.c)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},13376:(e,t,n)=>{"use strict";n.d(t,{Sc:()=>i,Y5:()=>s});var r=n(11504),o=n(628),a=n(28264);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,a.c)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.c,baseUrl:e})),[e])}},53943:(e,t,n)=>{"use strict";n.d(t,{S2:()=>c,SM:()=>p,yI:()=>f});var r=n(11504),o=n(98684),a=n(93664),i=(n(95288),n(91100)),s=n(17624);const l=r.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,s.jsx)(l.Provider,{value:n,children:t})}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.AH("ScrollControllerProvider");return e}const d=()=>o.c.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(d()),a=(0,i.yA)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,a.c)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},14456:(e,t,n)=>{"use strict";n.d(t,{SE:()=>o,e6:()=>r});n(28264);const r="default";function o(e,t){return`docs-${e}-${t}`}},21148:(e,t,n)=>{"use strict";n.d(t,{GS:()=>l});n(11504);const r="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=a(t?.persistence);return null===n?s:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},1616:(e,t,n)=>{"use strict";n.d(t,{D:()=>i});var r=n(28264),o=n(55592),a=n(15684);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.c)(),{pathname:l}=(0,o.IT)(),c=(0,a.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},27124:(e,t,n)=>{"use strict";n.d(t,{c:()=>i});var r=n(11504),o=n(55592),a=n(91100);function i(e){const t=(0,o.IT)(),n=(0,a.i0)(t),i=(0,a.yA)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},21824:(e,t,n)=>{"use strict";n.d(t,{y:()=>o});var r=n(28264);function o(){return(0,r.c)().siteConfig.themeConfig}},21600:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=void 0;const r=n(32112);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,r.removeSuffix)(e,"/")}t.addTrailingSlash=o,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),s="/"===i||i===r?i:(l=i,n?o(l):a(l));var l;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=a},64292:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},15684:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(21600);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}}),Object.defineProperty(t,"addTrailingSlash",{enumerable:!0,get:function(){return o.addTrailingSlash}}),Object.defineProperty(t,"addLeadingSlash",{enumerable:!0,get:function(){return o.addLeadingSlash}}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return o.removeTrailingSlash}});var a=n(32112);Object.defineProperty(t,"addPrefix",{enumerable:!0,get:function(){return a.addPrefix}}),Object.defineProperty(t,"removeSuffix",{enumerable:!0,get:function(){return a.removeSuffix}}),Object.defineProperty(t,"addSuffix",{enumerable:!0,get:function(){return a.addSuffix}}),Object.defineProperty(t,"removePrefix",{enumerable:!0,get:function(){return a.removePrefix}});var i=n(64292);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},32112:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=void 0,t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){return""===t?e:e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},58064:(e,t,n)=>{"use strict";n.d(t,{iU:()=>w,Yf:()=>z,gh:()=>f,Wi:()=>T,Ep:()=>p});var r=n(86404);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],s=e&&o(e),l=t&&o(t),c=s||l;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var u=i[i.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=i.length;p>=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var h=i.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};var s=n(66136);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.c)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function h(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var m=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var b="popstate",y="hashchange";function v(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),m||(0,s.c)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,c=i.forceRefresh,w=void 0!==c&&c,x=i.getUserConfirmation,k=void 0===x?g:x,S=i.keyLength,E=void 0===S?6:S,_=e.basename?d(l(e.basename)):"";function z(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return _&&(a=u(a,_)),f(a,r,n)}function C(){return Math.random().toString(36).substr(2,E)}var T=h();function j(e){(0,r.c)(U,e),U.length=n.length,T.notifyListeners(U.location,U.action)}function L(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||N(z(e.state))}function A(){N(z(v()))}var F=!1;function N(e){if(F)F=!1,j();else{T.confirmTransitionTo(e,"POP",k,(function(t){t?j({action:"POP",location:e}):function(e){var t=U.location,n=R.indexOf(t.key);-1===n&&(n=0);var r=R.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(F=!0,I(o))}(e)}))}}var P=z(v()),R=[P.key];function D(e){return _+p(e)}function I(e){n.go(e)}var O=0;function M(e){1===(O+=e)&&1===e?(window.addEventListener(b,L),a&&window.addEventListener(y,A)):0===O&&(window.removeEventListener(b,L),a&&window.removeEventListener(y,A))}var B=!1;var U={length:n.length,action:"POP",location:P,createHref:D,push:function(e,t){var r="PUSH",a=f(e,t,C(),U.location);T.confirmTransitionTo(a,r,k,(function(e){if(e){var t=D(a),i=a.key,s=a.state;if(o)if(n.pushState({key:i,state:s},null,t),w)window.location.href=t;else{var l=R.indexOf(U.location.key),c=R.slice(0,l+1);c.push(a.key),R=c,j({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,C(),U.location);T.confirmTransitionTo(a,r,k,(function(e){if(e){var t=D(a),i=a.key,s=a.state;if(o)if(n.replaceState({key:i,state:s},null,t),w)window.location.replace(t);else{var l=R.indexOf(U.location.key);-1!==l&&(R[l]=a.key),j({action:r,location:a})}else window.location.replace(t)}}))},go:I,goBack:function(){I(-1)},goForward:function(){I(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return B||(M(1),B=!0),function(){return B&&(B=!1,M(-1)),t()}},listen:function(e){var t=T.appendListener(e);return M(1),function(){M(-1),t()}}};return U}var x="hashchange",k={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:l},slash:{encodePath:l,decodePath:l}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function E(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function _(e){window.location.replace(S(window.location.href)+"#"+e)}function z(e){void 0===e&&(e={}),m||(0,s.c)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?g:o,i=n.hashType,c=void 0===i?"slash":i,b=e.basename?d(l(e.basename)):"",y=k[c],v=y.encodePath,w=y.decodePath;function z(){var e=w(E());return b&&(e=u(e,b)),f(e)}var C=h();function T(e){(0,r.c)(B,e),B.length=t.length,C.notifyListeners(B.location,B.action)}var j=!1,L=null;function A(){var e,t,n=E(),r=v(n);if(n!==r)_(r);else{var o=z(),i=B.location;if(!j&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(L===p(o))return;L=null,function(e){if(j)j=!1,T();else{var t="POP";C.confirmTransitionTo(e,t,a,(function(n){n?T({action:t,location:e}):function(e){var t=B.location,n=R.lastIndexOf(p(t));-1===n&&(n=0);var r=R.lastIndexOf(p(e));-1===r&&(r=0);var o=n-r;o&&(j=!0,D(o))}(e)}))}}(o)}}var F=E(),N=v(F);F!==N&&_(N);var P=z(),R=[p(P)];function D(e){t.go(e)}var I=0;function O(e){1===(I+=e)&&1===e?window.addEventListener(x,A):0===I&&window.removeEventListener(x,A)}var M=!1;var B={length:t.length,action:"POP",location:P,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+v(b+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,B.location);C.confirmTransitionTo(r,n,a,(function(e){if(e){var t=p(r),o=v(b+t);if(E()!==o){L=t,function(e){window.location.hash=e}(o);var a=R.lastIndexOf(p(B.location)),i=R.slice(0,a+1);i.push(t),R=i,T({action:n,location:r})}else T()}}))},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,B.location);C.confirmTransitionTo(r,n,a,(function(e){if(e){var t=p(r),o=v(b+t);E()!==o&&(L=t,_(o));var a=R.indexOf(p(B.location));-1!==a&&(R[a]=t),T({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return M||(O(1),M=!0),function(){return M&&(M=!1,O(-1)),t()}},listen:function(e){var t=C.appendListener(e);return O(1),function(){O(-1),t()}}};return B}function C(e,t,n){return Math.min(Math.max(e,t),n)}function T(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,s=void 0===i?0:i,l=t.keyLength,c=void 0===l?6:l,u=h();function d(e){(0,r.c)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function m(){return Math.random().toString(36).substr(2,c)}var g=C(s,0,a.length-1),b=a.map((function(e){return f(e,void 0,"string"==typeof e?m():e.key||m())})),y=p;function v(e){var t=C(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[g],index:g,entries:b,createHref:y,push:function(e,t){var r="PUSH",o=f(e,t,m(),w.location);u.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,m(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},84792:(e,t,n)=>{"use strict";var r=n(62168),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var o=f(n);o&&o!==h&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),m=l(n),g=0;g<i.length;++g){var b=i[g];if(!(a[b]||r&&r[b]||m&&m[b]||s&&s[b])){var y=p(n,b);try{c(t,b,y)}catch(v){}}}}return t}},79328:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},59600:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},1462:(e,t,n)=>{"use strict";n.r(t)},71496:(e,t,n)=>{"use strict";n.r(t)},22272:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),s=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},37248:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},90452:(e,t,n)=>{const r=n(37248),o=n(88284),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(51976).resolve(t)],delete Prism.languages[e],n(51976)(t),a.add(e)}))}i.silent=!1,e.exports=i},71808:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(r,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(s){for(var l=0;l<s.length&&!(o>=a.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),h=p.indexOf(f);if(h>-1){++o;var m=p.substring(0,h),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(h+f.length),y=[];m&&y.push.apply(y,i([m])),y.push(g),b&&y.push.apply(y,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},58660:(e,t,n)=>{var r={"./":90452};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=58660},51976:(e,t,n)=>{var r={"./":90452};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=51976},88284:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function o(r,a){if(!(r in n)){a.push(r);var i=a.indexOf(r);if(i<a.length-1)throw new Error("Circular dependency: "+a.slice(i).join(" -> "));var s={},l=e[r];if(l){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in s))for(var i in o(t,a),s[t]=!0,n[t])s[i]=!0}t(l.require,c),t(l.optional,c),t(l.modify,c)}n[r]=s,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,s){var l=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(l);i=i.map(c),s=(s||[]).map(c);var u=n(i),d=n(s);i.forEach((function e(n){var r=l[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var p,f=r(l),h=u;o(h);){for(var m in p={},h){var g=l[m];t(g&&g.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in u))for(var y in f(b))if(y in u){p[b]=!0;break}for(var v in h=p)u[v]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,s={},l={};function c(e){if(e in s)return s[e];l[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=r(e);else{var p=i(u.map((function(e){var t=c(e);return delete l[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return s[e]=o}for(var u in n)c(u);var d=[];for(var p in l)d.push(s[p]);return i(d)}(f,u,t,n)}};return w}}();e.exports=t},39776:(e,t,n)=>{"use strict";var r=n(69143);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},3268:(e,t,n)=>{e.exports=n(39776)()},69143:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},79516:(e,t,n)=>{"use strict";var r=n(11504),o=n(14712);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i=new Set,s={};function l(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)i.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},h={};function m(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var g={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){g[e]=new m(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];g[t]=new m(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){g[e]=new m(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){g[e]=new m(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){g[e]=new m(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){g[e]=new m(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){g[e]=new m(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){g[e]=new m(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){g[e]=new m(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function v(e,t,n,r){var o=g.hasOwnProperty(t)?g[t]:null;(null!==o?0!==o.type:r||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!d.call(h,e)||!d.call(f,e)&&(p.test(e)?h[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,y);g[t]=new m(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,y);g[t]=new m(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,y);g[t]=new m(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){g[e]=new m(e,1,!1,e.toLowerCase(),null,!1,!1)})),g.xlinkHref=new m("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){g[e]=new m(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,x=Symbol.for("react.element"),k=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),E=Symbol.for("react.strict_mode"),_=Symbol.for("react.profiler"),z=Symbol.for("react.provider"),C=Symbol.for("react.context"),T=Symbol.for("react.forward_ref"),j=Symbol.for("react.suspense"),L=Symbol.for("react.suspense_list"),A=Symbol.for("react.memo"),F=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var N=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var P=Symbol.iterator;function R(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=P&&e[P]||e["@@iterator"])?e:null}var D,I=Object.assign;function O(e){if(void 0===D)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);D=t&&t[1]||""}return"\n"+D+e}var M=!1;function B(e,t){if(!e||M)return"";M=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var r=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){r=c}e.call(t.prototype)}else{try{throw Error()}catch(c){r=c}e()}}catch(c){if(c&&r&&"string"==typeof c.stack){for(var o=c.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,s=a.length-1;1<=i&&0<=s&&o[i]!==a[s];)s--;for(;1<=i&&0<=s;i--,s--)if(o[i]!==a[s]){if(1!==i||1!==s)do{if(i--,0>--s||o[i]!==a[s]){var l="\n"+o[i].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}}while(1<=i&&0<=s);break}}}finally{M=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?O(e):""}function U(e){switch(e.tag){case 5:return O(e.type);case 16:return O("Lazy");case 13:return O("Suspense");case 19:return O("SuspenseList");case 0:case 2:case 15:return e=B(e.type,!1);case 11:return e=B(e.type.render,!1);case 1:return e=B(e.type,!0);default:return""}}function $(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case S:return"Fragment";case k:return"Portal";case _:return"Profiler";case E:return"StrictMode";case j:return"Suspense";case L:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case C:return(e.displayName||"Context")+".Consumer";case z:return(e._context.displayName||"Context")+".Provider";case T:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case A:return null!==(t=e.displayName||null)?t:$(e.type)||"Memo";case F:t=e._payload,e=e._init;try{return $(e(t))}catch(n){}}return null}function q(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return $(t);case 8:return t===E?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function W(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function H(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function G(e){e._valueTracker||(e._valueTracker=function(e){var t=H(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function V(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=H(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function Y(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function Q(e,t){var n=t.checked;return I({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function K(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=W(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function X(e,t){null!=(t=t.checked)&&v(e,"checked",t,!1)}function Z(e,t){X(e,t);var n=W(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,W(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&Y(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+W(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return I({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(te(n)){if(1<n.length)throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:W(n)}}function ae(e,t){var n=W(t.value),r=W(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ie(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function se(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function le(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?se(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ce,ue,de=(ue=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ce=ce||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function pe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},he=["Webkit","ms","Moz","O"];function me(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function ge(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=me(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(fe).forEach((function(e){he.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var be=I({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ye(e,t){if(t){if(be[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function ve(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var ke=null,Se=null,Ee=null;function _e(e){if(e=wo(e)){if("function"!=typeof ke)throw Error(a(280));var t=e.stateNode;t&&(t=ko(t),ke(e.stateNode,e.type,t))}}function ze(e){Se?Ee?Ee.push(e):Ee=[e]:Se=e}function Ce(){if(Se){var e=Se,t=Ee;if(Ee=Se=null,_e(e),t)for(e=0;e<t.length;e++)_e(t[e])}}function Te(e,t){return e(t)}function je(){}var Le=!1;function Ae(e,t,n){if(Le)return e(t,n);Le=!0;try{return Te(e,t,n)}finally{Le=!1,(null!==Se||null!==Ee)&&(je(),Ce())}}function Fe(e,t){var n=e.stateNode;if(null===n)return null;var r=ko(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}var Ne=!1;if(u)try{var Pe={};Object.defineProperty(Pe,"passive",{get:function(){Ne=!0}}),window.addEventListener("test",Pe,Pe),window.removeEventListener("test",Pe,Pe)}catch(ue){Ne=!1}function Re(e,t,n,r,o,a,i,s,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(u){this.onError(u)}}var De=!1,Ie=null,Oe=!1,Me=null,Be={onError:function(e){De=!0,Ie=e}};function Ue(e,t,n,r,o,a,i,s,l){De=!1,Ie=null,Re.apply(Be,arguments)}function $e(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function qe(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function We(e){if($e(e)!==e)throw Error(a(188))}function He(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=$e(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(r=o.return)){n=r;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return We(o),e;if(i===r)return We(o),t;i=i.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=i;else{for(var s=!1,l=o.child;l;){if(l===n){s=!0,n=o,r=i;break}if(l===r){s=!0,r=o,n=i;break}l=l.sibling}if(!s){for(l=i.child;l;){if(l===n){s=!0,n=i,r=o;break}if(l===r){s=!0,r=i,n=o;break}l=l.sibling}if(!s)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e))?Ge(e):null}function Ge(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=Ge(e);if(null!==t)return t;e=e.sibling}return null}var Ve=o.unstable_scheduleCallback,Ye=o.unstable_cancelCallback,Qe=o.unstable_shouldYield,Ke=o.unstable_requestPaint,Xe=o.unstable_now,Ze=o.unstable_getCurrentPriorityLevel,Je=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,nt=o.unstable_LowPriority,rt=o.unstable_IdlePriority,ot=null,at=null;var it=Math.clz32?Math.clz32:function(e){return e>>>=0,0===e?32:31-(st(e)/lt|0)|0},st=Math.log,lt=Math.LN2;var ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,o=e.suspendedLanes,a=e.pingedLanes,i=268435455&n;if(0!==i){var s=i&~o;0!==s?r=dt(s):0!==(a&=i)&&(r=dt(a))}else 0!==(i=n&~o)?r=dt(i):0!==a&&(r=dt(a));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&o)&&((o=r&-r)>=(a=t&-t)||16===o&&0!=(4194240&a)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-it(t)),r|=e[n],t&=~o;return r}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function ht(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function mt(){var e=ct;return 0==(4194240&(ct<<=1))&&(ct=64),e}function gt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function bt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function yt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-it(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}var vt=0;function wt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var xt,kt,St,Et,_t,zt=!1,Ct=[],Tt=null,jt=null,Lt=null,At=new Map,Ft=new Map,Nt=[],Pt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function Rt(e,t){switch(e){case"focusin":case"focusout":Tt=null;break;case"dragenter":case"dragleave":jt=null;break;case"mouseover":case"mouseout":Lt=null;break;case"pointerover":case"pointerout":At.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Ft.delete(t.pointerId)}}function Dt(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&(null!==(t=wo(t))&&kt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function It(e){var t=vo(e.target);if(null!==t){var n=$e(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=qe(n)))return e.blockedOn=t,void _t(e.priority,(function(){St(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Ot(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Qt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=wo(n))&&kt(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);we=r,n.target.dispatchEvent(r),we=null,t.shift()}return!0}function Mt(e,t,n){Ot(e)&&n.delete(t)}function Bt(){zt=!1,null!==Tt&&Ot(Tt)&&(Tt=null),null!==jt&&Ot(jt)&&(jt=null),null!==Lt&&Ot(Lt)&&(Lt=null),At.forEach(Mt),Ft.forEach(Mt)}function Ut(e,t){e.blockedOn===t&&(e.blockedOn=null,zt||(zt=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,Bt)))}function $t(e){function t(t){return Ut(t,e)}if(0<Ct.length){Ut(Ct[0],e);for(var n=1;n<Ct.length;n++){var r=Ct[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==Tt&&Ut(Tt,e),null!==jt&&Ut(jt,e),null!==Lt&&Ut(Lt,e),At.forEach(t),Ft.forEach(t),n=0;n<Nt.length;n++)(r=Nt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<Nt.length&&null===(n=Nt[0]).blockedOn;)It(n),null===n.blockedOn&&Nt.shift()}var qt=w.ReactCurrentBatchConfig,Wt=!0;function Ht(e,t,n,r){var o=vt,a=qt.transition;qt.transition=null;try{vt=1,Vt(e,t,n,r)}finally{vt=o,qt.transition=a}}function Gt(e,t,n,r){var o=vt,a=qt.transition;qt.transition=null;try{vt=4,Vt(e,t,n,r)}finally{vt=o,qt.transition=a}}function Vt(e,t,n,r){if(Wt){var o=Qt(e,t,n,r);if(null===o)Wr(e,t,r,Yt,n),Rt(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return Tt=Dt(Tt,e,t,n,r,o),!0;case"dragenter":return jt=Dt(jt,e,t,n,r,o),!0;case"mouseover":return Lt=Dt(Lt,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return At.set(a,Dt(At.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,Ft.set(a,Dt(Ft.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(Rt(e,r),4&t&&-1<Pt.indexOf(e)){for(;null!==o;){var a=wo(o);if(null!==a&&xt(a),null===(a=Qt(e,t,n,r))&&Wr(e,t,r,Yt,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Wr(e,t,r,null,n)}}var Yt=null;function Qt(e,t,n,r){if(Yt=null,null!==(e=vo(e=xe(r))))if(null===(t=$e(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=qe(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Yt=e,null}function Kt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Ze()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case rt:return 536870912;default:return 16}default:return 16}}var Xt=null,Zt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Zt,r=n.length,o="value"in Xt?Xt.value:Xt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return Jt=o.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function rn(){return!1}function on(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nn:rn,this.isPropagationStopped=rn,this}return I(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var an,sn,ln,cn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},un=on(cn),dn=I({},cn,{view:0,detail:0}),pn=on(dn),fn=I({},dn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:_n,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==ln&&(ln&&"mousemove"===e.type?(an=e.screenX-ln.screenX,sn=e.screenY-ln.screenY):sn=an=0,ln=e),an)},movementY:function(e){return"movementY"in e?e.movementY:sn}}),hn=on(fn),mn=on(I({},fn,{dataTransfer:0})),gn=on(I({},dn,{relatedTarget:0})),bn=on(I({},cn,{animationName:0,elapsedTime:0,pseudoElement:0})),yn=I({},cn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),vn=on(yn),wn=on(I({},cn,{data:0})),xn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},kn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Sn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function En(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Sn[e])&&!!t[e]}function _n(){return En}var zn=I({},dn,{key:function(e){if(e.key){var t=xn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?kn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:_n,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Cn=on(zn),Tn=on(I({},fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),jn=on(I({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:_n})),Ln=on(I({},cn,{propertyName:0,elapsedTime:0,pseudoElement:0})),An=I({},fn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Fn=on(An),Nn=[9,13,27,32],Pn=u&&"CompositionEvent"in window,Rn=null;u&&"documentMode"in document&&(Rn=document.documentMode);var Dn=u&&"TextEvent"in window&&!Rn,In=u&&(!Pn||Rn&&8<Rn&&11>=Rn),On=String.fromCharCode(32),Mn=!1;function Bn(e,t){switch(e){case"keyup":return-1!==Nn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Un(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var $n=!1;var qn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Wn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!qn[e.type]:"textarea"===t}function Hn(e,t,n,r){ze(r),0<(t=Gr(t,"onChange")).length&&(n=new un("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Gn=null,Vn=null;function Yn(e){Or(e,0)}function Qn(e){if(V(xo(e)))return e}function Kn(e,t){if("change"===e)return t}var Xn=!1;if(u){var Zn;if(u){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Zn=Jn}else Zn=!1;Xn=Zn&&(!document.documentMode||9<document.documentMode)}function tr(){Gn&&(Gn.detachEvent("onpropertychange",nr),Vn=Gn=null)}function nr(e){if("value"===e.propertyName&&Qn(Vn)){var t=[];Hn(t,Vn,e,xe(e)),Ae(Yn,t)}}function rr(e,t,n){"focusin"===e?(tr(),Vn=n,(Gn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function or(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Qn(Vn)}function ar(e,t){if("click"===e)return Qn(t)}function ir(e,t){if("input"===e||"change"===e)return Qn(t)}var sr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function lr(e,t){if(sr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!d.call(t,o)||!sr(e[o],t[o]))return!1}return!0}function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ur(e,t){var n,r=cr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=Y();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=Y((e=t.contentWindow).document)}return t}function fr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function hr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&fr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,a=Math.min(r.start,o);r=void 0===r.end?a:Math.min(r.end,o),!e.extend&&a>r&&(o=r,r=a,a=o),o=ur(n,a);var i=ur(n,r);o&&i&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),a>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var mr=u&&"documentMode"in document&&11>=document.documentMode,gr=null,br=null,yr=null,vr=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;vr||null==gr||gr!==Y(r)||("selectionStart"in(r=gr)&&fr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},yr&&lr(yr,r)||(yr=r,0<(r=Gr(br,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=gr)))}function xr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var kr={animationend:xr("Animation","AnimationEnd"),animationiteration:xr("Animation","AnimationIteration"),animationstart:xr("Animation","AnimationStart"),transitionend:xr("Transition","TransitionEnd")},Sr={},Er={};function _r(e){if(Sr[e])return Sr[e];if(!kr[e])return e;var t,n=kr[e];for(t in n)if(n.hasOwnProperty(t)&&t in Er)return Sr[e]=n[t];return e}u&&(Er=document.createElement("div").style,"AnimationEvent"in window||(delete kr.animationend.animation,delete kr.animationiteration.animation,delete kr.animationstart.animation),"TransitionEvent"in window||delete kr.transitionend.transition);var zr=_r("animationend"),Cr=_r("animationiteration"),Tr=_r("animationstart"),jr=_r("transitionend"),Lr=new Map,Ar="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Fr(e,t){Lr.set(e,t),l(t,[e])}for(var Nr=0;Nr<Ar.length;Nr++){var Pr=Ar[Nr];Fr(Pr.toLowerCase(),"on"+(Pr[0].toUpperCase()+Pr.slice(1)))}Fr(zr,"onAnimationEnd"),Fr(Cr,"onAnimationIteration"),Fr(Tr,"onAnimationStart"),Fr("dblclick","onDoubleClick"),Fr("focusin","onFocus"),Fr("focusout","onBlur"),Fr(jr,"onTransitionEnd"),c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),l("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),l("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),l("onBeforeInput",["compositionend","keypress","textInput","paste"]),l("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Rr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Dr=new Set("cancel close invalid load scroll toggle".split(" ").concat(Rr));function Ir(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,i,s,l,c){if(Ue.apply(this,arguments),De){if(!De)throw Error(a(198));var u=Ie;De=!1,Ie=null,Oe||(Oe=!0,Me=u)}}(r,t,void 0,e),e.currentTarget=null}function Or(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==a&&o.isPropagationStopped())break e;Ir(o,s,c),a=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,c=s.currentTarget,s=s.listener,l!==a&&o.isPropagationStopped())break e;Ir(o,s,c),a=l}}}if(Oe)throw e=Me,Oe=!1,Me=null,e}function Mr(e,t){var n=t[go];void 0===n&&(n=t[go]=new Set);var r=e+"__bubble";n.has(r)||(qr(t,e,2,!1),n.add(r))}function Br(e,t,n){var r=0;t&&(r|=4),qr(n,e,r,t)}var Ur="_reactListening"+Math.random().toString(36).slice(2);function $r(e){if(!e[Ur]){e[Ur]=!0,i.forEach((function(t){"selectionchange"!==t&&(Dr.has(t)||Br(t,!1,e),Br(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[Ur]||(t[Ur]=!0,Br("selectionchange",!1,t))}}function qr(e,t,n,r){switch(Kt(t)){case 1:var o=Ht;break;case 4:o=Gt;break;default:o=Vt}n=o.bind(null,t,n,e),o=void 0,!Ne||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Wr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var s=r.stateNode.containerInfo;if(s===o||8===s.nodeType&&s.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var l=i.tag;if((3===l||4===l)&&((l=i.stateNode.containerInfo)===o||8===l.nodeType&&l.parentNode===o))return;i=i.return}for(;null!==s;){if(null===(i=vo(s)))return;if(5===(l=i.tag)||6===l){r=a=i;continue e}s=s.parentNode}}r=r.return}Ae((function(){var r=a,o=xe(n),i=[];e:{var s=Lr.get(e);if(void 0!==s){var l=un,c=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":l=Cn;break;case"focusin":c="focus",l=gn;break;case"focusout":c="blur",l=gn;break;case"beforeblur":case"afterblur":l=gn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=hn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=mn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=jn;break;case zr:case Cr:case Tr:l=bn;break;case jr:l=Ln;break;case"scroll":l=pn;break;case"wheel":l=Fn;break;case"copy":case"cut":case"paste":l=vn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=Tn}var u=0!=(4&t),d=!u&&"scroll"===e,p=u?null!==s?s+"Capture":null:s;u=[];for(var f,h=r;null!==h;){var m=(f=h).stateNode;if(5===f.tag&&null!==m&&(f=m,null!==p&&(null!=(m=Fe(h,p))&&u.push(Hr(h,m,f)))),d)break;h=h.return}0<u.length&&(s=new l(s,c,null,n,o),i.push({event:s,listeners:u}))}}if(0==(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||n===we||!(c=n.relatedTarget||n.fromElement)||!vo(c)&&!c[mo])&&(l||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,l?(l=r,null!==(c=(c=n.relatedTarget||n.toElement)?vo(c):null)&&(c!==(d=$e(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=hn,m="onMouseLeave",p="onMouseEnter",h="mouse","pointerout"!==e&&"pointerover"!==e||(u=Tn,m="onPointerLeave",p="onPointerEnter",h="pointer"),d=null==l?s:xo(l),f=null==c?s:xo(c),(s=new u(m,h+"leave",l,n,o)).target=d,s.relatedTarget=f,m=null,vo(o)===r&&((u=new u(p,h+"enter",c,n,o)).target=f,u.relatedTarget=d,m=u),d=m,l&&c)e:{for(p=c,h=0,f=u=l;f;f=Vr(f))h++;for(f=0,m=p;m;m=Vr(m))f++;for(;0<h-f;)u=Vr(u),h--;for(;0<f-h;)p=Vr(p),f--;for(;h--;){if(u===p||null!==p&&u===p.alternate)break e;u=Vr(u),p=Vr(p)}u=null}else u=null;null!==l&&Yr(i,s,l,u,!1),null!==c&&null!==d&&Yr(i,d,c,u,!0)}if("select"===(l=(s=r?xo(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var g=Kn;else if(Wn(s))if(Xn)g=ir;else{g=or;var b=rr}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(g=ar);switch(g&&(g=g(e,r))?Hn(i,g,n,o):(b&&b(e,s,r),"focusout"===e&&(b=s._wrapperState)&&b.controlled&&"number"===s.type&&ee(s,"number",s.value)),b=r?xo(r):window,e){case"focusin":(Wn(b)||"true"===b.contentEditable)&&(gr=b,br=r,yr=null);break;case"focusout":yr=br=gr=null;break;case"mousedown":vr=!0;break;case"contextmenu":case"mouseup":case"dragend":vr=!1,wr(i,n,o);break;case"selectionchange":if(mr)break;case"keydown":case"keyup":wr(i,n,o)}var y;if(Pn)e:{switch(e){case"compositionstart":var v="onCompositionStart";break e;case"compositionend":v="onCompositionEnd";break e;case"compositionupdate":v="onCompositionUpdate";break e}v=void 0}else $n?Bn(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(In&&"ko"!==n.locale&&($n||"onCompositionStart"!==v?"onCompositionEnd"===v&&$n&&(y=en()):(Zt="value"in(Xt=o)?Xt.value:Xt.textContent,$n=!0)),0<(b=Gr(r,v)).length&&(v=new wn(v,e,null,n,o),i.push({event:v,listeners:b}),y?v.data=y:null!==(y=Un(n))&&(v.data=y))),(y=Dn?function(e,t){switch(e){case"compositionend":return Un(t);case"keypress":return 32!==t.which?null:(Mn=!0,On);case"textInput":return(e=t.data)===On&&Mn?null:e;default:return null}}(e,n):function(e,t){if($n)return"compositionend"===e||!Pn&&Bn(e,t)?(e=en(),Jt=Zt=Xt=null,$n=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return In&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Gr(r,"onBeforeInput")).length&&(o=new wn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=y))}Or(i,t)}))}function Hr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Gr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Fe(e,n))&&r.unshift(Hr(e,a,o)),null!=(a=Fe(e,t))&&r.push(Hr(e,a,o))),e=e.return}return r}function Vr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Yr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var s=n,l=s.alternate,c=s.stateNode;if(null!==l&&l===r)break;5===s.tag&&null!==c&&(s=c,o?null!=(l=Fe(n,a))&&i.unshift(Hr(n,l,s)):o||null!=(l=Fe(n,a))&&i.push(Hr(n,l,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Qr=/\r\n?/g,Kr=/\u0000|\uFFFD/g;function Xr(e){return("string"==typeof e?e:""+e).replace(Qr,"\n").replace(Kr,"")}function Zr(e,t,n){if(t=Xr(t),Xr(e)!==t&&n)throw Error(a(425))}function Jr(){}var eo=null,to=null;function no(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ro="function"==typeof setTimeout?setTimeout:void 0,oo="function"==typeof clearTimeout?clearTimeout:void 0,ao="function"==typeof Promise?Promise:void 0,io="function"==typeof queueMicrotask?queueMicrotask:void 0!==ao?function(e){return ao.resolve(null).then(e).catch(so)}:ro;function so(e){setTimeout((function(){throw e}))}function lo(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType)if("/$"===(n=o.data)){if(0===r)return e.removeChild(o),void $t(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=o}while(n);$t(t)}function co(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function uo(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var po=Math.random().toString(36).slice(2),fo="__reactFiber$"+po,ho="__reactProps$"+po,mo="__reactContainer$"+po,go="__reactEvents$"+po,bo="__reactListeners$"+po,yo="__reactHandles$"+po;function vo(e){var t=e[fo];if(t)return t;for(var n=e.parentNode;n;){if(t=n[mo]||n[fo]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=uo(e);null!==e;){if(n=e[fo])return n;e=uo(e)}return t}n=(e=n).parentNode}return null}function wo(e){return!(e=e[fo]||e[mo])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function xo(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function ko(e){return e[ho]||null}var So=[],Eo=-1;function _o(e){return{current:e}}function zo(e){0>Eo||(e.current=So[Eo],So[Eo]=null,Eo--)}function Co(e,t){Eo++,So[Eo]=e.current,e.current=t}var To={},jo=_o(To),Lo=_o(!1),Ao=To;function Fo(e,t){var n=e.type.contextTypes;if(!n)return To;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function No(e){return null!=(e=e.childContextTypes)}function Po(){zo(Lo),zo(jo)}function Ro(e,t,n){if(jo.current!==To)throw Error(a(168));Co(jo,t),Co(Lo,n)}function Do(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in t))throw Error(a(108,q(e)||"Unknown",o));return I({},n,r)}function Io(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||To,Ao=jo.current,Co(jo,e),Co(Lo,Lo.current),!0}function Oo(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=Do(e,t,Ao),r.__reactInternalMemoizedMergedChildContext=e,zo(Lo),zo(jo),Co(jo,e)):zo(Lo),Co(Lo,n)}var Mo=null,Bo=!1,Uo=!1;function $o(e){null===Mo?Mo=[e]:Mo.push(e)}function qo(){if(!Uo&&null!==Mo){Uo=!0;var e=0,t=vt;try{var n=Mo;for(vt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}Mo=null,Bo=!1}catch(o){throw null!==Mo&&(Mo=Mo.slice(e+1)),Ve(Je,qo),o}finally{vt=t,Uo=!1}}return null}var Wo=[],Ho=0,Go=null,Vo=0,Yo=[],Qo=0,Ko=null,Xo=1,Zo="";function Jo(e,t){Wo[Ho++]=Vo,Wo[Ho++]=Go,Go=e,Vo=t}function ea(e,t,n){Yo[Qo++]=Xo,Yo[Qo++]=Zo,Yo[Qo++]=Ko,Ko=e;var r=Xo;e=Zo;var o=32-it(r)-1;r&=~(1<<o),n+=1;var a=32-it(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,Xo=1<<32-it(t)+o|n<<o|r,Zo=a+e}else Xo=1<<a|n<<o|r,Zo=e}function ta(e){null!==e.return&&(Jo(e,1),ea(e,1,0))}function na(e){for(;e===Go;)Go=Wo[--Ho],Wo[Ho]=null,Vo=Wo[--Ho],Wo[Ho]=null;for(;e===Ko;)Ko=Yo[--Qo],Yo[Qo]=null,Zo=Yo[--Qo],Yo[Qo]=null,Xo=Yo[--Qo],Yo[Qo]=null}var ra=null,oa=null,aa=!1,ia=null;function sa(e,t){var n=Fc(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function la(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,ra=e,oa=co(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,ra=e,oa=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Ko?{id:Xo,overflow:Zo}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Fc(18,null,null,0)).stateNode=t,n.return=e,e.child=n,ra=e,oa=null,!0);default:return!1}}function ca(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function ua(e){if(aa){var t=oa;if(t){var n=t;if(!la(e,t)){if(ca(e))throw Error(a(418));t=co(n.nextSibling);var r=ra;t&&la(e,t)?sa(r,n):(e.flags=-4097&e.flags|2,aa=!1,ra=e)}}else{if(ca(e))throw Error(a(418));e.flags=-4097&e.flags|2,aa=!1,ra=e}}}function da(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ra=e}function pa(e){if(e!==ra)return!1;if(!aa)return da(e),aa=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!no(e.type,e.memoizedProps)),t&&(t=oa)){if(ca(e))throw fa(),Error(a(418));for(;t;)sa(e,t),t=co(t.nextSibling)}if(da(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){oa=co(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}oa=null}}else oa=ra?co(e.stateNode.nextSibling):null;return!0}function fa(){for(var e=oa;e;)e=co(e.nextSibling)}function ha(){oa=ra=null,aa=!1}function ma(e){null===ia?ia=[e]:ia.push(e)}var ga=w.ReactCurrentBatchConfig;function ba(e,t){if(e&&e.defaultProps){for(var n in t=I({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var ya=_o(null),va=null,wa=null,xa=null;function ka(){xa=wa=va=null}function Sa(e){var t=ya.current;zo(ya),e._currentValue=t}function Ea(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function _a(e,t){va=e,xa=wa=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(ws=!0),e.firstContext=null)}function za(e){var t=e._currentValue;if(xa!==e)if(e={context:e,memoizedValue:t,next:null},null===wa){if(null===va)throw Error(a(308));wa=e,va.dependencies={lanes:0,firstContext:e}}else wa=wa.next=e;return t}var Ca=null;function Ta(e){null===Ca?Ca=[e]:Ca.push(e)}function ja(e,t,n,r){var o=t.interleaved;return null===o?(n.next=n,Ta(t)):(n.next=o.next,o.next=n),t.interleaved=n,La(e,r)}function La(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Aa=!1;function Fa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Na(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Pa(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ra(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&jl)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,La(e,n)}return null===(o=r.interleaved)?(t.next=t,Ta(r)):(t.next=o.next,o.next=t),r.interleaved=t,La(e,n)}function Da(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}function Ia(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Oa(e,t,n,r){var o=e.updateQueue;Aa=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var l=s,c=l.next;l.next=null,null===i?a=c:i.next=c,i=l;var u=e.alternate;null!==u&&((s=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===s?u.firstBaseUpdate=c:s.next=c,u.lastBaseUpdate=l))}if(null!==a){var d=o.baseState;for(i=0,u=c=l=null,s=a;;){var p=s.lane,f=s.eventTime;if((r&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var h=e,m=s;switch(p=t,f=n,m.tag){case 1:if("function"==typeof(h=m.payload)){d=h.call(f,d,p);break e}d=h;break e;case 3:h.flags=-65537&h.flags|128;case 0:if(null==(p="function"==typeof(h=m.payload)?h.call(f,d,p):h))break e;d=I({},d,p);break e;case 2:Aa=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(p=o.effects)?o.effects=[s]:p.push(s))}else f={eventTime:f,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(c=u=f,l=d):u=u.next=f,i|=p;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;s=(p=s).next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}if(null===u&&(l=d),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null!==(t=o.shared.interleaved)){o=t;do{i|=o.lane,o=o.next}while(o!==t)}else null===a&&(o.shared.lanes=0);Il|=i,e.lanes=i,e.memoizedState=d}}function Ma(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(a(191,o));o.call(r)}}}var Ba=(new r.Component).refs;function Ua(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:I({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var $a={isMounted:function(e){return!!(e=e._reactInternals)&&$e(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=tc(),o=nc(e),a=Pa(r,o);a.payload=t,null!=n&&(a.callback=n),null!==(t=Ra(e,a,o))&&(rc(t,e,o,r),Da(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=tc(),o=nc(e),a=Pa(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),null!==(t=Ra(e,a,o))&&(rc(t,e,o,r),Da(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=tc(),r=nc(e),o=Pa(n,r);o.tag=2,null!=t&&(o.callback=t),null!==(t=Ra(e,o,r))&&(rc(t,e,r,n),Da(t,e,r))}};function qa(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!lr(n,r)||!lr(o,a))}function Wa(e,t,n){var r=!1,o=To,a=t.contextType;return"object"==typeof a&&null!==a?a=za(a):(o=No(t)?Ao:jo.current,a=(r=null!=(r=t.contextTypes))?Fo(e,o):To),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=$a,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function Ha(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&$a.enqueueReplaceState(t,t.state,null)}function Ga(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=Ba,Fa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=za(a):(a=No(t)?Ao:jo.current,o.context=Fo(e,a)),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(Ua(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&$a.enqueueReplaceState(o,o.state,null),Oa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function Va(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=r,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=o.refs;t===Ba&&(t=o.refs={}),null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function Ya(e,t){throw e=Object.prototype.toString.call(t),Error(a(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Qa(e){return(0,e._init)(e._payload)}function Ka(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Pc(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=2,n):r:(t.flags|=2,n):(t.flags|=1048576,n)}function s(t){return e&&null===t.alternate&&(t.flags|=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Oc(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){var a=n.type;return a===S?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===F&&Qa(a)===t.type)?((r=o(t,n.props)).ref=Va(e,t,n),r.return=e,r):((r=Rc(n.type,n.key,n.props,null,e.mode,r)).ref=Va(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Mc(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Dc(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Oc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case x:return(n=Rc(t.type,t.key,t.props,null,e.mode,n)).ref=Va(e,null,t),n.return=e,n;case k:return(t=Mc(t,e.mode,n)).return=e,t;case F:return p(e,(0,t._init)(t._payload),n)}if(te(t)||R(t))return(t=Dc(t,e.mode,n,null)).return=e,t;Ya(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==o?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case x:return n.key===o?c(e,t,n,r):null;case k:return n.key===o?u(e,t,n,r):null;case F:return f(e,t,(o=n._init)(n._payload),r)}if(te(n)||R(n))return null!==o?null:d(e,t,n,r,null);Ya(e,n)}return null}function h(e,t,n,r,o){if("string"==typeof r&&""!==r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case x:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case k:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case F:return h(e,t,n,(0,r._init)(r._payload),o)}if(te(r)||R(r))return d(t,e=e.get(n)||null,r,o,null);Ya(t,r)}return null}function m(o,a,s,l){for(var c=null,u=null,d=a,m=a=0,g=null;null!==d&&m<s.length;m++){d.index>m?(g=d,d=null):g=d.sibling;var b=f(o,d,s[m],l);if(null===b){null===d&&(d=g);break}e&&d&&null===b.alternate&&t(o,d),a=i(b,a,m),null===u?c=b:u.sibling=b,u=b,d=g}if(m===s.length)return n(o,d),aa&&Jo(o,m),c;if(null===d){for(;m<s.length;m++)null!==(d=p(o,s[m],l))&&(a=i(d,a,m),null===u?c=d:u.sibling=d,u=d);return aa&&Jo(o,m),c}for(d=r(o,d);m<s.length;m++)null!==(g=h(d,o,m,s[m],l))&&(e&&null!==g.alternate&&d.delete(null===g.key?m:g.key),a=i(g,a,m),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach((function(e){return t(o,e)})),aa&&Jo(o,m),c}function g(o,s,l,c){var u=R(l);if("function"!=typeof u)throw Error(a(150));if(null==(l=u.call(l)))throw Error(a(151));for(var d=u=null,m=s,g=s=0,b=null,y=l.next();null!==m&&!y.done;g++,y=l.next()){m.index>g?(b=m,m=null):b=m.sibling;var v=f(o,m,y.value,c);if(null===v){null===m&&(m=b);break}e&&m&&null===v.alternate&&t(o,m),s=i(v,s,g),null===d?u=v:d.sibling=v,d=v,m=b}if(y.done)return n(o,m),aa&&Jo(o,g),u;if(null===m){for(;!y.done;g++,y=l.next())null!==(y=p(o,y.value,c))&&(s=i(y,s,g),null===d?u=y:d.sibling=y,d=y);return aa&&Jo(o,g),u}for(m=r(o,m);!y.done;g++,y=l.next())null!==(y=h(m,o,g,y.value,c))&&(e&&null!==y.alternate&&m.delete(null===y.key?g:y.key),s=i(y,s,g),null===d?u=y:d.sibling=y,d=y);return e&&m.forEach((function(e){return t(o,e)})),aa&&Jo(o,g),u}return function e(r,a,i,l){if("object"==typeof i&&null!==i&&i.type===S&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case x:e:{for(var c=i.key,u=a;null!==u;){if(u.key===c){if((c=i.type)===S){if(7===u.tag){n(r,u.sibling),(a=o(u,i.props.children)).return=r,r=a;break e}}else if(u.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===F&&Qa(c)===u.type){n(r,u.sibling),(a=o(u,i.props)).ref=Va(r,u,i),a.return=r,r=a;break e}n(r,u);break}t(r,u),u=u.sibling}i.type===S?((a=Dc(i.props.children,r.mode,l,i.key)).return=r,r=a):((l=Rc(i.type,i.key,i.props,null,r.mode,l)).ref=Va(r,a,i),l.return=r,r=l)}return s(r);case k:e:{for(u=i.key;null!==a;){if(a.key===u){if(4===a.tag&&a.stateNode.containerInfo===i.containerInfo&&a.stateNode.implementation===i.implementation){n(r,a.sibling),(a=o(a,i.children||[])).return=r,r=a;break e}n(r,a);break}t(r,a),a=a.sibling}(a=Mc(i,r.mode,l)).return=r,r=a}return s(r);case F:return e(r,a,(u=i._init)(i._payload),l)}if(te(i))return m(r,a,i,l);if(R(i))return g(r,a,i,l);Ya(r,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==a&&6===a.tag?(n(r,a.sibling),(a=o(a,i)).return=r,r=a):(n(r,a),(a=Oc(i,r.mode,l)).return=r,r=a),s(r)):n(r,a)}}var Xa=Ka(!0),Za=Ka(!1),Ja={},ei=_o(Ja),ti=_o(Ja),ni=_o(Ja);function ri(e){if(e===Ja)throw Error(a(174));return e}function oi(e,t){switch(Co(ni,t),Co(ti,e),Co(ei,Ja),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:le(null,"");break;default:t=le(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}zo(ei),Co(ei,t)}function ai(){zo(ei),zo(ti),zo(ni)}function ii(e){ri(ni.current);var t=ri(ei.current),n=le(t,e.type);t!==n&&(Co(ti,e),Co(ei,n))}function si(e){ti.current===e&&(zo(ei),zo(ti))}var li=_o(0);function ci(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ui=[];function di(){for(var e=0;e<ui.length;e++)ui[e]._workInProgressVersionPrimary=null;ui.length=0}var pi=w.ReactCurrentDispatcher,fi=w.ReactCurrentBatchConfig,hi=0,mi=null,gi=null,bi=null,yi=!1,vi=!1,wi=0,xi=0;function ki(){throw Error(a(321))}function Si(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!sr(e[n],t[n]))return!1;return!0}function Ei(e,t,n,r,o,i){if(hi=i,mi=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,pi.current=null===e||null===e.memoizedState?ss:ls,e=n(r,o),vi){i=0;do{if(vi=!1,wi=0,25<=i)throw Error(a(301));i+=1,bi=gi=null,t.updateQueue=null,pi.current=cs,e=n(r,o)}while(vi)}if(pi.current=is,t=null!==gi&&null!==gi.next,hi=0,bi=gi=mi=null,yi=!1,t)throw Error(a(300));return e}function _i(){var e=0!==wi;return wi=0,e}function zi(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===bi?mi.memoizedState=bi=e:bi=bi.next=e,bi}function Ci(){if(null===gi){var e=mi.alternate;e=null!==e?e.memoizedState:null}else e=gi.next;var t=null===bi?mi.memoizedState:bi.next;if(null!==t)bi=t,gi=e;else{if(null===e)throw Error(a(310));e={memoizedState:(gi=e).memoizedState,baseState:gi.baseState,baseQueue:gi.baseQueue,queue:gi.queue,next:null},null===bi?mi.memoizedState=bi=e:bi=bi.next=e}return bi}function Ti(e,t){return"function"==typeof t?t(e):t}function ji(e){var t=Ci(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=gi,o=r.baseQueue,i=n.pending;if(null!==i){if(null!==o){var s=o.next;o.next=i.next,i.next=s}r.baseQueue=o=i,n.pending=null}if(null!==o){i=o.next,r=r.baseState;var l=s=null,c=null,u=i;do{var d=u.lane;if((hi&d)===d)null!==c&&(c=c.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var p={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===c?(l=c=p,s=r):c=c.next=p,mi.lanes|=d,Il|=d}u=u.next}while(null!==u&&u!==i);null===c?s=r:c.next=l,sr(r,t.memoizedState)||(ws=!0),t.memoizedState=r,t.baseState=s,t.baseQueue=c,n.lastRenderedState=r}if(null!==(e=n.interleaved)){o=e;do{i=o.lane,mi.lanes|=i,Il|=i,o=o.next}while(o!==e)}else null===o&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function Li(e){var t=Ci(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var s=o=o.next;do{i=e(i,s.action),s=s.next}while(s!==o);sr(i,t.memoizedState)||(ws=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Ai(){}function Fi(e,t){var n=mi,r=Ci(),o=t(),i=!sr(r.memoizedState,o);if(i&&(r.memoizedState=o,ws=!0),r=r.queue,Wi(Ri.bind(null,n,r,e),[e]),r.getSnapshot!==t||i||null!==bi&&1&bi.memoizedState.tag){if(n.flags|=2048,Mi(9,Pi.bind(null,n,r,o,t),void 0,null),null===Ll)throw Error(a(349));0!=(30&hi)||Ni(n,t,o)}return o}function Ni(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=mi.updateQueue)?(t={lastEffect:null,stores:null},mi.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Pi(e,t,n,r){t.value=n,t.getSnapshot=r,Di(t)&&Ii(e)}function Ri(e,t,n){return n((function(){Di(t)&&Ii(e)}))}function Di(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!sr(e,n)}catch(r){return!0}}function Ii(e){var t=La(e,1);null!==t&&rc(t,e,1,-1)}function Oi(e){var t=zi();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ti,lastRenderedState:e},t.queue=e,e=e.dispatch=ns.bind(null,mi,e),[t.memoizedState,e]}function Mi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=mi.updateQueue)?(t={lastEffect:null,stores:null},mi.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function Bi(){return Ci().memoizedState}function Ui(e,t,n,r){var o=zi();mi.flags|=e,o.memoizedState=Mi(1|t,n,void 0,void 0===r?null:r)}function $i(e,t,n,r){var o=Ci();r=void 0===r?null:r;var a=void 0;if(null!==gi){var i=gi.memoizedState;if(a=i.destroy,null!==r&&Si(r,i.deps))return void(o.memoizedState=Mi(t,n,a,r))}mi.flags|=e,o.memoizedState=Mi(1|t,n,a,r)}function qi(e,t){return Ui(8390656,8,e,t)}function Wi(e,t){return $i(2048,8,e,t)}function Hi(e,t){return $i(4,2,e,t)}function Gi(e,t){return $i(4,4,e,t)}function Vi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Yi(e,t,n){return n=null!=n?n.concat([e]):null,$i(4,4,Vi.bind(null,t,e),n)}function Qi(){}function Ki(e,t){var n=Ci();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Si(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Xi(e,t){var n=Ci();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Si(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Zi(e,t,n){return 0==(21&hi)?(e.baseState&&(e.baseState=!1,ws=!0),e.memoizedState=n):(sr(n,t)||(n=mt(),mi.lanes|=n,Il|=n,e.baseState=!0),t)}function Ji(e,t){var n=vt;vt=0!==n&&4>n?n:4,e(!0);var r=fi.transition;fi.transition={};try{e(!1),t()}finally{vt=n,fi.transition=r}}function es(){return Ci().memoizedState}function ts(e,t,n){var r=nc(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},rs(e))os(t,n);else if(null!==(n=ja(e,t,n,r))){rc(n,e,r,tc()),as(n,t,r)}}function ns(e,t,n){var r=nc(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(rs(e))os(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=a(i,n);if(o.hasEagerState=!0,o.eagerState=s,sr(s,i)){var l=t.interleaved;return null===l?(o.next=o,Ta(t)):(o.next=l.next,l.next=o),void(t.interleaved=o)}}catch(c){}null!==(n=ja(e,t,o,r))&&(rc(n,e,r,o=tc()),as(n,t,r))}}function rs(e){var t=e.alternate;return e===mi||null!==t&&t===mi}function os(e,t){vi=yi=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function as(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}var is={readContext:za,useCallback:ki,useContext:ki,useEffect:ki,useImperativeHandle:ki,useInsertionEffect:ki,useLayoutEffect:ki,useMemo:ki,useReducer:ki,useRef:ki,useState:ki,useDebugValue:ki,useDeferredValue:ki,useTransition:ki,useMutableSource:ki,useSyncExternalStore:ki,useId:ki,unstable_isNewReconciler:!1},ss={readContext:za,useCallback:function(e,t){return zi().memoizedState=[e,void 0===t?null:t],e},useContext:za,useEffect:qi,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,Ui(4194308,4,Vi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Ui(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ui(4,2,e,t)},useMemo:function(e,t){var n=zi();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=zi();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=ts.bind(null,mi,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},zi().memoizedState=e},useState:Oi,useDebugValue:Qi,useDeferredValue:function(e){return zi().memoizedState=e},useTransition:function(){var e=Oi(!1),t=e[0];return e=Ji.bind(null,e[1]),zi().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=mi,o=zi();if(aa){if(void 0===n)throw Error(a(407));n=n()}else{if(n=t(),null===Ll)throw Error(a(349));0!=(30&hi)||Ni(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,qi(Ri.bind(null,r,i,e),[e]),r.flags|=2048,Mi(9,Pi.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=zi(),t=Ll.identifierPrefix;if(aa){var n=Zo;t=":"+t+"R"+(n=(Xo&~(1<<32-it(Xo)-1)).toString(32)+n),0<(n=wi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=xi++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},ls={readContext:za,useCallback:Ki,useContext:za,useEffect:Wi,useImperativeHandle:Yi,useInsertionEffect:Hi,useLayoutEffect:Gi,useMemo:Xi,useReducer:ji,useRef:Bi,useState:function(){return ji(Ti)},useDebugValue:Qi,useDeferredValue:function(e){return Zi(Ci(),gi.memoizedState,e)},useTransition:function(){return[ji(Ti)[0],Ci().memoizedState]},useMutableSource:Ai,useSyncExternalStore:Fi,useId:es,unstable_isNewReconciler:!1},cs={readContext:za,useCallback:Ki,useContext:za,useEffect:Wi,useImperativeHandle:Yi,useInsertionEffect:Hi,useLayoutEffect:Gi,useMemo:Xi,useReducer:Li,useRef:Bi,useState:function(){return Li(Ti)},useDebugValue:Qi,useDeferredValue:function(e){var t=Ci();return null===gi?t.memoizedState=e:Zi(t,gi.memoizedState,e)},useTransition:function(){return[Li(Ti)[0],Ci().memoizedState]},useMutableSource:Ai,useSyncExternalStore:Fi,useId:es,unstable_isNewReconciler:!1};function us(e,t){try{var n="",r=t;do{n+=U(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o,digest:null}}function ds(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function ps(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var fs="function"==typeof WeakMap?WeakMap:Map;function hs(e,t,n){(n=Pa(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Hl||(Hl=!0,Gl=r),ps(0,t)},n}function ms(e,t,n){(n=Pa(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){ps(0,t)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){ps(0,t),"function"!=typeof r&&(null===Vl?Vl=new Set([this]):Vl.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function gs(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new fs;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=zc.bind(null,e,t,n),t.then(e,e))}function bs(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function ys(e,t,n,r,o){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=Pa(-1,1)).tag=2,Ra(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var vs=w.ReactCurrentOwner,ws=!1;function xs(e,t,n,r){t.child=null===e?Za(t,null,n,r):Xa(t,e.child,n,r)}function ks(e,t,n,r,o){n=n.render;var a=t.ref;return _a(t,o),r=Ei(e,t,n,r,a,o),n=_i(),null===e||ws?(aa&&n&&ta(t),t.flags|=1,xs(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Hs(e,t,o))}function Ss(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||Nc(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Rc(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,Es(e,t,a,r,o))}if(a=e.child,0==(e.lanes&o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:lr)(i,r)&&e.ref===t.ref)return Hs(e,t,o)}return t.flags|=1,(e=Pc(a,r)).ref=t.ref,e.return=t,t.child=e}function Es(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(lr(a,r)&&e.ref===t.ref){if(ws=!1,t.pendingProps=r=a,0==(e.lanes&o))return t.lanes=e.lanes,Hs(e,t,o);0!=(131072&e.flags)&&(ws=!0)}}return Cs(e,t,n,r,o)}function _s(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Co(Pl,Nl),Nl|=n;else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Co(Pl,Nl),Nl|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:n,Co(Pl,Nl),Nl|=r}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,Co(Pl,Nl),Nl|=r;return xs(e,t,o,n),t.child}function zs(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Cs(e,t,n,r,o){var a=No(n)?Ao:jo.current;return a=Fo(t,a),_a(t,o),n=Ei(e,t,n,r,a,o),r=_i(),null===e||ws?(aa&&r&&ta(t),t.flags|=1,xs(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Hs(e,t,o))}function Ts(e,t,n,r,o){if(No(n)){var a=!0;Io(t)}else a=!1;if(_a(t,o),null===t.stateNode)Ws(e,t),Wa(t,n,r),Ga(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,c=n.contextType;"object"==typeof c&&null!==c?c=za(c):c=Fo(t,c=No(n)?Ao:jo.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==r||l!==c)&&Ha(t,i,r,c),Aa=!1;var p=t.memoizedState;i.state=p,Oa(t,r,i,o),l=t.memoizedState,s!==r||p!==l||Lo.current||Aa?("function"==typeof u&&(Ua(t,n,u,r),l=t.memoizedState),(s=Aa||qa(t,n,s,r,p,l,c))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,Na(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:ba(t.type,s),i.props=c,d=t.pendingProps,p=i.context,"object"==typeof(l=n.contextType)&&null!==l?l=za(l):l=Fo(t,l=No(n)?Ao:jo.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||p!==l)&&Ha(t,i,r,l),Aa=!1,p=t.memoizedState,i.state=p,Oa(t,r,i,o);var h=t.memoizedState;s!==d||p!==h||Lo.current||Aa?("function"==typeof f&&(Ua(t,n,f,r),h=t.memoizedState),(c=Aa||qa(t,n,c,r,p,h,l)||!1)?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,h,l),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,h,l)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=h),i.props=r,i.state=h,i.context=l,r=c):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return js(e,t,n,r,a,o)}function js(e,t,n,r,o,a){zs(e,t);var i=0!=(128&t.flags);if(!r&&!i)return o&&Oo(t,n,!1),Hs(e,t,a);r=t.stateNode,vs.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Xa(t,e.child,null,a),t.child=Xa(t,null,s,a)):xs(e,t,s,a),t.memoizedState=r.state,o&&Oo(t,n,!0),t.child}function Ls(e){var t=e.stateNode;t.pendingContext?Ro(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Ro(0,t.context,!1),oi(e,t.containerInfo)}function As(e,t,n,r,o){return ha(),ma(o),t.flags|=256,xs(e,t,n,r),t.child}var Fs,Ns,Ps,Rs,Ds={dehydrated:null,treeContext:null,retryLane:0};function Is(e){return{baseLanes:e,cachePool:null,transitions:null}}function Os(e,t,n){var r,o=t.pendingProps,i=li.current,s=!1,l=0!=(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&0!=(2&i)),r?(s=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),Co(li,1&i),null===e)return ua(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(l=o.children,e=o.fallback,s?(o=t.mode,s=t.child,l={mode:"hidden",children:l},0==(1&o)&&null!==s?(s.childLanes=0,s.pendingProps=l):s=Ic(l,o,0,null),e=Dc(e,o,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Is(n),t.memoizedState=Ds,e):Ms(t,l));if(null!==(i=e.memoizedState)&&null!==(r=i.dehydrated))return function(e,t,n,r,o,i,s){if(n)return 256&t.flags?(t.flags&=-257,Bs(e,t,s,r=ds(Error(a(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=r.fallback,o=t.mode,r=Ic({mode:"visible",children:r.children},o,0,null),(i=Dc(i,o,s,null)).flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,0!=(1&t.mode)&&Xa(t,e.child,null,s),t.child.memoizedState=Is(s),t.memoizedState=Ds,i);if(0==(1&t.mode))return Bs(e,t,s,null);if("$!"===o.data){if(r=o.nextSibling&&o.nextSibling.dataset)var l=r.dgst;return r=l,Bs(e,t,s,r=ds(i=Error(a(419)),r,void 0))}if(l=0!=(s&e.childLanes),ws||l){if(null!==(r=Ll)){switch(s&-s){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!=(o&(r.suspendedLanes|s))?0:o)&&o!==i.retryLane&&(i.retryLane=o,La(e,o),rc(r,e,o,-1))}return gc(),Bs(e,t,s,r=ds(Error(a(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=Tc.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,oa=co(o.nextSibling),ra=t,aa=!0,ia=null,null!==e&&(Yo[Qo++]=Xo,Yo[Qo++]=Zo,Yo[Qo++]=Ko,Xo=e.id,Zo=e.overflow,Ko=t),t=Ms(t,r.children),t.flags|=4096,t)}(e,t,l,o,r,i,n);if(s){s=o.fallback,l=t.mode,r=(i=e.child).sibling;var c={mode:"hidden",children:o.children};return 0==(1&l)&&t.child!==i?((o=t.child).childLanes=0,o.pendingProps=c,t.deletions=null):(o=Pc(i,c)).subtreeFlags=14680064&i.subtreeFlags,null!==r?s=Pc(r,s):(s=Dc(s,l,n,null)).flags|=2,s.return=t,o.return=t,o.sibling=s,t.child=o,o=s,s=t.child,l=null===(l=e.child.memoizedState)?Is(n):{baseLanes:l.baseLanes|n,cachePool:null,transitions:l.transitions},s.memoizedState=l,s.childLanes=e.childLanes&~n,t.memoizedState=Ds,o}return e=(s=e.child).sibling,o=Pc(s,{mode:"visible",children:o.children}),0==(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function Ms(e,t){return(t=Ic({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function Bs(e,t,n,r){return null!==r&&ma(r),Xa(t,e.child,null,n),(e=Ms(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Us(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),Ea(e.return,t,n)}function $s(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function qs(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(xs(e,t,r.children,n),0!=(2&(r=li.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Us(e,n,t);else if(19===e.tag)Us(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(Co(li,r),0==(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===ci(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),$s(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===ci(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}$s(t,!0,n,null,a);break;case"together":$s(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Ws(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Hs(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Il|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=Pc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Pc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Gs(e,t){if(!aa)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Vs(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=14680064&o.subtreeFlags,r|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Ys(e,t,n){var r=t.pendingProps;switch(na(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Vs(t),null;case 1:case 17:return No(t.type)&&Po(),Vs(t),null;case 3:return r=t.stateNode,ai(),zo(Lo),zo(jo),di(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(pa(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==ia&&(sc(ia),ia=null))),Ns(e,t),Vs(t),null;case 5:si(t);var o=ri(ni.current);if(n=t.type,null!==e&&null!=t.stateNode)Ps(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(a(166));return Vs(t),null}if(e=ri(ei.current),pa(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[fo]=t,r[ho]=i,e=0!=(1&t.mode),n){case"dialog":Mr("cancel",r),Mr("close",r);break;case"iframe":case"object":case"embed":Mr("load",r);break;case"video":case"audio":for(o=0;o<Rr.length;o++)Mr(Rr[o],r);break;case"source":Mr("error",r);break;case"img":case"image":case"link":Mr("error",r),Mr("load",r);break;case"details":Mr("toggle",r);break;case"input":K(r,i),Mr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!i.multiple},Mr("invalid",r);break;case"textarea":oe(r,i),Mr("invalid",r)}for(var l in ye(n,i),o=null,i)if(i.hasOwnProperty(l)){var c=i[l];"children"===l?"string"==typeof c?r.textContent!==c&&(!0!==i.suppressHydrationWarning&&Zr(r.textContent,c,e),o=["children",c]):"number"==typeof c&&r.textContent!==""+c&&(!0!==i.suppressHydrationWarning&&Zr(r.textContent,c,e),o=["children",""+c]):s.hasOwnProperty(l)&&null!=c&&"onScroll"===l&&Mr("scroll",r)}switch(n){case"input":G(r),J(r,i,!0);break;case"textarea":G(r),ie(r);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(r.onclick=Jr)}r=o,t.updateQueue=r,null!==r&&(t.flags|=4)}else{l=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=se(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=l.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),"select"===n&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[fo]=t,e[ho]=r,Fs(e,t,!1,!1),t.stateNode=e;e:{switch(l=ve(n,r),n){case"dialog":Mr("cancel",e),Mr("close",e),o=r;break;case"iframe":case"object":case"embed":Mr("load",e),o=r;break;case"video":case"audio":for(o=0;o<Rr.length;o++)Mr(Rr[o],e);o=r;break;case"source":Mr("error",e),o=r;break;case"img":case"image":case"link":Mr("error",e),Mr("load",e),o=r;break;case"details":Mr("toggle",e),o=r;break;case"input":K(e,r),o=Q(e,r),Mr("invalid",e);break;case"option":default:o=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=I({},r,{value:void 0}),Mr("invalid",e);break;case"textarea":oe(e,r),o=re(e,r),Mr("invalid",e)}for(i in ye(n,o),c=o)if(c.hasOwnProperty(i)){var u=c[i];"style"===i?ge(e,u):"dangerouslySetInnerHTML"===i?null!=(u=u?u.__html:void 0)&&de(e,u):"children"===i?"string"==typeof u?("textarea"!==n||""!==u)&&pe(e,u):"number"==typeof u&&pe(e,""+u):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(s.hasOwnProperty(i)?null!=u&&"onScroll"===i&&Mr("scroll",e):null!=u&&v(e,i,u,l))}switch(n){case"input":G(e),J(e,r,!1);break;case"textarea":G(e),ie(e);break;case"option":null!=r.value&&e.setAttribute("value",""+W(r.value));break;case"select":e.multiple=!!r.multiple,null!=(i=r.value)?ne(e,!!r.multiple,i,!1):null!=r.defaultValue&&ne(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=Jr)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return Vs(t),null;case 6:if(e&&null!=t.stateNode)Rs(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));if(n=ri(ni.current),ri(ei.current),pa(t)){if(r=t.stateNode,n=t.memoizedProps,r[fo]=t,(i=r.nodeValue!==n)&&null!==(e=ra))switch(e.tag){case 3:Zr(r.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Zr(r.nodeValue,n,0!=(1&e.mode))}i&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[fo]=t,t.stateNode=r}return Vs(t),null;case 13:if(zo(li),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(aa&&null!==oa&&0!=(1&t.mode)&&0==(128&t.flags))fa(),ha(),t.flags|=98560,i=!1;else if(i=pa(t),null!==r&&null!==r.dehydrated){if(null===e){if(!i)throw Error(a(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(a(317));i[fo]=t}else ha(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;Vs(t),i=!1}else null!==ia&&(sc(ia),ia=null),i=!0;if(!i)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=n,t):((r=null!==r)!==(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&li.current)?0===Rl&&(Rl=3):gc())),null!==t.updateQueue&&(t.flags|=4),Vs(t),null);case 4:return ai(),Ns(e,t),null===e&&$r(t.stateNode.containerInfo),Vs(t),null;case 10:return Sa(t.type._context),Vs(t),null;case 19:if(zo(li),null===(i=t.memoizedState))return Vs(t),null;if(r=0!=(128&t.flags),null===(l=i.rendering))if(r)Gs(i,!1);else{if(0!==Rl||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(l=ci(e))){for(t.flags|=128,Gs(i,!1),null!==(r=l.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)e=r,(i=n).flags&=14680066,null===(l=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=l.childLanes,i.lanes=l.lanes,i.child=l.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=l.memoizedProps,i.memoizedState=l.memoizedState,i.updateQueue=l.updateQueue,i.type=l.type,e=l.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return Co(li,1&li.current|2),t.child}e=e.sibling}null!==i.tail&&Xe()>ql&&(t.flags|=128,r=!0,Gs(i,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ci(l))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Gs(i,!0),null===i.tail&&"hidden"===i.tailMode&&!l.alternate&&!aa)return Vs(t),null}else 2*Xe()-i.renderingStartTime>ql&&1073741824!==n&&(t.flags|=128,r=!0,Gs(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=i.last)?n.sibling=l:t.child=l,i.last=l)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Xe(),t.sibling=null,n=li.current,Co(li,r?1&n|2:1&n),t):(Vs(t),null);case 22:case 23:return pc(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&Nl)&&(Vs(t),6&t.subtreeFlags&&(t.flags|=8192)):Vs(t),null;case 24:case 25:return null}throw Error(a(156,t.tag))}function Qs(e,t){switch(na(t),t.tag){case 1:return No(t.type)&&Po(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return ai(),zo(Lo),zo(jo),di(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return si(t),null;case 13:if(zo(li),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(a(340));ha()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return zo(li),null;case 4:return ai(),null;case 10:return Sa(t.type._context),null;case 22:case 23:return pc(),null;default:return null}}Fs=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Ns=function(){},Ps=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,ri(ei.current);var a,i=null;switch(n){case"input":o=Q(e,o),r=Q(e,r),i=[];break;case"select":o=I({},o,{value:void 0}),r=I({},r,{value:void 0}),i=[];break;case"textarea":o=re(e,o),r=re(e,r),i=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(u in ye(n,r),n=null,o)if(!r.hasOwnProperty(u)&&o.hasOwnProperty(u)&&null!=o[u])if("style"===u){var l=o[u];for(a in l)l.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(s.hasOwnProperty(u)?i||(i=[]):(i=i||[]).push(u,null));for(u in r){var c=r[u];if(l=null!=o?o[u]:void 0,r.hasOwnProperty(u)&&c!==l&&(null!=c||null!=l))if("style"===u)if(l){for(a in l)!l.hasOwnProperty(a)||c&&c.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in c)c.hasOwnProperty(a)&&l[a]!==c[a]&&(n||(n={}),n[a]=c[a])}else n||(i||(i=[]),i.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(i=i||[]).push(u,c)):"children"===u?"string"!=typeof c&&"number"!=typeof c||(i=i||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(s.hasOwnProperty(u)?(null!=c&&"onScroll"===u&&Mr("scroll",e),i||l===c||(i=[])):(i=i||[]).push(u,c))}n&&(i=i||[]).push("style",n);var u=i;(t.updateQueue=u)&&(t.flags|=4)}},Rs=function(e,t,n,r){n!==r&&(t.flags|=4)};var Ks=!1,Xs=!1,Zs="function"==typeof WeakSet?WeakSet:Set,Js=null;function el(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(r){_c(e,t,r)}else n.current=null}function tl(e,t,n){try{n()}catch(r){_c(e,t,r)}}var nl=!1;function rl(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var o=r=r.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,void 0!==a&&tl(t,n,a)}o=o.next}while(o!==r)}}function ol(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function al(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function il(e){var t=e.alternate;null!==t&&(e.alternate=null,il(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[fo],delete t[ho],delete t[go],delete t[bo],delete t[yo])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function sl(e){return 5===e.tag||3===e.tag||4===e.tag}function ll(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||sl(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function cl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Jr));else if(4!==r&&null!==(e=e.child))for(cl(e,t,n),e=e.sibling;null!==e;)cl(e,t,n),e=e.sibling}function ul(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(ul(e,t,n),e=e.sibling;null!==e;)ul(e,t,n),e=e.sibling}var dl=null,pl=!1;function fl(e,t,n){for(n=n.child;null!==n;)hl(e,t,n),n=n.sibling}function hl(e,t,n){if(at&&"function"==typeof at.onCommitFiberUnmount)try{at.onCommitFiberUnmount(ot,n)}catch(s){}switch(n.tag){case 5:Xs||el(n,t);case 6:var r=dl,o=pl;dl=null,fl(e,t,n),pl=o,null!==(dl=r)&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):dl.removeChild(n.stateNode));break;case 18:null!==dl&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?lo(e.parentNode,n):1===e.nodeType&&lo(e,n),$t(e)):lo(dl,n.stateNode));break;case 4:r=dl,o=pl,dl=n.stateNode.containerInfo,pl=!0,fl(e,t,n),dl=r,pl=o;break;case 0:case 11:case 14:case 15:if(!Xs&&(null!==(r=n.updateQueue)&&null!==(r=r.lastEffect))){o=r=r.next;do{var a=o,i=a.destroy;a=a.tag,void 0!==i&&(0!=(2&a)||0!=(4&a))&&tl(n,t,i),o=o.next}while(o!==r)}fl(e,t,n);break;case 1:if(!Xs&&(el(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){_c(n,t,s)}fl(e,t,n);break;case 21:fl(e,t,n);break;case 22:1&n.mode?(Xs=(r=Xs)||null!==n.memoizedState,fl(e,t,n),Xs=r):fl(e,t,n);break;default:fl(e,t,n)}}function ml(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Zs),t.forEach((function(t){var r=jc.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function gl(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r];try{var i=e,s=t,l=s;e:for(;null!==l;){switch(l.tag){case 5:dl=l.stateNode,pl=!1;break e;case 3:case 4:dl=l.stateNode.containerInfo,pl=!0;break e}l=l.return}if(null===dl)throw Error(a(160));hl(i,s,o),dl=null,pl=!1;var c=o.alternate;null!==c&&(c.return=null),o.return=null}catch(u){_c(o,t,u)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)bl(t,e),t=t.sibling}function bl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(gl(t,e),yl(e),4&r){try{rl(3,e,e.return),ol(3,e)}catch(g){_c(e,e.return,g)}try{rl(5,e,e.return)}catch(g){_c(e,e.return,g)}}break;case 1:gl(t,e),yl(e),512&r&&null!==n&&el(n,n.return);break;case 5:if(gl(t,e),yl(e),512&r&&null!==n&&el(n,n.return),32&e.flags){var o=e.stateNode;try{pe(o,"")}catch(g){_c(e,e.return,g)}}if(4&r&&null!=(o=e.stateNode)){var i=e.memoizedProps,s=null!==n?n.memoizedProps:i,l=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{"input"===l&&"radio"===i.type&&null!=i.name&&X(o,i),ve(l,s);var u=ve(l,i);for(s=0;s<c.length;s+=2){var d=c[s],p=c[s+1];"style"===d?ge(o,p):"dangerouslySetInnerHTML"===d?de(o,p):"children"===d?pe(o,p):v(o,d,p,u)}switch(l){case"input":Z(o,i);break;case"textarea":ae(o,i);break;case"select":var f=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!i.multiple;var h=i.value;null!=h?ne(o,!!i.multiple,h,!1):f!==!!i.multiple&&(null!=i.defaultValue?ne(o,!!i.multiple,i.defaultValue,!0):ne(o,!!i.multiple,i.multiple?[]:"",!1))}o[ho]=i}catch(g){_c(e,e.return,g)}}break;case 6:if(gl(t,e),yl(e),4&r){if(null===e.stateNode)throw Error(a(162));o=e.stateNode,i=e.memoizedProps;try{o.nodeValue=i}catch(g){_c(e,e.return,g)}}break;case 3:if(gl(t,e),yl(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{$t(t.containerInfo)}catch(g){_c(e,e.return,g)}break;case 4:default:gl(t,e),yl(e);break;case 13:gl(t,e),yl(e),8192&(o=e.child).flags&&(i=null!==o.memoizedState,o.stateNode.isHidden=i,!i||null!==o.alternate&&null!==o.alternate.memoizedState||($l=Xe())),4&r&&ml(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Xs=(u=Xs)||d,gl(t,e),Xs=u):gl(t,e),yl(e),8192&r){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!d&&0!=(1&e.mode))for(Js=e,d=e.child;null!==d;){for(p=Js=d;null!==Js;){switch(h=(f=Js).child,f.tag){case 0:case 11:case 14:case 15:rl(4,f,f.return);break;case 1:el(f,f.return);var m=f.stateNode;if("function"==typeof m.componentWillUnmount){r=f,n=f.return;try{t=r,m.props=t.memoizedProps,m.state=t.memoizedState,m.componentWillUnmount()}catch(g){_c(r,n,g)}}break;case 5:el(f,f.return);break;case 22:if(null!==f.memoizedState){kl(p);continue}}null!==h?(h.return=f,Js=h):kl(p)}d=d.sibling}e:for(d=null,p=e;;){if(5===p.tag){if(null===d){d=p;try{o=p.stateNode,u?"function"==typeof(i=o.style).setProperty?i.setProperty("display","none","important"):i.display="none":(l=p.stateNode,s=null!=(c=p.memoizedProps.style)&&c.hasOwnProperty("display")?c.display:null,l.style.display=me("display",s))}catch(g){_c(e,e.return,g)}}}else if(6===p.tag){if(null===d)try{p.stateNode.nodeValue=u?"":p.memoizedProps}catch(g){_c(e,e.return,g)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;d===p&&(d=null),p=p.return}d===p&&(d=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:gl(t,e),yl(e),4&r&&ml(e);case 21:}}function yl(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(sl(n)){var r=n;break e}n=n.return}throw Error(a(160))}switch(r.tag){case 5:var o=r.stateNode;32&r.flags&&(pe(o,""),r.flags&=-33),ul(e,ll(e),o);break;case 3:case 4:var i=r.stateNode.containerInfo;cl(e,ll(e),i);break;default:throw Error(a(161))}}catch(s){_c(e,e.return,s)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function vl(e,t,n){Js=e,wl(e,t,n)}function wl(e,t,n){for(var r=0!=(1&e.mode);null!==Js;){var o=Js,a=o.child;if(22===o.tag&&r){var i=null!==o.memoizedState||Ks;if(!i){var s=o.alternate,l=null!==s&&null!==s.memoizedState||Xs;s=Ks;var c=Xs;if(Ks=i,(Xs=l)&&!c)for(Js=o;null!==Js;)l=(i=Js).child,22===i.tag&&null!==i.memoizedState?Sl(o):null!==l?(l.return=i,Js=l):Sl(o);for(;null!==a;)Js=a,wl(a,t,n),a=a.sibling;Js=o,Ks=s,Xs=c}xl(e)}else 0!=(8772&o.subtreeFlags)&&null!==a?(a.return=o,Js=a):xl(e)}}function xl(e){for(;null!==Js;){var t=Js;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Xs||ol(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Xs)if(null===n)r.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:ba(t.type,n.memoizedProps);r.componentDidUpdate(o,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&Ma(t,i,r);break;case 3:var s=t.updateQueue;if(null!==s){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}Ma(t,s,n)}break;case 5:var l=t.stateNode;if(null===n&&4&t.flags){n=l;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&n.focus();break;case"img":c.src&&(n.src=c.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var d=u.memoizedState;if(null!==d){var p=d.dehydrated;null!==p&&$t(p)}}}break;default:throw Error(a(163))}Xs||512&t.flags&&al(t)}catch(f){_c(t,t.return,f)}}if(t===e){Js=null;break}if(null!==(n=t.sibling)){n.return=t.return,Js=n;break}Js=t.return}}function kl(e){for(;null!==Js;){var t=Js;if(t===e){Js=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Js=n;break}Js=t.return}}function Sl(e){for(;null!==Js;){var t=Js;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{ol(4,t)}catch(l){_c(t,n,l)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var o=t.return;try{r.componentDidMount()}catch(l){_c(t,o,l)}}var a=t.return;try{al(t)}catch(l){_c(t,a,l)}break;case 5:var i=t.return;try{al(t)}catch(l){_c(t,i,l)}}}catch(l){_c(t,t.return,l)}if(t===e){Js=null;break}var s=t.sibling;if(null!==s){s.return=t.return,Js=s;break}Js=t.return}}var El,_l=Math.ceil,zl=w.ReactCurrentDispatcher,Cl=w.ReactCurrentOwner,Tl=w.ReactCurrentBatchConfig,jl=0,Ll=null,Al=null,Fl=0,Nl=0,Pl=_o(0),Rl=0,Dl=null,Il=0,Ol=0,Ml=0,Bl=null,Ul=null,$l=0,ql=1/0,Wl=null,Hl=!1,Gl=null,Vl=null,Yl=!1,Ql=null,Kl=0,Xl=0,Zl=null,Jl=-1,ec=0;function tc(){return 0!=(6&jl)?Xe():-1!==Jl?Jl:Jl=Xe()}function nc(e){return 0==(1&e.mode)?1:0!=(2&jl)&&0!==Fl?Fl&-Fl:null!==ga.transition?(0===ec&&(ec=mt()),ec):0!==(e=vt)?e:e=void 0===(e=window.event)?16:Kt(e.type)}function rc(e,t,n,r){if(50<Xl)throw Xl=0,Zl=null,Error(a(185));bt(e,n,r),0!=(2&jl)&&e===Ll||(e===Ll&&(0==(2&jl)&&(Ol|=n),4===Rl&&lc(e,Fl)),oc(e,r),1===n&&0===jl&&0==(1&t.mode)&&(ql=Xe()+500,Bo&&qo()))}function oc(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=e.pendingLanes;0<a;){var i=31-it(a),s=1<<i,l=o[i];-1===l?0!=(s&n)&&0==(s&r)||(o[i]=ft(s,t)):l<=t&&(e.expiredLanes|=s),a&=~s}}(e,t);var r=pt(e,e===Ll?Fl:0);if(0===r)null!==n&&Ye(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&Ye(n),1===t)0===e.tag?function(e){Bo=!0,$o(e)}(cc.bind(null,e)):$o(cc.bind(null,e)),io((function(){0==(6&jl)&&qo()})),n=null;else{switch(wt(r)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=rt}n=Lc(n,ac.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function ac(e,t){if(Jl=-1,ec=0,0!=(6&jl))throw Error(a(327));var n=e.callbackNode;if(Sc()&&e.callbackNode!==n)return null;var r=pt(e,e===Ll?Fl:0);if(0===r)return null;if(0!=(30&r)||0!=(r&e.expiredLanes)||t)t=bc(e,r);else{t=r;var o=jl;jl|=2;var i=mc();for(Ll===e&&Fl===t||(Wl=null,ql=Xe()+500,fc(e,t));;)try{vc();break}catch(l){hc(e,l)}ka(),zl.current=i,jl=o,null!==Al?t=0:(Ll=null,Fl=0,t=Rl)}if(0!==t){if(2===t&&(0!==(o=ht(e))&&(r=o,t=ic(e,o))),1===t)throw n=Dl,fc(e,0),lc(e,r),oc(e,Xe()),n;if(6===t)lc(e,r);else{if(o=e.current.alternate,0==(30&r)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!sr(a(),o))return!1}catch(s){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)&&(2===(t=bc(e,r))&&(0!==(i=ht(e))&&(r=i,t=ic(e,i))),1===t))throw n=Dl,fc(e,0),lc(e,r),oc(e,Xe()),n;switch(e.finishedWork=o,e.finishedLanes=r,t){case 0:case 1:throw Error(a(345));case 2:case 5:kc(e,Ul,Wl);break;case 3:if(lc(e,r),(130023424&r)===r&&10<(t=$l+500-Xe())){if(0!==pt(e,0))break;if(((o=e.suspendedLanes)&r)!==r){tc(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=ro(kc.bind(null,e,Ul,Wl),t);break}kc(e,Ul,Wl);break;case 4:if(lc(e,r),(4194240&r)===r)break;for(t=e.eventTimes,o=-1;0<r;){var s=31-it(r);i=1<<s,(s=t[s])>o&&(o=s),r&=~i}if(r=o,10<(r=(120>(r=Xe()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*_l(r/1960))-r)){e.timeoutHandle=ro(kc.bind(null,e,Ul,Wl),r);break}kc(e,Ul,Wl);break;default:throw Error(a(329))}}}return oc(e,Xe()),e.callbackNode===n?ac.bind(null,e):null}function ic(e,t){var n=Bl;return e.current.memoizedState.isDehydrated&&(fc(e,t).flags|=256),2!==(e=bc(e,t))&&(t=Ul,Ul=n,null!==t&&sc(t)),e}function sc(e){null===Ul?Ul=e:Ul.push.apply(Ul,e)}function lc(e,t){for(t&=~Ml,t&=~Ol,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-it(t),r=1<<n;e[n]=-1,t&=~r}}function cc(e){if(0!=(6&jl))throw Error(a(327));Sc();var t=pt(e,0);if(0==(1&t))return oc(e,Xe()),null;var n=bc(e,t);if(0!==e.tag&&2===n){var r=ht(e);0!==r&&(t=r,n=ic(e,r))}if(1===n)throw n=Dl,fc(e,0),lc(e,t),oc(e,Xe()),n;if(6===n)throw Error(a(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,kc(e,Ul,Wl),oc(e,Xe()),null}function uc(e,t){var n=jl;jl|=1;try{return e(t)}finally{0===(jl=n)&&(ql=Xe()+500,Bo&&qo())}}function dc(e){null!==Ql&&0===Ql.tag&&0==(6&jl)&&Sc();var t=jl;jl|=1;var n=Tl.transition,r=vt;try{if(Tl.transition=null,vt=1,e)return e()}finally{vt=r,Tl.transition=n,0==(6&(jl=t))&&qo()}}function pc(){Nl=Pl.current,zo(Pl)}function fc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,oo(n)),null!==Al)for(n=Al.return;null!==n;){var r=n;switch(na(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&Po();break;case 3:ai(),zo(Lo),zo(jo),di();break;case 5:si(r);break;case 4:ai();break;case 13:case 19:zo(li);break;case 10:Sa(r.type._context);break;case 22:case 23:pc()}n=n.return}if(Ll=e,Al=e=Pc(e.current,null),Fl=Nl=t,Rl=0,Dl=null,Ml=Ol=Il=0,Ul=Bl=null,null!==Ca){for(t=0;t<Ca.length;t++)if(null!==(r=(n=Ca[t]).interleaved)){n.interleaved=null;var o=r.next,a=n.pending;if(null!==a){var i=a.next;a.next=o,r.next=i}n.pending=r}Ca=null}return e}function hc(e,t){for(;;){var n=Al;try{if(ka(),pi.current=is,yi){for(var r=mi.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}yi=!1}if(hi=0,bi=gi=mi=null,vi=!1,wi=0,Cl.current=null,null===n||null===n.return){Rl=1,Dl=t,Al=null;break}e:{var i=e,s=n.return,l=n,c=t;if(t=Fl,l.flags|=32768,null!==c&&"object"==typeof c&&"function"==typeof c.then){var u=c,d=l,p=d.tag;if(0==(1&d.mode)&&(0===p||11===p||15===p)){var f=d.alternate;f?(d.updateQueue=f.updateQueue,d.memoizedState=f.memoizedState,d.lanes=f.lanes):(d.updateQueue=null,d.memoizedState=null)}var h=bs(s);if(null!==h){h.flags&=-257,ys(h,s,l,0,t),1&h.mode&&gs(i,u,t),c=u;var m=(t=h).updateQueue;if(null===m){var g=new Set;g.add(c),t.updateQueue=g}else m.add(c);break e}if(0==(1&t)){gs(i,u,t),gc();break e}c=Error(a(426))}else if(aa&&1&l.mode){var b=bs(s);if(null!==b){0==(65536&b.flags)&&(b.flags|=256),ys(b,s,l,0,t),ma(us(c,l));break e}}i=c=us(c,l),4!==Rl&&(Rl=2),null===Bl?Bl=[i]:Bl.push(i),i=s;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,Ia(i,hs(0,c,t));break e;case 1:l=c;var y=i.type,v=i.stateNode;if(0==(128&i.flags)&&("function"==typeof y.getDerivedStateFromError||null!==v&&"function"==typeof v.componentDidCatch&&(null===Vl||!Vl.has(v)))){i.flags|=65536,t&=-t,i.lanes|=t,Ia(i,ms(i,l,t));break e}}i=i.return}while(null!==i)}xc(n)}catch(w){t=w,Al===n&&null!==n&&(Al=n=n.return);continue}break}}function mc(){var e=zl.current;return zl.current=is,null===e?is:e}function gc(){0!==Rl&&3!==Rl&&2!==Rl||(Rl=4),null===Ll||0==(268435455&Il)&&0==(268435455&Ol)||lc(Ll,Fl)}function bc(e,t){var n=jl;jl|=2;var r=mc();for(Ll===e&&Fl===t||(Wl=null,fc(e,t));;)try{yc();break}catch(o){hc(e,o)}if(ka(),jl=n,zl.current=r,null!==Al)throw Error(a(261));return Ll=null,Fl=0,Rl}function yc(){for(;null!==Al;)wc(Al)}function vc(){for(;null!==Al&&!Qe();)wc(Al)}function wc(e){var t=El(e.alternate,e,Nl);e.memoizedProps=e.pendingProps,null===t?xc(e):Al=t,Cl.current=null}function xc(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=Ys(n,t,Nl)))return void(Al=n)}else{if(null!==(n=Qs(n,t)))return n.flags&=32767,void(Al=n);if(null===e)return Rl=6,void(Al=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Al=t);Al=t=e}while(null!==t);0===Rl&&(Rl=5)}function kc(e,t,n){var r=vt,o=Tl.transition;try{Tl.transition=null,vt=1,function(e,t,n,r){do{Sc()}while(null!==Ql);if(0!=(6&jl))throw Error(a(327));n=e.finishedWork;var o=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackPriority=0;var i=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-it(n),a=1<<o;t[o]=0,r[o]=-1,e[o]=-1,n&=~a}}(e,i),e===Ll&&(Al=Ll=null,Fl=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||Yl||(Yl=!0,Lc(tt,(function(){return Sc(),null}))),i=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||i){i=Tl.transition,Tl.transition=null;var s=vt;vt=1;var l=jl;jl|=4,Cl.current=null,function(e,t){if(eo=Wt,fr(e=pr())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch(x){n=null;break e}var s=0,l=-1,c=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var h;p!==n||0!==o&&3!==p.nodeType||(l=s+o),p!==i||0!==r&&3!==p.nodeType||(c=s+r),3===p.nodeType&&(s+=p.nodeValue.length),null!==(h=p.firstChild);)f=p,p=h;for(;;){if(p===e)break t;if(f===n&&++u===o&&(l=s),f===i&&++d===r&&(c=s),null!==(h=p.nextSibling))break;f=(p=f).parentNode}p=h}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(to={focusedElem:e,selectionRange:n},Wt=!1,Js=t;null!==Js;)if(e=(t=Js).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,Js=e;else for(;null!==Js;){t=Js;try{var m=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==m){var g=m.memoizedProps,b=m.memoizedState,y=t.stateNode,v=y.getSnapshotBeforeUpdate(t.elementType===t.type?g:ba(t.type,g),b);y.__reactInternalSnapshotBeforeUpdate=v}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(a(163))}}catch(x){_c(t,t.return,x)}if(null!==(e=t.sibling)){e.return=t.return,Js=e;break}Js=t.return}m=nl,nl=!1}(e,n),bl(n,e),hr(to),Wt=!!eo,to=eo=null,e.current=n,vl(n,e,o),Ke(),jl=l,vt=s,Tl.transition=i}else e.current=n;if(Yl&&(Yl=!1,Ql=e,Kl=o),i=e.pendingLanes,0===i&&(Vl=null),function(e){if(at&&"function"==typeof at.onCommitFiberRoot)try{at.onCommitFiberRoot(ot,e,void 0,128==(128&e.current.flags))}catch(t){}}(n.stateNode),oc(e,Xe()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)o=t[n],r(o.value,{componentStack:o.stack,digest:o.digest});if(Hl)throw Hl=!1,e=Gl,Gl=null,e;0!=(1&Kl)&&0!==e.tag&&Sc(),i=e.pendingLanes,0!=(1&i)?e===Zl?Xl++:(Xl=0,Zl=e):Xl=0,qo()}(e,t,n,r)}finally{Tl.transition=o,vt=r}return null}function Sc(){if(null!==Ql){var e=wt(Kl),t=Tl.transition,n=vt;try{if(Tl.transition=null,vt=16>e?16:e,null===Ql)var r=!1;else{if(e=Ql,Ql=null,Kl=0,0!=(6&jl))throw Error(a(331));var o=jl;for(jl|=4,Js=e.current;null!==Js;){var i=Js,s=i.child;if(0!=(16&Js.flags)){var l=i.deletions;if(null!==l){for(var c=0;c<l.length;c++){var u=l[c];for(Js=u;null!==Js;){var d=Js;switch(d.tag){case 0:case 11:case 15:rl(8,d,i)}var p=d.child;if(null!==p)p.return=d,Js=p;else for(;null!==Js;){var f=(d=Js).sibling,h=d.return;if(il(d),d===u){Js=null;break}if(null!==f){f.return=h,Js=f;break}Js=h}}}var m=i.alternate;if(null!==m){var g=m.child;if(null!==g){m.child=null;do{var b=g.sibling;g.sibling=null,g=b}while(null!==g)}}Js=i}}if(0!=(2064&i.subtreeFlags)&&null!==s)s.return=i,Js=s;else e:for(;null!==Js;){if(0!=(2048&(i=Js).flags))switch(i.tag){case 0:case 11:case 15:rl(9,i,i.return)}var y=i.sibling;if(null!==y){y.return=i.return,Js=y;break e}Js=i.return}}var v=e.current;for(Js=v;null!==Js;){var w=(s=Js).child;if(0!=(2064&s.subtreeFlags)&&null!==w)w.return=s,Js=w;else e:for(s=v;null!==Js;){if(0!=(2048&(l=Js).flags))try{switch(l.tag){case 0:case 11:case 15:ol(9,l)}}catch(k){_c(l,l.return,k)}if(l===s){Js=null;break e}var x=l.sibling;if(null!==x){x.return=l.return,Js=x;break e}Js=l.return}}if(jl=o,qo(),at&&"function"==typeof at.onPostCommitFiberRoot)try{at.onPostCommitFiberRoot(ot,e)}catch(k){}r=!0}return r}finally{vt=n,Tl.transition=t}}return!1}function Ec(e,t,n){e=Ra(e,t=hs(0,t=us(n,t),1),1),t=tc(),null!==e&&(bt(e,1,t),oc(e,t))}function _c(e,t,n){if(3===e.tag)Ec(e,e,n);else for(;null!==t;){if(3===t.tag){Ec(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Vl||!Vl.has(r))){t=Ra(t,e=ms(t,e=us(n,e),1),1),e=tc(),null!==t&&(bt(t,1,e),oc(t,e));break}}t=t.return}}function zc(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=tc(),e.pingedLanes|=e.suspendedLanes&n,Ll===e&&(Fl&n)===n&&(4===Rl||3===Rl&&(130023424&Fl)===Fl&&500>Xe()-$l?fc(e,0):Ml|=n),oc(e,t)}function Cc(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ut,0==(130023424&(ut<<=1))&&(ut=4194304)));var n=tc();null!==(e=La(e,t))&&(bt(e,t,n),oc(e,n))}function Tc(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Cc(e,n)}function jc(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(a(314))}null!==r&&r.delete(t),Cc(e,n)}function Lc(e,t){return Ve(e,t)}function Ac(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Fc(e,t,n,r){return new Ac(e,t,n,r)}function Nc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Pc(e,t){var n=e.alternate;return null===n?((n=Fc(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Rc(e,t,n,r,o,i){var s=2;if(r=e,"function"==typeof e)Nc(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case S:return Dc(n.children,o,i,t);case E:s=8,o|=8;break;case _:return(e=Fc(12,n,t,2|o)).elementType=_,e.lanes=i,e;case j:return(e=Fc(13,n,t,o)).elementType=j,e.lanes=i,e;case L:return(e=Fc(19,n,t,o)).elementType=L,e.lanes=i,e;case N:return Ic(n,o,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case z:s=10;break e;case C:s=9;break e;case T:s=11;break e;case A:s=14;break e;case F:s=16,r=null;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Fc(s,n,t,o)).elementType=e,t.type=r,t.lanes=i,t}function Dc(e,t,n,r){return(e=Fc(7,e,r,t)).lanes=n,e}function Ic(e,t,n,r){return(e=Fc(22,e,r,t)).elementType=N,e.lanes=n,e.stateNode={isHidden:!1},e}function Oc(e,t,n){return(e=Fc(6,e,null,t)).lanes=n,e}function Mc(e,t,n){return(t=Fc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Bc(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=gt(0),this.expirationTimes=gt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=gt(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Uc(e,t,n,r,o,a,i,s,l){return e=new Bc(e,t,n,s,l),1===t?(t=1,!0===a&&(t|=8)):t=0,a=Fc(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Fa(a),e}function $c(e){if(!e)return To;e:{if($e(e=e._reactInternals)!==e||1!==e.tag)throw Error(a(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(No(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(a(171))}if(1===e.tag){var n=e.type;if(No(n))return Do(e,n,t)}return t}function qc(e,t,n,r,o,a,i,s,l){return(e=Uc(n,r,!0,e,0,a,0,s,l)).context=$c(null),n=e.current,(a=Pa(r=tc(),o=nc(n))).callback=null!=t?t:null,Ra(n,a,o),e.current.lanes=o,bt(e,o,r),oc(e,r),e}function Wc(e,t,n,r){var o=t.current,a=tc(),i=nc(o);return n=$c(n),null===t.context?t.context=n:t.pendingContext=n,(t=Pa(a,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=Ra(o,t,i))&&(rc(e,o,i,a),Da(e,o,i)),i}function Hc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Gc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Vc(e,t){Gc(e,t),(e=e.alternate)&&Gc(e,t)}El=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||Lo.current)ws=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return ws=!1,function(e,t,n){switch(t.tag){case 3:Ls(t),ha();break;case 5:ii(t);break;case 1:No(t.type)&&Io(t);break;case 4:oi(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,o=t.memoizedProps.value;Co(ya,r._currentValue),r._currentValue=o;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(Co(li,1&li.current),t.flags|=128,null):0!=(n&t.child.childLanes)?Os(e,t,n):(Co(li,1&li.current),null!==(e=Hs(e,t,n))?e.sibling:null);Co(li,1&li.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(128&e.flags)){if(r)return qs(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),Co(li,li.current),r)break;return null;case 22:case 23:return t.lanes=0,_s(e,t,n)}return Hs(e,t,n)}(e,t,n);ws=0!=(131072&e.flags)}else ws=!1,aa&&0!=(1048576&t.flags)&&ea(t,Vo,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Ws(e,t),e=t.pendingProps;var o=Fo(t,jo.current);_a(t,n),o=Ei(null,t,r,e,o,n);var i=_i();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,No(r)?(i=!0,Io(t)):i=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,Fa(t),o.updater=$a,t.stateNode=o,o._reactInternals=t,Ga(t,r,e,n),t=js(null,t,r,!0,i,n)):(t.tag=0,aa&&i&&ta(t),xs(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Ws(e,t),e=t.pendingProps,r=(o=r._init)(r._payload),t.type=r,o=t.tag=function(e){if("function"==typeof e)return Nc(e)?1:0;if(null!=e){if((e=e.$$typeof)===T)return 11;if(e===A)return 14}return 2}(r),e=ba(r,e),o){case 0:t=Cs(null,t,r,e,n);break e;case 1:t=Ts(null,t,r,e,n);break e;case 11:t=ks(null,t,r,e,n);break e;case 14:t=Ss(null,t,r,ba(r.type,e),n);break e}throw Error(a(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,Cs(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 1:return r=t.type,o=t.pendingProps,Ts(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 3:e:{if(Ls(t),null===e)throw Error(a(387));r=t.pendingProps,o=(i=t.memoizedState).element,Na(e,t),Oa(t,r,null,n);var s=t.memoizedState;if(r=s.element,i.isDehydrated){if(i={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=i,t.memoizedState=i,256&t.flags){t=As(e,t,r,n,o=us(Error(a(423)),t));break e}if(r!==o){t=As(e,t,r,n,o=us(Error(a(424)),t));break e}for(oa=co(t.stateNode.containerInfo.firstChild),ra=t,aa=!0,ia=null,n=Za(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ha(),r===o){t=Hs(e,t,n);break e}xs(e,t,r,n)}t=t.child}return t;case 5:return ii(t),null===e&&ua(t),r=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,s=o.children,no(r,o)?s=null:null!==i&&no(r,i)&&(t.flags|=32),zs(e,t),xs(e,t,s,n),t.child;case 6:return null===e&&ua(t),null;case 13:return Os(e,t,n);case 4:return oi(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Xa(t,null,r,n):xs(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,ks(e,t,r,o=t.elementType===r?o:ba(r,o),n);case 7:return xs(e,t,t.pendingProps,n),t.child;case 8:case 12:return xs(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,s=o.value,Co(ya,r._currentValue),r._currentValue=s,null!==i)if(sr(i.value,s)){if(i.children===o.children&&!Lo.current){t=Hs(e,t,n);break e}}else for(null!==(i=t.child)&&(i.return=t);null!==i;){var l=i.dependencies;if(null!==l){s=i.child;for(var c=l.firstContext;null!==c;){if(c.context===r){if(1===i.tag){(c=Pa(-1,n&-n)).tag=2;var u=i.updateQueue;if(null!==u){var d=(u=u.shared).pending;null===d?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}i.lanes|=n,null!==(c=i.alternate)&&(c.lanes|=n),Ea(i.return,n,t),l.lanes|=n;break}c=c.next}}else if(10===i.tag)s=i.type===t.type?null:i.child;else if(18===i.tag){if(null===(s=i.return))throw Error(a(341));s.lanes|=n,null!==(l=s.alternate)&&(l.lanes|=n),Ea(s,n,t),s=i.sibling}else s=i.child;if(null!==s)s.return=i;else for(s=i;null!==s;){if(s===t){s=null;break}if(null!==(i=s.sibling)){i.return=s.return,s=i;break}s=s.return}i=s}xs(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,_a(t,n),r=r(o=za(o)),t.flags|=1,xs(e,t,r,n),t.child;case 14:return o=ba(r=t.type,t.pendingProps),Ss(e,t,r,o=ba(r.type,o),n);case 15:return Es(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ba(r,o),Ws(e,t),t.tag=1,No(r)?(e=!0,Io(t)):e=!1,_a(t,n),Wa(t,r,o),Ga(t,r,o,n),js(null,t,r,!0,e,n);case 19:return qs(e,t,n);case 22:return _s(e,t,n)}throw Error(a(156,t.tag))};var Yc="function"==typeof reportError?reportError:function(e){console.error(e)};function Qc(e){this._internalRoot=e}function Kc(e){this._internalRoot=e}function Xc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Zc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Jc(){}function eu(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a;if("function"==typeof o){var s=o;o=function(){var e=Hc(i);s.call(e)}}Wc(t,i,e,o)}else i=function(e,t,n,r,o){if(o){if("function"==typeof r){var a=r;r=function(){var e=Hc(i);a.call(e)}}var i=qc(t,r,e,0,null,!1,0,"",Jc);return e._reactRootContainer=i,e[mo]=i.current,$r(8===e.nodeType?e.parentNode:e),dc(),i}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof r){var s=r;r=function(){var e=Hc(l);s.call(e)}}var l=Uc(e,0,!1,null,0,!1,0,"",Jc);return e._reactRootContainer=l,e[mo]=l.current,$r(8===e.nodeType?e.parentNode:e),dc((function(){Wc(t,l,n,r)})),l}(n,t,e,o,r);return Hc(i)}Kc.prototype.render=Qc.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(a(409));Wc(e,t,null,null)},Kc.prototype.unmount=Qc.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;dc((function(){Wc(null,e,null,null)})),t[mo]=null}},Kc.prototype.unstable_scheduleHydration=function(e){if(e){var t=Et();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Nt.length&&0!==t&&t<Nt[n].priority;n++);Nt.splice(n,0,e),0===n&&It(e)}},xt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(yt(t,1|n),oc(t,Xe()),0==(6&jl)&&(ql=Xe()+500,qo()))}break;case 13:dc((function(){var t=La(e,1);if(null!==t){var n=tc();rc(t,e,1,n)}})),Vc(e,1)}},kt=function(e){if(13===e.tag){var t=La(e,134217728);if(null!==t)rc(t,e,134217728,tc());Vc(e,134217728)}},St=function(e){if(13===e.tag){var t=nc(e),n=La(e,t);if(null!==n)rc(n,e,t,tc());Vc(e,t)}},Et=function(){return vt},_t=function(e,t){var n=vt;try{return vt=e,t()}finally{vt=n}},ke=function(e,t,n){switch(t){case"input":if(Z(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=ko(r);if(!o)throw Error(a(90));V(r),Z(r,o)}}}break;case"textarea":ae(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Te=uc,je=dc;var tu={usingClientEntryPoint:!1,Events:[wo,xo,ko,ze,Ce,uc]},nu={findFiberByHostInstance:vo,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},ru={bundleType:nu.bundleType,version:nu.version,rendererPackageName:nu.rendererPackageName,rendererConfig:nu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=He(e))?null:e.stateNode},findFiberByHostInstance:nu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ou=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ou.isDisabled&&ou.supportsFiber)try{ot=ou.inject(ru),at=ou}catch(ue){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tu,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Xc(t))throw Error(a(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.createRoot=function(e,t){if(!Xc(e))throw Error(a(299));var n=!1,r="",o=Yc;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=Uc(e,1,!1,null,0,n,0,r,o),e[mo]=t.current,$r(8===e.nodeType?e.parentNode:e),new Qc(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw e=Object.keys(e).join(","),Error(a(268,e))}return e=null===(e=He(t))?null:e.stateNode},t.flushSync=function(e){return dc(e)},t.hydrate=function(e,t,n){if(!Zc(t))throw Error(a(200));return eu(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Xc(e))throw Error(a(405));var r=null!=n&&n.hydratedSources||null,o=!1,i="",s=Yc;if(null!=n&&(!0===n.unstable_strictMode&&(o=!0),void 0!==n.identifierPrefix&&(i=n.identifierPrefix),void 0!==n.onRecoverableError&&(s=n.onRecoverableError)),t=qc(t,null,e,1,null!=n?n:null,o,0,i,s),e[mo]=t.current,$r(e),r)for(e=0;e<r.length;e++)o=(o=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o);return new Kc(t)},t.render=function(e,t,n){if(!Zc(t))throw Error(a(200));return eu(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Zc(e))throw Error(a(40));return!!e._reactRootContainer&&(dc((function(){eu(null,null,e,!1,(function(){e._reactRootContainer=null,e[mo]=null}))})),!0)},t.unstable_batchedUpdates=uc,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Zc(n))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return eu(e,t,n,!1,r)},t.version="18.2.0-next-9e3b772b8-20220608"},28352:(e,t,n)=>{"use strict";var r=n(97104);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},97104:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(79516)},20448:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var s,l,c,u;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(!a(e[l],i[l]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;for(u=e.entries();!(l=u.next()).done;)if(!a(l.value[1],i.get(l.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(e[l]!==i[l])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((s=(c=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(l=s;0!=l--;)if(!Object.prototype.hasOwnProperty.call(i,c[l]))return!1;if(t&&e instanceof Element)return!1;for(l=s;0!=l--;)if(("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!e.$$typeof)&&!a(e[c[l]],i[c[l]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},32160:(e,t,n)=>{"use strict";n.d(t,{EN:()=>H,So:()=>J});var r=n(11504),o=n(3268),a=n.n(o),i=n(20448),s=n.n(i),l=n(79328),c=n.n(l),u=n(21072),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,h(e,t)}function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}function m(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},y={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),x={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},k=Object.keys(x).reduce((function(e,t){return e[x[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},E=function(e){var t=S(e,g.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=S(e,"defaultTitle");return t||r||void 0},_=function(e){return S(e,"onChangeClientState")||function(){}},z=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},C=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},T=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var s=a[i],l=s.toLowerCase();-1===t.indexOf(l)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===l&&"stylesheet"===e[l].toLowerCase()||(n=l),-1===t.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(n=s)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][c]&&(o[n][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var s=a[i],l=p({},r[s],o[s]);r[s]=l}return e}),[]).reverse()},j=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},L=function(e){return Array.isArray(e)?e.join(""):e},A=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},F=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},N=[g.NOSCRIPT,g.SCRIPT,g.STYLE],P=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},R=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[x[n]||n]=e[n],t}),t)},I=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=x[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},O=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=D(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=R(n),a=L(t);return o?"<"+e+' data-rh="true" '+o+">"+P(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+P(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return R(t)}};default:return{toComponent:function(){return I(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+P(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===N.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},M=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,s=e.title,l=void 0===s?"":s,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var h=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=A(e.metaTags,v),a=A(t,b),i=A(n,y);return{priorityMethods:{toComponent:function(){return[].concat(I(g.META,o.priority),I(g.LINK,a.priority),I(g.SCRIPT,i.priority))},toString:function(){return O(g.META,o.priority,r)+" "+O(g.LINK,a.priority,r)+" "+O(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);f=h.priorityMethods,u=h.linkTags,d=h.metaTags,p=h.scriptTags}return{priority:f,base:O(g.BASE,t,r),bodyAttributes:O("bodyAttributes",n,r),htmlAttributes:O("htmlAttributes",o,r),link:O(g.LINK,u,r),meta:O(g.META,d,r),noscript:O(g.NOSCRIPT,a,r),script:O(g.SCRIPT,p,r),style:O(g.STYLE,i,r),title:O(g.TITLE,{title:l,titleAttributes:c},r)}},B=[],U=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?B:n.instances},add:function(e){(n.canUseDOM?B:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?B:n.instances).indexOf(e);(n.canUseDOM?B:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=M({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=r.createContext({}),q=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),W="undefined"!=typeof document,H=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new U(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);H.canUseDOM=W,H.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},H.defaultProps={context:{}},H.displayName="HelmetProvider";var G=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},V=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),s=0;s<i.length;s+=1){var l=i[s],c=t[l]||"";n.getAttribute(l)!==c&&n.setAttribute(l,c),-1===o.indexOf(l)&&o.push(l);var u=a.indexOf(l);-1!==u&&a.splice(u,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},Y=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,l=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;V(g.BODY,e.bodyAttributes),V(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=L(e)),V(g.TITLE,t)}(u,d);var p={baseTag:G(g.BASE,n),linkTags:G(g.LINK,o),metaTags:G(g.META,a),noscriptTags:G(g.NOSCRIPT,i),scriptTags:G(g.SCRIPT,l),styleTags:G(g.STYLE,c)},f={},h={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(h[e]=p[e].oldTags)})),t&&t(),s(e,f,h)},Q=null,K=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:C(["href"],e),bodyAttributes:z("bodyAttributes",e),defer:S(e,"defer"),encode:S(e,"encodeSpecialCharacters"),htmlAttributes:z("htmlAttributes",e),linkTags:T(g.LINK,["rel","href"],e),metaTags:T(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:T(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:_(e),scriptTags:T(g.SCRIPT,["src","innerHTML"],e),styleTags:T(g.STYLE,["cssText"],e),title:E(e),titleAttributes:z("titleAttributes",e),prioritizeSeoTags:j(e,"prioritizeSeoTags")});H.canUseDOM?(t=a,Q&&cancelAnimationFrame(Q),t.defer?Q=requestAnimationFrame((function(){Y(t,(function(){Q=null}))})):(Y(t),Q=null)):M&&(o=M(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);K.propTypes={context:q.isRequired},K.displayName="HelmetDispatcher";var X=["children"],Z=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!s()(F(this.props,"helmetData"),F(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return p({},o,((t={})[r.type]=i,t.titleAttributes=p({},a),t));case g.BODY:return p({},o,{bodyAttributes:p({},a)});case g.HTML:return p({},o,{htmlAttributes:p({},a)});default:return p({},o,((n={})[r.type]=p({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=m(r,X),s=Object.keys(i).reduce((function(e,t){return e[k[t]||t]=i[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,a),l){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:s,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=m(e,Z),o=p({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof U||(a=new U(a.context,a.instances)),a?r.createElement(K,p({},o,{context:a.value,helmetData:void 0})):r.createElement($.Consumer,null,(function(e){return r.createElement(K,p({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},59764:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,h=n?Symbol.for("react.suspense_list"):60120,m=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function x(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case g:case m:case l:return e;default:return t}}case o:return t}}}function k(e){return x(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=g,t.Memo=m,t.Portal=o,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return k(e)||x(e)===u},t.isConcurrentMode=k,t.isContextConsumer=function(e){return x(e)===c},t.isContextProvider=function(e){return x(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return x(e)===p},t.isFragment=function(e){return x(e)===a},t.isLazy=function(e){return x(e)===g},t.isMemo=function(e){return x(e)===m},t.isPortal=function(e){return x(e)===o},t.isProfiler=function(e){return x(e)===s},t.isStrictMode=function(e){return x(e)===i},t.isSuspense=function(e){return x(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===s||e===i||e===f||e===h||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===m||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===y||e.$$typeof===v||e.$$typeof===w||e.$$typeof===b)},t.typeOf=x},62168:(e,t,n)=>{"use strict";e.exports=n(59764)},98852:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var s=n(11504),l=n(3268),c=[],u=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return s.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function h(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var h=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),m=null;function g(){return m||(m=e(h.loader)),m.promise}return c.push(g),"function"==typeof h.webpack&&u.push((function(){if((0,h.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),p=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),m=e(h.loader),r._loadModule()})),g(),r.state={error:m.error,pastDelay:!1,timedOut:!1,loading:m.loading,loaded:m.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(h.modules)&&h.modules.forEach((function(t){e.context.loadable.report(t)})),m.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof h.delay&&(0===h.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),h.delay)),"number"==typeof h.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),h.timeout));var n=function(){t({error:m.error,loaded:m.loaded,loading:m.loading}),e._clearTimeouts()};m.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?s.createElement(h.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?h.render(this.state.loaded,this.props):null},n}(s.Component),a(d,"contextTypes",{loadable:l.shape({report:l.func.isRequired})}),p}function m(e){return h(d,e)}m.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return h(p,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return s.Children.only(this.props.children)},t}(s.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}a(g,"propTypes",{report:l.func.isRequired}),a(g,"childContextTypes",{loadable:l.shape({report:l.func.isRequired}).isRequired}),m.Capture=g,m.preloadAll=function(){return new Promise((function(e,t){b(c).then(e,t)}))},m.preloadReady=function(){return new Promise((function(e,t){b(u).then(e,e)}))},e.exports=m},85464:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,k:()=>s});var r=n(55592),o=n(86404),a=n(11504);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.ot)(t,e):n.length?n[n.length-1].match:r.E5.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.Wk,n,e.map((function(e,n){return a.createElement(r.kX,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.c)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.c)({},n,t,{route:e}))}})}))):null}},70440:(e,t,n)=>{"use strict";n.d(t,{Af:()=>v,cH:()=>g,kn:()=>u});var r=n(55592),o=n(39948),a=n(11504),i=n(58064),s=(n(3268),n(86404)),l=n(14384),c=n(66136),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.iU)(t.props),t}return(0,o.c)(t,e),t.prototype.render=function(){return a.createElement(r.E5,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,i.gh)(e,null,null,t):e},f=function(e){return e},h=a.forwardRef;void 0===h&&(h=f);var m=h((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,l.c)(e,["innerRef","navigate","onClick"]),c=i.target,u=(0,s.c)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=f!==h&&t||n,a.createElement("a",u)}));var g=h((function(e,t){var n=e.component,o=void 0===n?m:n,u=e.replace,g=e.to,b=e.innerRef,y=(0,l.c)(e,["component","replace","to","innerRef"]);return a.createElement(r.Os.Consumer,null,(function(e){e||(0,c.c)(!1);var n=e.history,r=p(d(g,e.location),e.location),l=r?n.createHref(r):"",m=(0,s.c)({},y,{href:l,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(p(t));(u||r?n.replace:n.push)(t)}});return f!==h?m.ref=t||b:m.innerRef=b,a.createElement(o,m)}))})),b=function(e){return e},y=a.forwardRef;void 0===y&&(y=b);var v=y((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,u=void 0===i?"active":i,f=e.activeStyle,h=e.className,m=e.exact,v=e.isActive,w=e.location,x=e.sensitive,k=e.strict,S=e.style,E=e.to,_=e.innerRef,z=(0,l.c)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.Os.Consumer,null,(function(e){e||(0,c.c)(!1);var n=w||e.location,i=p(d(E,n),n),l=i.pathname,C=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),T=C?(0,r.ot)(n.pathname,{path:C,exact:m,sensitive:x,strict:k}):null,j=!!(v?v(T,n):T),L="function"==typeof h?h(j):h,A="function"==typeof S?S(j):S;j&&(L=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(L,u),A=(0,s.c)({},A,f));var F=(0,s.c)({"aria-current":j&&o||null,className:L,style:A,to:i},z);return b!==y?F.ref=t||_:F.innerRef=_,a.createElement(g,F)}))}))},55592:(e,t,n)=>{"use strict";n.d(t,{E5:()=>v,IT:()=>N,Os:()=>y,Uz:()=>F,Wk:()=>L,kX:()=>E,ot:()=>S});var r=n(39948),o=n(11504),a=n(3268),i=n.n(a),s=n(58064),l=n(66136),c=n(86404),u=n(58216),d=n.n(u),p=(n(62168),n(14384)),f=(n(84792),1073741823),h="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var m=o.createContext||function(e,t){var n,a,s="__create-react-context-"+function(){var e="__global_unique_id__";return h[e]=(h[e]||0)+1}()+"__",l=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.c)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[s]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);l.childContextTypes=((n={})[s]=i().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.c)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},o.componentDidMount=function(){this.context[s]&&this.context[s].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},o.componentWillUnmount=function(){this.context[s]&&this.context[s].off(this.onUpdate)},o.getValue=function(){return this.context[s]?this.context[s].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return c.contextTypes=((a={})[s]=i().object,a),{Provider:l,Consumer:c}},g=function(e){var t=m();return t.displayName=e,t},b=g("Router-History"),y=g("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.c)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(y.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},x=1e4,k=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,s=void 0!==i&&i,l=n.sensitive,c=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return k<x&&(r[e]=a,k++),a}(n,{end:a,strict:s,sensitive:c}),o=r.regexp,i=r.keys,l=o.exec(e);if(!l)return null;var u=l[0],p=l.slice(1),f=e===u;return a&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:i.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var E=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.c)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,l.c)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,a=(0,c.c)({},t,{location:n,match:r}),i=e.props,s=i.children,u=i.component,d=i.render;return Array.isArray(s)&&function(e){return 0===o.Children.count(e)}(s)&&(s=null),o.createElement(y.Provider,{value:a},a.match?s?"function"==typeof s?s(a):s:u?o.createElement(u,a):d?d(a):null:"function"==typeof s?s(a):null)}))},t}(o.Component);function _(e){return"/"===e.charAt(0)?e:"/"+e}function z(e,t){if(!e)return t;var n=_(e);return 0!==t.pathname.indexOf(n)?t:(0,c.c)({},t,{pathname:t.pathname.substr(n.length)})}function C(e){return"string"==typeof e?e:(0,s.Ep)(e)}function T(e){return function(){(0,l.c)(!1)}}function j(){}o.Component;var L=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.c)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,l.c)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?S(a.pathname,(0,c.c)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var A=o.useContext;function F(){return A(b)}function N(){return A(y).location}},58216:(e,t,n)=>{var r=n(59600);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var h=e[i],m=n[2],g=n[3],b=n[4],y=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var x=null!=m&&null!=h&&h!==m,k="+"===v||"*"===v,S="?"===v||"*"===v,E=n[2]||u,_=b||y;r.push({name:g||a++,prefix:m||"",delimiter:E,optional:S,repeat:k,partial:x,asterisk:!!w,pattern:_?c(_):w?".*":"[^"+l(E)+"]+?"})}}return i<e.length&&(s+=e.substr(i)),s&&r.push(s),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",s=t||{},l=(o||{}).pretty?i:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,p=s[u.name];if(null==p){if(u.optional){u.partial&&(a+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(r(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=l(p[f]),!n[c].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===f?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):l(p),!n[c].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');a+=u.prefix+d}}else a+=u}return a}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",s=0;s<e.length;s++){var c=e[s];if("string"==typeof c)i+=l(c);else{var p=l(c.prefix),f="(?:"+c.pattern+")";t.push(c),c.repeat&&(f+="(?:"+p+f+")*"),i+=f=c.optional?c.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var h=l(n.delimiter||"/"),m=i.slice(-h.length)===h;return o||(i=(m?i.slice(0,-h.length):i)+"(?:"+h+"(?=$))?"),i+=a?"$":o&&m?"":"(?="+h+"|$)",u(new RegExp("^"+i,d(n)),t)}function f(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(f(e[o],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(a(e,n),t,n)}(e,t,n)}},44808:(e,t,n)=>{"use strict";var r=n(11504),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,a={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===a[r]&&(a[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:a,_owner:s.current}}t.Fragment=a,t.jsx=c,t.jsxs=c},73028:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,g={};function b(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||h}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||h}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=b.prototype;var w=v.prototype=new y;w.constructor=v,m(w,b.prototype),w.isPureReactComponent=!0;var x=Array.isArray,k=Object.prototype.hasOwnProperty,S={current:null},E={key:!0,ref:!0,__self:!0,__source:!0};function _(e,t,r){var o,a={},i=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)k.call(t,o)&&!E.hasOwnProperty(o)&&(a[o]=t[o]);var l=arguments.length-2;if(1===l)a.children=r;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];a.children=c}if(e&&e.defaultProps)for(o in l=e.defaultProps)void 0===a[o]&&(a[o]=l[o]);return{$$typeof:n,type:e,key:i,ref:s,props:a,_owner:S.current}}function z(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var C=/\/+/g;function T(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function j(e,t,o,a,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l=!1;if(null===e)l=!0;else switch(s){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case n:case r:l=!0}}if(l)return i=i(l=e),e=""===a?"."+T(l,0):a,x(i)?(o="",null!=e&&(o=e.replace(C,"$&/")+"/"),j(i,t,o,"",(function(e){return e}))):null!=i&&(z(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,o+(!i.key||l&&l.key===i.key?"":(""+i.key).replace(C,"$&/")+"/")+e)),t.push(i)),1;if(l=0,a=""===a?".":a+":",x(e))for(var c=0;c<e.length;c++){var u=a+T(s=e[c],c);l+=j(s,t,o,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(s=e.next()).done;)l+=j(s=s.value,t,o,u=a+T(s,c++),i);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return l}function L(e,t,n){if(null==e)return e;var r=[],o=0;return j(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function A(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var F={current:null},N={transition:null},P={ReactCurrentDispatcher:F,ReactCurrentBatchConfig:N,ReactCurrentOwner:S};t.Children={map:L,forEach:function(e,t,n){L(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return L(e,(function(){t++})),t},toArray:function(e){return L(e,(function(e){return e}))||[]},only:function(e){if(!z(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=b,t.Fragment=o,t.Profiler=i,t.PureComponent=v,t.StrictMode=a,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=P,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=m({},e.props),a=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=S.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)k.call(t,c)&&!E.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==l?l[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=r;else if(1<c){l=Array(c);for(var u=0;u<c;u++)l[u]=arguments[u+2];o.children=l}return{$$typeof:n,type:e.type,key:a,ref:i,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=_,t.createFactory=function(e){var t=_.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=z,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:A}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=N.transition;N.transition={};try{e()}finally{N.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return F.current.useCallback(e,t)},t.useContext=function(e){return F.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return F.current.useDeferredValue(e)},t.useEffect=function(e,t){return F.current.useEffect(e,t)},t.useId=function(){return F.current.useId()},t.useImperativeHandle=function(e,t,n){return F.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return F.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return F.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return F.current.useMemo(e,t)},t.useReducer=function(e,t,n){return F.current.useReducer(e,t,n)},t.useRef=function(e){return F.current.useRef(e)},t.useState=function(e){return F.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return F.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return F.current.useTransition()},t.version="18.2.0"},11504:(e,t,n)=>{"use strict";e.exports=n(73028)},17624:(e,t,n)=>{"use strict";e.exports=n(44808)},58328:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,i=o>>>1;r<i;){var s=2*(r+1)-1,l=e[s],c=s+1,u=e[c];if(0>a(l,n))c<o&&0>a(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else{if(!(c<o&&0>a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],u=[],d=1,p=null,f=3,h=!1,m=!1,g=!1,b="function"==typeof setTimeout?setTimeout:null,y="function"==typeof clearTimeout?clearTimeout:null,v="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function x(e){if(g=!1,w(e),!m)if(null!==r(c))m=!0,N(k);else{var t=r(u);null!==t&&P(x,t.startTime-e)}}function k(e,n){m=!1,g&&(g=!1,y(z),z=-1),h=!0;var a=f;try{for(w(n),p=r(c);null!==p&&(!(p.expirationTime>n)||e&&!j());){var i=p.callback;if("function"==typeof i){p.callback=null,f=p.priorityLevel;var s=i(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?p.callback=s:p===r(c)&&o(c),w(n)}else o(c);p=r(c)}if(null!==p)var l=!0;else{var d=r(u);null!==d&&P(x,d.startTime-n),l=!1}return l}finally{p=null,f=a,h=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var S,E=!1,_=null,z=-1,C=5,T=-1;function j(){return!(t.unstable_now()-T<C)}function L(){if(null!==_){var e=t.unstable_now();T=e;var n=!0;try{n=_(!0,e)}finally{n?S():(E=!1,_=null)}}else E=!1}if("function"==typeof v)S=function(){v(L)};else if("undefined"!=typeof MessageChannel){var A=new MessageChannel,F=A.port2;A.port1.onmessage=L,S=function(){F.postMessage(null)}}else S=function(){b(L,0)};function N(e){_=e,E||(E=!0,S())}function P(e,n){z=b((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){m||h||(m=!0,N(k))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):C=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return r(c)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0<a?i+a:i:a=i,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:s=a+s,sortIndex:-1},a>i?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(g?(y(z),z=-1):g=!0,P(x,a-i))):(e.sortIndex=s,n(c,e),m||h||(m=!0,N(k))),e},t.unstable_shouldYield=j,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},14712:(e,t,n)=>{"use strict";e.exports=n(58328)},21072:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),l=0;l<a.length;l++){var c=a[l];if(!s(c))return!1;var u=e[c],d=t[c];if(!1===(o=n?n.call(r,u,d,c):void 0)||void 0===o&&u!==d)return!1}return!0}},66136:(e,t,n)=>{"use strict";n.d(t,{c:()=>o});var r="Invariant failed";const o=function(e,t){if(!e)throw new Error(r)}},97768:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Franzininho",tagline:"O projeto Franzininho tem o objetivo de incentivar as pessoas na tecnologia atrav\xe9s da cultura maker e do fa\xe7a voc\xea mesmo.",url:"https://franzininho.github.io",baseUrl:"/en/",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",favicon:"img/favicon.png",organizationName:"Franzininho",projectName:"docs-franzininho-site",themeConfig:{image:"img/logo.svg",metadata:[{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"630"}],navbar:{title:"Franzininho",logo:{alt:"Logo do site",src:"img/logo.svg",href:"https://franzininho.com.br/"},items:[{to:"/docs",activeBasePath:"/docs",label:"Documenta\xe7\xe3o",position:"left"},{href:"https://franzininho.com.br/",label:"Site",position:"right"},{href:"https://franzininho.com.br/blog/",label:"Blog",position:"right"},{href:"https://franzininho.com.br/#contato",label:"Contato",position:"right"},{type:"localeDropdown",position:"right",dropdownItemsBefore:[],dropdownItemsAfter:[]}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Documenta\xe7\xe3o",items:[{label:"Franzininho DIY",to:"docs/franzininho-diy/sobre"},{label:"Franzininho WiFi",to:"docs/franzininho-wifi/franzininho-wifi"}]},{title:"Comunidade",items:[{label:"Discord",href:"https://discord.gg/H5kENmWGaz"},{label:"Grupo no Facebook",href:"https://www.facebook.com/groups/299236843857849/"}]},{title:"Redes Sociais",items:[{label:"Instagram",href:"https://www.instagram.com/franzininho/"},{label:"Facebook",href:"https://facebook.com/franzininho/"},{label:"Youtube",href:"https://www.youtube.com/channel/UCxyabOm4teS0kx0EgJW78_g"}]},{title:"Mais",items:[{label:"Site",href:"https://franzininho.com.br/"},{label:"GitHub",href:"https://github.com/franzininho"},{label:"Contato",href:"mailto:contato@franzininho.com.br"}]}],copyright:"Copyright \xa9 2021 Franzininho. Built with Docusaurus."},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},prism:{additionalLanguages:[],theme:{plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"/media/fabio/Dados/Projetos/docs-franzininho-site/sidebars.js",editUrl:"https://github.com/Franzininho/docs-franzininho-site/edit/main/"},theme:{customCss:"/media/fabio/Dados/Projetos/docs-franzininho-site/src/css/custom.css"}}]],i18n:{defaultLocale:"pt-BR",locales:["pt-BR","en"],localeConfigs:{"pt-BR":{label:"Portugu\xeas (Brasil)",direction:"ltr"},en:{label:"English",direction:"ltr"}},path:"i18n"},baseUrlIssueBanner:!0,onBrokenAnchors:"warn",onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},plugins:[],themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{format:"mdx",mermaid:!1,mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0}}}},86404:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{c:()=>r})},39948:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{c:()=>o})},14384:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{c:()=>r})},34064:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n)}else for(n in e)e[n]&&(o&&(o+=" "),o+=n);return o}n.d(t,{c:()=>o});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},15420:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n)}else for(n in e)e[n]&&(o&&(o+=" "),o+=n);return o}n.d(t,{c:()=>o});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},46756:(e,t,n)=>{"use strict";n.d(t,{gl:()=>J,sp:()=>z});var r=n(11504);function o(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=o(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}const a=function(){for(var e,t,n=0,r="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=o(e))&&(r&&(r+=" "),r+=t);return r};var i,s,l,c,u,d=Object.create,p=Object.defineProperty,f=Object.defineProperties,h=Object.getOwnPropertyDescriptor,m=Object.getOwnPropertyDescriptors,g=Object.getOwnPropertyNames,b=Object.getOwnPropertySymbols,y=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty,w=Object.prototype.propertyIsEnumerable,x=(e,t,n)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,k=(e,t)=>{for(var n in t||(t={}))v.call(t,n)&&x(e,n,t[n]);if(b)for(var n of b(t))w.call(t,n)&&x(e,n,t[n]);return e},S=(e,t)=>f(e,m(t)),E=(e,t)=>{var n={};for(var r in e)v.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&b)for(var r of b(e))t.indexOf(r)<0&&w.call(e,r)&&(n[r]=e[r]);return n},_=(i={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var s in a)if(a.hasOwnProperty(s)){if(s==t)for(var l in n)n.hasOwnProperty(l)&&(i[l]=n[l]);n.hasOwnProperty(s)||(i[s]=a[s])}var c=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===c&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],o||s);var l=t[s],c=r.util.type(l);"Object"!==c||a[i(l)]?"Array"!==c||a[i(l)]||(a[i(l)]=!0,e(l,n,s,a)):(a[i(l)]=!0,e(l,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",a),!a.grammar)throw new Error('The language "'+a.language+'" has no grammar.');return a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new s;return l(o,o.head,e),i(e,o,t,o.head,0),function(e){for(var t=[],n=e.head.next;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,s,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var h=0;h<f.length;++h){if(d&&d.cause==p+","+h)return;var m=f[h],g=m.inside,b=!!m.lookbehind,y=!!m.greedy,v=m.alias;if(y&&!m.pattern.global){var w=m.pattern.toString().match(/[imsuy]*$/)[0];m.pattern=RegExp(m.pattern.source,w+"g")}for(var x=m.pattern||m,k=s.next,S=u;k!==t.tail&&!(d&&S>=d.reach);S+=k.value.length,k=k.next){var E=k.value;if(t.length>e.length)return;if(!(E instanceof o)){var _,z=1;if(y){if(!(_=a(x,S,e,b))||_.index>=e.length)break;var C=_.index,T=_.index+_[0].length,j=S;for(j+=k.value.length;C>=j;)j+=(k=k.next).value.length;if(S=j-=k.value.length,k.value instanceof o)continue;for(var L=k;L!==t.tail&&(j<T||"string"==typeof L.value);L=L.next)z++,j+=L.value.length;z--,E=e.slice(S,j),_.index-=S}else if(!(_=a(x,0,E,b)))continue;C=_.index;var A=_[0],F=E.slice(0,C),N=E.slice(C+A.length),P=S+E.length;d&&P>d.reach&&(d.reach=P);var R=k.prev;if(F&&(R=l(t,R,F),S+=F.length),c(t,R,z),k=l(t,R,new o(p,g?r.tokenize(A,g):A,v,A)),N&&l(t,k,N),z>1){var D={cause:p+","+h,reach:P};i(e,t,n,k.prev,S,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function c(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var s="";for(var l in a.attributes)s+=" "+l+'="'+(a.attributes[l]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+s+">"+a.content+"</"+a.tag+">"},r}();t.exports=n,n.default=n}},function(){return s||(0,i[g(i)[0]])((s={exports:{}}).exports,s),s.exports}),z=((e,t,n)=>(n=null!=e?d(y(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of g(t))v.call(e,o)||o===n||p(e,o,{get:()=>t[o],enumerable:!(r=h(t,o))||r.enumerable});return e})(!t&&e&&e.__esModule?n:p(n,"default",{value:e,enumerable:!0}),e)))(_());z.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},z.languages.markup.tag.inside["attr-value"].inside.entity=z.languages.markup.entity,z.languages.markup.doctype.inside["internal-subset"].inside=z.languages.markup,z.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(z.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:z.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:z.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:n},z.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(z.languages.markup.tag,"addAttribute",{value:function(e,t){z.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:z.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),z.languages.html=z.languages.markup,z.languages.mathml=z.languages.markup,z.languages.svg=z.languages.markup,z.languages.xml=z.languages.extend("markup",{}),z.languages.ssml=z.languages.xml,z.languages.atom=z.languages.xml,z.languages.rss=z.languages.xml,function(e){var t={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},n=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/,r="(?:[^\\\\-]|"+n.source+")",o=(r=RegExp(r+"-"+r),{pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"});e.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:r,inside:{escape:n,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":t,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:n}},"special-escape":t,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":o}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:n,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":o}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}}}(z),z.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},z.languages.javascript=z.languages.extend("clike",{"class-name":[z.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),z.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,z.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:z.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:z.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:z.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:z.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:z.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),z.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:z.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),z.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),z.languages.markup&&(z.languages.markup.tag.addInlined("script","javascript"),z.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),z.languages.js=z.languages.javascript,z.languages.actionscript=z.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),z.languages.actionscript["class-name"].alias="function",delete z.languages.actionscript.parameter,delete z.languages.actionscript["literal-property"],z.languages.markup&&z.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:z.languages.markup}}),c=/#(?!\{).+/,u={pattern:/#\{[^}]+\}/,alias:"variable"},(l=z).languages.coffeescript=l.languages.extend("javascript",{comment:c,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:u}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),l.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:c,interpolation:u}}}),l.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:l.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:u}}]}),l.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete l.languages.coffeescript["template-string"],l.languages.coffee=l.languages.coffeescript,function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){(t="string"==typeof t?[t]:t).forEach((function(t){var r=function(e){e.inside||(e.inside={}),e.inside.rest=n},o="doc-comment";if(a=e.languages[t]){var a,i=a[o];if((i=i||(a=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[o])instanceof RegExp&&(i=a[o]={pattern:i}),Array.isArray(i))for(var s=0,l=i.length;s<l;s++)i[s]instanceof RegExp&&(i[s]={pattern:i[s]}),r(i[s]);else r(i)}}))}}),t.addSupport(["java","javascript","php"],t)}(z),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;(t=(e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css,e.languages.markup))&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(z),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,n=(t=(e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(z),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(z),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,i=(e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o,a=t[n];"code"!==a.type?e(a.content):(o=a.content[1],a=a.content[3],o&&a&&"code-language"===o.type&&"code-block"===a.type&&"string"==typeof o.content&&(o=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),o="language-"+(o=(/[a-z][\w-]*/i.exec(o)||[""])[0].toLowerCase()),a.alias?"string"==typeof a.alias?a.alias=[a.alias,o]:a.alias.push(o):a.alias=[o]))}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r];if(a=/language-(.+)/.exec(a)){n=a[1];break}}var c,u=e.languages[n];u?t.content=e.highlight(t.content.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;return"#"===(t=t.toLowerCase())[0]?(n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n)):s[t]||e})),u,n):n&&"none"!==n&&e.plugins.autoloader&&(c="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=c,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(c);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))})))}})),RegExp(e.languages.markup.tag.pattern.source,"gi")),s={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(z),z.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:z.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},z.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var a=p(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=u(0);"variable"===i.type&&(f(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),0<o.length)){var s=p(/^\{$/,/^\}$/);if(-1!==s)for(var l=n;l<s;l++){var c=t[l];"variable"===c.type&&0<=o.indexOf(c.content)&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return}return 1}function p(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],s=i.content;if("punctuation"===i.type&&"string"==typeof s)if(e.test(s))o++;else if(r.test(s)&&0==--o)return a}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),z.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(t,n,r){return t={code:t,grammar:n,language:r},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}function l(t,n,i){var l=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),c=0,u={},d=(l=s(l.map((function(e){if("string"==typeof e)return e;var n,r;for(e=e.content;-1!==t.indexOf((r=c++,n="___"+i.toUpperCase()+"_"+r+"___")););return u[n]=e,n})).join(""),n,i),Object.keys(u));return c=0,function t(n){for(var a=0;a<n.length;a++){if(c>=d.length)return;var i,l,p,f,h,m,g,b=n[a];"string"==typeof b||"string"==typeof b.content?(i=d[c],-1!==(g=(m="string"==typeof b?b:b.content).indexOf(i))&&(++c,l=m.substring(0,g),h=u[i],p=void 0,(f={})["interpolation-punctuation"]=o,3===(f=e.tokenize(h,f)).length&&((p=[1,1]).push.apply(p,s(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,p)),p=new e.Token("interpolation",f,r.alias,h),f=m.substring(g+i.length),h=[],l&&h.push(l),h.push(p),f&&(t(m=[f]),h.push.apply(h,m)),"string"==typeof b?(n.splice.apply(n,[a,1].concat(h)),a+=h.length-1):b.content=h)):(g=b.content,Array.isArray(g)?t(g):t([g]))}}(l),new e.Token(i,l,"language-"+i,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var c={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function u(e){return"string"==typeof e?e:Array.isArray(e)?e.map(u).join(""):u(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in c&&function t(n){for(var r=0,o=n.length;r<o;r++){var a,i,s,c=n[r];"string"!=typeof c&&(a=c.content,Array.isArray(a)?"template-string"===c.type?(c=a[1],3===a.length&&"string"!=typeof c&&"embedded-code"===c.type&&(i=u(c),c=c.alias,c=Array.isArray(c)?c[0]:c,s=e.languages[c])&&(a[1]=l(i,s,c))):t(a):"string"!=typeof a&&t([a]))}}(t.tokens)}))}(z),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(z),function(e){var t=e.languages.javascript,n=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,r="(@(?:arg|argument|param|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(r+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(r+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g,(function(){return n}))),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:t.string,number:t.number,boolean:t.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(z),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(z),z.languages.n4js=z.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),z.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),z.languages.n4jsd=z.languages.n4js,function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];o=(a="RegExp"===e.util.type(a)?e.languages.javascript[o]={pattern:a}:a).inside||{};(a.inside=o)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(z),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}function i(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;"string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?0<n.length&&n[n.length-1].tagName===s(o.content[0].content[1])&&n.pop():"/>"!==o.content[o.content.length-1].content&&n.push({tagName:s(o.content[0].content[1]),openedBraces:0}):0<n.length&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:0<n.length&&0<n[n.length-1].openedBraces&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&0<n.length&&0===n[n.length-1].openedBraces&&(a=s(o),r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(a+=s(t[r+1]),t.splice(r+1,1)),0<r&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(a=s(t[r-1])+a,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",a,null,a)),o.content&&"string"!=typeof o.content&&i(o.content)}}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var s=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(s).join(""):""};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||i(e.tokens)}))}(z),function(e){var t=e.util.clone(e.languages.typescript);(t=(e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(z),z.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},z.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=z.languages.swift})),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(z),z.languages.c=z.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),z.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),z.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},z.languages.c.string],char:z.languages.c.char,comment:z.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:z.languages.c}}}}),z.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete z.languages.c.boolean,z.languages.objectivec=z.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete z.languages.objectivec["class-name"],z.languages.objc=z.languages.objectivec,z.languages.reason=z.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),z.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete z.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(z),z.languages.go=z.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),z.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete z.languages.go["class-name"],function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(z),z.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},z.languages.python["string-interpolation"].inside.interpolation.inside.rest=z.languages.python,z.languages.py=z.languages.python;((e,t)=>{for(var n in t)p(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>C,duotoneDark:()=>T,duotoneLight:()=>j,github:()=>L,jettwaveDark:()=>q,jettwaveLight:()=>W,nightOwl:()=>A,nightOwlLight:()=>F,oceanicNext:()=>R,okaidia:()=>D,oneDark:()=>H,oneLight:()=>G,palenight:()=>I,shadesOfPurple:()=>O,synthwave84:()=>M,ultramin:()=>B,vsDark:()=>U,vsLight:()=>$});var C={plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},T={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},j={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#896724"}}]},L={plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},A={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},F={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},N="#c5a5c5",P="#8dc891",R={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:N}},{types:["attr-value"],style:{color:P}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:"#999999"}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:"#5a9bcf"}},{types:["boolean"],style:{color:"#ff8b50"}},{types:["tag"],style:{color:"#fc929e"}},{types:["string"],style:{color:P}},{types:["punctuation"],style:{color:P}},{types:["selector","char","builtin","inserted"],style:{color:"#D8DEE9"}},{types:["function"],style:{color:"#79b6f2"}},{types:["operator","entity","url","variable"],style:{color:"#d7deea"}},{types:["keyword"],style:{color:N}},{types:["atrule","class-name"],style:{color:"#FAC863"}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},D={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},I={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},O={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},M={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},B={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},U={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},$={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},q={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},W={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},H={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(220, 14%, 71%)"}}]},G={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(230, 8%, 24%)"}}]},V=(e,t)=>{const{plain:n}=e,r=e.styles.reduce(((e,n)=>{const{languages:r,style:o}=n;return r&&!r.includes(t)||n.types.forEach((t=>{const n=k(k({},e[t]),o);e[t]=n})),e}),{});return r.root=n,r.plain=S(k({},n),{backgroundColor:void 0}),r},Y=/\r\n|\r|\n/,Q=e=>{0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},K=(e,t)=>{const n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},X=e=>{const t=[[]],n=[e],r=[0],o=[e.length];let a=0,i=0,s=[];const l=[s];for(;i>-1;){for(;(a=r[i]++)<o[i];){let e,c=t[i];const u=n[i][a];if("string"==typeof u?(c=i>0?c:["plain"],e=u):(c=K(c,u.type),u.alias&&(c=K(c,u.alias)),e=u.content),"string"!=typeof e){i++,t.push(c),n.push(e),r.push(0),o.push(e.length);continue}const d=e.split(Y),p=d.length;s.push({types:c,content:d[0]});for(let t=1;t<p;t++)Q(s),l.push(s=[]),s.push({types:c,content:d[t]})}i--,t.pop(),n.pop(),r.pop(),o.pop()}return Q(s),l},Z=({children:e,language:t,code:n,theme:o,prism:i})=>{const s=t.toLowerCase(),l=((e,t)=>{const[n,o]=(0,r.useState)(V(t,e)),a=(0,r.useRef)(),i=(0,r.useRef)();return(0,r.useEffect)((()=>{t===a.current&&e===i.current||(a.current=t,i.current=e,o(V(t,e)))}),[e,t]),n})(s,o),c=(e=>(0,r.useCallback)((t=>{var n=t,{className:r,style:o,line:i}=n,s=E(n,["className","style","line"]);const l=S(k({},s),{className:a("token-line",r)});return"object"==typeof e&&"plain"in e&&(l.style=e.plain),"object"==typeof o&&(l.style=k(k({},l.style||{}),o)),l}),[e]))(l),u=(e=>{const t=(0,r.useCallback)((({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,r.useCallback)((e=>{var n=e,{token:r,className:o,style:i}=n,s=E(n,["token","className","style"]);const l=S(k({},s),{className:a("token",...r.types,o),children:r.content,style:t(r)});return null!=i&&(l.style=k(k({},l.style||{}),i)),l}),[t])})(l),d=(({prism:e,code:t,grammar:n,language:o})=>{const a=(0,r.useRef)(e);return(0,r.useMemo)((()=>{if(null==n)return X([t]);const e={code:t,grammar:n,language:o,tokens:[]};return a.current.hooks.run("before-tokenize",e),e.tokens=a.current.tokenize(t,n),a.current.hooks.run("after-tokenize",e),X(e.tokens)}),[t,n,o])})({prism:i,language:s,code:n,grammar:i.languages[s]});return e({tokens:d,className:`prism-code language-${s}`,style:null!=l?l.root:{},getLineProps:c,getTokenProps:u})},J=e=>(0,r.createElement)(Z,S(k({},e),{prism:e.prism||z,theme:e.theme||U,code:e.code,language:e.language}))},60144:e=>{"use strict";e.exports=JSON.parse('{"theme.NotFound.title":"Page Not Found","theme.NotFound.p1":"We could not find what you were looking for.","theme.NotFound.p2":"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.","theme.AnnouncementBar.closeButtonAriaLabel":"Close","theme.blog.post.readingTime.plurals":"One min read|{readingTime} min read","theme.tags.tagsListLabel":"Tags:","theme.blog.post.readMore":"Read More","theme.blog.paginator.navAriaLabel":"Blog list page navigation","theme.blog.paginator.newerEntries":"Newer Entries","theme.blog.paginator.olderEntries":"Older Entries","theme.blog.post.paginator.navAriaLabel":"Blog post page navigation","theme.blog.post.paginator.newerPost":"Newer Post","theme.blog.post.paginator.olderPost":"Older Post","theme.tags.tagsPageTitle":"Tags","theme.blog.post.plurals":"One post|{count} posts","theme.blog.tagTitle":"{nPosts} tagged with \\"{tagName}\\"","theme.tags.tagsPageLink":"View All Tags","theme.CodeBlock.copyButtonAriaLabel":"Copy code to clipboard","theme.CodeBlock.copied":"Copied","theme.CodeBlock.copy":"Copy","theme.docs.sidebar.expandButtonTitle":"Expand sidebar","theme.docs.sidebar.expandButtonAriaLabel":"Expand sidebar","theme.docs.paginator.navAriaLabel":"Docs pages navigation","theme.docs.paginator.previous":"Previous","theme.docs.paginator.next":"Next","theme.docs.sidebar.responsiveCloseButtonLabel":"Close menu","theme.docs.sidebar.responsiveOpenButtonLabel":"Open menu","theme.docs.sidebar.collapseButtonTitle":"Collapse sidebar","theme.docs.sidebar.collapseButtonAriaLabel":"Collapse sidebar","theme.docs.versions.unreleasedVersionLabel":"This is unreleased documentation for {siteTitle} {versionLabel} version.","theme.docs.versions.unmaintainedVersionLabel":"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.","theme.docs.versions.latestVersionSuggestionLabel":"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).","theme.docs.versions.latestVersionLinkLabel":"latest version","theme.common.editThisPage":"Edit this page","theme.common.headingLinkTitle":"Direct link to heading","theme.lastUpdated.atDate":" on {date}","theme.lastUpdated.byUser":" by {user}","theme.lastUpdated.lastUpdatedAtBy":"Last updated{atDate}{byUser}","theme.common.skipToMainContent":"Skip to main content","theme.SearchPage.documentsFound.plurals":"One document found|{count} documents found","theme.SearchPage.existingResultsTitle":"Search results for \\"{query}\\"","theme.SearchPage.emptyResultsTitle":"Search the documentation","theme.SearchPage.inputPlaceholder":"Type your search here","theme.SearchPage.inputLabel":"Search","theme.SearchPage.algoliaLabel":"Search by Algolia","theme.SearchPage.noResultsText":"No results were found","theme.SearchPage.fetchingNewResults":"Fetching new results...","theme.SearchBar.label":"Search"}')},14504:e=>{"use strict";e.exports=JSON.parse('{"/en/-5da":{"__comp":"c4f5d8e4","__context":{"plugin":"4f3ccf13"},"config":"5e9f5e1a"},"/en/blog-827":{"__comp":"a6aa9e1f","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"},{"content":"3570154c"},{"content":"8e9f0a8a"}],"metadata":"fba6c282"},"/en/blog/archive-3a3":{"__comp":"9e4087bc","__context":{"plugin":"09e1b884"},"archive":"f6cbeee1"},"/en/blog/hello-world-bcc":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"09e1b884"},"sidebar":"814f3328","content":"d610846f"},"/en/blog/hola-ed9":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"09e1b884"},"sidebar":"814f3328","content":"bdd709f1"},"/en/blog/tags-fba":{"__comp":"01a85c17","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","tags":"9bdd22eb"},"/en/blog/tags/docusaurus-ac5":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"},{"content":"3570154c"},{"content":"8e9f0a8a"}],"tag":"f3f8ac04","listMetadata":"3bf4969f"},"/en/blog/tags/facebook-360":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"}],"tag":"62ad6a78","listMetadata":"f3dd2eb3"},"/en/blog/tags/hello-827":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"af172acd"},{"content":"3570154c"}],"tag":"a1db8d77","listMetadata":"bc4100c0"},"/en/blog/tags/hola-3cb":{"__comp":"6875c492","__context":{"plugin":"09e1b884"},"sidebar":"814f3328","items":[{"content":"8e9f0a8a"}],"tag":"e510ad2d","listMetadata":"bb62ac18"},"/en/blog/welcome-e2d":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"09e1b884"},"sidebar":"814f3328","content":"2868cdab"},"/en/docs-abd":{"__comp":"5e95c892","__context":{"plugin":"43004a8a"}},"/en/docs-54d":{"__comp":"a7bd4aaa","version":"935f2afb"},"/en/docs-7f4":{"__comp":"a94703ab"},"/en/docs/-d27":{"__comp":"17896441","content":"f2d382a4"},"/en/docs/badge/badge-abc":{"__comp":"17896441","content":"6e2ab842"},"/en/docs/FranzBoy/franzboy-bbc":{"__comp":"17896441","content":"7561b0ae"},"/en/docs/franzininho-c0/arduino-identificacao-pinos-b6e":{"__comp":"17896441","content":"94c955d1"},"/en/docs/franzininho-c0/arduino-primeiros-passos-f81":{"__comp":"17896441","content":"449acc1f"},"/en/docs/franzininho-c0/arduino-todolist-a12":{"__comp":"17896441","content":"ff1c69f3"},"/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide-87c":{"__comp":"17896441","content":"4cb2f106"},"/en/docs/franzininho-c0/franzininho-c0-board-79f":{"__comp":"17896441","content":"d7336970"},"/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist-139":{"__comp":"17896441","content":"cfe204fd"},"/en/docs/franzininho-diy/bootloader-3df":{"__comp":"17896441","content":"3ab9b561"},"/en/docs/franzininho-diy/brilho-led-700":{"__comp":"17896441","content":"f3019b90"},"/en/docs/franzininho-diy/drivers-micronucleus-e4b":{"__comp":"17896441","content":"6da7bcf7"},"/en/docs/franzininho-diy/elefante-colorido-284":{"__comp":"17896441","content":"69d6b121"},"/en/docs/franzininho-diy/entradas-analogicas-610":{"__comp":"17896441","content":"ff8b9623"},"/en/docs/franzininho-diy/entradas-saidas-digitais-dd3":{"__comp":"17896441","content":"4c503f6c"},"/en/docs/franzininho-diy/exemplos-avr-libc/buzzer-2d1":{"__comp":"17896441","content":"7e45b7ad"},"/en/docs/franzininho-diy/exemplos-avr-libc/contadores-616":{"__comp":"17896441","content":"bdb4d3e5"},"/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital-1e5":{"__comp":"17896441","content":"3ab35d9f"},"/en/docs/franzininho-diy/exemplos-avr-libc/hello-world-429":{"__comp":"17896441","content":"b55e0f56"},"/en/docs/franzininho-diy/exemplos-avr-libc/int-ext-655":{"__comp":"17896441","content":"b677b176"},"/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos-ebc":{"__comp":"17896441","content":"bc475886"},"/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital-124":{"__comp":"17896441","content":"f6af7cfc"},"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-dd2":{"__comp":"17896441","content":"c720cb85"},"/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int-f1f":{"__comp":"17896441","content":"bb7fee19"},"/en/docs/franzininho-diy/exemplos-avr-libc/todo-df5":{"__comp":"17896441","content":"6b289e1f"},"/en/docs/franzininho-diy/girassol-automatizado-4c2":{"__comp":"17896441","content":"d9a3a88a"},"/en/docs/franzininho-diy/identificando-componentes-111":{"__comp":"17896441","content":"68401cc9"},"/en/docs/franzininho-diy/led-rgb-c3d":{"__comp":"17896441","content":"52090148"},"/en/docs/franzininho-diy/leitura-tecla-66c":{"__comp":"17896441","content":"d5f74b3b"},"/en/docs/franzininho-diy/lista-de-materiais-f29":{"__comp":"17896441","content":"e586c302"},"/en/docs/franzininho-diy/montagem-efd":{"__comp":"17896441","content":"9ccd4375"},"/en/docs/franzininho-diy/pacote-a47":{"__comp":"17896441","content":"21c04bfb"},"/en/docs/franzininho-diy/picsimlab/primeiros-passos-09e":{"__comp":"17896441","content":"a34fb63a"},"/en/docs/franzininho-diy/pisca-led-081":{"__comp":"17896441","content":"92ef60c0"},"/en/docs/franzininho-diy/saidas-pwm-946":{"__comp":"17896441","content":"be54388e"},"/en/docs/franzininho-diy/semaforo-971":{"__comp":"17896441","content":"a47310cc"},"/en/docs/franzininho-diy/sensor-luz-ldr-4c1":{"__comp":"17896441","content":"5cfa1a80"},"/en/docs/franzininho-diy/sobre-cdc":{"__comp":"17896441","content":"fd69b436"},"/en/docs/franzininho-diy/tecla-liga-desliga-cf3":{"__comp":"17896441","content":"55ee410e"},"/en/docs/franzininho-diy/theremim-e7c":{"__comp":"17896441","content":"8b8a5829"},"/en/docs/franzininho-diy/tutoriais-i2c-b02":{"__comp":"17896441","content":"558e6545"},"/en/docs/franzininho-diy/wokwi/primeiros-passos-03e":{"__comp":"17896441","content":"f67a9ad7"},"/en/docs/franzininho-tiny/franzininho-tiny-f0a":{"__comp":"17896441","content":"52fc124a"},"/en/docs/franzininho-wifi-lab01-59a":{"__comp":"17896441","content":"d75a6ad4"},"/en/docs/franzininho-wifi/exemplos-arduino/blink-da4":{"__comp":"17896441","content":"9cf82e51"},"/en/docs/franzininho-wifi/exemplos-arduino/dht11-d79":{"__comp":"17896441","content":"45a448cc"},"/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard-4d3":{"__comp":"17896441","content":"8f8a0b80"},"/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos-6e8":{"__comp":"17896441","content":"5115f6b0"},"/en/docs/franzininho-wifi/exemplos-circuitpython/dht11-0c7":{"__comp":"17896441","content":"d0c422fb"},"/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c-98c":{"__comp":"17896441","content":"55a63e59"},"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas-a90":{"__comp":"17896441","content":"8f70110c"},"/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais-b49":{"__comp":"17896441","content":"d268d7c6"},"/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas-bfe":{"__comp":"17896441","content":"032edc05"},"/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world-a77":{"__comp":"17896441","content":"b0d3cd30"},"/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao-9bf":{"__comp":"17896441","content":"58231389"},"/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos-07b":{"__comp":"17896441","content":"c397fa15"},"/en/docs/franzininho-wifi/exemplos-circuitpython/pwm-586":{"__comp":"17896441","content":"5f765f30"},"/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04-59a":{"__comp":"17896441","content":"d29449f8"},"/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console-894":{"__comp":"17896441","content":"3cf26f2f"},"/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor-d9c":{"__comp":"17896441","content":"4e4cd8a0"},"/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo-3d6":{"__comp":"17896441","content":"ec054302"},"/en/docs/franzininho-wifi/exemplos-espidf/aws-694":{"__comp":"17896441","content":"af2b9553"},"/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica-7fb":{"__comp":"17896441","content":"06f5a5e3"},"/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital-f6b":{"__comp":"17896441","content":"f64cfe00"},"/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf-2dd":{"__comp":"17896441","content":"dcf87b66"},"/en/docs/franzininho-wifi/exemplos-espidf/ledc-579":{"__comp":"17896441","content":"249d28c1"},"/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos-bbf":{"__comp":"17896441","content":"2e8bb407"},"/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais-6c0":{"__comp":"17896441","content":"5f9a86e6"},"/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos-f78":{"__comp":"17896441","content":"d69ae106"},"/en/docs/franzininho-wifi/franzininho-wifi-d2f":{"__comp":"17896441","content":"cdcae78f"},"/en/docs/franzininho-wifi/franzininho-wifi-dev-edition-80f":{"__comp":"17896441","content":"6d6d470f"},"/en/docs/franzininho-wifi/wokwi/primeiros-passos-f20":{"__comp":"17896441","content":"66e66c27"},"/en/docs/Franzino/franzino-233":{"__comp":"17896441","content":"27079279"},"/en/docs/Franzino/upload-com-arduino-uno-8e0":{"__comp":"17896441","content":"daddf4d9"},"/en/docs/Franzino/upload-conversor-serial-5a4":{"__comp":"17896441","content":"e6a1d5e9"},"/en/docs/FranzMakey/franzmakey-24e":{"__comp":"17896441","content":"5c90fd8c"},"/en/docs/FranzMakey/primeiros-passos-34a":{"__comp":"17896441","content":"bc0ca366"},"/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno-454":{"__comp":"17896441","content":"445992cb"},"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW-a1c":{"__comp":"17896441","content":"c4380c1f"},"/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO-37c":{"__comp":"17896441","content":"db00da42"},"/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot-689":{"__comp":"17896441","content":"b311b2c7"},"/en/docs/programacao/tutoriais-introducao-3e8":{"__comp":"17896441","content":"bc0f2708"}}')}},e=>{e.O(0,[2176],(()=>{return t=28808,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/en/assets/js/main.4c799f84.js.LICENSE.txt b/en/assets/js/main.58f8a81d.js.LICENSE.txt similarity index 76% rename from en/assets/js/main.4c799f84.js.LICENSE.txt rename to en/assets/js/main.58f8a81d.js.LICENSE.txt index a6dec55c4..91dc89499 100755 --- a/en/assets/js/main.4c799f84.js.LICENSE.txt +++ b/en/assets/js/main.58f8a81d.js.LICENSE.txt @@ -1,15 +1,22 @@ -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - /* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress * @license MIT */ +/*! Bundled license information: + +prismjs/prism.js: + (** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT <https://opensource.org/licenses/MIT> + * @author Lea Verou <https://lea.verou.me> + * @namespace + * @public + *) +*/ + /** * @license React - * use-sync-external-store-shim.production.min.js + * react-dom.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -18,16 +25,8 @@ object-assign */ /** - * Prism: Lightweight, robust, elegant syntax highlighting - * - * @license MIT <https://opensource.org/licenses/MIT> - * @author Lea Verou <https://lea.verou.me> - * @namespace - * @public - */ - -/** @license React v0.19.1 - * scheduler.production.min.js + * @license React + * react-jsx-runtime.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -35,8 +34,9 @@ object-assign * LICENSE file in the root directory of this source tree. */ -/** @license React v16.13.1 - * react-is.production.min.js +/** + * @license React + * react.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -44,8 +44,9 @@ object-assign * LICENSE file in the root directory of this source tree. */ -/** @license React v16.14.0 - * react-dom.production.min.js +/** + * @license React + * scheduler.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -53,8 +54,8 @@ object-assign * LICENSE file in the root directory of this source tree. */ -/** @license React v16.14.0 - * react.production.min.js +/** @license React v16.13.1 + * react-is.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * diff --git a/en/assets/js/runtime~main.09fbab05.js b/en/assets/js/runtime~main.09fbab05.js deleted file mode 100755 index 06b1b8551..000000000 --- a/en/assets/js/runtime~main.09fbab05.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,a,c,f,b,d={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return d[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=d,r.c=t,e=[],r.O=(a,c,f,b)=>{if(!c){var d=1/0;for(i=0;i<e.length;i++){c=e[i][0],f=e[i][1],b=e[i][2];for(var t=!0,o=0;o<c.length;o++)(!1&b||d>=b)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,b<d&&(d=b));if(t){e.splice(i--,1);var n=f();void 0!==n&&(a=n)}}return a}b=b||0;for(var i=e.length;i>0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[c,f,b]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var d={};a=a||[null,c({}),c([]),c(c)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>d[a]=()=>e[a]));return d.default=()=>e,r.d(b,d),b},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",157:"7561b0ae",270:"43004a8a",286:"d75a6ad4",310:"c720cb85",367:"b677b176",467:"f3019b90",604:"8b8a5829",694:"7e45b7ad",969:"be54388e",970:"ff1c69f3",1013:"3ab9b561",1193:"f3f8ac04",1375:"dcf87b66",1449:"af172acd",1506:"f6af7cfc",1524:"bdb4d3e5",1777:"5115f6b0",1793:"cfe204fd",1829:"4cb2f106",1832:"bb7fee19",1982:"a34fb63a",2253:"9bdd22eb",2312:"d7336970",2389:"3bf4969f",2496:"55ee410e",2517:"3ab35d9f",2535:"814f3328",2536:"4c503f6c",2559:"8f8a0b80",2654:"68401cc9",2687:"2e8bb407",2749:"52fc124a",2976:"c4380c1f",3020:"6d6d470f",3034:"e510ad2d",3089:"a6aa9e1f",3290:"e6a1d5e9",3405:"5f9a86e6",3518:"cdcae78f",3567:"6e2ab842",3608:"9e4087bc",3634:"f67a9ad7",3707:"3570154c",3836:"f6cbeee1",3931:"ff8b9623",4013:"01a85c17",4035:"8e9f0a8a",4061:"2868cdab",4123:"9ccd4375",4195:"c4f5d8e4",4242:"d29449f8",4253:"c397fa15",4334:"55a63e59",4364:"fba6c282",4417:"27079279",4447:"bc4100c0",4669:"b0d3cd30",4679:"bc0ca366",4694:"bdd709f1",5016:"5c90fd8c",5045:"f64cfe00",5123:"249d28c1",5193:"daddf4d9",5534:"bc475886",5634:"21c04bfb",5755:"558e6545",5845:"d5f74b3b",5904:"f3dd2eb3",6103:"ccc49370",6176:"d610846f",6250:"09e1b884",6251:"69d6b121",6269:"a1db8d77",6355:"e586c302",6553:"8f70110c",6631:"b311b2c7",6657:"4e4cd8a0",6799:"92ef60c0",6803:"3cf26f2f",6817:"06f5a5e3",7055:"f2d382a4",7201:"d69ae106",7259:"d9a3a88a",7269:"4f3ccf13",7347:"94c955d1",7600:"5cfa1a80",7835:"bc0f2708",7918:"17896441",7932:"66e66c27",8407:"445992cb",8434:"62ad6a78",8442:"45a448cc",8504:"fd69b436",8560:"af2b9553",8601:"5f765f30",8610:"6875c492",8615:"a47310cc",8659:"d268d7c6",8811:"d0c422fb",8911:"ec054302",9019:"449acc1f",9226:"6b289e1f",9267:"db00da42",9429:"58231389",9514:"1be78505",9515:"6da7bcf7",9702:"bb62ac18",9821:"b55e0f56",9860:"032edc05",9948:"52090148",9966:"9cf82e51"}[e]||e)+"."+{53:"9cb951ec",157:"2e4c2594",270:"51ba281e",286:"a2fd71d0",310:"979b5272",367:"fce09528",467:"db752ab3",604:"b2aa9e17",694:"28fb7f3a",969:"91b26e0a",970:"b328e977",1013:"eced0918",1193:"ff4b2813",1375:"1facdaa3",1449:"3799f580",1506:"af56e9e3",1524:"79af0a42",1777:"62980fbf",1793:"c6e46fa4",1829:"6b173e50",1832:"93fc6619",1982:"f1a6284b",2253:"90691daf",2312:"7109bba1",2389:"d73ac778",2496:"c39933a8",2517:"7ce95f0d",2535:"0967c8fa",2536:"94233b9f",2559:"85e4bc16",2654:"9ac83595",2687:"15c70e2f",2749:"bc7a1a58",2976:"95de43ef",3020:"75487779",3034:"b5eefe08",3089:"15a76870",3290:"e61af3e6",3405:"6bde7b81",3518:"d260a8d2",3567:"bbdfc894",3608:"9685659e",3634:"c9822bd8",3707:"a88eb8e5",3836:"8abfa823",3931:"676dae17",4013:"933066fe",4035:"3ebbed82",4061:"2ab9aefa",4123:"843161ea",4195:"11f52a5e",4242:"8e51f674",4253:"4b17e918",4334:"a03b36a5",4364:"7e361630",4417:"45405723",4447:"2ead8c49",4669:"c019a2c7",4679:"4212a0f5",4694:"6db3c8b2",4972:"54ab1ffc",5016:"f7da1637",5045:"671658d6",5123:"c51ed63f",5193:"8b7ef4e1",5534:"de62e6e8",5634:"61510ba7",5755:"34aad7f1",5845:"19a763b0",5904:"eec001d0",6048:"6ee355ae",6103:"ed5a44eb",6176:"7d006bc7",6250:"2c4adf47",6251:"bca69276",6269:"3fb52011",6355:"11ebd454",6553:"839e0dd7",6631:"375b6d77",6657:"69d8774c",6799:"6ea72b49",6803:"b7a23e24",6817:"b8c4e73c",7055:"a75b663c",7201:"866a06c1",7259:"4e4c766c",7269:"339cdbe4",7347:"2abb0c2b",7600:"0c6bae68",7835:"1998f002",7918:"5b1e31d0",7932:"dc789238",8407:"97d84cd9",8434:"97cf9748",8442:"6bb566a2",8504:"614f13fb",8560:"06f3c6b2",8601:"37433f5c",8610:"19f388a6",8615:"6f99f760",8659:"c51e5171",8811:"120fa59f",8911:"f8b1d903",9019:"bfa213db",9226:"5c308790",9267:"592001ba",9429:"62dcb7d4",9514:"0a057c22",9515:"c24e360a",9702:"f8e4ee0c",9785:"4a98800b",9821:"d9a05735",9860:"b05000bb",9948:"f79b530c",9966:"76235cef"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},b="Franzininho:",r.l=(e,a,c,d)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==b+c){t=u;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",b+c),t.src=e),f[e]=[a];var l=(a,c)=>{t.onerror=t.onload=null,clearTimeout(s);var b=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/en/",r.gca=function(e){return e={17896441:"7918",27079279:"4417",52090148:"9948",58231389:"9429","935f2afb":"53","7561b0ae":"157","43004a8a":"270",d75a6ad4:"286",c720cb85:"310",b677b176:"367",f3019b90:"467","8b8a5829":"604","7e45b7ad":"694",be54388e:"969",ff1c69f3:"970","3ab9b561":"1013",f3f8ac04:"1193",dcf87b66:"1375",af172acd:"1449",f6af7cfc:"1506",bdb4d3e5:"1524","5115f6b0":"1777",cfe204fd:"1793","4cb2f106":"1829",bb7fee19:"1832",a34fb63a:"1982","9bdd22eb":"2253",d7336970:"2312","3bf4969f":"2389","55ee410e":"2496","3ab35d9f":"2517","814f3328":"2535","4c503f6c":"2536","8f8a0b80":"2559","68401cc9":"2654","2e8bb407":"2687","52fc124a":"2749",c4380c1f:"2976","6d6d470f":"3020",e510ad2d:"3034",a6aa9e1f:"3089",e6a1d5e9:"3290","5f9a86e6":"3405",cdcae78f:"3518","6e2ab842":"3567","9e4087bc":"3608",f67a9ad7:"3634","3570154c":"3707",f6cbeee1:"3836",ff8b9623:"3931","01a85c17":"4013","8e9f0a8a":"4035","2868cdab":"4061","9ccd4375":"4123",c4f5d8e4:"4195",d29449f8:"4242",c397fa15:"4253","55a63e59":"4334",fba6c282:"4364",bc4100c0:"4447",b0d3cd30:"4669",bc0ca366:"4679",bdd709f1:"4694","5c90fd8c":"5016",f64cfe00:"5045","249d28c1":"5123",daddf4d9:"5193",bc475886:"5534","21c04bfb":"5634","558e6545":"5755",d5f74b3b:"5845",f3dd2eb3:"5904",ccc49370:"6103",d610846f:"6176","09e1b884":"6250","69d6b121":"6251",a1db8d77:"6269",e586c302:"6355","8f70110c":"6553",b311b2c7:"6631","4e4cd8a0":"6657","92ef60c0":"6799","3cf26f2f":"6803","06f5a5e3":"6817",f2d382a4:"7055",d69ae106:"7201",d9a3a88a:"7259","4f3ccf13":"7269","94c955d1":"7347","5cfa1a80":"7600",bc0f2708:"7835","66e66c27":"7932","445992cb":"8407","62ad6a78":"8434","45a448cc":"8442",fd69b436:"8504",af2b9553:"8560","5f765f30":"8601","6875c492":"8610",a47310cc:"8615",d268d7c6:"8659",d0c422fb:"8811",ec054302:"8911","449acc1f":"9019","6b289e1f":"9226",db00da42:"9267","1be78505":"9514","6da7bcf7":"9515",bb62ac18:"9702",b55e0f56:"9821","032edc05":"9860","9cf82e51":"9966"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,c)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var b=new Promise(((c,b)=>f=e[a]=[c,b]));c.push(f[2]=b);var d=r.p+r.u(a),t=new Error;r.l(d,(c=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var b=c&&("load"===c.type?"missing":c.type),d=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+b+": "+d+")",t.name="ChunkLoadError",t.type=b,t.request=d,f[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var f,b,d=c[0],t=c[1],o=c[2],n=0;if(d.some((a=>0!==e[a]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(c);n<d.length;n++)b=d[n],r.o(e,b)&&e[b]&&e[b][0](),e[b]=0;return r.O(i)},c=self.webpackChunkFranzininho=self.webpackChunkFranzininho||[];c.forEach(a.bind(null,0)),c.push=a.bind(null,c.push.bind(c))})()})(); \ No newline at end of file diff --git a/en/assets/js/runtime~main.0ca77596.js b/en/assets/js/runtime~main.0ca77596.js new file mode 100755 index 000000000..33705d2ee --- /dev/null +++ b/en/assets/js/runtime~main.0ca77596.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,c,a,f,d,b={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=b,r.c=t,e=[],r.O=(c,a,f,d)=>{if(!a){var b=1/0;for(i=0;i<e.length;i++){a=e[i][0],f=e[i][1],d=e[i][2];for(var t=!0,o=0;o<a.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d<b&&(b=d));if(t){e.splice(i--,1);var n=f();void 0!==n&&(c=n)}}return c}d=d||0;for(var i=e.length;i>0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,f,d]},r.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return r.d(c,{a:c}),c},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};c=c||[null,a({}),a([]),a(a)];for(var t=2&f&&e;"object"==typeof t&&!~c.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((c=>b[c]=()=>e[c]));return b.default=()=>e,r.d(d,b),d},r.d=(e,c)=>{for(var a in c)r.o(c,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:c[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((c,a)=>(r.f[a](e,c),c)),[])),r.u=e=>"assets/js/"+({148:"bc0f2708",400:"43004a8a",468:"27079279",560:"d29449f8",576:"b55e0f56",872:"e586c302",952:"f3019b90",1020:"558e6545",1052:"3570154c",1140:"daddf4d9",1168:"68401cc9",1196:"55ee410e",1208:"449acc1f",1288:"032edc05",1363:"d75a6ad4",1392:"bb7fee19",1456:"45a448cc",1520:"58231389",1560:"af172acd",1576:"f6af7cfc",1676:"66e66c27",1680:"3cf26f2f",1784:"2868cdab",1880:"ec054302",2160:"4e4cd8a0",2212:"5c90fd8c",2392:"6875c492",2496:"8f70110c",2632:"c4f5d8e4",2660:"af2b9553",2720:"a1db8d77",2760:"bdd709f1",2899:"f3f8ac04",2976:"a47310cc",3183:"b311b2c7",3280:"4cb2f106",3420:"ff1c69f3",3496:"8e9f0a8a",3630:"d268d7c6",3744:"52fc124a",3800:"62ad6a78",3832:"fba6c282",3916:"c720cb85",4124:"7e45b7ad",4268:"6e2ab842",4298:"dcf87b66",4304:"5e95c892",4608:"9cf82e51",4640:"9ccd4375",4666:"a94703ab",4672:"d9a3a88a",4772:"bb62ac18",4976:"a6aa9e1f",5240:"2e8bb407",5280:"c397fa15",5336:"5115f6b0",5512:"814f3328",5632:"b0d3cd30",5696:"935f2afb",5752:"8f8a0b80",5758:"e6a1d5e9",5884:"e510ad2d",5944:"d0c422fb",6004:"ff8b9623",6116:"8b8a5829",6200:"94c955d1",6280:"5f9a86e6",6312:"55a63e59",6316:"69d6b121",6332:"249d28c1",6344:"ccc49370",6360:"acecf23e",6472:"4c503f6c",6500:"a7bd4aaa",6550:"3ab35d9f",6552:"d610846f",6728:"db00da42",6752:"17896441",6776:"c4380c1f",6780:"5cfa1a80",6974:"bc475886",6980:"445992cb",7024:"5f765f30",7028:"9e4087bc",7073:"d7336970",7272:"cdcae78f",7296:"b677b176",7560:"6b289e1f",7568:"f2d382a4",7804:"09e1b884",7824:"9bdd22eb",7888:"d5f74b3b",7952:"06f5a5e3",8040:"be54388e",8292:"6da7bcf7",8324:"52090148",8336:"a34fb63a",8384:"3bf4969f",8412:"01a85c17",8448:"6d6d470f",8504:"f6cbeee1",8556:"f3dd2eb3",8658:"cfe204fd",8812:"f67a9ad7",8817:"3ab9b561",8930:"d69ae106",8968:"21c04bfb",9386:"fd69b436",9404:"bc4100c0",9464:"f64cfe00",9484:"bdb4d3e5",9488:"7561b0ae",9508:"4f3ccf13",9628:"bc0ca366",9964:"92ef60c0"}[e]||e)+"."+{148:"9f3404b4",400:"28060fa5",468:"f2639374",560:"4b800ab3",576:"03d6b58f",872:"ec4d5aee",952:"11545fed",1020:"8b18bfb2",1052:"ebbc3bcd",1140:"8fce146d",1168:"39515e47",1196:"dd63a08d",1208:"eed11d03",1288:"6afef94a",1363:"868c0a17",1392:"02b58abf",1456:"2e5497ed",1520:"76037183",1560:"8bd12bba",1576:"0d78bc13",1676:"2254b746",1680:"28ae5908",1784:"00dcc872",1880:"6e4d837a",2160:"6e680884",2212:"1d241669",2220:"7666931e",2392:"3e92a214",2496:"02c9189c",2632:"974a644b",2660:"818e776f",2720:"a197cf66",2760:"571ab953",2899:"8d0b739e",2976:"696c3c6d",3183:"b4715336",3280:"8d340869",3420:"0266ac9c",3496:"3b2f4d79",3630:"aa332d4a",3744:"2d63fddd",3800:"25478d60",3832:"3ca9b1b4",3916:"7e4d61af",4124:"c0aa14c5",4268:"3ede0e29",4298:"eb5d1b2f",4304:"1ebb8d2b",4552:"cc3bd259",4608:"fdd4846e",4640:"4dec6de8",4666:"7519b2d0",4672:"c7315740",4772:"34c905bc",4976:"d18b185f",5240:"435f7c2f",5280:"630a00c3",5336:"6f2ad0af",5512:"775e20dc",5632:"56b3a1fd",5696:"ab236fba",5752:"7cac2a19",5758:"16118bc4",5884:"6589df4e",5944:"396383b0",6004:"769b61bb",6116:"11ecbc77",6200:"bee848c2",6280:"83c71a86",6312:"eca878b1",6316:"c660d41a",6332:"bcf55132",6344:"60db7232",6360:"1c5039b4",6472:"419f731e",6500:"65a9f5e3",6550:"a0b074c3",6552:"ec6549e0",6728:"fa1f8905",6752:"62d02e28",6776:"2ba302e2",6780:"dfeabd99",6974:"d5d36a72",6980:"4e36762d",7024:"758c5a83",7028:"8937d11c",7073:"9e79ba18",7272:"e1f3edac",7296:"24100e2e",7560:"046c4858",7568:"43d89127",7804:"ba1dccda",7824:"5af0da87",7888:"cf415bb7",7952:"247616fc",8040:"3d89b74a",8292:"bbd9ed21",8324:"4834c2eb",8336:"47c2e9af",8384:"a612f332",8412:"4eb05196",8448:"03bf544a",8504:"2a9c35a1",8556:"c77b901c",8658:"c8f28693",8812:"7143bf2d",8817:"2d990ffb",8930:"2f6c556d",8968:"42f474c7",9386:"a5b81ebc",9404:"de902ad1",9464:"d95e9c32",9484:"f2625fa4",9488:"11734230",9508:"1f3face7",9628:"cac396cd",9964:"33d26db8",9968:"84c0a0fd"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,c)=>Object.prototype.hasOwnProperty.call(e,c),f={},d="Franzininho:",r.l=(e,c,a,b)=>{if(f[e])f[e].push(c);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==d+a){t=u;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",d+a),t.src=e),f[e]=[c];var l=(c,a)=>{t.onerror=t.onload=null,clearTimeout(s);var d=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),c)return c(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/en/",r.gca=function(e){return e={17896441:"6752",27079279:"468",52090148:"8324",58231389:"1520",bc0f2708:"148","43004a8a":"400",d29449f8:"560",b55e0f56:"576",e586c302:"872",f3019b90:"952","558e6545":"1020","3570154c":"1052",daddf4d9:"1140","68401cc9":"1168","55ee410e":"1196","449acc1f":"1208","032edc05":"1288",d75a6ad4:"1363",bb7fee19:"1392","45a448cc":"1456",af172acd:"1560",f6af7cfc:"1576","66e66c27":"1676","3cf26f2f":"1680","2868cdab":"1784",ec054302:"1880","4e4cd8a0":"2160","5c90fd8c":"2212","6875c492":"2392","8f70110c":"2496",c4f5d8e4:"2632",af2b9553:"2660",a1db8d77:"2720",bdd709f1:"2760",f3f8ac04:"2899",a47310cc:"2976",b311b2c7:"3183","4cb2f106":"3280",ff1c69f3:"3420","8e9f0a8a":"3496",d268d7c6:"3630","52fc124a":"3744","62ad6a78":"3800",fba6c282:"3832",c720cb85:"3916","7e45b7ad":"4124","6e2ab842":"4268",dcf87b66:"4298","5e95c892":"4304","9cf82e51":"4608","9ccd4375":"4640",a94703ab:"4666",d9a3a88a:"4672",bb62ac18:"4772",a6aa9e1f:"4976","2e8bb407":"5240",c397fa15:"5280","5115f6b0":"5336","814f3328":"5512",b0d3cd30:"5632","935f2afb":"5696","8f8a0b80":"5752",e6a1d5e9:"5758",e510ad2d:"5884",d0c422fb:"5944",ff8b9623:"6004","8b8a5829":"6116","94c955d1":"6200","5f9a86e6":"6280","55a63e59":"6312","69d6b121":"6316","249d28c1":"6332",ccc49370:"6344",acecf23e:"6360","4c503f6c":"6472",a7bd4aaa:"6500","3ab35d9f":"6550",d610846f:"6552",db00da42:"6728",c4380c1f:"6776","5cfa1a80":"6780",bc475886:"6974","445992cb":"6980","5f765f30":"7024","9e4087bc":"7028",d7336970:"7073",cdcae78f:"7272",b677b176:"7296","6b289e1f":"7560",f2d382a4:"7568","09e1b884":"7804","9bdd22eb":"7824",d5f74b3b:"7888","06f5a5e3":"7952",be54388e:"8040","6da7bcf7":"8292",a34fb63a:"8336","3bf4969f":"8384","01a85c17":"8412","6d6d470f":"8448",f6cbeee1:"8504",f3dd2eb3:"8556",cfe204fd:"8658",f67a9ad7:"8812","3ab9b561":"8817",d69ae106:"8930","21c04bfb":"8968",fd69b436:"9386",bc4100c0:"9404",f64cfe00:"9464",bdb4d3e5:"9484","7561b0ae":"9488","4f3ccf13":"9508",bc0ca366:"9628","92ef60c0":"9964"}[e]||e,r.p+r.u(e)},(()=>{var e={296:0,2176:0};r.f.j=(c,a)=>{var f=r.o(e,c)?e[c]:void 0;if(0!==f)if(f)a.push(f[2]);else if(/^2(17|9)6$/.test(c))e[c]=0;else{var d=new Promise(((a,d)=>f=e[c]=[a,d]));a.push(f[2]=d);var b=r.p+r.u(c),t=new Error;r.l(b,(a=>{if(r.o(e,c)&&(0!==(f=e[c])&&(e[c]=void 0),f)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+c+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,f[1](t)}}),"chunk-"+c,c)}},r.O.j=c=>0===e[c];var c=(c,a)=>{var f,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((c=>0!==e[c]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(c&&c(a);n<b.length;n++)d=b[n],r.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return r.O(i)},a=self.webpackChunkFranzininho=self.webpackChunkFranzininho||[];a.forEach(c.bind(null,0)),a.push=c.bind(null,a.push.bind(a))})()})(); \ No newline at end of file diff --git a/en/blog/archive/index.html b/en/blog/archive/index.html index 2a96108df..93da2ecfa 100755 --- a/en/blog/archive/index.html +++ b/en/blog/archive/index.html @@ -2,16 +2,13 @@ <html lang="en" dir="ltr" class="plugin-blog plugin-id-default" data-has-hydrated="false"> <head> <meta charset="UTF-8"> -<meta name="generator" content="Docusaurus v2.4.3"> -<title data-rh="true">Archive | Franzininho - - - + +Archive | Franzininho + + + - - - + \ No newline at end of file diff --git a/en/blog/atom.xml b/en/blog/atom.xml index 0c74d3d0e..3ccb51967 100755 --- a/en/blog/atom.xml +++ b/en/blog/atom.xml @@ -13,7 +13,8 @@ 2019-05-30T00:00:00.000Z - Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

Delete the whole directory if you don't want the blog features. As simple as that!

]]>
+ Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

+

Delete the whole directory if you don't want the blog features. As simple as that!

]]>
Yangshun Tay https://github.com/yangshun @@ -28,7 +29,9 @@ 2019-05-29T00:00:00.000Z - Welcome to this blog. This blog is created with Docusaurus 2 alpha.

This is a test post.

A whole bunch of other information.

]]>
+ Welcome to this blog. This blog is created with Docusaurus 2 alpha.

+

This is a test post.

+

A whole bunch of other information.

]]>
Endilie Yacop Sucipto https://github.com/endiliey diff --git a/en/blog/hello-world/index.html b/en/blog/hello-world/index.html index 933ba9bbd..fa371042f 100755 --- a/en/blog/hello-world/index.html +++ b/en/blog/hello-world/index.html @@ -2,16 +2,15 @@ - -Hello | Franzininho - - - + +Hello | Franzininho + + + -
-
- - +
\ No newline at end of file diff --git a/en/blog/hola/index.html b/en/blog/hola/index.html index 3196f46a0..42855fb6a 100755 --- a/en/blog/hola/index.html +++ b/en/blog/hola/index.html @@ -2,16 +2,13 @@ - -Hola | Franzininho - - - + +Hola | Franzininho + + + -
-

Hola

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - +

Hola

· One min read
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

\ No newline at end of file diff --git a/en/blog/index.html b/en/blog/index.html index f226854cc..902b0b4d2 100755 --- a/en/blog/index.html +++ b/en/blog/index.html @@ -2,16 +2,14 @@ - -Blog | Franzininho - - - + +Blog | Franzininho + + + -
-

· One min read
Yangshun Tay

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

Delete the whole directory if you don't want the blog features. As simple as that!

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - +

Welcome

· One min read
Yangshun Tay
Front End Engineer @ Facebook

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

+

Delete the whole directory if you don't want the blog features. As simple as that!

Hola

· One min read
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

\ No newline at end of file diff --git a/en/blog/rss.xml b/en/blog/rss.xml index 897cfa036..70cc3ef42 100755 --- a/en/blog/rss.xml +++ b/en/blog/rss.xml @@ -14,7 +14,8 @@ https://franzininho.github.io/en/blog/welcome Thu, 30 May 2019 00:00:00 GMT - Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

Delete the whole directory if you don't want the blog features. As simple as that!

]]>
+ Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

+

Delete the whole directory if you don't want the blog features. As simple as that!

]]>
facebook hello docusaurus @@ -25,7 +26,9 @@ https://franzininho.github.io/en/blog/hello-world Wed, 29 May 2019 00:00:00 GMT - Welcome to this blog. This blog is created with Docusaurus 2 alpha.

This is a test post.

A whole bunch of other information.

]]>
+ Welcome to this blog. This blog is created with Docusaurus 2 alpha.

+

This is a test post.

+

A whole bunch of other information.

]]>
hello docusaurus diff --git a/en/blog/tags/docusaurus/index.html b/en/blog/tags/docusaurus/index.html index 6fa2d6062..760ddaf40 100755 --- a/en/blog/tags/docusaurus/index.html +++ b/en/blog/tags/docusaurus/index.html @@ -2,16 +2,14 @@ - -3 posts tagged with "docusaurus" | Franzininho - - - + +3 posts tagged with "docusaurus" | Franzininho + + + -
-

3 posts tagged with "docusaurus"

View All Tags

· One min read
Yangshun Tay

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

Delete the whole directory if you don't want the blog features. As simple as that!

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - +

3 posts tagged with "docusaurus"

View All Tags

Welcome

· One min read
Yangshun Tay
Front End Engineer @ Facebook

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

+

Delete the whole directory if you don't want the blog features. As simple as that!

Hola

· One min read
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

\ No newline at end of file diff --git a/en/blog/tags/facebook/index.html b/en/blog/tags/facebook/index.html index 197949ada..f61009a8c 100755 --- a/en/blog/tags/facebook/index.html +++ b/en/blog/tags/facebook/index.html @@ -2,16 +2,14 @@ - -One post tagged with "facebook" | Franzininho - - - + +One post tagged with "facebook" | Franzininho + + + -
-

One post tagged with "facebook"

View All Tags

· One min read
Yangshun Tay

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

Delete the whole directory if you don't want the blog features. As simple as that!

- - +

One post tagged with "facebook"

View All Tags

Welcome

· One min read
Yangshun Tay
Front End Engineer @ Facebook

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

+

Delete the whole directory if you don't want the blog features. As simple as that!

\ No newline at end of file diff --git a/en/blog/tags/hello/index.html b/en/blog/tags/hello/index.html index 0f0057322..2c82eb5ca 100755 --- a/en/blog/tags/hello/index.html +++ b/en/blog/tags/hello/index.html @@ -2,16 +2,14 @@ - -2 posts tagged with "hello" | Franzininho - - - + +2 posts tagged with "hello" | Franzininho + + + -
-

2 posts tagged with "hello"

View All Tags

· One min read
Yangshun Tay

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

Delete the whole directory if you don't want the blog features. As simple as that!

- - +

2 posts tagged with "hello"

View All Tags

Welcome

· One min read
Yangshun Tay
Front End Engineer @ Facebook

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

+

Delete the whole directory if you don't want the blog features. As simple as that!

\ No newline at end of file diff --git a/en/blog/tags/hola/index.html b/en/blog/tags/hola/index.html index d1b3cf2ee..42b2afa0e 100755 --- a/en/blog/tags/hola/index.html +++ b/en/blog/tags/hola/index.html @@ -2,16 +2,13 @@ - -One post tagged with "hola" | Franzininho - - - + +One post tagged with "hola" | Franzininho + + + -
-

One post tagged with "hola"

View All Tags

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - +

One post tagged with "hola"

View All Tags

Hola

· One min read
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

\ No newline at end of file diff --git a/en/blog/tags/index.html b/en/blog/tags/index.html index 8aa3f67c7..85b2c52ef 100755 --- a/en/blog/tags/index.html +++ b/en/blog/tags/index.html @@ -2,16 +2,13 @@ - -Tags | Franzininho - - - + +Tags | Franzininho + + + - - - + \ No newline at end of file diff --git a/en/blog/welcome/index.html b/en/blog/welcome/index.html index c97e9b213..a012649fc 100755 --- a/en/blog/welcome/index.html +++ b/en/blog/welcome/index.html @@ -2,16 +2,14 @@ - -Welcome | Franzininho - - - + +Welcome | Franzininho + + + -
-

Welcome

· One min read
Yangshun Tay

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

Delete the whole directory if you don't want the blog features. As simple as that!

- - +

Welcome

· One min read
Yangshun Tay
Front End Engineer @ Facebook

Blog features are powered by the blog plugin. Simply add files to the blog directory. It supports tags as well!

+

Delete the whole directory if you don't want the blog features. As simple as that!

\ No newline at end of file diff --git a/en/docs/FranzBoy/franzboy/index.html b/en/docs/FranzBoy/franzboy/index.html index 0ecb0889e..0bcee7e94 100755 --- a/en/docs/FranzBoy/franzboy/index.html +++ b/en/docs/FranzBoy/franzboy/index.html @@ -1,17 +1,29 @@ - + - -Placa FranzBoy | Franzininho - - - + +Placa FranzBoy | Franzininho + + + -
-

Placa FranzBoy

A placa FranzBoy veio para integrar a família de placas Franzininho em uma nova abordagem. Com o formato de game retro, procura incentivar o desenvolvimento de jogos, e hacks diversos. Você pode se divertir e aprender muito com eletrônica e programação.

Placa FranzBoy

Possui um hardware enxuto onde é explorado (escovando bits) os recursos do Atmega328, em conjunto com Display OLED e teclas, em um formato de badge para você usar nos eventos.

Licença

Assim como as placas Franzininho DIY e Franzininho Tiny, a placa FranzBoy também foi publicada como projeto de hardware aberto. Ela foi publicada sob a licença CERN Open Hardware Licence.

Conforme definido no “how to” da licença, no repositório do projeto estão incluídos os seguintes arquivos:

  • LICENSE.TXT
  • cern_ohl_v_1_2_howto.pdf
  • CHANGES.TXT
  • COPYRIGHT.TXT
  • PRODUCT.TXT

O projeto está disponível em: https://github.com/Franzininho/FranzBoy

Confira o video de apresentação da placa

- - +

Placa FranzBoy

A placa FranzBoy veio para integrar a família de placas Franzininho em uma nova abordagem. Com o formato de game retro, procura incentivar o desenvolvimento de jogos, e hacks diversos. Você pode se divertir e aprender muito com eletrônica e programação.

+

Placa FranzBoy

+

Possui um hardware enxuto onde é explorado (escovando bits) os recursos do Atmega328, em conjunto com Display OLED e teclas, em um formato de badge para você usar nos eventos.

+

Licença

+

Assim como as placas Franzininho DIY e Franzininho Tiny, a placa FranzBoy também foi publicada como projeto de hardware aberto. Ela foi publicada sob a licença CERN Open Hardware Licence.

+

Conforme definido no “how to” da licença, no repositório do projeto estão incluídos os seguintes arquivos:

+
    +
  • LICENSE.TXT
  • +
  • cern_ohl_v_1_2_howto.pdf
  • +
  • CHANGES.TXT
  • +
  • COPYRIGHT.TXT
  • +
  • PRODUCT.TXT
  • +
+

O projeto está disponível em: https://github.com/Franzininho/FranzBoy

+

Confira o video de apresentação da placa

+
\ No newline at end of file diff --git a/en/docs/FranzMakey/franzmakey/index.html b/en/docs/FranzMakey/franzmakey/index.html index 0f5db650c..f87cfa362 100755 --- a/en/docs/FranzMakey/franzmakey/index.html +++ b/en/docs/FranzMakey/franzmakey/index.html @@ -1,17 +1,33 @@ - + - -Placa FranzMakey | Franzininho - - - + +Placa FranzMakey | Franzininho + + + -
-

Placa FranzMakey

FRANZmakey é um kit com funcionamento similar ao Makey Makey, porém com um custo bem mais acessível e é feito no Brasil. O objetivo dessa placa é possibilitar a interação com o computador através de objetos inusitados, como: frutas, legumes, etc, e assim estimular a criatividade com muita mão na massa e o pensamento computacional através da programação no Scratch.

Placa FranzMakey

O que eu posso fazer com o FRANZmakey?

Com esse kit você pode colocar a criatividade e mão na massa para funcionar, você pode criar um controle para controlar os controlar jogos no Scartch, animar personagens no Scratch tocando em frutas, criar narrativas, fazer músicas tocando em frutas e etc.

O que posso aprender com o FRANZmakey?

Pensamento computacional, criatividade, programação em blocos no caso o Scratch, aplicações para interface com computador, etc.

Placa FranzMakey

O que vem no Kit:

  • 1 Placa FRANZmakey
  • 1 Cabo USB 2 metros
  • 5 Garras de jacaré
  • Manual de instruções
  • Exemplos de projetos

Veja o funcionamento:

Onde comprar?

Esse kit é feito sob encomenda. Para adquiri-lo, entre em contato conosco: contato@franzininho.com.br

- - +

Placa FranzMakey

FRANZmakey é um kit com funcionamento similar ao Makey Makey, porém com um custo bem mais acessível e é feito no Brasil. O objetivo dessa placa é possibilitar a interação com o computador através de objetos inusitados, como: frutas, legumes, etc, e assim estimular a criatividade com muita mão na massa e o pensamento computacional através da programação no Scratch.

+

Placa FranzMakey

+

O que eu posso fazer com o FRANZmakey?

+

Com esse kit você pode colocar a criatividade e mão na massa para funcionar, você pode criar um controle para controlar os controlar jogos no Scartch, animar personagens no Scratch tocando em frutas, criar narrativas, fazer músicas tocando em frutas e etc.

+

O que posso aprender com o FRANZmakey?

+

Pensamento computacional, criatividade, programação em blocos no caso o Scratch, aplicações para interface com computador, etc.

+

Placa FranzMakey

+

O que vem no Kit:

+
    +
  • 1 Placa FRANZmakey
  • +
  • 1 Cabo USB 2 metros
  • +
  • 5 Garras de jacaré
  • +
  • Manual de instruções
  • +
  • Exemplos de projetos
  • +
+

Veja o funcionamento:

+ + +

Onde comprar?

+

Esse kit é feito sob encomenda. Para adquiri-lo, entre em contato conosco: contato@franzininho.com.br

\ No newline at end of file diff --git a/en/docs/FranzMakey/primeiros-passos/index.html b/en/docs/FranzMakey/primeiros-passos/index.html index bdf5aac00..1110918a3 100755 --- a/en/docs/FranzMakey/primeiros-passos/index.html +++ b/en/docs/FranzMakey/primeiros-passos/index.html @@ -1,17 +1,30 @@ - + - -Primeiros Passos | Franzininho - - - + +Primeiros Passos | Franzininho + + + -
-

Primeiros Passos

Plaquinha em mão, agora chegou a hora de conhecê-la!

Os pinos do FRANZmakey equivalem as setas do nosso computador, confira na imagem:

Franzmakey Pinos

Teste de funcionamento da placa

Pegue duas garrinhas de jacaré e faça as seguintes ligações:

  • GND = Terra
  • Pino 0 = Tecla espaço

Franzmakey Pinos

Agora ligue o cabo USB A/B no FranzMakey e a outro conector no USB do computador.

Franzmakey Pinos

*por opção você pode inserir frutas nas pontas das garrinhas para o teste.

Agora abra seu navegador e deixe o cursos piscando, conforme a imagem abaixo:

Franzmakey Pinos

Faça o teste: Segure as duas garrinhas de jacaré, mantenha seu dedo enconstado na parte metálica da garrinha no GND segurando sempre e a outra garrinha você deve tocar e tirar, como se você estivesse dando input do teclado.

Se o cursor começou a andar na barra do seu navegador, sua placa FranzMakey está prontinho!

- - +

Primeiros Passos

Plaquinha em mão, agora chegou a hora de conhecê-la!

+

Os pinos do FRANZmakey equivalem as setas do nosso computador, confira na imagem:

+

Franzmakey Pinos

+

Teste de funcionamento da placa

+

Pegue duas garrinhas de jacaré e faça as seguintes ligações:

+
    +
  • GND = Terra
  • +
  • Pino 0 = Tecla espaço
  • +
+

Franzmakey Pinos

+

Agora ligue o cabo USB A/B no FranzMakey e a outro conector no USB do computador.

+

Franzmakey Pinos

+

*por opção você pode inserir frutas nas pontas das garrinhas para o teste.

+

Agora abra seu navegador e deixe o cursos piscando, conforme a imagem abaixo:

+

Franzmakey Pinos

+

Faça o teste: Segure as duas garrinhas de jacaré, mantenha seu dedo enconstado na parte metálica da garrinha no GND segurando sempre e a outra garrinha você deve tocar e tirar, como se você estivesse dando input do teclado.

+

Se o cursor começou a andar na barra do seu navegador, sua placa FranzMakey está prontinho!

\ No newline at end of file diff --git a/en/docs/Franzino/franzino/index.html b/en/docs/Franzino/franzino/index.html index 05b951e3b..0c4d0e4f9 100755 --- a/en/docs/Franzino/franzino/index.html +++ b/en/docs/Franzino/franzino/index.html @@ -1,18 +1,69 @@ - + - -Placa Franzino | Franzininho - - - + +Placa Franzino | Franzininho + + + -
-

Placa Franzino

Placa Franzino

A placa Franzino é um Arduino standalone de baixo custo. Como seu próprio nome sugere, é uma placa enxuta que possui os componentes básicos para que você possa usar o microcontrolador ATmega328, tanto para estudo quanto para a aplicações em projetos.

Diferente dos standalones disponíveis no mercado, a placa Franzino possui pinagem Arduino UNO Rev 3 e conector para fácil ligação da interface serial. A facilidade de acesso aos pinos da interface serial, possibilita que você ligue módulos de comunicação conforme a necessidade do projeto. Você conseguirá facilmente ligar conversores de níveis seriais como: USB, RS232, RS485 e até mesmo um módulo Bluetooth, sem a necessidade do uso de shields.

A Franzino vem com o bootloader do Arduino UNO facilitando o processo de upload do seu scketch. Você poderá facilmente fazer o upload do seu sketch para placa usando um conversor USB/Serial, seguindo os mesmos passos que já está acostumado a fazer com a placa Arduino UNO.

Características

  • Pinagem Padrão UNO R3;
  • Microcontrolador ATmega328 pu ATmega328P;
  • Alimentação: 7,5 V à 20 V DC;
  • Proteção contra inversão de polaridade da fonte;
  • Conector para ligação de interface serial;
  • LED para indicação de alimentação;
  • LED conectado ao pino 13 para uso geral

A seguir é apresentada a pinagem para interface serial:

pinagem

Os pino D2 e D4 podem ser utilizados para uma comunicação soft serial, como pino de controle da comunicação RS485 ou outras aplicações de entrada ou saída.

Outra vantagem interessante é que as linhas de alimentação(VCC e GND) também estão disponíveis nesse conector.

Assim, com esse conector você pode facilmente ligar um conversor USB/Serial para comunicação com um computador, seja para upload dos sketchs quanto para troca de informações.

ligacao_conversor USB Serial

Se o seu projeto não necessitar da comunicação USB/Serial durante o seu funcionamento, você poderá usar o mesmo conversor para fazer upload em outra Franzinos.

Algumas aplicações necessitam de comunicação serial no padrão RS232. Dessa forma você pode ligar facilmente um conversor TTL/RS232.

conversor_ttl_rs232.png

Também é comum aplicações que necessitem da comunicação RS485. Para isso você pode facilmente ligar um módulo conversor TTL/RS485:

HC-05

Outra aplicação interessante para comunicação e o uso de módulos Bluetooth. Esse tipo de módulo pode ser facilmente ligado a Franzino tanto para uso dos pinos padrões de comunicação TX e RX quanto para comunicação soft serial:

Conversor RS485

Como observado acima, há muitas possibilidades de comunicações e você pode facilmente ligar outros módulos para diversas aplicações conforme sua necessidade.

Limitações da Franzino

A Franzino é uma placa standalone que possui diversas vantagens. Porém como foi desenvolvida em face simples e com o mínimo de componente necessários para o uso do microcontrolador, possui algumas limitações em relação ao Arduino UNO, que são:

  • Não há regulador 3,3 V, dessa forma o pino 3.3V não está conectado;
  • O pino Vin não está conectado a alimentação;
  • Os pinos SCL e SDA não estão conectados as pinos A4 e A5;
  • Não possui conversor USB/Serial
  • Precisa de um conversor USB/Serial para upload dos sketchs

Alimentação

A Franzino pode ser alimentada das seguintes formas:

  • Conector P4 com tensão de 7,5 V a 20 V como positivo no centro;
  • Pino 5V e GND - tensão de alimentação fixa em 5 VDC
  • Através nos pinos VCC e GND disponíveis conector de expansão serial;

Atenção

Não LIGAR o VCC do conversor USB/SERIAL a placa se a fonte externa estiver ligada. Nesse caso ligar apenas os pinos DTR, RXI, TXO e GND.

Esquemático

Esquemático

Layout

Layout

Licença

CC SA 4.0 -Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Todos os arquivos de projeto estão disponíveis no Github: https://github.com/Franzininho/Franzino

Referências

Artigo no Embarcados: https://www.embarcados.com.br/franzino-open-hardware-de-baixo-custo/

- - +

Placa Franzino

Placa Franzino

+

A placa Franzino é um Arduino standalone de baixo custo. Como seu próprio nome sugere, é uma placa enxuta que possui os componentes básicos para que você possa usar o microcontrolador ATmega328, tanto para estudo quanto para a aplicações em projetos.

+

Diferente dos standalones disponíveis no mercado, a placa Franzino possui pinagem Arduino UNO Rev 3 e conector para fácil ligação da interface serial. A facilidade de acesso aos pinos da interface serial, possibilita que você ligue módulos de comunicação conforme a necessidade do projeto. Você conseguirá facilmente ligar conversores de níveis seriais como: USB, RS232, RS485 e até mesmo um módulo Bluetooth, sem a necessidade do uso de shields.

+

A Franzino vem com o bootloader do Arduino UNO facilitando o processo de upload do seu scketch. Você poderá facilmente fazer o upload do seu sketch para placa usando um conversor USB/Serial, seguindo os mesmos passos que já está acostumado a fazer com a placa Arduino UNO.

+

Características

+
    +
  • Pinagem Padrão UNO R3;
  • +
  • Microcontrolador ATmega328 pu ATmega328P;
  • +
  • Alimentação: 7,5 V à 20 V DC;
  • +
  • Proteção contra inversão de polaridade da fonte;
  • +
  • Conector para ligação de interface serial;
  • +
  • LED para indicação de alimentação;
  • +
  • LED conectado ao pino 13 para uso geral
  • +
+

A seguir é apresentada a pinagem para interface serial:

+

pinagem

+

Os pino D2 e D4 podem ser utilizados para uma comunicação soft serial, como pino de controle da comunicação RS485 ou outras aplicações de entrada ou saída.

+

Outra vantagem interessante é que as linhas de alimentação(VCC e GND) também estão disponíveis nesse conector.

+

Assim, com esse conector você pode facilmente ligar um conversor USB/Serial para comunicação com um computador, seja para upload dos sketchs quanto para troca de informações.

+

ligacao_conversor USB Serial

+

Se o seu projeto não necessitar da comunicação USB/Serial durante o seu funcionamento, você poderá usar o mesmo conversor para fazer upload em outra Franzinos.

+

Algumas aplicações necessitam de comunicação serial no padrão RS232. Dessa forma você pode ligar facilmente um conversor TTL/RS232.

+

conversor_ttl_rs232.png

+

Também é comum aplicações que necessitem da comunicação RS485. Para isso você pode facilmente ligar um módulo conversor TTL/RS485:

+

HC-05

+

Outra aplicação interessante para comunicação e o uso de módulos Bluetooth. Esse tipo de módulo pode ser facilmente ligado a Franzino tanto para uso dos pinos padrões de comunicação TX e RX quanto para comunicação soft serial:

+

Conversor RS485

+

Como observado acima, há muitas possibilidades de comunicações e você pode facilmente ligar outros módulos para diversas aplicações conforme sua necessidade.

+

Limitações da Franzino

+

A Franzino é uma placa standalone que possui diversas vantagens. Porém como foi desenvolvida em face simples e com o mínimo de componente necessários para o uso do microcontrolador, possui algumas limitações em relação ao Arduino UNO, que são:

+
    +
  • Não há regulador 3,3 V, dessa forma o pino 3.3V não está conectado;
  • +
  • O pino Vin não está conectado a alimentação;
  • +
  • Os pinos SCL e SDA não estão conectados as pinos A4 e A5;
  • +
  • Não possui conversor USB/Serial
  • +
  • Precisa de um conversor USB/Serial para upload dos sketchs
  • +
+

Alimentação

+

A Franzino pode ser alimentada das seguintes formas:

+
    +
  • Conector P4 com tensão de 7,5 V a 20 V como positivo no centro;
  • +
  • Pino 5V e GND - tensão de alimentação fixa em 5 VDC
  • +
  • Através nos pinos VCC e GND disponíveis conector de expansão serial;
  • +
+

Atenção

+

Não LIGAR o VCC do conversor USB/SERIAL a placa se a fonte externa estiver ligada. Nesse caso ligar apenas os pinos DTR, RXI, TXO e GND.

+

Esquemático

+

Esquemático

+

Layout

+

Layout

+

Licença

+

CC SA 4.0 +Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

+

Todos os arquivos de projeto estão disponíveis no Github: https://github.com/Franzininho/Franzino

+

Referências

+

Artigo no Embarcados: https://www.embarcados.com.br/franzino-open-hardware-de-baixo-custo

\ No newline at end of file diff --git a/en/docs/Franzino/upload-com-arduino-uno/index.html b/en/docs/Franzino/upload-com-arduino-uno/index.html index 657794a98..c430cf697 100755 --- a/en/docs/Franzino/upload-com-arduino-uno/index.html +++ b/en/docs/Franzino/upload-com-arduino-uno/index.html @@ -1,17 +1,43 @@ - + - -Gravando a Franzino com um placa Arduino UNO | Franzininho - - - + +Gravando a Franzino com um placa Arduino UNO | Franzininho + + + -
-

Gravando a Franzino com um placa Arduino UNO

Se você não possui um conversor USB/Serial você pode gravar a Franzino através de um Arduino. Para isso vamos configurar a placa Arduino UNO com programador.

Primeiro, escolha o exemplo ArduinoISP, conforme figura abaixo:

Faça o upload para a placa Arduino UNO que será usada como programador.

Feito o UPLOAD, agora vamos as conexões do Arduino UNO na Franzino:

  • Ligue o pino RESET da FRANZINO ao pino 10 do Arduino
  • Ligue o pino 11 da FRANZINO ao pino 11 do Arduino
  • Ligue o pino 12 da FRANZINO ao pino 12 do Arduino
  • Ligue o pino 13 da FRANZINO ao pino 13 do Arduino
  • Ligue o pino 5V da FRANZINO no pino 5V do Arduino
  • Ligue o pino GND da FRANZINO ao GND do Arduino

Ligação_arduino_franzino.png

Configurando o avrdude ( se estiver usando o ATmega328 e não o ATmega328P)

A versão 0 da Franzino vem com o ATmega328-PU, dessa forma precisamos configurar o avrdude para gravar esse microcontrolador. Na pasta do arduino acesse:

C:\arduino-1.6.8\hardware\tools\avr\etc, abra o arquivo avrdude.conf

Procure a assinatura do ATMEGA328P:

Troque a assinatura por:

Salve o arquivo.

tip

Após a gravação, volte a assinatura para o valor original: signature= 0x1e 0x95 0x0F;

Upload de Sketchs usando a Arduino UNO

Pronto, agora abra o programa que será gravado na Franzino. Para esse exemplo vamos usar o exemplo Blink, mas você poderá fazer esse procedimento para gravar suas aplicações;

Agora vamos preparar para gravação. Configure o Programador como ArduinoISP:

Pronto, agora é só fazer o UPLOAD para a Franzino:

- - +

Gravando a Franzino com um placa Arduino UNO

Se você não possui um conversor USB/Serial você pode gravar a Franzino através de um Arduino. Para isso vamos configurar a placa Arduino UNO com programador.

+

Primeiro, escolha o exemplo ArduinoISP, conforme figura abaixo:

+

+

Faça o upload para a placa Arduino UNO que será usada como programador.

+

Feito o UPLOAD, agora vamos as conexões do Arduino UNO na Franzino:

+
    +
  • Ligue o pino RESET da FRANZINO ao pino 10 do Arduino
  • +
  • Ligue o pino 11 da FRANZINO ao pino 11 do Arduino
  • +
  • Ligue o pino 12 da FRANZINO ao pino 12 do Arduino
  • +
  • Ligue o pino 13 da FRANZINO ao pino 13 do Arduino
  • +
  • Ligue o pino 5V da FRANZINO no pino 5V do Arduino
  • +
  • Ligue o pino GND da FRANZINO ao GND do Arduino
  • +
+

Ligação_arduino_franzino.png

+

Configurando o avrdude ( se estiver usando o ATmega328 e não o ATmega328P)

+

A versão 0 da Franzino vem com o ATmega328-PU, dessa forma precisamos configurar o avrdude para gravar esse microcontrolador. Na pasta do arduino acesse:

+

C:\arduino-1.6.8\hardware\tools\avr\etc, abra o arquivo avrdude.conf

+

Procure a assinatura do ATMEGA328P:

+

+

Troque a assinatura por:

+

+

Salve o arquivo.

+

Após a gravação, volte a assinatura para o valor original: signature= 0x1e 0x95 0x0F;

+

Upload de Sketchs usando a Arduino UNO

+

Pronto, agora abra o programa que será gravado na Franzino. Para esse exemplo vamos usar o exemplo Blink, mas você poderá fazer esse procedimento para gravar suas aplicações;

+

+

Agora vamos preparar para gravação. Configure o Programador como ArduinoISP:

+

+

Pronto, agora é só fazer o UPLOAD para a Franzino:

+

\ No newline at end of file diff --git a/en/docs/Franzino/upload-conversor-serial/index.html b/en/docs/Franzino/upload-conversor-serial/index.html index 0375d2a7c..6e7a0cdc7 100755 --- a/en/docs/Franzino/upload-conversor-serial/index.html +++ b/en/docs/Franzino/upload-conversor-serial/index.html @@ -1,17 +1,18 @@ - + - -Upload via conversor USB/SERIAL | Franzininho - - - + +Upload via conversor USB/SERIAL | Franzininho + + + -
-

Upload via conversor USB/SERIAL

Para fazer upload de códigos para a Franzino, primeiro é necessário ligar o conversor USB/Serial a placa, como exibido na figura abaixo:

ligação Conversor USB/Seril

Selecione na IDE do Arduino a Placa Arduino UNO. Também selecione a porta seria que foi criada ao ser inserido o conversor USB/SERIAL no computador:

configuração da IDE Arduino

Pronto, agora é só fazer o upload dos seus códigos para a placa Franzino

- - +

Upload via conversor USB/SERIAL

Para fazer upload de códigos para a Franzino, primeiro é necessário ligar o conversor USB/Serial a placa, como exibido na figura abaixo:

+

ligação Conversor USB/Seril

+

Selecione na IDE do Arduino a Placa Arduino UNO. Também selecione a porta seria que foi criada ao ser inserido o conversor USB/SERIAL no computador:

+

configuração da IDE Arduino

+

Pronto, agora é só fazer o upload dos seus códigos para a placa Franzino

\ No newline at end of file diff --git a/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot/index.html b/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot/index.html index da5464718..ed8d04474 100755 --- a/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot/index.html +++ b/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIot/index.html @@ -1,17 +1,46 @@ - + - -Placa Laboratório de Sistemas Embarcados e IoT | Franzininho - - - + +Placa Laboratório de Sistemas Embarcados e IoT | Franzininho + + + -
-

Placa Laboratório de Sistemas Embarcados e IoT

placa Laboratório de Sistemas Embarcados e IoT

A placa Laboratório de Sistemas Embarcados e IoT é uma placa de circuito impresso para o ensino de programação em placas microcontroladas. Esta placa contém uma série de periféricos que permitem a exploração de conceitos relacionados ao uso de placas microcontroladas. A conexão desses periféricos já está de certa forma "embutida" na placa sendo necessária apenas a ativação dos componentes através da conexão de pinos de ativação associados ao periférico.

Esta placa foi desevolvida para ser usada em conjunto com a placa Franzininho Wifi. Sendo assim, foram adicionadas na placa barras de pinos que permitam a conexão desta placa com facilidade. No entanto, é possível também utilizar a placa com outras placas microcontroladas, como a placa Arduino Uno através de um adaptador.

Além dos periféricos padrão, também estão disponíveis na placa conectores extra que permitem a utilização das portas da Franzininho Wifi para fazer conexões externas caso os periféricos da placa não sejam satisfatórios.

Clique aqui para acessar o projeto da placa de circuito impresso no Github.

Periféricos disponíveis na placa

  • 4 LEDs coloridos difusos
  • 4 chaves táteis 6X6mm
  • 1 Teclado Matricial 4X4 (composto de chaves táteis 6X6mm)
  • 1 LED RGB Endereçável 5050
  • 1 Sensor DHT11
  • 1 Display de 7 segmentos cátodo comum
  • 1 Sensor LDR de 5mm
  • 1 Joystick (também conhecido como Thumb Joystick)
  • 1 LED RGB cátodo comum
  • 1 Potenciômetro
  • 1 Piezo Buzzer
  • 1 Display OLED 128X64 Pixels
  • 2 Conectores fêmea de 4 pinos para conexão de sensores externos
  • 2 Conectores Grove para conexão de sensores externos
  • 1 Transistor NPN

Ativação dos periféricos

Os pinos de ativação disponíveis na placa são dois pinos macho localizados nas trilhas entre um pino de um componente e o pino onde este componente se conecta no socket da placa microcontrolada. Para ativar um pino de ativação, basta fazer a ligação dos dois pinos macho através de um conector, o que permite que as conexões corretas sejam realizadas rapidamente.

Estes pinos possuem uma codificação baseada no sistema hexadecimal que se encontra do lado do pino de ativação onde o primeiro algorismo indica a função do pino, e o segundo indica a numeração dele. A lista de pinos e funções pode ser vista na tabela abaixo:

LetraSignificado
0GND
3Alimentação de 3.3V
5Alimentação de 5V
APinos ligados em portas Analógicas
BPinos ligados nas mesmas portas que A
CEspeciais
DPinos ligados em portas Digitais
EPinos ligados nas mesmas portas que D

Devido à essa codificação, os pinos de ativação acabaram com numerações que não possuem relação com os pinos da Franzininho Wifi. Visando sanar eventuais problemas ligados a essa relação, a correpondência entre os pinos de ativação e os pinos da Franzininho Wifi se encontra impressa na PCB.

Além disso, também é possível usar a biblioteca laboratorioFW, que faz o mapeamento dos pinos da placa Franzininho Wifi para os códigos dos pinos de ativação, facilitando assim ainda mais o uso desta ferramenta.

Periféricos e pinos de ativação

lab-numerado

PerifericoPinos de AtivaçãoCódigo na imagem
LEDs difusosA0, A1, A2, A3 (dependendo do LED escolhido)1
BotõesA4 e 31, A5 e 32, A6 e 33, A7 e 34 (dependendo do botão escolhido)7
BuzzerE26
LED RGBAC, AB, AA, 0012
PotenciômetroB8, 355
Sensor de luminosidadeA8, 3610
Sensor de umidade e temperatura DTH11A9, 5114
Display de 7 segmentosD0, D1, D2, D3, D4, D5, D6, D7, 018
Transistor NPNE99
Display OLEDC0, C1, 302
Teclado MatricialDA, DB, DC, DD, E6, E4, E33
Conexão para Servo MotorB5, 54, 0211
LED RGB endereçávelD9, 3713
Módulo JoystickD8, B1, B0, 384
Conectores fêmea de 4 pinos(BA, BB, 3A) ou (B3, B2, 54) dependendo do conector escolhido17 e 15
Conectores Grove(B7, 39) ou (52, B6) dependendo do conector escolhido16 e 18
Obs.

A placa Laboratório de Sistemas Embarcados e IoT foi desenvolvida como o Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

- - +

Placa Laboratório de Sistemas Embarcados e IoT

placa Laboratório de Sistemas Embarcados e IoT

+

A placa Laboratório de Sistemas Embarcados e IoT é uma placa de circuito impresso para o ensino de programação em placas microcontroladas. Esta placa contém uma série de periféricos que permitem a exploração de conceitos relacionados ao uso de placas microcontroladas. A conexão desses periféricos já está de certa forma "embutida" na placa sendo necessária apenas a ativação dos componentes através da conexão de pinos de ativação associados ao periférico.

+

Esta placa foi desevolvida para ser usada em conjunto com a placa Franzininho Wifi. Sendo assim, foram adicionadas na placa barras de pinos que permitam a conexão desta placa com facilidade. No entanto, é possível também utilizar a placa com outras placas microcontroladas, como a placa Arduino Uno através de um adaptador.

+

Além dos periféricos padrão, também estão disponíveis na placa conectores extra que permitem a utilização das portas da Franzininho Wifi para fazer conexões externas caso os periféricos da placa não sejam satisfatórios.

+

Clique aqui para acessar o projeto da placa de circuito impresso no Github.

+

Periféricos disponíveis na placa

+
    +
  • 4 LEDs coloridos difusos
  • +
  • 4 chaves táteis 6X6mm
  • +
  • 1 Teclado Matricial 4X4 (composto de chaves táteis 6X6mm)
  • +
  • 1 LED RGB Endereçável 5050
  • +
  • 1 Sensor DHT11
  • +
  • 1 Display de 7 segmentos cátodo comum
  • +
  • 1 Sensor LDR de 5mm
  • +
  • 1 Joystick (também conhecido como Thumb Joystick)
  • +
  • 1 LED RGB cátodo comum
  • +
  • 1 Potenciômetro
  • +
  • 1 Piezo Buzzer
  • +
  • 1 Display OLED 128X64 Pixels
  • +
  • 2 Conectores fêmea de 4 pinos para conexão de sensores externos
  • +
  • 2 Conectores Grove para conexão de sensores externos
  • +
  • 1 Transistor NPN
  • +
+

Ativação dos periféricos

+

Os pinos de ativação disponíveis na placa são dois pinos macho localizados nas trilhas entre um pino de um componente e o pino onde este componente se conecta no socket da placa microcontrolada. Para ativar um pino de ativação, basta fazer a ligação dos dois pinos macho através de um conector, o que permite que as conexões corretas sejam realizadas rapidamente.

+

Estes pinos possuem uma codificação baseada no sistema hexadecimal que se encontra do lado do pino de ativação onde o primeiro algorismo indica a função do pino, e o segundo indica a numeração dele. A lista de pinos e funções pode ser vista na tabela abaixo:

+
LetraSignificado
0GND
3Alimentação de 3.3V
5Alimentação de 5V
APinos ligados em portas Analógicas
BPinos ligados nas mesmas portas que A
CEspeciais
DPinos ligados em portas Digitais
EPinos ligados nas mesmas portas que D
+

Devido à essa codificação, os pinos de ativação acabaram com numerações que não possuem relação com os pinos da Franzininho Wifi. Visando sanar eventuais problemas ligados a essa relação, a correpondência entre os pinos de ativação e os pinos da Franzininho Wifi se encontra impressa na PCB.

+

Além disso, também é possível usar a biblioteca laboratorioFW, que faz o mapeamento dos pinos da placa Franzininho Wifi para os códigos dos pinos de ativação, facilitando assim ainda mais o uso desta ferramenta.

+

Periféricos e pinos de ativação

+

lab-numerado

+
PerifericoPinos de AtivaçãoCódigo na imagem
LEDs difusosA0, A1, A2, A3 (dependendo do LED escolhido)1
BotõesA4 e 31, A5 e 32, A6 e 33, A7 e 34 (dependendo do botão escolhido)7
BuzzerE26
LED RGBAC, AB, AA, 0012
PotenciômetroB8, 355
Sensor de luminosidadeA8, 3610
Sensor de umidade e temperatura DTH11A9, 5114
Display de 7 segmentosD0, D1, D2, D3, D4, D5, D6, D7, 018
Transistor NPNE99
Display OLEDC0, C1, 302
Teclado MatricialDA, DB, DC, DD, E6, E4, E33
Conexão para Servo MotorB5, 54, 0211
LED RGB endereçávelD9, 3713
Módulo JoystickD8, B1, B0, 384
Conectores fêmea de 4 pinos(BA, BB, 3A) ou (B3, B2, 54) dependendo do conector escolhido17 e 15
Conectores Grove(B7, 39) ou (52, B6) dependendo do conector escolhido16 e 18
+

A placa Laboratório de Sistemas Embarcados e IoT foi desenvolvida como o Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

\ No newline at end of file diff --git a/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno/index.html b/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno/index.html index 843b83cd2..e4f44502e 100755 --- a/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno/index.html +++ b/en/docs/LaboratorioSistemasIot/adaptadores/arduino-uno/index.html @@ -1,17 +1,20 @@ - + - -Adaptador Arduino Uno | Franzininho - - - + +Adaptador Arduino Uno | Franzininho + + + -
-

Adaptador Arduino Uno

Este adaptador permite a utilização da placa Arduino Uno em conjunto com a placa Laboratório de Sistemas Embarcados e IoT através de um remapeamento da pinagem do Arduino Uno e para a pinagem da Franzininho Wifi (utilizada no projeto da placa de laboratório). Para utilizar o adaptador basta conectá-lo ao Arduino como um shield e então conectar o adaptador na placa.

Clique aqui para acessar o projeto da placa de circuito impresso no Github.

Pinos de ativação

Este adaptador utiliza o mesmo sistema de codificação de pinos de ativação definido para a placa Laboratório de Sistemas Embarcados e IoT sendo que a correspondência entre o pino do Arduino e o pino de ativação na placa laboratório foi impresso no adaptdor e também pode ser verificada no repositório do projeto no Github.

Para facilitar o uso deste adaptador foi desenvolvida a biblioteca laboratorioFW_ARDUNO para uso em conjunto com o placa que permite o uso dos códigos dos pinos de ativação dentro da programação.

Obs.

Este projeto foi desenvolvido como parte do Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

- - +

Adaptador Arduino Uno

+

Este adaptador permite a utilização da placa Arduino Uno em conjunto com a placa Laboratório de Sistemas Embarcados e IoT através de um remapeamento da pinagem do Arduino Uno e para a pinagem da Franzininho Wifi (utilizada no projeto da placa de laboratório). Para utilizar o adaptador basta conectá-lo ao Arduino como um shield e então conectar o adaptador na placa.

+

Clique aqui para acessar o projeto da placa de circuito impresso no Github.

+

Pinos de ativação

+

Este adaptador utiliza o mesmo sistema de codificação de pinos de ativação definido para a placa Laboratório de Sistemas Embarcados e IoT sendo que a correspondência entre o pino do Arduino e o pino de ativação na placa laboratório foi impresso no adaptdor e também pode ser verificada no repositório do projeto no Github.

+

Para facilitar o uso deste adaptador foi desenvolvida a biblioteca laboratorioFW_ARDUNO para uso em conjunto com o placa que permite o uso dos códigos dos pinos de ativação dentro da programação.

+

Este projeto foi desenvolvido como parte do Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

\ No newline at end of file diff --git a/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW/index.html b/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW/index.html index 8d54a3ee6..df714775e 100755 --- a/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW/index.html +++ b/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW/index.html @@ -1,21 +1,80 @@ - + - -laboratorioFW | Franzininho - - - + +laboratorioFW | Franzininho + + + -
-

laboratorioFW

Nesta biblioteca é possível encontrar o mapeamento entre a pinagem da placa Franzininho Wifi e a codificação dos pinos de ativação da placa Laboratório de sistemas embarcados e IoT e exemplos de utilização dos periféricos disponíveis na placa.

Clique aqui para acessar o repositório da biblioteca no Github.

Como instalar a biblioteca

  1. Faça o donwload da biblioteca em formato zip clicando em Code e depois em Download ZIP

  1. Abra a IDE do Arduino
  2. Vá em Sketch > Include Library > Add .ZIP Library

  1. Selecione o arquivo zip baixado e clique em ok
  2. Opcional: Procure pelos exemplos da biblioteca em File > Examples

Como usar a biblioteca

Para utilizar a biblioteca basta incluí-la no seu arquivo de código com a linha #include<laboratorioFW.h>. Depois disso, você pode utilizar os códigos dos pinos de ativação na placa dentro do seu código.

Importante : Os algorismos do código do pino de ativação são separados por um caractere de _, ou seja o pino de ativação C0 pode ser acessado no código através do código C_0 e assim por diante.

Exemplo de utilização:

#include <laborarotioFW.h>

#define led A_1

void setup(){
pinMode(led,OUTPUT);
}

void loop{
digitalWrite(led,HIGH);
delay(1000);
digitalWrite(led,LOW);
delay(1000);
}

Exemplos implementados:

testes_completos.ino

Neste exemplo temos todos os códigos necessários para os testes de todos os periféricos disponíveis na placa. Este código é um código para a validação da placa e não para ser utilizado no cotidiano.

adivinhe_a_senha.ino

Neste exemplo implementamos um sistema de verificação de senha utilizando o teclado matricial e a biblioteca Keypad para fazer o mapeamento -do teclado. Neste sistema, o usuário deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usuário indica que terminou de digitar a senha apertando um o botão correspondente ao caractere * ou #, essa sequência é comparada com uma senha previamente definida no código. Um led é aceso para indicar se a senha está correta ou não e uma mensagem com essa informação é impresso no monitor serial.

ativar_led_RGB_com_potenciometro_e_botoes.ino

Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenciômetro e três botões. Os três botões são utilizados para selecionar qual cor do LED RGB será controlada (vermelho, verde e azul) e a leitura analógica do potenciômetro é usada para dosar a intensidade da cor do terminal.

ativar_servo_motor_com_botoes.ino

Neste exemplo, utilizamos dois botões para controlar a posição de um servo motor. Os botões são associados no código às direções esquerda e direita e alteram o ângulo do servo fazendo com que seja possível movimentá-lo nas duas direções. Foi usada a biblioteca ESP32_S2_ISR_Servo.

contagem_display_7seg.ino

Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos.

controle_led_com_ldr.ino

Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura é mapeada e o valor resultante é usado para acender um LED. O exemplo também conta com um botão que controla um estado interno do programa e seleciona se a leitura será impressa como é lida ou com lógica complementar.

do_re_mi_fa.ino

Neste exemplo uma música é tocada pelo buzzer em conjunto com a ativação -do LED RGB endereçável. O programa utiliza a biblioteca Adafruit_NeoPixel para controlar o LED.

genio.ino

Neste exemplo, implementamos o jogo Simon, também conhecido como gênio. Neste jogo, quatro LEDs são ativados em uma sequência gerada aleatóriamente e essa sequência é apresentada para o jogador, que deve repetir a sequência na ordem correta pressionando os botões correspondentes. Quando os LEDs acendem, um som correspondente é tocado no buzzer.

leitura_do_teclado.ino

Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e -a imprimimos essa tecla no no monitor serial. A biblioteca Keypad é utilizada para fazer o mapeamento do teclado.

leitura_sensores_externos.ino

Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets -para conectores externos da placa e imprimimos os valores lidos no monitor serial.

leitura_sensores_grove.ino

Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial.

leitura_umidade_temperatura_oled.ino

Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, são utilizadas as bibliotecas DTH e SSD1306Wire.

movimentar_elemento_oled_joystick.ino

Neste exemplo utilizamos o display OLED para mostrar um asterisco que pode ser controlado pelo módulo de joystick se movendo no display. Foi utilizada a biblioteca SSD1306Wire.

Obs.

Este projeto foi desenvolvido como parte do Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

- - +

laboratorioFW

Nesta biblioteca é possível encontrar o mapeamento entre a pinagem da placa Franzininho Wifi e a codificação dos pinos de ativação da placa Laboratório de sistemas embarcados e IoT e exemplos de utilização dos periféricos disponíveis na placa.

+

Clique aqui para acessar o repositório da biblioteca no Github.

+

Como instalar a biblioteca

+
    +
  1. Faça o donwload da biblioteca em formato zip clicando em Code e depois em Download ZIP
  2. +
+

+
    +
  1. Abra a IDE do Arduino
  2. +
  3. Vá em Sketch > Include Library > Add .ZIP Library
  4. +
+

+
    +
  1. Selecione o arquivo zip baixado e clique em ok
  2. +
  3. Opcional: Procure pelos exemplos da biblioteca em File > Examples
  4. +
+

Como usar a biblioteca

+

Para utilizar a biblioteca basta incluí-la no seu arquivo de código com a linha #include<laboratorioFW.h>. Depois disso, você pode utilizar os códigos dos pinos de ativação na placa dentro do seu código.

+

Importante : Os algorismos do código do pino de ativação são separados por um caractere de _, ou seja o pino de ativação C0 pode ser acessado no código através do código C_0 e assim por diante.

+

Exemplo de utilização:

+
#include <laborarotioFW.h>
+
+#define led A_1
+
+void setup(){
+    pinMode(led,OUTPUT);
+}
+
+void loop{
+    digitalWrite(led,HIGH);
+    delay(1000);
+    digitalWrite(led,LOW);
+    delay(1000);
+}
+
+

Exemplos implementados:

+

testes_completos.ino

+

Neste exemplo temos todos os códigos necessários para os testes de todos os periféricos disponíveis na placa. Este código é um código para a validação da placa e não para ser utilizado no cotidiano.

+

adivinhe_a_senha.ino

+

Neste exemplo implementamos um sistema de verificação de senha utilizando o teclado matricial e a biblioteca Keypad para fazer o mapeamento +do teclado. Neste sistema, o usuário deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usuário indica que terminou de digitar a senha apertando um o botão correspondente ao caractere * ou #, essa sequência é comparada com uma senha previamente definida no código. Um led é aceso para indicar se a senha está correta ou não e uma mensagem com essa informação é impresso no monitor serial.

+

ativar_led_RGB_com_potenciometro_e_botoes.ino

+

Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenciômetro e três botões. Os três botões são utilizados para selecionar qual cor do LED RGB será controlada (vermelho, verde e azul) e a leitura analógica do potenciômetro é usada para dosar a intensidade da cor do terminal.

+

ativar_servo_motor_com_botoes.ino

+

Neste exemplo, utilizamos dois botões para controlar a posição de um servo motor. Os botões são associados no código às direções esquerda e direita e alteram o ângulo do servo fazendo com que seja possível movimentá-lo nas duas direções. Foi usada a biblioteca ESP32_S2_ISR_Servo.

+

contagem_display_7seg.ino

+

Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos.

+

controle_led_com_ldr.ino

+

Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura é mapeada e o valor resultante é usado para acender um LED. O exemplo também conta com um botão que controla um estado interno do programa e seleciona se a leitura será impressa como é lida ou com lógica complementar.

+

do_re_mi_fa.ino

+

Neste exemplo uma música é tocada pelo buzzer em conjunto com a ativação +do LED RGB endereçável. O programa utiliza a biblioteca Adafruit_NeoPixel para controlar o LED.

+

genio.ino

+

Neste exemplo, implementamos o jogo Simon, também conhecido como gênio. Neste jogo, quatro LEDs são ativados em uma sequência gerada aleatóriamente e essa sequência é apresentada para o jogador, que deve repetir a sequência na ordem correta pressionando os botões correspondentes. Quando os LEDs acendem, um som correspondente é tocado no buzzer.

+

leitura_do_teclado.ino

+

Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e +a imprimimos essa tecla no no monitor serial. A biblioteca Keypad é utilizada para fazer o mapeamento do teclado.

+

leitura_sensores_externos.ino

+

Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets +para conectores externos da placa e imprimimos os valores lidos no monitor serial.

+

leitura_sensores_grove.ino

+

Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial.

+

leitura_umidade_temperatura_oled.ino

+

Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, são utilizadas as bibliotecas DTH e SSD1306Wire.

+

movimentar_elemento_oled_joystick.ino

+

Neste exemplo utilizamos o display OLED para mostrar um asterisco que pode ser controlado pelo módulo de joystick se movendo no display. Foi utilizada a biblioteca SSD1306Wire.

+

Este projeto foi desenvolvido como parte do Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

\ No newline at end of file diff --git a/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO/index.html b/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO/index.html index 9257bebc9..80a7dd299 100755 --- a/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO/index.html +++ b/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNO/index.html @@ -1,21 +1,78 @@ - + - -laboratorioFW_ARDUNO | Franzininho - - - + +laboratorioFW_ARDUNO | Franzininho + + + -
-

laboratorioFW_ARDUNO

Nesta biblioteca é possível encontrar o mapeamento entre a pinagem da placa Arduino Uno e a codificação dos pinos de ativação da placa Laboratório de Sistemas Embarcados e IoT segundo o projeto do adaptador para Arduino projeto para a placa. A biblioteca também é possível encontrar exemplos de utilização dos periféricos disponíveis na placa.

Clique aqui para acessar o repositório da biblioteca no Github.

Como instalar a biblioteca

  1. Faça o donwload da biblioteca em formato zip clicando em Code e depois em Download ZIP

  1. Abra a IDE do Arduino
  2. Vá em Sketch > Include Library > Add .ZIP Library

  1. Selecione o arquivo zip baixado e clique em ok
  2. Opcional: Procure pelos exemplos da biblioteca em File > Examples

Como usar a biblioteca

Para utilizar a biblioteca basta incluí-la no seu arquivo de código com a linha #include<laboratorioFW_ARDUNO.h>. Depois disso, você pode utilizar os códigos dos pinos de ativação na placa dentro do seu código.

Importante : Os algorismos do código do pino de ativação são separados por um caractere de _, ou seja o pino de ativação C0 pode ser acessado no código através do código C_0 e assim por diante.

Exemplo de utilização:

#include <laborarotioFW_ARDUNO.h>

#define led A_1

void setup(){
pinMode(led,OUTPUT);
}

void loop{
digitalWrite(led,HIGH);
delay(1000);
digitalWrite(led,LOW);
delay(1000);
}

Exemplos implementados:

testes_completos.ino

Neste exemplo temos todos os códigos necessários para os testes de todos os periféricos disponíveis na placa. Este código é um código para a validação da placa e não para ser utilizado no cotidiano.

adivinhe_a_senha.ino

Neste exemplo implementamos um sistema de verificação de senha utilizando o teclado matricial e a biblioteca Keypad para fazer o mapeamento -do teclado. Neste sistema, o usuário deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usuário indica que terminou de digitar a senha apertando um o botão correspondente ao caractere * ou #, essa sequência é comparada com uma senha previamente definida no código. Um led é aceso para indicar se a senha está correta ou não e uma mensagem com essa informação é impresso no monitor serial.

ativar_led_RGB_com_potenciometro_e_botoes.ino

Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenciômetro e três botões. Os três botões são utilizados para selecionar qual cor do LED RGB será controlada (vermelho, verde e azul) e a leitura analógica do potenciômetro é usada para dosar a intensidade da cor do terminal.

ativar_servo_motor_com_botoes.ino

Neste exemplo, utilizamos dois botões para controlar a posição de um servo motor. Os botões são associados no código às direções esquerda e direita e alteram o ângulo do servo fazendo com que seja possível movimentá-lo nas duas direções. Foi usada a biblioteca Servo.

contagem_display_7seg.ino

Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos.

controle_led_com_ldr.ino

Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura é mapeada e o valor resultante é usado para acender um LED. O exemplo também conta com um botão que controla um estado interno do programa e seleciona se a leitura será impressa como é lida ou com lógica complementar.

do_re_mi_fa.ino

Neste exemplo uma música é tocada pelo buzzer em conjunto com a ativação -do LED RGB endereçável. O programa utiliza a biblioteca Adafruit_NeoPixel para controlar o LED.

genio.ino

Neste exemplo, implementamos o jogo Simon, também conhecido como gênio. Neste jogo, quatro LEDs são ativados em uma sequência gerada aleatóriamente e essa sequência é apresentada para o jogador, que deve repetir a sequência na ordem correta pressionando os botões correspondentes. Quando os LEDs acendem, um som correspondente é tocado no buzzer.

leitura_do_teclado.ino

Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e -a imprimimos essa tecla no no monitor serial. A biblioteca Keypad é utilizada para fazer o mapeamento do teclado.

leitura_sensores_externos.ino

Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets -para conectores externos da placa e imprimimos os valores lidos no monitor serial.

leitura_sensores_grove.ino

Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial.

leitura_umidade_temperatura_oled.ino

Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, são utilizadas as bibliotecas DTH e U8glib.

Obs.

Este projeto foi desenvolvido como parte do Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

- - +

laboratorioFW_ARDUNO

Nesta biblioteca é possível encontrar o mapeamento entre a pinagem da placa Arduino Uno e a codificação dos pinos de ativação da placa Laboratório de Sistemas Embarcados e IoT segundo o projeto do adaptador para Arduino projeto para a placa. A biblioteca também é possível encontrar exemplos de utilização dos periféricos disponíveis na placa.

+

Clique aqui para acessar o repositório da biblioteca no Github.

+

Como instalar a biblioteca

+
    +
  1. Faça o donwload da biblioteca em formato zip clicando em Code e depois em Download ZIP
  2. +
+

+
    +
  1. Abra a IDE do Arduino
  2. +
  3. Vá em Sketch > Include Library > Add .ZIP Library
  4. +
+

+
    +
  1. Selecione o arquivo zip baixado e clique em ok
  2. +
  3. Opcional: Procure pelos exemplos da biblioteca em File > Examples
  4. +
+

Como usar a biblioteca

+

Para utilizar a biblioteca basta incluí-la no seu arquivo de código com a linha #include<laboratorioFW_ARDUNO.h>. Depois disso, você pode utilizar os códigos dos pinos de ativação na placa dentro do seu código.

+

Importante : Os algorismos do código do pino de ativação são separados por um caractere de _, ou seja o pino de ativação C0 pode ser acessado no código através do código C_0 e assim por diante.

+

Exemplo de utilização:

+
#include <laborarotioFW_ARDUNO.h>
+
+#define led A_1
+
+void setup(){
+    pinMode(led,OUTPUT);
+}
+
+void loop{
+    digitalWrite(led,HIGH);
+    delay(1000);
+    digitalWrite(led,LOW);
+    delay(1000);
+}
+
+

Exemplos implementados:

+

testes_completos.ino

+

Neste exemplo temos todos os códigos necessários para os testes de todos os periféricos disponíveis na placa. Este código é um código para a validação da placa e não para ser utilizado no cotidiano.

+

adivinhe_a_senha.ino

+

Neste exemplo implementamos um sistema de verificação de senha utilizando o teclado matricial e a biblioteca Keypad para fazer o mapeamento +do teclado. Neste sistema, o usuário deve inserir uma senha de cinco caracteres usando o teclado matricial da placa. Quando o usuário indica que terminou de digitar a senha apertando um o botão correspondente ao caractere * ou #, essa sequência é comparada com uma senha previamente definida no código. Um led é aceso para indicar se a senha está correta ou não e uma mensagem com essa informação é impresso no monitor serial.

+

ativar_led_RGB_com_potenciometro_e_botoes.ino

+

Neste exemplo objetiva controlamos o brilho do LED RGB utilizando um potenciômetro e três botões. Os três botões são utilizados para selecionar qual cor do LED RGB será controlada (vermelho, verde e azul) e a leitura analógica do potenciômetro é usada para dosar a intensidade da cor do terminal.

+

ativar_servo_motor_com_botoes.ino

+

Neste exemplo, utilizamos dois botões para controlar a posição de um servo motor. Os botões são associados no código às direções esquerda e direita e alteram o ângulo do servo fazendo com que seja possível movimentá-lo nas duas direções. Foi usada a biblioteca Servo.

+

contagem_display_7seg.ino

+

Neste exemplo, utilizamos o display de sete segmentos para exibir uma contagem de 0 a 9 segundos.

+

controle_led_com_ldr.ino

+

Neste exemplo, fazemos a leitura do sensor LDR e mapeamos esta leitura é mapeada e o valor resultante é usado para acender um LED. O exemplo também conta com um botão que controla um estado interno do programa e seleciona se a leitura será impressa como é lida ou com lógica complementar.

+

do_re_mi_fa.ino

+

Neste exemplo uma música é tocada pelo buzzer em conjunto com a ativação +do LED RGB endereçável. O programa utiliza a biblioteca Adafruit_NeoPixel para controlar o LED.

+

genio.ino

+

Neste exemplo, implementamos o jogo Simon, também conhecido como gênio. Neste jogo, quatro LEDs são ativados em uma sequência gerada aleatóriamente e essa sequência é apresentada para o jogador, que deve repetir a sequência na ordem correta pressionando os botões correspondentes. Quando os LEDs acendem, um som correspondente é tocado no buzzer.

+

leitura_do_teclado.ino

+

Neste exemplo fazemos a leitura de uma tecla pressionada no teclado matricial e +a imprimimos essa tecla no no monitor serial. A biblioteca Keypad é utilizada para fazer o mapeamento do teclado.

+

leitura_sensores_externos.ino

+

Neste exemplo fazemos a leitura dos sensores externos conectados nos sockets +para conectores externos da placa e imprimimos os valores lidos no monitor serial.

+

leitura_sensores_grove.ino

+

Neste exemplo fazemos a leitura dos sensores externos conectados nos conectores Grove da placa e imprimimos os valores lidos no monitor serial.

+

leitura_umidade_temperatura_oled.ino

+

Neste exemplo fazemos a leitura do sensor de temperatura e umidade escrevemos os dados lidos no display OLED. Para isso, são utilizadas as bibliotecas DTH e U8glib.

+

Este projeto foi desenvolvido como parte do Trabalho de Conclusão de Curso de Letícia Pegoraro Garcez.

\ No newline at end of file diff --git a/en/docs/badge/badge/index.html b/en/docs/badge/badge/index.html index b9c381b62..c73fd4642 100755 --- a/en/docs/badge/badge/index.html +++ b/en/docs/badge/badge/index.html @@ -1,17 +1,26 @@ - + - -Badge - Aprenda a soldar | Franzininho - - - + +Badge - Aprenda a soldar | Franzininho + + + -
-

Badge - Aprenda a soldar

O que é Badge?

O badge Aprenda Soldar foi desenvolvido para oficinas de solda onde os participantes dão os primeiros passos com o uso de ferramentas de soldagem e adquirem conhecimento dos componentes eletrônicos e circuito da placa.

Com poucos componentes, esse badge permite que qualquer pessoa aprenda a soldar e se divertir.

montagem Badge

O circuito escolhido para esse badge, foi o clássico multivibrador astável com transistores. Ao final da soldagem os olhos do robô piscam, e placa está pronta para usar como colar ou chaveiro.

Durante a oficina os participantes conseguem aprender a usar o ferro de solda e como é o processo de soldagem de componentes PTH em uma placa.

As oficinas com o Badge Aprenda Soldar são direcionadas para adultos e adolescentes com interesse em aprender sobre soldagem eletrônica. A oficina dura em média 1 h, dependendo da quantidade de pessoas no grupo.

Premiação: Contest badge Love na categoria "The Badge of Hope"

Esse projeto foi um dos vencedores do Contest badge Love na categoria The Badge of Hope, promovido pelo Hackster  O projeto é open hardware e foi publicado sob a licença Creative Commons Attribution Share Alike 4.0 International

Contrate uma oficina ou adquira kit do Badge Aprenda Soldar

Para adquirir placas e kits do Badge Aprenda Soldar ou oficinas, entre em contato conosco: contato@franzininho.com.br

Fotos de oficinas com Badge Aprenda Soldar

montagem Badge

- - +

Badge - Aprenda a soldar

O que é Badge?

+

O badge Aprenda Soldar foi desenvolvido para oficinas de solda onde os participantes dão os primeiros passos com o uso de ferramentas de soldagem e adquirem conhecimento dos componentes eletrônicos e circuito da placa.

+

Com poucos componentes, esse badge permite que qualquer pessoa aprenda a soldar e se divertir.

+

montagem Badge

+

O circuito escolhido para esse badge, foi o clássico multivibrador astável com transistores. Ao final da soldagem os olhos do robô piscam, e placa está pronta para usar como colar ou chaveiro.

+

Durante a oficina os participantes conseguem aprender a usar o ferro de solda e como é o processo de soldagem de componentes PTH em uma placa.

+

As oficinas com o Badge Aprenda Soldar são direcionadas para adultos e adolescentes com interesse em aprender sobre soldagem eletrônica. A oficina dura em média 1 h, dependendo da quantidade de pessoas no grupo.

+ +

Esse projeto foi um dos vencedores do Contest badge Love na categoria The Badge of Hope, promovido pelo Hackster  O projeto é open hardware e foi publicado sob a licença Creative Commons Attribution Share Alike 4.0 International

+

Contrate uma oficina ou adquira kit do Badge Aprenda Soldar

+

Para adquirir placas e kits do Badge Aprenda Soldar ou oficinas, entre em contato conosco: contato@franzininho.com.br

+

Fotos de oficinas com Badge Aprenda Soldar

+

montagem Badge

\ No newline at end of file diff --git a/en/docs/franzininho-c0/arduino-identificacao-pinos/index.html b/en/docs/franzininho-c0/arduino-identificacao-pinos/index.html index 1a06b4826..4cab7cd95 100755 --- a/en/docs/franzininho-c0/arduino-identificacao-pinos/index.html +++ b/en/docs/franzininho-c0/arduino-identificacao-pinos/index.html @@ -1,17 +1,56 @@ - + - -Identificação dos Pinos no Ambiente Arduino | Franzininho - - - + +Identificação dos Pinos no Ambiente Arduino | Franzininho + + + -
-

Identificação dos Pinos no Ambiente Arduino

Na documentação da ST, os pinos dos microcontroladores STM32 são identificados por nomes como PA1, PA2 e PB6 (como pode ser visto no esquema da Franzininho C0). Descrevemos aqui as identificações usadas no Ambiente Arduino.

Estas informações se referem à opção de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma opção de placa específica para a Franzininho C0, usando opções default mais adequadas para os pinos.

A figura abaixo resume as identificações:

Identificação dos Pinos no Ambiente Arduino

O pacote STM32duino aceita as identificações do tipo PA1 como "nomes" dos pinos, porém esta não é a identificação usual do ambiente Arduino.

Entrada e Saída Digital

Para entrada e saída digital, o ambiente Arduino utiliza números para identificar os pinos. A figura no início da página mostra os números correspondentes aos pinos da Franzininho.

As funções digitais aceitam também os nomes usados para entrada analógica (ver o próximo item).

Entrada Analógica (ADC)

Para entrada analógica, o ambiente Arduino utiliza nomes do tipo An. A figura no início da página mostra os nomes correspondentes aos pinos da Franzininho.

Interface Serial Assíncrona (UART)

O microcontrolador na Franzininho C0 possui duas interfaces seriais assíncronas (uart1 e uart2). Ele possui uma certa flexibilidade na conexão destas interfaces aos pinos.

No ambiente Arduino, as interfaces seriais assíncronas são acessadas através de objetos com nomes como Serial, Serial1 e Serial2.

Na Franzininho C0, os pinos PA9 e PA10 estão conectados ao conversor serial USB CH340, para fornecer comunicação serial com um micro através de um cabo USB.

A opção "Generic STM32C0" define um objeto Serial associado à interface uart1, usando os pinos PA0 e PA1 (como indicado na figura no alto da página). Para usar o objeto Serial para comunicar via USB é preciso reconfigurar os pinos através dos métodos setRx e setTx antes de chamar o método begin (veja também o exemplo "Hello World"):

  Serial.setRx(PA_10_R);
Serial.setTx(PA_9_R);
Serial.begin(115200);

Obs.: Os nomes especiais para os pinos PA9 e PA10 se devem ao fato destes pinos compartilharem os mesmos pinos físicos que PA11 e PA12.

Para usar a uart2 é preciso declarar um objeto Serial2 e especificar os pinos que serão usados:

HardwareSerial Serial2(uart2);

Serial2.setRx(PA3);
Serial2.setTx(PA2);
Serial2.begin(115200);

SPI

A figura no alto da página indica os pinos utilizados por padrão para a interface spi, acessada através do objeto SPI que é parte da bioblioteca padrão SPI.

Veja detalhes no exemplo SPI.

I^2^C

No ambiente Arduino, a interface i^2^c é acessada através do objeto Wire, que é parte da bioblioteca padrão SPI.

A opção "Generic STM32C0" usa como padrão os pinos PA9 e PA10 para a interface i2c. Como estes pinos estão ligados na Franzininho C0 aos conversor serial USB, é preciso reconfigurar os pinos através dos métodos setSCL e setSDA antes de chamar o método begin (veja o exemplo "I2C").

Opções Válidas para os Pinos

UART1

SinalOpções
TXPA0, PA9, PB6, PC14
RXPA1, PA8, PA10, PB7

UART2

SinalOpções
TXPA2, PA4, PA8, PA14
RXPA3, PA5, PA13, PA14

SPI

SinalOpções
MISOPA6, PA1, PB6
MOSIPA2, PA7, PA12, PB6
SCKPA1, PA5, PB6
SSPA4, PA8, PA14

I2C

SinalOpções
SCLPA9, PB6, PB7
SDAPC14, PA10, PB7
AutorDaniel Quadros
Data:19/10/2023
- - +

Identificação dos Pinos no Ambiente Arduino

Na documentação da ST, os pinos dos microcontroladores STM32 são identificados por nomes como PA1, PA2 e PB6 (como pode ser visto no esquema da Franzininho C0). Descrevemos aqui as identificações usadas no Ambiente Arduino.

+

Estas informações se referem à opção de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma opção de placa específica para a Franzininho C0, usando opções default mais adequadas para os pinos.

+

A figura abaixo resume as identificações:

+

Identificação dos Pinos no Ambiente Arduino

+

O pacote STM32duino aceita as identificações do tipo PA1 como "nomes" dos pinos, porém esta não é a identificação usual do ambiente Arduino.

+

Entrada e Saída Digital

+

Para entrada e saída digital, o ambiente Arduino utiliza números para identificar os pinos. A figura no início da página mostra os números correspondentes aos pinos da Franzininho.

+

As funções digitais aceitam também os nomes usados para entrada analógica (ver o próximo item).

+

Entrada Analógica (ADC)

+

Para entrada analógica, o ambiente Arduino utiliza nomes do tipo An. A figura no início da página mostra os nomes correspondentes aos pinos da Franzininho.

+

Interface Serial Assíncrona (UART)

+

O microcontrolador na Franzininho C0 possui duas interfaces seriais assíncronas (uart1 e uart2). Ele possui uma certa flexibilidade na conexão destas interfaces aos pinos.

+

No ambiente Arduino, as interfaces seriais assíncronas são acessadas através de objetos com nomes como Serial, Serial1 e Serial2.

+

Na Franzininho C0, os pinos PA9 e PA10 estão conectados ao conversor serial USB CH340, para fornecer comunicação serial com um micro através de um cabo USB.

+

A opção "Generic STM32C0" define um objeto Serial associado à interface uart1, usando os pinos PA0 e PA1 (como indicado na figura no alto da página). Para usar o objeto Serial para comunicar via USB é preciso reconfigurar os pinos através dos métodos setRx e setTx antes de chamar o método begin (veja também o exemplo "Hello World"):

+
  Serial.setRx(PA_10_R);
+  Serial.setTx(PA_9_R);
+  Serial.begin(115200);
+
+

Obs.: Os nomes especiais para os pinos PA9 e PA10 se devem ao fato destes pinos compartilharem os mesmos pinos físicos que PA11 e PA12.

+

Para usar a uart2 é preciso declarar um objeto Serial2 e especificar os pinos que serão usados:

+
HardwareSerial Serial2(uart2);
+
+  Serial2.setRx(PA3);
+  Serial2.setTx(PA2);
+  Serial2.begin(115200);
+
+

SPI

+

A figura no alto da página indica os pinos utilizados por padrão para a interface spi, acessada através do objeto SPI que é parte da bioblioteca padrão SPI.

+

Veja detalhes no exemplo SPI.

+

I^2^C

+

No ambiente Arduino, a interface i^2^c é acessada através do objeto Wire, que é parte da bioblioteca padrão SPI.

+

A opção "Generic STM32C0" usa como padrão os pinos PA9 e PA10 para a interface i2c. Como estes pinos estão ligados na Franzininho C0 aos conversor serial USB, é preciso reconfigurar os pinos através dos métodos setSCL e setSDA antes de chamar o método begin (veja o exemplo "I2C").

+

Opções Válidas para os Pinos

+

UART1

+
SinalOpções
TXPA0, PA9, PB6, PC14
RXPA1, PA8, PA10, PB7
+

UART2

+
SinalOpções
TXPA2, PA4, PA8, PA14
RXPA3, PA5, PA13, PA14
+

SPI

+
SinalOpções
MISOPA6, PA1, PB6
MOSIPA2, PA7, PA12, PB6
SCKPA1, PA5, PB6
SSPA4, PA8, PA14
+

I2C

+
SinalOpções
SCLPA9, PB6, PB7
SDAPC14, PA10, PB7
+
AutorDaniel Quadros
Data:19/10/2023
\ No newline at end of file diff --git a/en/docs/franzininho-c0/arduino-primeiros-passos/index.html b/en/docs/franzininho-c0/arduino-primeiros-passos/index.html index 75d9ac16d..92a6f5fc5 100755 --- a/en/docs/franzininho-c0/arduino-primeiros-passos/index.html +++ b/en/docs/franzininho-c0/arduino-primeiros-passos/index.html @@ -1,17 +1,67 @@ - + - -Primeiros passos com Arduino | Franzininho - - - + +Primeiros passos com Arduino | Franzininho + + + -
-

Primeiros passos com Arduino

Os passos a seguir mostram a instalação e configuração da IDE Arduino para usar a opção de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma opção de placa específica para a Franzininho C0, eliminando a necessidade de algumas configurações e usando opções default mais adequadas para os pinos.

  1. Instale a IDE do Arduino (se você não tiver instalada) de https://www.arduino.cc/en/software. As telas apresentadas foram capturadas com a versão 2.2.1 para Windows.

  2. Instale o STM32CubeProgrammer de https://www.st.com/en/development-tools/stm32cubeprog.html. Pode ser necessáro fazer um pequeno cadastro para baixar o instalador.

  3. Execute a IDE do Arduino. Entre em File, Preferences, Additional Boards Manager URLs e acrescente https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json:

Aditional Boards Manager URLs

  1. Conecte a Franzininho C0 ao micro através de um cabo USB. A placa será reconhecida como uma serial pelo sistema operacional.

  2. Selecione "Select other board and port..." no dropbox na tarja superior da IDE.

Seleção da placa, parte 1

  1. Selecione a placa "Generic STM32C0 series" e a porta correspondente à placa (se tiver dúvida, veja adiante como identificar a serial).

Seleção da placa, parte 2

  1. Use o menu Tools para acertar a configuração da placa:
    • Board part number: "Generic C011F6Px"
    • Upload method: "STM32CubeProgrammer (Serial)"
    • U(S)ART support: "Enabled (generic 'Serial')"

Configuração da placa

Gravação de Programas pela USB

A configuração acima fará a carga de programas através da USB. Para isto a placa precisa estar com o bootloader em execução, o que é feito através destes passos:

  1. Aperte o botão BOOT e o mantenha apertado
  2. Aperte e solte o botão RST
  3. Solte o botão BOOT

A placa precisa estar executando o bootloader antes da IDE tentar carregar o programa, caso contrário será apresentado um erro. O ideal é fazer o procedimento acima antes de apertar o botão da IDE para compilar e carregar o programa.

Identificação da Porta Serial

A Franzininho C0 utiliza um integrado CH340E para emular uma porta serial através de uma conexão USB. As versões mais recentes de Windows e Linux reconhecem esta serial sem a necessidade de instalação de um driver específico.

Windows

O Windows associa um nome do tipo COMnn para os dispositivos seriais. De um modo geral, o Windows tenta usar sempre o mesmo nome para cada dispositivo (identificando o dispositivo pelo VendorID, ProductID e Serial Number informados pela USB).

O Gerenciador de Dispositivos mostra os dispositivos seriais embaixo de "Portas (COM e LPT)"

Portas Seriais no Windows

A Franzininho C0 se apresenta como "USB-SERIAL CH340". Na dúvida, desconecte a placa e verifique quem sai da lista. Na figura acima, a Franzininho C0 está em COM24.

Linux

TBD

AutorDaniel Quadros
Data:15/10/2023
- - +

Primeiros passos com Arduino

Os passos a seguir mostram a instalação e configuração da IDE Arduino para usar a opção de placa "Generic STM32C0" do pacote STM32duino. Futuramente esperamos ter uma opção de placa específica para a Franzininho C0, eliminando a necessidade de algumas configurações e usando opções default mais adequadas para os pinos.

+
    +
  1. +

    Instale a IDE do Arduino (se você não tiver instalada) de https://www.arduino.cc/en/software. As telas apresentadas foram capturadas com a versão 2.2.1 para Windows.

    +
  2. +
  3. +

    Instale o STM32CubeProgrammer de https://www.st.com/en/development-tools/stm32cubeprog.html. Pode ser necessáro fazer um pequeno cadastro para baixar o instalador.

    +
  4. +
  5. +

    Execute a IDE do Arduino. Entre em File, Preferences, Additional Boards Manager URLs e acrescente https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json:

    +
  6. +
+

Aditional Boards Manager URLs

+
    +
  1. +

    Conecte a Franzininho C0 ao micro através de um cabo USB. A placa será reconhecida como uma serial pelo sistema operacional.

    +
  2. +
  3. +

    Selecione "Select other board and port..." no dropbox na tarja superior da IDE.

    +
  4. +
+

Seleção da placa, parte 1

+
    +
  1. Selecione a placa "Generic STM32C0 series" e a porta correspondente à placa (se tiver dúvida, veja adiante como identificar a serial).
  2. +
+

Seleção da placa, parte 2

+
    +
  1. Use o menu Tools para acertar a configuração da placa: +
      +
    • Board part number: "Generic C011F6Px"
    • +
    • Upload method: "STM32CubeProgrammer (Serial)"
    • +
    • U(S)ART support: "Enabled (generic 'Serial')"
    • +
    +
  2. +
+

Configuração da placa

+

Gravação de Programas pela USB

+

A configuração acima fará a carga de programas através da USB. Para isto a placa precisa estar com o bootloader em execução, o que é feito através destes passos:

+
    +
  1. Aperte o botão BOOT e o mantenha apertado
  2. +
  3. Aperte e solte o botão RST
  4. +
  5. Solte o botão BOOT
  6. +
+

A placa precisa estar executando o bootloader antes da IDE tentar carregar o programa, caso contrário será apresentado um erro. O ideal é fazer o procedimento acima antes de apertar o botão da IDE para compilar e carregar o programa.

+

Identificação da Porta Serial

+

A Franzininho C0 utiliza um integrado CH340E para emular uma porta serial através de uma conexão USB. As versões mais recentes de Windows e Linux reconhecem esta serial sem a necessidade de instalação de um driver específico.

+

Windows

+

O Windows associa um nome do tipo COMnn para os dispositivos seriais. De um modo geral, o Windows tenta usar sempre o mesmo nome para cada dispositivo (identificando o dispositivo pelo VendorID, ProductID e Serial Number informados pela USB).

+

O Gerenciador de Dispositivos mostra os dispositivos seriais embaixo de "Portas (COM e LPT)"

+

Portas Seriais no Windows

+

A Franzininho C0 se apresenta como "USB-SERIAL CH340". Na dúvida, desconecte a placa e verifique quem sai da lista. Na figura acima, a Franzininho C0 está em COM24.

+

Linux

+

TBD

+
AutorDaniel Quadros
Data:15/10/2023
\ No newline at end of file diff --git a/en/docs/franzininho-c0/arduino-todolist/index.html b/en/docs/franzininho-c0/arduino-todolist/index.html index 29fe69c58..199859ba7 100755 --- a/en/docs/franzininho-c0/arduino-todolist/index.html +++ b/en/docs/franzininho-c0/arduino-todolist/index.html @@ -1,17 +1,25 @@ - + - -Arduino IDE TODO List | Franzininho - - - + +Arduino IDE TODO List | Franzininho + + + -
-

Arduino IDE TODO List

A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programação da placa Franzininho C0 na Arduino IDE usando o pacote STM32duino.

Fique a vontade para colaborar na construção dos materiais e códigos. Outros exemplos podem ser adicionados. Converse na comunidade.

ExemplosStatusNota
Primeiros passos🔵Ferramentas necessárias, Métodos de gravação, Repositório com os exemplos
01 - Blinky🔵Piscando o LED usando delay
02 - Blinky Int🔵Piscando o LED usando interrupção de timer
03 - Hello World🔵Enviando mensagem pela serial (UART)
04 - E/S Digital🔵Leitura de um botão e acionamento de um LED
05 - Debounce🔵Leitura de um botão com realização de debounce
06 - ADC🔵Leitura da posição de um potenciômetro
07 - PWM🔴
08 - Dimmer🔵Controlando o brilho do LED por um potenciômetro (ADC e PWM)
09 - Servo🔵Controlando a posição de um servo motor por um potenciômetro (ADC e PWM)
10 - I2C (LCD)🔵Conexão de display LCD alfanumérico via I2C
11 - I2C (OLED)🔵Conexão de display OLED via I2C
12 - SPI (OLED)🔵Conexão de display OLED via SPI
Interrupção externa🔴
Timers - PWM🔴
Timers - Temporizador🔴
DMA🔴
🔴

Legenda:

  • 🟢 Feito
  • 🔵 Para revisar
  • 🟡 Em progresso
  • 🔴 Ainda não implementado

Repositório de Exemplos

GitHub - Franzininho/franzininho-c0-exemplos-arduino: Exemplos de código para Franzininho C0 na Arduino IDE

- - +

Arduino IDE TODO List

A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programação da placa Franzininho C0 na Arduino IDE usando o pacote STM32duino.

+

Fique a vontade para colaborar na construção dos materiais e códigos. Outros exemplos podem ser adicionados. Converse na comunidade.

+
ExemplosStatusNota
Primeiros passos🔵Ferramentas necessárias, Métodos de gravação, Repositório com os exemplos
01 - Blinky🔵Piscando o LED usando delay
02 - Blinky Int🔵Piscando o LED usando interrupção de timer
03 - Hello World🔵Enviando mensagem pela serial (UART)
04 - E/S Digital🔵Leitura de um botão e acionamento de um LED
05 - Debounce🔵Leitura de um botão com realização de debounce
06 - ADC🔵Leitura da posição de um potenciômetro
07 - PWM🔴
08 - Dimmer🔵Controlando o brilho do LED por um potenciômetro (ADC e PWM)
09 - Servo🔵Controlando a posição de um servo motor por um potenciômetro (ADC e PWM)
10 - I2C (LCD)🔵Conexão de display LCD alfanumérico via I2C
11 - I2C (OLED)🔵Conexão de display OLED via I2C
12 - SPI (OLED)🔵Conexão de display OLED via SPI
Interrupção externa🔴
Timers - PWM🔴
Timers - Temporizador🔴
DMA🔴
🔴
+

Legenda:

+
    +
  • 🟢 Feito
  • +
  • 🔵 Para revisar
  • +
  • 🟡 Em progresso
  • +
  • 🔴 Ainda não implementado
  • +
+

Repositório de Exemplos

+

GitHub - Franzininho/franzininho-c0-exemplos-arduino: Exemplos de código para Franzininho C0 na Arduino IDE

\ No newline at end of file diff --git a/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide/index.html b/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide/index.html index f09621458..7b4369194 100755 --- a/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide/index.html +++ b/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeide/index.html @@ -1,17 +1,43 @@ - + - -Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos | Franzininho - - - + +Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos | Franzininho + + + -
-

Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos

Confira abaixo os passos para você configurar um novo projeto para a Franzininho C0 para o STM32CubeIDE:

  1. Clonar o repositório (https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide.git) em uma pasta local e chegar até o caminho que contém os exemplos:

  1. Iniciar o STM32CubeIDE e selecionar a pasta do passo 1. como local do workspace, então selecionar "Launch":

  1. Note que será criada a pasta "/.metadata/" no local, que contém as configurações do workspace:

  1. Após inicialização do CubeIDE, selecionar "Import project":

  1. Selecionar o mesmo caminho do passo 1.:

  1. Note que os exemplos serão listados e pode-se selecionar quais serão importados. Para avançar, selecionar "Finish"

  1. Finalmente, todos os exemplos estão carregados na IDE e prontos para compilação/execução:

AutorAndré Araújo
Data:17/07/2023
- - +

Configurando os exemplos da Franzininho C0 no STM2CubeIDE em 7 passos

Confira abaixo os passos para você configurar um novo projeto para a Franzininho C0 para o STM32CubeIDE:

+
    +
  1. Clonar o repositório (https://github.com/Franzininho/franzininho-c0-exemplos-stm32cubeide.git) em uma pasta local e chegar até o caminho que contém os exemplos:
  2. +
+

+
    +
  1. Iniciar o STM32CubeIDE e selecionar a pasta do passo 1. como local do workspace, então selecionar "Launch":
  2. +
+

+
    +
  1. Note que será criada a pasta "/.metadata/" no local, que contém as configurações do workspace:
  2. +
+

+
    +
  1. Após inicialização do CubeIDE, selecionar "Import project":
  2. +
+

+
    +
  1. Selecionar o mesmo caminho do passo 1.:
  2. +
+

+
    +
  1. Note que os exemplos serão listados e pode-se selecionar quais serão importados. Para avançar, selecionar "Finish"
  2. +
+

+
    +
  1. Finalmente, todos os exemplos estão carregados na IDE e prontos para compilação/execução:
  2. +
+

+
AutorAndré Araújo
Data:17/07/2023
\ No newline at end of file diff --git a/en/docs/franzininho-c0/franzininho-c0-board/index.html b/en/docs/franzininho-c0/franzininho-c0-board/index.html index 0c74da1ca..f9de4af7b 100755 --- a/en/docs/franzininho-c0/franzininho-c0-board/index.html +++ b/en/docs/franzininho-c0/franzininho-c0-board/index.html @@ -1,17 +1,67 @@ - + - -Placa Franzininho C0 | Franzininho - - - + +Placa Franzininho C0 | Franzininho + + + -
-

Placa Franzininho C0

A Franzininho C0 é uma placa de desenvolvimento de hardware de código aberto, baseada no Microcontrolador STM32C0, um Arm Cortex M0+ da STMicroelectronics. Desenvolvida no Brasil, sua finalidade principal é servir como uma ferramenta de ensino/aprendizagem e prototipagem para estudantes, makers, entusiastas e desenvolvedores brasileiros.

Com um form factor pequeno e compatível com protoboard, ela pode ser programada através das ferramentas da ST e também da Arduino IDE.

Neste texto, apresentaremos todos os recursos disponíveis e detalhes do seu hardware.

Franzininho C0

Recursos de Hardware

  • Microcontrolador:
    • STM32C011F6P6 - ARM Cortex M0+ @48MHz
    • Memória Flash: 32 kB
    • Memória RAM: 6 kB
  • ADC: 12 bits (13 canais + 2 internos)
  • Comunicações: 1x I2C, 1 x SPI, 2x USART
  • RTC
  • Timer/Contador: 8
  • GPIO: 16 - Compatível com protoboard
  • Conversor USB/Serial
  • Conector Micro USB
  • Tensão de operação: 3,3V
  • Tensão de alimentação:
    • 5V via conector USB
    • 5V e GND via pinos
  • Botão de USO Geral: 1
  • LEDS de uso Geral: 2
  • Botões: 1xReset, 1 x Boot
  • Compatível com protoboard
  • Dimensão: 38,1 mm x 20.32 mm
  • Licença: CERN Open Hardware Licence version 2

Pinout

Franzininho C0 Pinout

Mapeamento de recursos na placa

  • Botão: PA8
  • LED1: PB6
  • LED2: PB7
  • RX_PA10
  • TX_PA11

Pinout do microcontrolador

Franzininho C0 Pinout stm32c11f6p6

Esquemático

Schematic_Franzininho C0_2023-07-26.png

Licença

A placa Franzininho C0 é um projeto de hardware de código aberto, licenciado sob a CERN Open Hardware Licence version 2. Essa licença é utilizada em projetos de hardware que são desenvolvidos e disponibilizados como código aberto, permitindo que outras pessoas possam reproduzir e criar derivações do projeto. Para garantir a conformidade com a licença, é importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar derivações do projeto. Dessa forma, podem garantir que estão seguindo as diretrizes corretas e respeitando a licença escolhida para o projeto.

Repositório: Franzininho C0 - EasyEDA open source hardware lab

Fotos

Franzininho C0 Frente e verso

Franzininho C0 Frente e verso

- - +

Placa Franzininho C0

A Franzininho C0 é uma placa de desenvolvimento de hardware de código aberto, baseada no Microcontrolador STM32C0, um Arm Cortex M0+ da STMicroelectronics. Desenvolvida no Brasil, sua finalidade principal é servir como uma ferramenta de ensino/aprendizagem e prototipagem para estudantes, makers, entusiastas e desenvolvedores brasileiros.

+

Com um form factor pequeno e compatível com protoboard, ela pode ser programada através das ferramentas da ST e também da Arduino IDE.

+

Neste texto, apresentaremos todos os recursos disponíveis e detalhes do seu hardware.

+

Franzininho C0

+

Recursos de Hardware

+
    +
  • Microcontrolador: +
      +
    • STM32C011F6P6 - ARM Cortex M0+ @48MHz
    • +
    • Memória Flash: 32 kB
    • +
    • Memória RAM: 6 kB
    • +
    +
  • +
  • ADC: 12 bits (13 canais + 2 internos)
  • +
  • Comunicações: 1x I2C, 1 x SPI, 2x USART
  • +
  • RTC
  • +
  • Timer/Contador: 8
  • +
  • GPIO: 16 - Compatível com protoboard
  • +
  • Conversor USB/Serial
  • +
  • Conector Micro USB
  • +
  • Tensão de operação: 3,3V
  • +
  • Tensão de alimentação: +
      +
    • 5V via conector USB
    • +
    • 5V e GND via pinos
    • +
    +
  • +
  • Botão de USO Geral: 1
  • +
  • LEDS de uso Geral: 2
  • +
  • Botões: 1xReset, 1 x Boot
  • +
  • Compatível com protoboard
  • +
  • Dimensão: 38,1 mm x 20.32 mm
  • +
  • Licença: CERN Open Hardware Licence version 2
  • +
+

Pinout

+

Franzininho C0 Pinout

+

Mapeamento de recursos na placa

+
    +
  • Botão: PA8
  • +
  • LED1: PB6
  • +
  • LED2: PB7
  • +
  • RX_PA10
  • +
  • TX_PA11
  • +
+

Pinout do microcontrolador

+

Franzininho C0 Pinout stm32c11f6p6

+

Esquemático

+

Schematic_Franzininho C0_2023-07-26.png

+

Licença

+

A placa Franzininho C0 é um projeto de hardware de código aberto, licenciado sob a CERN Open Hardware Licence version 2. Essa licença é utilizada em projetos de hardware que são desenvolvidos e disponibilizados como código aberto, permitindo que outras pessoas possam reproduzir e criar derivações do projeto. Para garantir a conformidade com a licença, é importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar derivações do projeto. Dessa forma, podem garantir que estão seguindo as diretrizes corretas e respeitando a licença escolhida para o projeto.

+

Repositório: Franzininho C0 - EasyEDA open source hardware lab

+

Fotos

+

Franzininho C0 Frente e verso

+

Franzininho C0 Frente e verso

\ No newline at end of file diff --git a/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist/index.html b/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist/index.html index 3584ef1ec..938db296d 100755 --- a/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist/index.html +++ b/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolist/index.html @@ -1,17 +1,24 @@ - + - -STM32Cube IDE TODO List | Franzininho - - - + +STM32Cube IDE TODO List | Franzininho + + + -
-

STM32Cube IDE TODO List

A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programação da placa Franzininho C0 na STM32CubeIDE usando a HAL da ST.

Fique a vontade para colaborar na construção dos materiais e códigos. Outros exemplos podem ser adicionados. Converse na comunidade.

ExemplosStatusDescriçãoDocumentacao
00 - Exemplo Template🔴Projeto template com as
01 - Exemplo Blinky🔴Piscando o LED usando delay
02 - Exemplo Blinky Int🔴Piscando o LED usando interrupção de timer
03 - Exemplo Hello World🔴Transmitindo mensagem serial pela UART
04 - Exemplo input🔴Leitura de um botão e acionamento de um LED
05 - Exemplo debounce🔴Leitura de um botão com realização de debounce
06 - Exemplo ADC🔴Conversão A/D com DMA e base de tempo por timer
07 - Exemplo PWM🔴Geração de PWM
08 - Exemplo Dimmer🔴Controlando o brilho do LED por um potenciômetro (ADC e PWM)
09 - Exemplo Servo Motor🔴Controlando a posição de um servo motor por um potenciômetro (ADC e PWM)
10 - Exemplo I2C🔴Controlando algum periférico via I2C (por exemplo, memória externa, sensor de temperatura, RTC, display, ...)
11 - Exemplo SPI🔴Controlando aglum periférico via SPI (por exemplo: memória externa, cartão SD, display, ...)
12 - Exemplo ...🔴

Legenda:

  • 🟢 Feito
  • 🟡 Em progresso
  • 🔴 Ainda não implementado

Repositório de Exemplos

GitHub - Franzininho/franzininho-c0-exemplos-stm32cubeide: Exemplos de código para Franzininho C0 na STM32CubeIDE

- - +

STM32Cube IDE TODO List

A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a programação da placa Franzininho C0 na STM32CubeIDE usando a HAL da ST.

+

Fique a vontade para colaborar na construção dos materiais e códigos. Outros exemplos podem ser adicionados. Converse na comunidade.

+
ExemplosStatusDescriçãoDocumentacao
00 - Exemplo Template🔴Projeto template com as
01 - Exemplo Blinky🔴Piscando o LED usando delay
02 - Exemplo Blinky Int🔴Piscando o LED usando interrupção de timer
03 - Exemplo Hello World🔴Transmitindo mensagem serial pela UART
04 - Exemplo input🔴Leitura de um botão e acionamento de um LED
05 - Exemplo debounce🔴Leitura de um botão com realização de debounce
06 - Exemplo ADC🔴Conversão A/D com DMA e base de tempo por timer
07 - Exemplo PWM🔴Geração de PWM
08 - Exemplo Dimmer🔴Controlando o brilho do LED por um potenciômetro (ADC e PWM)
09 - Exemplo Servo Motor🔴Controlando a posição de um servo motor por um potenciômetro (ADC e PWM)
10 - Exemplo I2C🔴Controlando algum periférico via I2C (por exemplo, memória externa, sensor de temperatura, RTC, display, ...)
11 - Exemplo SPI🔴Controlando aglum periférico via SPI (por exemplo: memória externa, cartão SD, display, ...)
12 - Exemplo ...🔴
+

Legenda:

+
    +
  • 🟢 Feito
  • +
  • 🟡 Em progresso
  • +
  • 🔴 Ainda não implementado
  • +
+

Repositório de Exemplos

+

GitHub - Franzininho/franzininho-c0-exemplos-stm32cubeide: Exemplos de código para Franzininho C0 na STM32CubeIDE

\ No newline at end of file diff --git a/en/docs/franzininho-diy/bootloader/index.html b/en/docs/franzininho-diy/bootloader/index.html index f7fdd5667..440cde590 100755 --- a/en/docs/franzininho-diy/bootloader/index.html +++ b/en/docs/franzininho-diy/bootloader/index.html @@ -1,17 +1,50 @@ - + - -Bootloader | Franzininho - - - + +Bootloader | Franzininho + + + -
-

Bootloader

Para que a placa Franzininho possa ser gravada através da USB é necessário gravar o bootloader. O bootloader é um pequeno programa que roda toda vez que a placa é iniciada e verifica se tem um comando de atualização de firmware. Caso tenha esse comando, ele recebe o binário através da USB (no caso da Franzininho DIY) e grava na memória flash.

Na Franzininho DIY usamos o Micronucleus que é um bootloader pequeno e bem flexível desenvolvido para a família ATtiny usando o projeto VUSB como base.

A seguir vamos exibir como você pode gravar o ATtiny85 para usar o Micronucleus.

Materiais Necessários

  • Arduino UNO ou similar
  • Fios (Jumpers)
  • Protoboard

Circuito

Você precisará montar o seguinte circuito:

Circuito para Gravação

Faça uma dupla checagem antes de ligar o Arduino Uno no computador.

Com o circuito Montado, vamos para a gravação do bootloader.

Gravando o FranzBoot no Arduino UNO

Para facilitar a gravação do bootloader vamos usar o FranzBoot, um programa para gravação do bootloader micronucleus para Franzininho DIY usando Arduino UNO.

Baixe o projeto no seu computador: Download.

Descompacte a pasta e abra o arquivo FranzBoot.ino

Se ainda não tem a IDE Arduino no seu computador, baixe-a no site do Arduino

Será aberta a IDE do Arduino:

Circuito para Gravação

Antes de gravar na placa precisamos configurar a IDE para a placa Arduino UNO. Em Placa selecione Arduino UNO e em porta a porta Serial criada para o seu Arduino UNO:

Circuito para Gravação

Pronto, agora pressione Upload(Carregar) e aguarde a gravação no Arduino UNO:

Circuito para Gravação

Agora abra o terminal serial:

Circuito para Gravação

Verifique se a velocidade está configurada em 9600.

Agora digite G e pressione enviar. Após a gravação deve ser apresentada a seguinte mensagem no terminal:

Circuito para Gravação

ERRO

Se receber uma mensagem de erro, verifique as conexões elétricas e envie novamente o comando G.

Pronto, o ATtiny85 está pronto para ser encaixado na sua Franzininho DIY. Retire-o com cuidado da matriz de contatos e encaixe-o corretamente na Franzininho DIY, conforme imagem abaixo

Placa Franzininho DIY

Próximos passos

Agora que já tem a sua placa Franzininho DIY preparada você pode partir para a programação.

Gravar muitos chips

Caso você necessite gravar muitos chips você pode gravar sem usar o PC. Verifique a documentação do FranzBoot para mais detalhes.

- - +

Bootloader

Para que a placa Franzininho possa ser gravada através da USB é necessário gravar o bootloader. O bootloader é um pequeno programa que roda toda vez que a placa é iniciada e verifica se tem um comando de atualização de firmware. Caso tenha esse comando, ele recebe o binário através da USB (no caso da Franzininho DIY) e grava na memória flash.

+

Na Franzininho DIY usamos o Micronucleus que é um bootloader pequeno e bem flexível desenvolvido para a família ATtiny usando o projeto VUSB como base.

+

A seguir vamos exibir como você pode gravar o ATtiny85 para usar o Micronucleus.

+

Materiais Necessários

+
    +
  • Arduino UNO ou similar
  • +
  • Fios (Jumpers)
  • +
  • Protoboard
  • +
+

Circuito

+

Você precisará montar o seguinte circuito:

+

Circuito para Gravação

+ +

Com o circuito Montado, vamos para a gravação do bootloader.

+

Gravando o FranzBoot no Arduino UNO

+

Para facilitar a gravação do bootloader vamos usar o FranzBoot, um programa para gravação do bootloader micronucleus para Franzininho DIY usando Arduino UNO.

+

Baixe o projeto no seu computador: Download.

+

Descompacte a pasta e abra o arquivo FranzBoot.ino

+Se ainda não tem a IDE Arduino no seu computador, baixe-a no site do Arduino +

Será aberta a IDE do Arduino:

+

Circuito para Gravação

+

Antes de gravar na placa precisamos configurar a IDE para a placa Arduino UNO. Em Placa selecione Arduino UNO e em porta a porta Serial criada para o seu Arduino UNO:

+

Circuito para Gravação

+

Pronto, agora pressione Upload(Carregar) e aguarde a gravação no Arduino UNO:

+

Circuito para Gravação

+

Agora abra o terminal serial:

+

Circuito para Gravação

+ +

Agora digite G e pressione enviar. Após a gravação deve ser apresentada a seguinte mensagem no terminal:

+

Circuito para Gravação

+

Se receber uma mensagem de erro, verifique as conexões elétricas e envie novamente o comando G.

+

Pronto, o ATtiny85 está pronto para ser encaixado na sua Franzininho DIY. Retire-o com cuidado da matriz de contatos e encaixe-o corretamente na Franzininho DIY, conforme imagem abaixo

+

Placa Franzininho DIY

+

Próximos passos

+

Agora que já tem a sua placa Franzininho DIY preparada você pode partir para a programação.

+

Gravar muitos chips

+

Caso você necessite gravar muitos chips você pode gravar sem usar o PC. Verifique a documentação do FranzBoot para mais detalhes.

\ No newline at end of file diff --git a/en/docs/franzininho-diy/brilho-led/index.html b/en/docs/franzininho-diy/brilho-led/index.html index c7af28332..98569b99a 100755 --- a/en/docs/franzininho-diy/brilho-led/index.html +++ b/en/docs/franzininho-diy/brilho-led/index.html @@ -1,17 +1,62 @@ - + - -Controle brilho de LED | Franzininho - - - + +Controle brilho de LED | Franzininho + + + -
-

Controle brilho de LED

Esse exemplo exibe como controlar a intensidade de um LED usando a função analogWrite() na Franzininho DIY.

Materiais

  • Placa Franzininho;
  • Protoboard;
  • LED 3mm;
  • Resistor 330;
  • Jumpers macho/fêmea;

Circuito

Na protoboard você pode montar o circuito para acionamento do LED da seguinte forma:

Circuito

Sketch

/*
Franzininho
Exemplo: Controle Brilho de LED - PWM
Esse exemplo exibe como controlar a intensidade de brilho de um LED usando PWM
*/

const int LED = 1; //pino para o LED
int i = 0; //utilizaremos essa variável para contagem auxiliar

void setup() {
pinMode(LED,OUTPUT); //configura o pino do LED como uma saída
}

void loop() {
//faz um loop de 0 a 255 (acende gradualmente)
for (i = 0; i<255; i++) {
analogWrite (LED, i); // define o brilho do LED
delay (10); //espere 10ms, pois analogwrite é um instantâneo e não veríamos nenhuma alteração
}

delay(1000);

//faz um loop de 255 a 1 (apaga gradualmente)
for (i = 255; i > 0; i--) {
analogWrite(LED, i); //define o brilho do LED
delay(10); //aguarda 10ms
}

delay(1000);
}
Saidas PWM

Verifique no pinout da Franzininho DIY quais os pinos possuem função de saída PWM

Simulação

Video de Funcionamento

- - +

Esse exemplo exibe como controlar a intensidade de um LED usando a função analogWrite() na Franzininho DIY.

+

Materiais

+
    +
  • Placa Franzininho;
  • +
  • Protoboard;
  • +
  • LED 3mm;
  • +
  • Resistor 330;
  • +
  • Jumpers macho/fêmea;
  • +
+

Circuito

+

Na protoboard você pode montar o circuito para acionamento do LED da seguinte forma:

+

Circuito

+

Sketch

+
/*
+  Franzininho
+  Exemplo: Controle Brilho de LED - PWM
+  Esse exemplo exibe como controlar a intensidade de brilho de um LED usando PWM
+*/
+
+const int LED = 1; //pino para o LED
+int i = 0;        //utilizaremos essa variável para contagem auxiliar
+
+void setup() {
+ pinMode(LED,OUTPUT); //configura o pino do LED como uma saída
+}
+
+void loop() {
+  //faz um loop de 0 a 255 (acende gradualmente)
+  for (i = 0; i<255; i++) {
+    analogWrite (LED, i);  // define o brilho do LED
+    delay (10); //espere 10ms, pois analogwrite é um instantâneo e não veríamos nenhuma alteração
+  }
+
+  delay(1000);
+
+  //faz um loop de 255 a 1 (apaga gradualmente)
+  for (i = 255; i > 0; i--) {  
+   analogWrite(LED, i); //define o brilho do LED
+   delay(10);          //aguarda 10ms
+  }
+
+  delay(1000);
+}
+
+

Verifique no pinout da Franzininho DIY quais os pinos possuem função de saída PWM

+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/en/docs/franzininho-diy/drivers-micronucleus/index.html b/en/docs/franzininho-diy/drivers-micronucleus/index.html index f87baeab4..daa6e3539 100755 --- a/en/docs/franzininho-diy/drivers-micronucleus/index.html +++ b/en/docs/franzininho-diy/drivers-micronucleus/index.html @@ -1,17 +1,37 @@ - + - -Instalação de drivers e configuração da USB | Franzininho - - - + +Instalação de drivers e configuração da USB | Franzininho + + + -
-

Instalação de drivers e configuração da USB

Até aqui você possui a placa pronta!

Agora precisamos instalar os drivers necessário para que a USB da Franzininho DIY possa receber os códigos através da Arduino IDE.

A seguir são apresentados os passos para correta configuração, conforme o sistema operacional usado.

Windows

Faça o download do driver no seguinte link: https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip

Descompacte.

instalando drive

Abra a pasta!

Dentro dela terá vários arquivos, vá até as opções abaixo:

Para Windows 32 bits execute o DPinst.exe e se tiver usando o Windows 64 bits execute o DPinst64.exe

instalando drive

Ao selecionar um deles dê dois cliques e irá aparecer uma janela, pressione sim, então aparecerá outra janela e clique em avançar.

instalando drive

Aguarde a instalação e clique em concluir!

Maravilha, agora veremos se realmente o driver foi instalado.

Plugue seu Franzininho na USB do seu computador e abra o gerenciador de dispositivo.

instalando drive

Se aparecer libusb ou digispark, maravilha foi instalado com sucesso!

Não esqueça de plugar a Franzininho em seu computador, pois se não. Não irá aparecer!

instalando drive

Fonte: http://digistump.com/wiki/digispark/tutorials/connecting

Linux

Faça o seguinte procedimento

Linux Troubleshooting: http://digistump.com/wiki/digispark/tutorials/linuxtroubleshooting

- - +

Instalação de drivers e configuração da USB

Até aqui você possui a placa pronta!

+

Agora precisamos instalar os drivers necessário para que a USB da Franzininho DIY possa receber os códigos através da Arduino IDE.

+

A seguir são apresentados os passos para correta configuração, conforme o sistema operacional usado.

+

Windows

+

Faça o download do driver no seguinte link: https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip

+

Descompacte.

+

instalando drive

+

Abra a pasta!

+

Dentro dela terá vários arquivos, vá até as opções abaixo:

+

Para Windows 32 bits execute o DPinst.exe e se tiver usando o Windows 64 bits execute o DPinst64.exe

+

instalando drive

+

Ao selecionar um deles dê dois cliques e irá aparecer uma janela, pressione sim, então aparecerá outra janela e clique em avançar.

+

instalando drive

+

Aguarde a instalação e clique em concluir!

+

Maravilha, agora veremos se realmente o driver foi instalado.

+

Plugue seu Franzininho na USB do seu computador e abra o gerenciador de dispositivo.

+

instalando drive

+

Se aparecer libusb ou digispark, maravilha foi instalado com sucesso!

+ +

instalando drive

+

Fonte: http://digistump.com/wiki/digispark/tutorials/connecting

+

Linux

+

Faça o seguinte procedimento

+

Linux Troubleshooting: http://digistump.com/wiki/digispark/tutorials/linuxtroubleshooting

\ No newline at end of file diff --git a/en/docs/franzininho-diy/elefante-colorido/index.html b/en/docs/franzininho-diy/elefante-colorido/index.html index 9bfb8c90d..11c62e0a5 100755 --- a/en/docs/franzininho-diy/elefante-colorido/index.html +++ b/en/docs/franzininho-diy/elefante-colorido/index.html @@ -1,17 +1,139 @@ - + - -Elefante Colorido! Que cor? | Franzininho - - - + +Elefante Colorido! Que cor? | Franzininho + + + -
-

Elefante Colorido! Que cor?

Esse exemplo exibe como usar o LED RGB para fazer uma aplicação didática. Podemos adaptar essa brincadeira com eletrônica, confira abaixo!

Elefante colorido! Que cor?

Montagem Elefante Colorido

“Elefante colorido”. É uma brincadeira característica da Região Sudeste, da cidade de São Paulo. As regras são as seguintes: uma criança é escolhida para comandar. Em roda, ela diz aos colegas: “Elefante colorido!” O grupo pergunta: “Que cor ele é?” O comandante escolhe uma cor e as crianças correm para tocar em algo que tenha a cor que o comandante escolheu.

Com essa brincadeira podemos trabalhar diversas habilidades, como o desenvolvimento da concentração, atenção, coordenação motora, reconhecimento das cores, discriminação visual e auditiva.

Podemos adaptar essa brincadeira com eletrônica?

Montagem Elefante Colorido

Sim e o mais bacana de tudo que ela está alinhada a BNCC.

Para Educação infantil trabalhamos com o campos de Experiência:

  • Traços, sons, cores e formas
  • Escuta, fala, pensamento e imaginação

Para o Fundamental 1 (1° ao 5 ano):

  • (EF15AR02) Explorar e reconhecer elementos constitutivos das artes visuais (ponto, linha, forma, cor, espaço, movimento etc.).
  • (EF15AR26) Explorar diferentes tecnologias e recursos digitais (multimeios, animações, jogos eletrônicos, gravações em áudio e vídeo, fotografia, softwares etc.) nos processos de criação artística.

Montagem Elefante Colorido

Materiais

  • 1 Placa Franzininho;
  • 1 Protoboard;
  • 1 LED RGB;
  • 3 Resistor 1k;
  • 3 Jumpers macho/fêmea

Circuito

Na protoboard você pode montar da seguinte forma:

tip

Você pode montar ele fora da protoboard depois!

Código

Modo simples: utilizando apenas 3 cores: vermelho, verde e azul.

//RGB com a Franzininho DIY

const int red = 0;
const int green = 1;
const int blue = 2;

void setup() {
// configura os pinos de cada cor como saída:
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
}

void loop() {
// aciona o LED na cor vermelha:
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
digitalWrite(blue, LOW);
delay(5000); // aguarda 5000ms

// aciona o LED na cor verde:
digitalWrite(red, LOW);
digitalWrite(green, HIGH);
digitalWrite(blue, LOW);
delay(5000); // aguarda 5000ms

// aciona o LED na cor azul:
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(blue, HIGH);
delay(5000); // aguarda 5000ms
}

Modo avançado: Variando as cores, confira!

const int red = 0; 
const int green = 1;
const int blue = 2;

// variáveis para salvar a intensidade de cada cor
int valor_r = 255; // vermelho (red)
int valor_g = 0; // verde (green)
int valor_b = 0; // blue (blue)

void setup() {
// configura os pinos de cada cor como saída:
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);

// inicializa LED em cor vemelha e de máxima intensidade
analogWrite(red, valor_r);
analogWrite(green, valor_g);
analogWrite(blue, valor_b);
}

void loop() {
// aumenta a intensidade do LED verde
for (valor_g = 0; valor_g < 255; valor_g=valor_g+5){
analogWrite(green, valor_g);
delay(50); // aguarda 50ms
}

// diminui a intensidade do LED vermelho
for (valor_r = 255; valor_r > 0; valor_r=valor_r-5){
analogWrite(red, valor_r);
delay(50); // aguarda 50ms
}

// aumenta a intensidade do LED azul
for (valor_b = 0; valor_b < 255; valor_b=valor_b+5){
analogWrite(blue, valor_b);
delay(50); // aguarda 50ms
}

// diminui a intensidade do LED verde
for (valor_g = 255; valor_g > 0; valor_g=valor_g-5){
analogWrite(green, valor_g);
delay(50);
}

// aumenta a intensidade do LED vermelho
for (valor_r = 0; valor_r < 255; valor_r=valor_r+5){
analogWrite(red, valor_r);
delay(50); // aguarda 50ms
}
}

Simulação (modo avançado)

Video de Funcionamento

- - +

Elefante Colorido! Que cor?

Esse exemplo exibe como usar o LED RGB para fazer uma aplicação didática. Podemos adaptar essa brincadeira com eletrônica, confira abaixo!

+

Elefante colorido! Que cor?

+

Montagem Elefante Colorido

+

“Elefante colorido”. É uma brincadeira característica da Região Sudeste, da cidade de São Paulo. As regras são as seguintes: uma criança é escolhida para comandar. Em roda, ela diz aos colegas: “Elefante colorido!” O grupo pergunta: “Que cor ele é?” O comandante escolhe uma cor e as crianças correm para tocar em algo que tenha a cor que o comandante escolheu.

+
+

Com essa brincadeira podemos trabalhar diversas habilidades, como o desenvolvimento da concentração, atenção, coordenação motora, reconhecimento das cores, discriminação visual e auditiva.

+
+

Podemos adaptar essa brincadeira com eletrônica?

+

Montagem Elefante Colorido

+

Sim e o mais bacana de tudo que ela está alinhada a BNCC.

+

Para Educação infantil trabalhamos com o campos de Experiência:

+
    +
  • Traços, sons, cores e formas
  • +
  • Escuta, fala, pensamento e imaginação
  • +
+

Para o Fundamental 1 (1° ao 5 ano):

+
    +
  • (EF15AR02) Explorar e reconhecer elementos constitutivos das artes visuais (ponto, linha, forma, cor, espaço, movimento etc.).
  • +
  • (EF15AR26) Explorar diferentes tecnologias e recursos digitais (multimeios, animações, jogos eletrônicos, gravações em áudio e vídeo, fotografia, softwares etc.) nos processos de criação artística.
  • +
+

Montagem Elefante Colorido

+

Materiais

+
    +
  • 1 Placa Franzininho;
  • +
  • 1 Protoboard;
  • +
  • 1 LED RGB;
  • +
  • 3 Resistor 1k;
  • +
  • 3 Jumpers macho/fêmea
  • +
+

Circuito

+

Na protoboard você pode montar da seguinte forma:

+

Você pode montar ele fora da protoboard depois!

+

Código

+

Modo simples: utilizando apenas 3 cores: vermelho, verde e azul.

+
//RGB com a Franzininho DIY
+
+const int red = 0; 
+const int green = 1; 
+const int blue = 2; 
+
+void setup() {
+  // configura os pinos de cada cor como saída:
+  pinMode(red, OUTPUT);
+  pinMode(green, OUTPUT);
+  pinMode(blue, OUTPUT);
+}
+
+void loop() {
+  // aciona o LED na cor vermelha:
+  digitalWrite(red, HIGH);
+  digitalWrite(green, LOW);
+  digitalWrite(blue, LOW);
+  delay(5000); // aguarda 5000ms 
+  
+  // aciona o LED na cor verde:
+  digitalWrite(red, LOW);
+  digitalWrite(green, HIGH);
+  digitalWrite(blue, LOW);
+  delay(5000); // aguarda 5000ms 
+
+  // aciona o LED na cor azul:
+  digitalWrite(red, LOW);
+  digitalWrite(green, LOW);
+  digitalWrite(blue, HIGH);
+  delay(5000); // aguarda 5000ms 
+}
+
+

Modo avançado: Variando as cores, confira!

+
const int red = 0; 
+const int green = 1; 
+const int blue = 2;
+
+// variáveis para salvar a intensidade de cada cor
+int valor_r = 255; // vermelho (red)
+int valor_g = 0; // verde (green)
+int valor_b = 0; // blue (blue)
+
+void setup() {
+  // configura os pinos de cada cor como saída:
+  pinMode(red, OUTPUT);
+  pinMode(green, OUTPUT);
+  pinMode(blue, OUTPUT);
+  
+  // inicializa LED em cor vemelha  e de máxima intensidade
+  analogWrite(red, valor_r);
+  analogWrite(green, valor_g);
+  analogWrite(blue, valor_b);
+}
+
+void loop() {
+  // aumenta a intensidade do LED verde
+  for (valor_g = 0; valor_g < 255; valor_g=valor_g+5){
+    analogWrite(green, valor_g);
+    delay(50); // aguarda 50ms 
+  }
+  
+  // diminui a intensidade do LED vermelho
+  for (valor_r = 255; valor_r > 0; valor_r=valor_r-5){
+    analogWrite(red, valor_r);
+    delay(50); // aguarda 50ms 
+  }
+  
+  // aumenta a intensidade do LED azul
+  for (valor_b = 0; valor_b < 255; valor_b=valor_b+5){
+    analogWrite(blue, valor_b);
+    delay(50); // aguarda 50ms 
+  }
+  
+  // diminui a intensidade do LED verde
+  for (valor_g = 255; valor_g > 0; valor_g=valor_g-5){
+    analogWrite(green, valor_g);
+    delay(50);
+  }
+  
+  // aumenta a intensidade do LED vermelho
+  for (valor_r = 0; valor_r < 255; valor_r=valor_r+5){
+    analogWrite(red, valor_r);
+    delay(50); // aguarda 50ms 
+  }
+}
+
+
+

Simulação (modo avançado)

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/en/docs/franzininho-diy/entradas-analogicas/index.html b/en/docs/franzininho-diy/entradas-analogicas/index.html index 54cde2b22..b7ed573f8 100755 --- a/en/docs/franzininho-diy/entradas-analogicas/index.html +++ b/en/docs/franzininho-diy/entradas-analogicas/index.html @@ -1,18 +1,50 @@ - + - -Entradas Analógicas | Franzininho - - - + +Entradas Analógicas | Franzininho + + + -
-

Entradas Analógicas

Na Franzininho DIY alguns pinos que podem ser usados como entradas analógicas:

Pinagem Franzininho DIY

danger

Devido as limitações de hardware da Franzininho DIY recomendamos apenas o uso da Entrada A1 para sinais analógicos. -As demais entradas (A0,A2,A3) devem ser usadas com cautela e analisando o circuito para ver o circuito presente no pino não atrapalhará no sinal analógico.

Função

Para a leitura de um sinal analógico no pino que possui essa função, não é necessário configurar o pino como entrada analógica. Isso é feito na função de leitura:

int analogRead(pino)

Lê o valor presente em um pino configurado como entrada analógica. Internamente o Arduino possui um conversor A/D de 10 bits. Dessa forma o valor retornado por esta função estará na faixa de 0 a 1023 conforme o valor presente no pino.

Sintaxe

analogRead(pino);

Parâmetros

pino: número do pino configurado como entrada analógica (0,1,2,3 na Franzininho)

Retorno

int (0 a 1023)

Exemplo

Vamos ler o valor de um potenciômetro ligado ao pino P2(A1) e acionar o LED quando a leitura atingir um valor definido:

Circuito

const byte LED = 1; //pino do LED
const byte POT = A1; //pino do Potenciômetro

void setup() {
pinMode(LED,OUTPUT);
}

void loop() {

int valor = analogRead(POT); // lê o valor do potenciômetro

if(valor> 511){ //se valor maior que 511
digitalWrite(LED,HIGH); //liga LED
}else{ //se não
digitalWrite(LED,LOW); //apaga LED
}
}

Simulação

- - +

Entradas Analógicas

Na Franzininho DIY alguns pinos que podem ser usados como entradas analógicas:

+

Pinagem Franzininho DIY

+

Devido as limitações de hardware da Franzininho DIY recomendamos apenas o uso da Entrada A1 para sinais analógicos. +As demais entradas (A0,A2,A3) devem ser usadas com cautela e analisando o circuito para ver o circuito presente no pino não atrapalhará no sinal analógico.

+

Função

+

Para a leitura de um sinal analógico no pino que possui essa função, não é necessário configurar o pino como entrada analógica. Isso é feito na função de leitura:

+

int analogRead(pino)

+

Lê o valor presente em um pino configurado como entrada analógica. Internamente o Arduino possui um conversor A/D de 10 bits. Dessa forma o valor retornado por esta função estará na faixa de 0 a 1023 conforme o valor presente no pino.

+

Sintaxe

+

analogRead(pino);

+

Parâmetros

+

pino: número do pino configurado como entrada analógica (0,1,2,3 na Franzininho)

+

Retorno

+

int (0 a 1023)

+

Exemplo

+

Vamos ler o valor de um potenciômetro ligado ao pino P2(A1) e acionar o LED quando a leitura atingir um valor definido:

+

Circuito

+
const byte LED = 1; //pino do LED
+const byte POT = A1; //pino do Potenciômetro
+
+void setup() {
+  pinMode(LED,OUTPUT);
+}
+
+void loop() {
+
+  int valor = analogRead(POT); // lê o valor do potenciômetro
+
+  if(valor> 511){              //se valor maior que 511
+    digitalWrite(LED,HIGH);    //liga LED
+  }else{                       //se não
+    digitalWrite(LED,LOW);     //apaga LED
+  }
+}
+
+

Simulação

+
\ No newline at end of file diff --git a/en/docs/franzininho-diy/entradas-saidas-digitais/index.html b/en/docs/franzininho-diy/entradas-saidas-digitais/index.html index cd273ff21..f629dbb47 100755 --- a/en/docs/franzininho-diy/entradas-saidas-digitais/index.html +++ b/en/docs/franzininho-diy/entradas-saidas-digitais/index.html @@ -1,17 +1,113 @@ - + - -Entradas e Saídas Digitais | Franzininho - - - + +Entradas e Saídas Digitais | Franzininho + + + -
-

Entradas e Saídas Digitais

Na Franzininho DIY temos 6 pinos que podem ser usados como entradas ou saídas digitais( P0 a P5), conforme pinout:

Pinagem Franzininho DIY

danger

Verificar limitações de uso dos pinos

Configuração do modo de funcionamento do pino

Os pinos do ATtiny85 podem ser configurados como entradas ou saídas, além de outras funções. Para configuração como entrada ou saída digital vamos usar a seguinte função:

pinMode()

Configura um pino específico para ser entrada ou saída digital.

Sintaxe:

pinMode(pino, modo);

Parâmetros:

  • pino: corresponde ao pino que você irá usar, no caso da Franzininho podemos usar pinos de 0 a 5.
  • modo: deve-se colocar o modo no qual se deseja configurar o pino:
    • INPUT = Entrada: Esse pino receberá sinais vindos de um circuito externo
    • OUTPUT = Saída: Esse pino enviará sinais para ativar um circuito externo
    • INPUT_PULLUP = Entrada digital com resistor de pull-up (ligado ao VCC) interno habilitado

Exemplo de uso

Vamos configurar o pino P0 para leitura de uma tecla, portanto será uma entrada digital. Também vamos configurar o pino P1 para acionamento do LED, ou seja, uma saída digital:

int tecla = 0;   //pino da tecla
int LED = 1; //pino do LED

void setup() {
pinMode(tecla, INPUT); //configura pino da tecla como entrada
pinMode(LED, OUTPUT); //configura pino do LED como saída
}

void loop() {


}

Geralmente as configurações são realizadas dentro da função setup(). Na função loop() são realizadas as tarefas durante o funcionamento da placa, como veremos mais à frente.

Escrita em um pino digital

Os pinos digitais configurados como saídas digitais podem assumir dois valores, conforme a escrita no código. Os valores podem ser HIGH ou LOW, que se traduzem em 5V ou 0V no pino da Franzininho. Para escrita digital vamos usar a seguinte função:

digitalWrite()

Coloca um nível lógico alto (HIGH, 5V) ou baixo (LOW, 0V) em um pino configurado como saída digital.

Sintaxe

digitalWrite(pino, valor)

Parâmetros

pino: Número correspondente ao pino.

valor: HIGH ou LOW.

Exemplo de uso

Inverte o estado do LED (P1) em intervalos de 1 segundo:

const int LED = 1; //pino digital conectado ao LED

void setup(){
pinMode(LED,OUTPUT); //pino digital de saída
}

void loop(){
digitalWrite(LED,HIGH); //acende o led da placa
delay(1000); //aguarda um segundo
digitalWrite(LED,LOW); //apaga o led da placa
delay(1000); //aguarda um segundo
}

Simulação

A função delay(ms) espera um tempo em milissegundos. No caso do exemplo acima, 1000 ms = 1 segundo;

Leitura de um pino digital

Um pino digital pode assumir dois valores, HIGH e LOW, conforme o nível de tensão presente no mesmo: 5V ou 0V. Podemos usar o pino configurado como entrada digital para ler estados de sensores, que por sua vez representam estados de situações, por exemplo:

  • botão solto ou pressionado;
  • porta aberta ou fechada
  • presença de objeto ou não presença de objeto

Para leitura de uma entrada digital usamos a seguinte função:

digitalRead()

Lê o valor presente em um pino digital. Este valor pode ser HIGH ou LOW.

Sintaxe

digitalRead(pino);

Parâmetros:

pino: número do pino que se deseja ler.

Retorno

HIGH ou LOW.

Exemplo de uso

Vamos ler o estado da tecla ligada ao pino P2 e acionar o LED ligado a pino P1 conforme o seu estado:

Circuito

Código

const int LED = 1; //pino para o LED
const int BOTAO = 2; //pino para o botão

int val = 0; // val será utilizado para armazenar o estado do pino

void setup(){
pinMode(LED,OUTPUT); //o LED é uma saída
pinMode(BOTAO,INPUT); //o BOTAO é uma entrada
}

void loop (){
val = digitalRead(BOTAO); // lê e armazena o valor de entrada
digitalWrite(LED, val); //aciona LED conforme valor lido do botão
}

Simulação

- - +

Entradas e Saídas Digitais

Na Franzininho DIY temos 6 pinos que podem ser usados como entradas ou saídas digitais( P0 a P5), conforme pinout:

+

Pinagem Franzininho DIY

+

Verificar limitações de uso dos pinos

+

Configuração do modo de funcionamento do pino

+

Os pinos do ATtiny85 podem ser configurados como entradas ou saídas, além de outras funções. Para configuração como entrada ou saída digital vamos usar a seguinte função:

+

pinMode()

+

Configura um pino específico para ser entrada ou saída digital.

+

Sintaxe:

+

pinMode(pino, modo);

+

Parâmetros:

+
    +
  • pino: corresponde ao pino que você irá usar, no caso da Franzininho podemos usar pinos de 0 a 5.
  • +
  • modo: deve-se colocar o modo no qual se deseja configurar o pino: +
      +
    • INPUT = Entrada: Esse pino receberá sinais vindos de um circuito externo
    • +
    • OUTPUT = Saída: Esse pino enviará sinais para ativar um circuito externo
    • +
    • INPUT_PULLUP = Entrada digital com resistor de pull-up (ligado ao VCC) interno habilitado
    • +
    +
  • +
+

Exemplo de uso

+

Vamos configurar o pino P0 para leitura de uma tecla, portanto será uma entrada digital. Também vamos configurar o pino P1 para acionamento do LED, ou seja, uma saída digital:

+
int tecla = 0;   //pino da tecla
+int LED = 1;     //pino do LED
+
+void setup() {
+  pinMode(tecla, INPUT); //configura pino da tecla como entrada
+  pinMode(LED, OUTPUT);  //configura pino do LED como saída
+}
+
+void loop() {
+
+
+}
+
+

Geralmente as configurações são realizadas dentro da função setup(). Na função loop() são realizadas as tarefas durante o funcionamento da placa, como veremos mais à frente.

+

Escrita em um pino digital

+

Os pinos digitais configurados como saídas digitais podem assumir dois valores, conforme a escrita no código. Os valores podem ser HIGH ou LOW, que se traduzem em 5V ou 0V no pino da Franzininho. Para escrita digital vamos usar a seguinte função:

+

digitalWrite()

+

Coloca um nível lógico alto (HIGH, 5V) ou baixo (LOW, 0V) em um pino configurado como saída digital.

+

Sintaxe

+

digitalWrite(pino, valor)

+

Parâmetros

+

pino: Número correspondente ao pino.

+

valor: HIGH ou LOW.

+

Exemplo de uso

+

Inverte o estado do LED (P1) em intervalos de 1 segundo:

+
const int LED = 1; //pino digital conectado ao LED
+
+void setup(){
+  pinMode(LED,OUTPUT); //pino digital de saída
+}
+
+void loop(){
+  digitalWrite(LED,HIGH);   //acende o led da placa
+  delay(1000);             //aguarda um segundo
+  digitalWrite(LED,LOW);  //apaga o led da placa
+  delay(1000);           //aguarda um segundo
+}
+
+

Simulação

+ +

A função delay(ms) espera um tempo em milissegundos. No caso do exemplo acima, 1000 ms = 1 segundo;

+

Leitura de um pino digital

+

Um pino digital pode assumir dois valores, HIGH e LOW, conforme o nível de tensão presente no mesmo: 5V ou 0V. Podemos usar o pino configurado como entrada digital para ler estados de sensores, que por sua vez representam estados de situações, por exemplo:

+
    +
  • botão solto ou pressionado;
  • +
  • porta aberta ou fechada
  • +
  • presença de objeto ou não presença de objeto
  • +
+

Para leitura de uma entrada digital usamos a seguinte função:

+

digitalRead()

+

Lê o valor presente em um pino digital. Este valor pode ser HIGH ou LOW.

+

Sintaxe

+

digitalRead(pino);

+

Parâmetros:

+

pino: número do pino que se deseja ler.

+

Retorno

+

HIGH ou LOW.

+

Exemplo de uso

+

Vamos ler o estado da tecla ligada ao pino P2 e acionar o LED ligado a pino P1 conforme o seu estado:

+

Circuito

+

Código

+
const int LED = 1; //pino para o LED
+const int BOTAO = 2; //pino para o botão
+
+int val = 0; // val será utilizado para armazenar o estado do pino
+
+void setup(){
+  pinMode(LED,OUTPUT); //o LED é uma saída
+  pinMode(BOTAO,INPUT); //o BOTAO é uma entrada
+}
+
+void loop (){
+  val = digitalRead(BOTAO); // lê e armazena o valor de entrada
+  digitalWrite(LED, val); //aciona LED conforme valor lido do botão
+}
+
+

Simulação

+
\ No newline at end of file diff --git a/en/docs/franzininho-diy/exemplos-avr-libc/buzzer/index.html b/en/docs/franzininho-diy/exemplos-avr-libc/buzzer/index.html index 0cd045588..8015adf7d 100755 --- a/en/docs/franzininho-diy/exemplos-avr-libc/buzzer/index.html +++ b/en/docs/franzininho-diy/exemplos-avr-libc/buzzer/index.html @@ -1,17 +1,140 @@ - + - -Instrumento musical com Buzzer | Franzininho - - - + +Instrumento musical com Buzzer | Franzininho + + + -
-

Instrumento musical com Buzzer

Nesse exemplo vamos criar um programa que lê uma partitura e toca a música escrita através de um buzzer na Franzininho DIY. Vamos aprender como se usar um buzzer passivo para gerar cada nota musical com ajuda do timer0.

Boa prática!

Recursos necessários

  • Franzininho DIY (com Micronucleos)
  • 1 buzzer passivo 5v
  • 4 jumpers macho-fêmea
  • 1 jumper macho-macho

Fazendo música com o Buzzer

Nesse exemplo vamos através de uma lookup table vamos ensinar quais as frequências de cada nota, e com o uso do timer vamos variar a entrada no buzzer na frequência da nota que queremos. Com a ajuda de outra tabela, vamos dar para o Franzininho a sequência das notas que queremos que ele toque, podendo assim, tocar a música que quisermos.

O buzzer passivo funciona como um pequeno alto falante, enquanto tivermos a tensão nominal na entrada positiva e o terra na entrada negativa o imã dentro dele vai para frente. Por outro lado, quando tivermos terra em ambas ele volta para a posição inicial. Se variarmos entre esses dois estados na frequência de uma nota musical geraremos uma onda sonora com o tom dela.

As notas musicais ocidentais em uma escala maior são Do Do# Re Re# Mi Fa Fa# Sol Sol# Lá Lá# Si voltando para Do depois. Cada nota está a uma distância de meio tom da outra e a 6 tons de sua próxima oitava, que é a mesma nota porém mais fina.

Olhando pela frequência temos que partindo de da terceira oitava, 440Hz, cada uma oitava acima tem o dobro da frequência e cada oitava a baixo tem metade da frequência. Já para subir cada semitom, basta multiplicar por 2^(1/12), ou para x semitons, 2^(x/12).

Código

/***********************************************
* @file main.c
* @author Eduardo Dueñas / Daniel Quadros
* @brief Exemplo tocar musicas usando buzzer
* @version 1.0
* @date 21/04/2021
*
* última modificação: 15/05/2021
**********************************************/
#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 16500000L

#define setBit(valor,bit) (valor |= (1 << bit))
#define clearBit(valor,bit) (valor &= ~(1 << bit))
#define toogleBit(valor,bit) (valor ^= (1 << bit))
#define testBit(valor,bit) (valor & (1 << bit))


#define NumNotas 32
#define CONT(freq) ((F_CPU*10L)/(256L*freq))

enum notas {Pausa, Do, DoS, Re, ReS, Mi, Fa, FaS, Sol, SolS, La, LaS, Si, DoM, DoSM, ReM};
long f[16] = {
255L, (long)CONT(5232L), (long)CONT(5543L), (long)CONT(5873L), (long)CONT(6222L), (long)CONT(6592L), (long)CONT(6984L),
(long)CONT(7400L), (long)CONT(7840L), (long)CONT(8306L), (long)CONT(8800L), (long)CONT(9323L), (long)CONT(9877L),
(long)CONT(10465L), (long)CONT(11087L), (long)CONT(11746L)
};

// {0xFF,123, 116, 110, 104, 98, 92, 87, 82, 78, 73, 69, 65, 62, 58, 54}
// Lookup table com os valores de cada nota a ser colocado na flag do timer

char Partitura[NumNotas] = {
Re, Mi, Mi, Re, Sol, FaS, FaS, FaS, Re, Mi, Mi, Re, La, Sol, Sol, Sol,
Re, ReM, ReM, Si, Sol, FaS, FaS, Mi, DoM, Si, Si, Sol, La, Sol, Sol, Sol
}; // Partitura da música
volatile char cont = 0; // Local da partitura
volatile long aux = 0;

// Tratamento de interrupção
ISR (TIM0_COMPB_vect) { // Vetor de comparação B
if (aux <= 0xff) { // Se aux menor que 8bits
OCR0B = (TCNT0 + aux) & (0xff); // Mandar aux para o contador
aux = f[Partitura[cont]]; // Reinicia o aux
toogleBit(PORTB, PB1); // Inverter o buzzer
}
else { // Se não
OCR0B = TCNT0; // Mandar o tempoatual para o contador, o mesmo que esperar um overflow
aux -= 0xff; // Subitrair 8bits do aux
}
}

// Função main
int main() {
enum notas nota;
setBit(DDRB, PB1); // Configura o PortB1 como saída, pino do buzzer

// Configuração do timer
TCCR0A = 0x00; // Configura pino de compararação desconectado
TCCR0B = 0x04; // Configura o prescaler como 256
setBit(TIMSK, OCIE0B); // Habilita a interrupção por comparação de COMPB
sei(); // Habilita interrupções globais
aux = f[Partitura[cont]]; // Inicia o contador de COMPB

if (aux <= 0xff) {
OCR0B = (TCNT0 + aux) & (0xff);
aux = f[Partitura[cont]];
toogleBit(PORTB, PB1);
}
else {
OCR0B = TCNT0;
aux -= 0xff;
}

// Loop infinito
for (;;) {
long i;
for (i = 0; i < 1000000L; i++) {
asm ("nop");
cont++; // Avança na partitura
if (cont >= NumNotas)cont = 0; // Toca de novo
}
}

Montagem

circuito buzzer

Dependendo do buzzer é necessário conectar os jumpers diretamente nos pinos do buzzer ao invés de colocá-lo na protoboard.

Compilação e upload

Para compilar o programa, acesse a pasta do exemplo e dê o comando make:

exemplos-avr-libc/exemplos/buzzer$ make

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
> Please plug in the device (will time out in 60 seconds) ...

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

Resultado

O buzzer deve tocar Parabéns para você e deve continuar em loop até a placa ser desligada.

Simule esse exemplo no WokWi

Conclusão

O buzzer passivo é um componente muito versátil com o qual podemos, não só, tocar músicas como também gerar diversos tipos de efeitos sonoros, tudo que precisamos é entender como gerar o som que queremos. Além disso vimos como podemos usar interrupções de timer para funções que precisam de Real Time, ou seja, que precisam de precisão de tempo.

Glossário

  • Setar: colocar um novo valor em um registrador. Para um bit é convencionado setar, mudá-lo para valor 1, e clear (limpar), mudá-lo para valor 0
  • Resetar: reiniciar
  • Timer: circuito eletrônico dedicado a contagem de tempo
  • Lookup table: tabela de consulta, no contexto de programação é um vetor com informações necessárias para o programa.
AutorEduardo Dueñas
Data:05/06/2020
- - +

Instrumento musical com Buzzer

Nesse exemplo vamos criar um programa que lê uma partitura e toca a música escrita através de um buzzer na Franzininho DIY. Vamos aprender como se usar um buzzer passivo para gerar cada nota musical com ajuda do timer0.

+

Boa prática!

+

Recursos necessários

+
    +
  • Franzininho DIY (com Micronucleos)
  • +
  • 1 buzzer passivo 5v
  • +
  • 4 jumpers macho-fêmea
  • +
  • 1 jumper macho-macho
  • +
+

Fazendo música com o Buzzer

+

Nesse exemplo vamos através de uma lookup table vamos ensinar quais as frequências de cada nota, e com o uso do timer vamos variar a entrada no buzzer na frequência da nota que queremos. Com a ajuda de outra tabela, vamos dar para o Franzininho a sequência das notas que queremos que ele toque, podendo assim, tocar a música que quisermos.

+

O buzzer passivo funciona como um pequeno alto falante, enquanto tivermos a tensão nominal na entrada positiva e o terra na entrada negativa o imã dentro dele vai para frente. Por outro lado, quando tivermos terra em ambas ele volta para a posição inicial. Se variarmos entre esses dois estados na frequência de uma nota musical geraremos uma onda sonora com o tom dela.

+

As notas musicais ocidentais em uma escala maior são Do Do# Re Re# Mi Fa Fa# Sol Sol# Lá Lá# Si voltando para Do depois. Cada nota está a uma distância de meio tom da outra e a 6 tons de sua próxima oitava, que é a mesma nota porém mais fina.

+

Olhando pela frequência temos que partindo de da terceira oitava, 440Hz, cada uma oitava acima tem o dobro da frequência e cada oitava a baixo tem metade da frequência. Já para subir cada semitom, basta multiplicar por 2^(1/12), ou para x semitons, 2^(x/12).

+

Código

+
/***********************************************
+ * @file main.c
+ * @author Eduardo Dueñas / Daniel Quadros
+ * @brief Exemplo tocar musicas usando buzzer
+ * @version 1.0
+ * @date 21/04/2021
+ *
+ * última modificação: 15/05/2021
+ **********************************************/
+#include <avr/io.h>
+#include <avr/interrupt.h>
+
+#define F_CPU 16500000L
+
+#define setBit(valor,bit)      (valor |= (1 << bit))
+#define clearBit(valor,bit)    (valor &= ~(1 << bit))
+#define toogleBit(valor,bit)   (valor ^= (1 << bit))
+#define testBit(valor,bit)     (valor & (1 << bit))
+
+
+#define NumNotas 32
+#define CONT(freq) ((F_CPU*10L)/(256L*freq))
+
+enum notas {Pausa, Do, DoS, Re, ReS, Mi, Fa, FaS, Sol, SolS, La, LaS, Si, DoM, DoSM, ReM};
+long f[16] = {
+    255L, (long)CONT(5232L), (long)CONT(5543L), (long)CONT(5873L), (long)CONT(6222L), (long)CONT(6592L), (long)CONT(6984L),
+    (long)CONT(7400L), (long)CONT(7840L), (long)CONT(8306L), (long)CONT(8800L), (long)CONT(9323L), (long)CONT(9877L),
+    (long)CONT(10465L), (long)CONT(11087L), (long)CONT(11746L)
+};
+
+// {0xFF,123, 116, 110, 104, 98, 92, 87, 82, 78, 73, 69, 65, 62, 58, 54}
+// Lookup table com os valores de cada nota a ser colocado na flag do timer
+
+char Partitura[NumNotas] = {
+    Re, Mi, Mi, Re, Sol, FaS, FaS, FaS, Re, Mi, Mi, Re, La, Sol, Sol, Sol,
+    Re, ReM, ReM, Si, Sol, FaS, FaS, Mi, DoM, Si, Si, Sol, La, Sol, Sol, Sol
+};                                       // Partitura da música
+volatile char cont = 0;                  // Local da partitura
+volatile long aux = 0;
+
+// Tratamento de interrupção
+ISR (TIM0_COMPB_vect) {                  // Vetor de comparação B
+  if (aux <= 0xff) {                     // Se aux menor que 8bits
+    OCR0B = (TCNT0 + aux) & (0xff);      // Mandar aux para o contador
+    aux = f[Partitura[cont]];            // Reinicia o aux
+    toogleBit(PORTB, PB1);               // Inverter o buzzer
+  }
+  else {                                 // Se não
+    OCR0B = TCNT0;                       // Mandar o tempoatual para o contador, o mesmo que esperar um overflow
+    aux -= 0xff;                         // Subitrair 8bits do aux
+  }
+}
+
+// Função main
+int main() {
+  enum notas nota;
+  setBit(DDRB, PB1);                     // Configura o PortB1 como saída, pino do buzzer
+
+  // Configuração do timer
+  TCCR0A = 0x00;                         // Configura pino de compararação desconectado
+  TCCR0B = 0x04;                         // Configura o prescaler como 256
+  setBit(TIMSK, OCIE0B);                 // Habilita a interrupção por comparação de COMPB
+  sei();                                 // Habilita interrupções globais
+  aux = f[Partitura[cont]];              // Inicia o contador de COMPB
+
+  if (aux <= 0xff) {
+    OCR0B = (TCNT0 + aux) & (0xff);
+    aux = f[Partitura[cont]];
+    toogleBit(PORTB, PB1);
+  }
+  else {
+    OCR0B = TCNT0;
+    aux -= 0xff;
+  }
+
+  // Loop infinito
+  for (;;) {
+    long i;
+    for (i = 0; i < 1000000L; i++) {
+      asm ("nop");
+      cont++;                            // Avança na partitura
+      if (cont >= NumNotas)cont = 0;     // Toca de novo
+  }
+}
+
+

Montagem

+

circuito buzzer

+

Dependendo do buzzer é necessário conectar os jumpers diretamente nos pinos do buzzer ao invés de colocá-lo na protoboard.

+

Compilação e upload

+

Para compilar o programa, acesse a pasta do exemplo e dê o comando make:

+
exemplos-avr-libc/exemplos/buzzer$ make
+
+

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

+
../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
+Running Digispark Uploader...
+Plug in device now... (will timeout in 60 seconds)
+> Please plug in the device (will time out in 60 seconds) ...
+
+

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

+

Resultado

+

O buzzer deve tocar Parabéns para você e deve continuar em loop até a placa ser desligada.

+

Simule esse exemplo no WokWi

+

Conclusão

+

O buzzer passivo é um componente muito versátil com o qual podemos, não só, tocar músicas como também gerar diversos tipos de efeitos sonoros, tudo que precisamos é entender como gerar o som que queremos. Além disso vimos como podemos usar interrupções de timer para funções que precisam de Real Time, ou seja, que precisam de precisão de tempo.

+

Glossário

+
    +
  • Setar: colocar um novo valor em um registrador. Para um bit é convencionado setar, mudá-lo para valor 1, e clear (limpar), mudá-lo para valor 0
  • +
  • Resetar: reiniciar
  • +
  • Timer: circuito eletrônico dedicado a contagem de tempo
  • +
  • Lookup table: tabela de consulta, no contexto de programação é um vetor com informações necessárias para o programa.
  • +
+
AutorEduardo Dueñas
Data:05/06/2020
\ No newline at end of file diff --git a/en/docs/franzininho-diy/exemplos-avr-libc/contadores/index.html b/en/docs/franzininho-diy/exemplos-avr-libc/contadores/index.html index 59ca2e163..79f182181 100755 --- a/en/docs/franzininho-diy/exemplos-avr-libc/contadores/index.html +++ b/en/docs/franzininho-diy/exemplos-avr-libc/contadores/index.html @@ -1,17 +1,329 @@ - + - -Contador de pulsos externos | Franzininho - - - + +Contador de pulsos externos | Franzininho + + + -
-

Contador de pulsos externos

Nesses três exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY. Vamos explorar as formas mais simples e as mais complexas de contar eventos e as vantagens de cada uma. Nesses exemplos vamos aprender a usar o timer e a fazer debounce, necessário para lermos apenas eventos válidos e não ler o mesmo evento mais de uma vez.

Boa prática!

Recursos necessários

  • Franzininho DIY (com Micronucleos)
  • 4 LEDs de 3mm
  • 4 resistores de 200Ω
  • 1 resistor de 10kΩ
  • 1 chave tactil
  • 7 jumpers macho-fêmea
  • 7 jumpers macho-macho

Contadores

Temos três exemplos de contadores da versão 1 a 3, e aumentando a complexidade do código e dos recursos utilizados.

Contador_v1

Nesse exemplo vamos utilizar loops para fazer a verificação de eventos. Essa forma de se fazer a contagem, apesar de ser mais simples de se entender e criar, é pouco eficiente, tanto a nível de processamento, quanto ao de energia.

O programa é um código em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca avr/io.h. Para melhor entendimento recomendo ler os comentários do código e o datasheet do ATtiny85.

Código

/**
* @file main.c
* @author Eduardo Dueñas
* @brief Exemplo de contador de eventos
* @version 1.0
* @date 06/04/2021
*
* última modificação: 05/05/2021
*/
#include <avr/io.h>

#define F_CPU 16500000L // Frequência de CLK

// Macros
#define setBit(valor,bit) (valor |= (1 << bit))
#define clearBit(valor,bit) (valor &= ~(1 << bit))
#define toogleBit(valor,bit) (valor ^= (1 << bit))
#define testBit(valor,bit) (valor & (1 << bit))

// Debounce da chave táctil para desconsiderarmos ruído e bouncing do botão
char debounce(int pino) {
unsigned int i;
for (i = 0; i < 20000; i++) { // Testa o pino várias vezes para evitar leituras erradas
if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1
return 0; // Se sim, retorna falso
}
}
return 1; // Retorna verdadeiro
}

int main(void) {
// Configuração de PORTB
clearBit(DDRB, PB0); // Configura PB0 como entrada
setBit(DDRB, PB1); // Configura PB1 como saida
setBit(DDRB, PB2); // Configura PB2 como saida
setBit(DDRB, PB3); // Configura PB3 como saida
setBit(DDRB, PB4); // Configura PB4 como saida

PORTB &= 0xE1; // Manda 0 para PB[4:1]

unsigned char count = 0;

for (;;) { // loop infinito
if (testBit(PINB, PB0)) { // Testa se PB0 é 1
if (debounce(PB0)) { // Verifica se realmente foi um aperto de botão
count++; // Se sim, incrementa o contador
while (testBit(PINB, PB0)) {} // Espera o botão parar de ser pressionado
}
}
count = count % 0x10; // Limpa o overflow do contador
PORTB = ((PORTB & 0xE1) | (count << 1)); // Manda o contador para PB[4:1]
}
}

Montagem

circuito contador

Como mostrado na imagem, os LEDs são ligados nas saídas PortB[4:1] e o botão no PortB[0].

Compilação e upload

Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando make:

exemplos-avr-libc/exemplos/contador$ make

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
> Please plug in the device (will time out in 60 seconds) ...

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

Resultado

Os LEDs devem mostrar a contagem de apertos do botão de forma binária resetando em 0x10 ou quando resetada a placa.

Análise

Esse código é de simples compreensão usando apenas um for para checar continuamente se o botão foi apertado, chamando uma função debounce caso a leitura seja 1, incrementando o contador se for confirmado que a leitura é válida, esperando o botão ser solto e mandando o valor para as saídas.

De forma geral esse código funciona, mas há muito desperdício de processamento, pois há muitos momentos que o processador não está fazendo nada, apenas esperando algo acontecer ou um certo tempo passar, nesse tempo ele poderia estar fazendo outra tarefas ou ficar em modo econômico de energia, que veremos nos próximos exemplos.

Contador_v2

Nesse exemplo vamos começar a usar interrupções para ler os pulsos. Vamos ver quais são as vantagens desse método e o que pode ser melhorado.

O programa é um código em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca avr/io.h e a biblioteca avr/interrupt.h. Para melhor entendimento recomendo ler os comentários do código e o datasheet do ATtiny85.

Código

/**
* @file main.c
* @author Eduardo Dueñas
* @brief Exemplo de contador de eventos com tratamento por interrupção
* @version 1.0
* @date 19/04/2021
*
* última modificação: 05/05/2021
*
* O programa é um desenvolvimento em cima do contador uma com alterações na leitura do pulso para leitura por interrupção,
* possibilitando o uso do microcontrolador para outras funções junto do contador
*/
#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 16500000L // Frequência de CLK

// Macros
#define setBit(valor,bit) (valor |= (1 << bit))
#define clearBit(valor,bit) (valor &= ~(1 << bit))
#define toogleBit(valor,bit) (valor ^= (1 << bit))
#define testBit(valor,bit) (valor & (1 << bit))

volatile unsigned char count = 0; // Contador

ISR(INT0_vect) {
cli(); // Desabilita interrupções globais durante o tratamento da interrupção
if (debounce(PB2)) { // Se o botão foi realmente apertado incrementa cont e manda para os LEDs
count++; // Incrementa o contador
count %= 0x10; // Limpa o excesso
PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]
PORTB = ((PORTB & 0xFC) | (count & 0x03)); // Manda os dois bits menos significativos de cont para PB[1:0]
}
sei(); // Reabilita interrupções globais
}

// Debounce da chave tactil para desconsiderarmos ruído e bouncing do botão
char debounce(int pino) {
unsigned int i;

for (i = 0; i < 20000; i++) { // Testa o pino várias vezes para evitar leituras erradas
if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1
return 0; // Se sim, retorna falso
}
}

return 1; // Retorna verdadeiro
}

int main(void) {
// Configuração de PORTB
clearBit(DDRB, PB2); // Configura PB2 como entrada
setBit(DDRB, PB0); // Configura PB0 como saída
setBit(DDRB, PB1); // Configura PB1 como saída
setBit(DDRB, PB3); // Configura PB3 como saída
setBit(DDRB, PB4); // Configura PB4 como saída

PORTB &= 0xE4; // Manda 0 para PB[4:3] e PB[1:0]

//Configuração de Interrupção externa
GIMSK |= (1 << INT0); // Habilita interrupções externas no INT0
MCUCR |= 0x03; // Seta interrupções para borda de subida
sei(); // Habilita interrupções globais


for (;;) { // Loop infinito
// Aqui você pode colocar outra aplicação para rodar simultaneamente ao contador
}
}

Montagem

Circuito contador V2

Como mostrado na imagem, os LEDs são ligados nas saídas PORTB[4:3] e [1:0] e o botão na entrada PORTB[2].

Compilação e upload

Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando make:

exemplos-avr-libc/exemplos/contador_v2$ make

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
> Please plug in the device (will time out in 60 seconds) ...

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

Resultado

Assim como no último exemplo, os LEDs devem mostrar a contagem de eventos, mostrando em binário até 15.

Análise

Esse exemplo tem um código um pouco mais complexo, podendo fazer diferentes tarefas ao mesmo tempo com o uso de interrupções.

Interrupções são, de forma simples, instruções de alta prioridade, que fazem o processador parar o que está fazendo, guardar o estado atual, executar as instruções da interrupção e voltar para o estado anterior, continuando normalmente com o programa. Elas são extremamente úteis para tarefas que precisam de uma precisão de tempo alta ou eventos assíncronos.

Porém, apesar do exemplo dois fazer uso de interrupções, ele passa muito tempo nela, o que atrasa o andamento de um possível outro programa que estaria rodando na main. Porém, grande parte do tempo que é gasto na interrupção está atrelado ao debounce, que consiste basicamente de checagens em certos períodos de tempo. Podemos então otimizar o uso do processador saindo da interrupção entre as checagens, uma vez que ele está apenas esperando para fazer o próximo teste. Veremos isso e o modo de economia de energia no contador_v3.

Contador_v3

Nesse exemplo vamos otimizar o processamento no código utilizando interrupções para as esperas do debounce, também veremos uma alternativa para diminuir o consumo de energia em momentos em que o processador está esperando algum evento, caso você não precise de outra rotina.

Esse programa é um código em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca avr/io.h e a biblioteca avr/interrupt.h. Para melhor entendimento recomendo ler os comentários do código e o datasheet do ATtiny85.

Código

/**
* @file main.c
* @author Eduardo Dueñas
* @brief Exemplo de contador de eventos com tratamento por interrupção
* @version 1.0
* @date 20/04/2021
*
* última modificação: 05/05/2021
*
* O programa é um desenvolvimento em cima do contador_v2 uma com alterações no loop infinito que
* havia ficado em aberto para outras aplicações para o modo sleep para diminuir o gasto de energia e
* alterar o debounce para interrupção, aumentando a eficiência do código. O código pode ser usado com
* outras aplicações no lugar do sleep.
*/

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>

#define F_CPU 16500000L // Frequência de CLK

#define setBit(valor,bit) (valor |= (1 << bit))
#define clearBit(valor,bit) (valor &= ~(1 << bit))
#define toogleBit(valor,bit) (valor ^= (1 << bit))
#define testBit(valor,bit) (valor & (1 << bit))

volatile unsigned char count = 0; // Contador
volatile unsigned char test = 0; // Quantidade de testes do debounce

unsigned int pin = 0; // Pino do debounce

// Debounce da chave tactil para desconsiderarmos ruido e bouncing do botão
char debounce(int pino) {
pin = pino;
// Coloca um timer para cada 1000 ciclos de clk para testar a chave tactil
TCNT0 = 131; // Overflow-(ciclos/Prescaler)=256-(1000/8)=131
setBit(TIMSK, TOIE0); // Habilita interrupções por timer overflow
test = 0; // Limpa test
}

ISR(INT0_vect) { // Tratamento de interrupções de pulso externo
clearBit(GIMSK, INT0); // Desabilita interrupções do INT0 durante o tratamento da interrupção
debounce(PB2);
}

ISR(TIMER0_OVF_vect) { // Tratamento de interrupções de timer overflow
TCNT0 = 131; // Seta denovo o timer para 131
if (testBit(PINB, pin)) { // Se o botão continua apertado
test++; // Incrementa test
if (test >= 20) { // Se testou o suficiente (no caso 20 vezes)
count++; // Incrementa o contador
count %= 0x10; // Limpa o excesso
PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]
PORTB = ((PORTB & 0xFC) | (count & 0x03)); // Manda os dois bits menos significativos de cont para PB[1:0]
clearBit(TIMSK, TOIE0); // Desabilita interrupções por timer overflow
setBit(GIMSK, INT0); // Reabilita interrupções externas no INT0
}
}
else {
clearBit(TIMSK, TOIE0); // Desabilita interrupções por timer overflow
setBit(GIMSK, INT0); // Reabilita interrupções externas no INT0
}
}

int main(void) {
// Configuração de PORTB
clearBit(DDRB, PB2); // Configura PB2 como entrada
setBit(DDRB, PB0); // Configura PB0 como saida
setBit(DDRB, PB1); // Configura PB1 como saida
setBit(DDRB, PB3); // Configura PB3 como saida
setBit(DDRB, PB4); // Configura PB4 como saida

PORTB &= 0xE4; // Manda 0 para PB[4:3] e PB[1:0]

// Configuração do timer
TCCR0A = 0x00; // Modo Normal
TCCR0B = 0x00;
TCCR0B |= 0x02; // Prescaler de 8


// Configuração do modo sleep
clearBit(MCUCR, SM0); // Configura sleep mode como idle
clearBit(MCUCR, SM1);

// Configuração de Interrupção externa
setBit(GIMSK, INT0); // Habilita interrupções externas no INT0
MCUCR |= 0x03; // Seta interrupções para borda de subida
sei(); // Habilita interrupções globais

for (;;) { // Loop infinito
// Aqui você pode colocar outra aplicação para rodar simultaneamente ao contador no lugar do sleep
sleep_mode(); // Entra no sleep mode
}
}

Montagem

Circuito contador V3

Como mostrado na imagem, os LEDs são ligados nas saídas PORTB[4:3] e [1:0] e o botão na entrada PORTB[2], assim como no exemplo dois.

Compilação e upload

Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando make:

exemplos-avr-libc/exemplos/contador_v3$ make

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
> Please plug in the device (will time out in 60 seconds) ...

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

Resultado

Assim como nos exemplos anteriores, os LEDs do circuito devem mostrar a contagem de pulsos até 15 em binário.

Análise

Neste código adicionamos um pouco mais de complexidade, aumentando o uso de interrupções, além do uso do timer e do modo Sleep.

O modo Sleep é um mode de operação no qual, de forma básica, se desliga alguns módulos do microcontrolador até que alguma interrupção ocorra, o que pode diminuir o consumo de energia de forma drástica. No caso do código do exemplo, utilizamos o modo Idle que no ATtiny85 desliga os CLKs da CPU e FLASH, podendo se desligar opcionalmente o CLK do ADC.

O timer nesse exemplo está configurado como em modo normal, com prescaler de 8, o que faz ele incrementar o timer uma vez a cada 8 ciclos de CLK. A forma adotada para a contagem do tempo foi a interrupção por timer overflow, ou seja, sempre que o valor máximo do timer for atingido ele gera uma interrupção. Para conseguirmos os 1000 ciclos que queremos calculamos overflow -(ciclos/Prescaler), que nos dá 256 -(1000/8) = 131, e setamos o valor do timer nesse valor para que falte o tempo que desejamos para a interrupção.

O uso de interrupções do timer para o debounce diminui consideravelmente o tempo que o processador consome em execução do tratamento do evento, o que melhora o processamento das rotinas paralelas, ou no caso, permite que o processador fique mais tempo no modo Sleep, diminuindo o consumo de energia ou em caso de alimentação por baterias, aumenta a vida útil da da fonte.

Conclusão

De forma geral, todas as três formas de se fazer o código funcionam, e ao servirem seu propósito não estão erradas. Porém, como programadores, principalmente de sistemas embarcados, é uma ótima prática conseguirmos fazer um código eficiente, de forma a não se tornar um empecilho no futuro, seja por usarmos muita memória ou deixarmos o processador muito lento e termos que refazer algo pronto do zero. Por isso é importante saber quais são as vantagens e desvantagens de cada método para podermos sempre utilizar o que melhor se adequa às nossas necessidades.

Glossário

  • Setar: colocar um novo valor em um registrador. Para um bit é convencionado setar, muda-lo para valor 1, e clear (limpar), muda-lo para valor 0
  • Chave tactil/Push button: botão
  • Debounce: correção do efeito de bouncing (efeito que ocorre em chaves que fazem rápidas conexões e desconexões antes de se estabilizar)
  • Resetar: reiniciar
  • Timer: circuito eletrônico dedicado a contagem de tempo
AutorEduardo Dueñas
Data:05/05/2020
- - +

Contador de pulsos externos

Nesses três exemplos vamos explorar gradativamente como fazer um contador de eventos externos no Franzininho DIY. Vamos explorar as formas mais simples e as mais complexas de contar eventos e as vantagens de cada uma. Nesses exemplos vamos aprender a usar o timer e a fazer debounce, necessário para lermos apenas eventos válidos e não ler o mesmo evento mais de uma vez.

+

Boa prática!

+

Recursos necessários

+
    +
  • Franzininho DIY (com Micronucleos)
  • +
  • 4 LEDs de 3mm
  • +
  • 4 resistores de 200Ω
  • +
  • 1 resistor de 10kΩ
  • +
  • 1 chave tactil
  • +
  • 7 jumpers macho-fêmea
  • +
  • 7 jumpers macho-macho
  • +
+

Contadores

+

Temos três exemplos de contadores da versão 1 a 3, e aumentando a complexidade do código e dos recursos utilizados.

+

Contador_v1

+

Nesse exemplo vamos utilizar loops para fazer a verificação de eventos. Essa forma de se fazer a contagem, apesar de ser mais simples de se entender e criar, é pouco eficiente, tanto a nível de processamento, quanto ao de energia.

+

O programa é um código em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca avr/io.h. Para melhor entendimento recomendo ler os comentários do código e o datasheet do ATtiny85.

+

Código

+
/**
+ * @file main.c
+ * @author Eduardo Dueñas
+ * @brief Exemplo de contador de eventos
+ * @version 1.0
+ * @date 06/04/2021
+ *
+ * última modificação: 05/05/2021
+ */
+#include <avr/io.h>
+
+#define F_CPU 16500000L        // Frequência de CLK
+
+// Macros
+#define setBit(valor,bit)      (valor |= (1 << bit))
+#define clearBit(valor,bit)    (valor &= ~(1 << bit))
+#define toogleBit(valor,bit)   (valor ^= (1 << bit))
+#define testBit(valor,bit)     (valor & (1 << bit))
+
+// Debounce da chave táctil para desconsiderarmos ruído e bouncing do botão
+char debounce(int pino) {
+    unsigned int i;
+    for (i = 0; i < 20000; i++) {   // Testa o pino várias vezes para evitar leituras erradas
+      if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1
+          return 0;            // Se sim, retorna falso
+      }
+    }
+    return 1;                  // Retorna verdadeiro
+}
+
+int main(void) {
+    // Configuração de PORTB
+    clearBit(DDRB, PB0);       // Configura PB0 como entrada
+    setBit(DDRB, PB1);         // Configura PB1 como saida
+    setBit(DDRB, PB2);         // Configura PB2 como saida
+    setBit(DDRB, PB3);         // Configura PB3 como saida
+    setBit(DDRB, PB4);         // Configura PB4 como saida
+
+    PORTB &= 0xE1;             // Manda 0 para PB[4:1]
+
+    unsigned char count = 0;
+
+    for (;;) {                    // loop infinito
+        if (testBit(PINB, PB0)) { // Testa se PB0 é 1
+            if (debounce(PB0)) {  // Verifica se realmente foi um aperto de botão
+              count++;            // Se sim, incrementa o contador
+              while (testBit(PINB, PB0)) {} // Espera o botão parar de ser pressionado
+            }
+        }
+        count = count % 0x10;     // Limpa o overflow do contador
+        PORTB = ((PORTB & 0xE1) | (count << 1)); // Manda o contador para PB[4:1]
+    }
+}
+
+

Montagem

+

circuito contador

+

Como mostrado na imagem, os LEDs são ligados nas saídas PortB[4:1] e o botão no PortB[0].

+

Compilação e upload

+

Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando make:

+
exemplos-avr-libc/exemplos/contador$ make
+
+

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

+
../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
+Running Digispark Uploader...
+Plug in device now... (will timeout in 60 seconds)
+> Please plug in the device (will time out in 60 seconds) ...
+
+

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

+

Resultado

+

Os LEDs devem mostrar a contagem de apertos do botão de forma binária resetando em 0x10 ou quando resetada a placa.

+

Análise

+

Esse código é de simples compreensão usando apenas um for para checar continuamente se o botão foi apertado, chamando uma função debounce caso a leitura seja 1, incrementando o contador se for confirmado que a leitura é válida, esperando o botão ser solto e mandando o valor para as saídas.

+

De forma geral esse código funciona, mas há muito desperdício de processamento, pois há muitos momentos que o processador não está fazendo nada, apenas esperando algo acontecer ou um certo tempo passar, nesse tempo ele poderia estar fazendo outra tarefas ou ficar em modo econômico de energia, que veremos nos próximos exemplos.

+

Contador_v2

+

Nesse exemplo vamos começar a usar interrupções para ler os pulsos. Vamos ver quais são as vantagens desse método e o que pode ser melhorado.

+

O programa é um código em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca avr/io.h e a biblioteca avr/interrupt.h. Para melhor entendimento recomendo ler os comentários do código e o datasheet do ATtiny85.

+

Código

+
/**
+ * @file main.c
+ * @author Eduardo Dueñas
+ * @brief Exemplo de contador de eventos com tratamento por interrupção
+ * @version 1.0
+ * @date 19/04/2021
+ *
+ * última modificação: 05/05/2021
+ *
+ * O programa é um desenvolvimento em cima do contador uma com alterações na leitura do pulso para leitura por interrupção,
+ * possibilitando o uso do microcontrolador para outras funções junto do contador
+ */
+#include <avr/io.h>
+#include <avr/interrupt.h>
+
+#define F_CPU 16500000L        // Frequência de CLK
+
+// Macros
+#define setBit(valor,bit)      (valor |= (1 << bit))
+#define clearBit(valor,bit)    (valor &= ~(1 << bit))
+#define toogleBit(valor,bit)   (valor ^= (1 << bit))
+#define testBit(valor,bit)     (valor & (1 << bit))
+
+volatile unsigned char count = 0;   // Contador
+
+ISR(INT0_vect) {
+  cli();                       // Desabilita interrupções globais durante o tratamento da interrupção
+  if (debounce(PB2)) {         // Se o botão foi realmente apertado incrementa cont e manda para os LEDs
+    count++;                   // Incrementa o contador
+    count %= 0x10;             // Limpa o excesso
+    PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]
+    PORTB = ((PORTB & 0xFC) | (count & 0x03));      // Manda os dois bits menos significativos de cont para PB[1:0]
+  }
+  sei();                       // Reabilita interrupções globais
+}
+
+// Debounce da chave tactil para desconsiderarmos ruído e bouncing do botão
+char debounce(int pino) {
+  unsigned int i;
+
+  for (i = 0; i < 20000; i++) {   // Testa o pino várias vezes para evitar leituras erradas
+    if (!(testBit(PINB, pino))) { // Testa se o pino deixou de ser 1
+      return 0;                   // Se sim, retorna falso
+    }
+  }
+
+  return 1;                       // Retorna verdadeiro
+}
+
+int main(void) {
+    // Configuração de PORTB
+    clearBit(DDRB, PB2);       // Configura PB2 como entrada
+    setBit(DDRB, PB0);         // Configura PB0 como saída
+    setBit(DDRB, PB1);         // Configura PB1 como saída
+    setBit(DDRB, PB3);         // Configura PB3 como saída
+    setBit(DDRB, PB4);         // Configura PB4 como saída
+
+    PORTB &= 0xE4;             // Manda 0 para PB[4:3] e PB[1:0]
+
+    //Configuração de Interrupção externa
+    GIMSK |= (1 << INT0);      // Habilita interrupções externas no INT0
+    MCUCR |= 0x03;             // Seta interrupções para borda de subida
+    sei();                     // Habilita interrupções globais
+
+
+    for (;;) {                 // Loop infinito
+        // Aqui você pode colocar outra aplicação para rodar simultaneamente ao contador
+    }
+}
+
+

Montagem

+

Circuito contador V2

+

Como mostrado na imagem, os LEDs são ligados nas saídas PORTB[4:3] e [1:0] e o botão na entrada PORTB[2].

+

Compilação e upload

+

Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando make:

+
exemplos-avr-libc/exemplos/contador_v2$ make
+
+

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

+
../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
+Running Digispark Uploader...
+Plug in device now... (will timeout in 60 seconds)
+> Please plug in the device (will time out in 60 seconds) ...
+
+

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

+

Resultado

+

Assim como no último exemplo, os LEDs devem mostrar a contagem de eventos, mostrando em binário até 15.

+

Análise

+

Esse exemplo tem um código um pouco mais complexo, podendo fazer diferentes tarefas ao mesmo tempo com o uso de interrupções.

+

Interrupções são, de forma simples, instruções de alta prioridade, que fazem o processador parar o que está fazendo, guardar o estado atual, executar as instruções da interrupção e voltar para o estado anterior, continuando normalmente com o programa. Elas são extremamente úteis para tarefas que precisam de uma precisão de tempo alta ou eventos assíncronos.

+

Porém, apesar do exemplo dois fazer uso de interrupções, ele passa muito tempo nela, o que atrasa o andamento de um possível outro programa que estaria rodando na main. Porém, grande parte do tempo que é gasto na interrupção está atrelado ao debounce, que consiste basicamente de checagens em certos períodos de tempo. Podemos então otimizar o uso do processador saindo da interrupção entre as checagens, uma vez que ele está apenas esperando para fazer o próximo teste. Veremos isso e o modo de economia de energia no contador_v3.

+

Contador_v3

+

Nesse exemplo vamos otimizar o processamento no código utilizando interrupções para as esperas do debounce, também veremos uma alternativa para diminuir o consumo de energia em momentos em que o processador está esperando algum evento, caso você não precise de outra rotina.

+

Esse programa é um código em linguagem C e faz uso dos nomes dos registradores definidos na biblioteca avr/io.h e a biblioteca avr/interrupt.h. Para melhor entendimento recomendo ler os comentários do código e o datasheet do ATtiny85.

+

Código

+
/**
+ * @file main.c
+ * @author Eduardo Dueñas
+ * @brief Exemplo de contador de eventos com tratamento por interrupção
+ * @version 1.0
+ * @date 20/04/2021
+ *
+ * última modificação: 05/05/2021
+ *
+ * O programa é um desenvolvimento em cima do contador_v2 uma com alterações no loop infinito que
+ * havia ficado em aberto para outras aplicações para o modo sleep para diminuir o gasto de energia e
+ * alterar o debounce para interrupção, aumentando a eficiência do código. O código pode ser usado com
+ * outras aplicações no lugar do sleep.
+ */
+
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <avr/sleep.h>
+
+#define F_CPU 16500000L        // Frequência de CLK
+
+#define setBit(valor,bit)      (valor |= (1 << bit))
+#define clearBit(valor,bit)    (valor &= ~(1 << bit))
+#define toogleBit(valor,bit)   (valor ^= (1 << bit))
+#define testBit(valor,bit)     (valor & (1 << bit))
+
+volatile unsigned char count = 0; // Contador
+volatile unsigned char test = 0;  // Quantidade de testes do debounce
+
+unsigned int pin = 0;             // Pino do debounce
+
+// Debounce da chave tactil para desconsiderarmos ruido e bouncing do botão
+char debounce(int pino) {
+    pin = pino;
+    // Coloca um timer para cada 1000 ciclos de clk para testar a chave tactil
+    TCNT0 = 131;               // Overflow-(ciclos/Prescaler)=256-(1000/8)=131
+    setBit(TIMSK, TOIE0);      // Habilita interrupções por timer overflow
+    test = 0;                  // Limpa test
+}
+
+ISR(INT0_vect) {               // Tratamento de interrupções de pulso externo
+    clearBit(GIMSK, INT0);     // Desabilita interrupções do INT0 durante o tratamento da interrupção
+    debounce(PB2);
+}
+
+ISR(TIMER0_OVF_vect) {         // Tratamento de interrupções de timer overflow
+    TCNT0 = 131;               // Seta denovo o timer para 131
+    if (testBit(PINB, pin)) {  // Se o botão continua apertado
+        test++;                // Incrementa test
+        if (test >= 20) {      // Se testou o suficiente (no caso 20 vezes)
+            count++;           // Incrementa o contador
+            count %= 0x10;     // Limpa o excesso
+            PORTB = ((PORTB & 0xE7) | ((count >> 2) << 3)); // Manda os dois bits mais significativos de cont para PB[4:3]
+            PORTB = ((PORTB & 0xFC) | (count & 0x03));  // Manda os dois bits menos significativos de cont para PB[1:0]
+            clearBit(TIMSK, TOIE0); // Desabilita interrupções por timer overflow
+            setBit(GIMSK, INT0);    // Reabilita interrupções externas no INT0
+        }
+    }
+    else {
+      clearBit(TIMSK, TOIE0); // Desabilita interrupções por timer overflow
+      setBit(GIMSK, INT0);    // Reabilita interrupções externas no INT0
+    }
+}
+
+int main(void) {
+    // Configuração de PORTB
+    clearBit(DDRB, PB2);       // Configura PB2 como entrada
+    setBit(DDRB, PB0);         // Configura PB0 como saida
+    setBit(DDRB, PB1);         // Configura PB1 como saida
+    setBit(DDRB, PB3);         // Configura PB3 como saida
+    setBit(DDRB, PB4);         // Configura PB4 como saida
+
+    PORTB &= 0xE4;             // Manda 0 para PB[4:3] e PB[1:0]
+
+    // Configuração do timer
+    TCCR0A = 0x00;             // Modo Normal
+    TCCR0B = 0x00;
+    TCCR0B |= 0x02;            // Prescaler de 8
+
+
+    // Configuração do modo sleep
+    clearBit(MCUCR, SM0);      // Configura sleep mode como idle
+    clearBit(MCUCR, SM1);
+
+    // Configuração de Interrupção externa
+    setBit(GIMSK, INT0);       // Habilita interrupções externas no INT0
+    MCUCR |= 0x03;             // Seta interrupções para borda de subida
+    sei();                     // Habilita interrupções globais
+
+    for (;;) {                 // Loop infinito
+      // Aqui você pode colocar outra aplicação para rodar simultaneamente ao contador no lugar do sleep
+      sleep_mode();            // Entra no sleep mode
+    }
+}
+
+

Montagem

+

Circuito contador V3

+

Como mostrado na imagem, os LEDs são ligados nas saídas PORTB[4:3] e [1:0] e o botão na entrada PORTB[2], assim como no exemplo dois.

+

Compilação e upload

+

Para compilar o programa, assim como nos programas anteriores, acesse a pasta do exemplo e em seguida o comando make:

+
exemplos-avr-libc/exemplos/contador_v3$ make
+
+

Como já temos o makerfile configurado na pasta, será feita compilação e deve aparecer a seguinte mensagem:

+
../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
+Running Digispark Uploader...
+Plug in device now... (will timeout in 60 seconds)
+> Please plug in the device (will time out in 60 seconds) ...
+
+

Conecte a placa em uma entrada USB ou, caso a Franzininho já esteja conectada, aperte o botão de reset para iniciar o upload.

+

Resultado

+

Assim como nos exemplos anteriores, os LEDs do circuito devem mostrar a contagem de pulsos até 15 em binário.

+

Análise

+

Neste código adicionamos um pouco mais de complexidade, aumentando o uso de interrupções, além do uso do timer e do modo Sleep.

+

O modo Sleep é um mode de operação no qual, de forma básica, se desliga alguns módulos do microcontrolador até que alguma interrupção ocorra, o que pode diminuir o consumo de energia de forma drástica. No caso do código do exemplo, utilizamos o modo Idle que no ATtiny85 desliga os CLKs da CPU e FLASH, podendo se desligar opcionalmente o CLK do ADC.

+

O timer nesse exemplo está configurado como em modo normal, com prescaler de 8, o que faz ele incrementar o timer uma vez a cada 8 ciclos de CLK. A forma adotada para a contagem do tempo foi a interrupção por timer overflow, ou seja, sempre que o valor máximo do timer for atingido ele gera uma interrupção. Para conseguirmos os 1000 ciclos que queremos calculamos overflow -(ciclos/Prescaler), que nos dá 256 -(1000/8) = 131, e setamos o valor do timer nesse valor para que falte o tempo que desejamos para a interrupção.

+

O uso de interrupções do timer para o debounce diminui consideravelmente o tempo que o processador consome em execução do tratamento do evento, o que melhora o processamento das rotinas paralelas, ou no caso, permite que o processador fique mais tempo no modo Sleep, diminuindo o consumo de energia ou em caso de alimentação por baterias, aumenta a vida útil da da fonte.

+

Conclusão

+

De forma geral, todas as três formas de se fazer o código funcionam, e ao servirem seu propósito não estão erradas. Porém, como programadores, principalmente de sistemas embarcados, é uma ótima prática conseguirmos fazer um código eficiente, de forma a não se tornar um empecilho no futuro, seja por usarmos muita memória ou deixarmos o processador muito lento e termos que refazer algo pronto do zero. Por isso é importante saber quais são as vantagens e desvantagens de cada método para podermos sempre utilizar o que melhor se adequa às nossas necessidades.

+

Glossário

+
    +
  • Setar: colocar um novo valor em um registrador. Para um bit é convencionado setar, muda-lo para valor 1, e clear (limpar), muda-lo para valor 0
  • +
  • Chave tactil/Push button: botão
  • +
  • Debounce: correção do efeito de bouncing (efeito que ocorre em chaves que fazem rápidas conexões e desconexões antes de se estabilizar)
  • +
  • Resetar: reiniciar
  • +
  • Timer: circuito eletrônico dedicado a contagem de tempo
  • +
+
AutorEduardo Dueñas
Data:05/05/2020
\ No newline at end of file diff --git a/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital/index.html b/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital/index.html index 80f26dca6..c47bcbe47 100755 --- a/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital/index.html +++ b/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digital/index.html @@ -1,17 +1,97 @@ - + - -Entrada Digital | Franzininho - - - + +Entrada Digital | Franzininho + + + -
-

Entrada Digital

No exemplo anterior conhecemos os registradores responsáveis pela configuração e manipulação dos pinos de I/O. Nesse exemplo vamos concentrar no uso dos pinos como entradas digitais.

Ao final, você saberá como ler sinais digitais externos a Franzininho DIY.

Recursos Necessários

  • Placa Franzininho DIY(com Micronucleus)
  • Chave Tactil
  • Jumpers
  • Computador com as ferramentas de software instaladas

Entrada Digital

Uma entrada digital é capaz de ler nível alto (5V) e nível baixo(0V) em sua entrada. Essa funcionalidade é usada para ler estado de botões, sensores, e dispositivos que em suas saídas apresentam 2 estados.

Quando o pino é configurado como entrada digital ele é colocado em um estado de alta impedância, equivalente a um resistor de 100 MegaOhms em série com o circuito a ser monitorado. Dessa forma, o pino absorve uma corrente muito baixa do circuito que está monitorando. Devido a essa característica de alta impedância, quando um pino colocado como entrada digital ele fica flutuando (sem ligação definida), o nível de tensão presente nesse pino fica variando não podendo ser determinado um valor estável devido ao ruído elétrico e até mesmo capacitância de entrada do pino. Para resolver esse problema é necessário colocar um resistor de pull up (ligado a +5V) ou um resistor de pull down (ligado a GND) conforme a necessidade. Esses resistores garantem nível lógico estável quando, por exemplo uma tecla não está pressionada. Geralmente utiliza-se um resistor de 10K para esse propósito. A seguir é exibida a ligação desses resistores no circuito para leitura de tecla:

circuito

É possível habilitar o resistor de pull up interno, isso mesmo, o Attiny85 possui resistores de pull-up internos (20 Kilohms) que facilitam a ligação de teclas, sensores sem a necessidade de conectar externamente um resistor de pull-up. A habilitação desses resistores é feita de maneira simples via software. Vamos ver isso mais adiante.

Algumas Particularidades do circuito da Franzininho DIY

Os pinos de I/O são marcados em Amarelo no Pinout da Franzininho DIY

pinout Franzininho DIY

  • O pino PB5 é configurado como RESET na Franzininho DIY, sendo assim não poderemos usá-lo como I/O.
  • Os pinos PB3 e PB4 são usados para o circuito da USB, sendo assim temos que usá-los com cautela. Geralmente esses pinos são usados apenas como saídas digitais.
  • O LED amarelo da placa está ligado ao pino PB1.
  • Os pinos PB0 E PB2 não possuem circuito ligados a eles.

Registradores responsáveis pelos pinos de I/O

Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:

  • PORTB: Registrador de dados. Responsável pela escrita nos pinos;
  • DDRB: Registrador de direção do pino. Responsável pela configuração dos pinos para definir se será entrada ou saída;
  • PINB: Registrador de entrada da porta. Responsável pela leitura do estado do pino.

Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos teríamos os finais A, B,C, etc. Cada porta só possui no máximo 8 pinos.

Na seção 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configurações possíveis para os pinos:

configuração GPIO

A figura abaixo exibe os registradores responsáveis pelos pino de I/O do PORTB:

configuração GPIO

Conforme exibido acima, para configurar um pino como entrada digital deve-se configurar o bit DDRBx correspondente ao pino em 0. Se quiser habilitar o pull up para esse deve-se escrever 1 no bit PORTBx correspondente ao pino. A leitura do estado do pino é feita através do registrador PINBx.

Vamos verificar um exemplo para fazer a leitura de um botão externo e ligar o LED da Franzininho DIY.

Circuito

circuito

Código

#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 16500000L

// Macros
#define setBit(valor,bit) (valor |= (1 << bit))
#define clearBit(valor,bit) (valor &= ~(1 << bit))
#define toogleBit(valor,bit) (valor ^= (1 << bit))
#define testBit(valor,bit) (valor & (1 << bit))

int main(void)
{
setBit(DDRB, PB1); // Configura Pino PB1 como saída (Pino do LED)
clearBit(DDRB, PB0); // Configura pino PB0 como entrada (pino do Botão)
setBit(PORTB, PB0); // Habilita pull up para a entrada PB0
// Lógico 1 quando botão não estiver pressionado
while (1)
{
if (!testBit(PINB, PB0)) // Faz a leitura do botão - Se pressionado
{
setBit(PORTB, PB1); // Liga o LED 1
}
else
{
clearBit(PORTB, PB1); // Desliga o LED 1
}
}

return (0);
}

O exemplo exibiu como configurar os pinos, note que tivemos que configurar um pino como saída, para o LED e outro como entrada, para o botão. Note que foi usado o pull up interno.

O uso de macros facilitou a manipulação dos bits nos registradores. Recomendo que se você leia esse artigo para entender sobre as macros e as operações efetuadas: https://www.embarcados.com.br/bits-em-linguagem-c/

Para leitura do estado do pino, ou seja, se o botão está solto ou pressionado, fazemos um teste a cada iteração no loop infinto. Quando o botão é pressionado o nível logico no pino vai para 0 e quando solto permanece em 1. Conforme o teste 0 liga o LED e 1 apaga o LED.

Assim, o funcionamento será:

  • Botão Solto = LED apagado
  • Botão Pressionado = LED Aceso

Bacana, não?

Desafio

Faça com com que o LED mude estado e permaneça ao soltar o botão, funcionando como uma tecla liga/desliga.

AutorFábio Souza
Data:24/04/2021
- - +

Entrada Digital

No exemplo anterior conhecemos os registradores responsáveis pela configuração e manipulação dos pinos de I/O. Nesse exemplo vamos concentrar no uso dos pinos como entradas digitais.

+

Ao final, você saberá como ler sinais digitais externos a Franzininho DIY.

+

Recursos Necessários

+
    +
  • Placa Franzininho DIY(com Micronucleus)
  • +
  • Chave Tactil
  • +
  • Jumpers
  • +
  • Computador com as ferramentas de software instaladas
  • +
+

Entrada Digital

+

Uma entrada digital é capaz de ler nível alto (5V) e nível baixo(0V) em sua entrada. Essa funcionalidade é usada para ler estado de botões, sensores, e dispositivos que em suas saídas apresentam 2 estados.

+

Quando o pino é configurado como entrada digital ele é colocado em um estado de alta impedância, equivalente a um resistor de 100 MegaOhms em série com o circuito a ser monitorado. Dessa forma, o pino absorve uma corrente muito baixa do circuito que está monitorando. Devido a essa característica de alta impedância, quando um pino colocado como entrada digital ele fica flutuando (sem ligação definida), o nível de tensão presente nesse pino fica variando não podendo ser determinado um valor estável devido ao ruído elétrico e até mesmo capacitância de entrada do pino. Para resolver esse problema é necessário colocar um resistor de pull up (ligado a +5V) ou um resistor de pull down (ligado a GND) conforme a necessidade. Esses resistores garantem nível lógico estável quando, por exemplo uma tecla não está pressionada. Geralmente utiliza-se um resistor de 10K para esse propósito. A seguir é exibida a ligação desses resistores no circuito para leitura de tecla:

+

circuito

+

É possível habilitar o resistor de pull up interno, isso mesmo, o Attiny85 possui resistores de pull-up internos (20 Kilohms) que facilitam a ligação de teclas, sensores sem a necessidade de conectar externamente um resistor de pull-up. A habilitação desses resistores é feita de maneira simples via software. Vamos ver isso mais adiante.

+

Algumas Particularidades do circuito da Franzininho DIY

+

Os pinos de I/O são marcados em Amarelo no Pinout da Franzininho DIY

+

pinout Franzininho DIY

+
    +
  • O pino PB5 é configurado como RESET na Franzininho DIY, sendo assim não poderemos usá-lo como I/O.
  • +
  • Os pinos PB3 e PB4 são usados para o circuito da USB, sendo assim temos que usá-los com cautela. Geralmente esses pinos são usados apenas como saídas digitais.
  • +
  • O LED amarelo da placa está ligado ao pino PB1.
  • +
  • Os pinos PB0 E PB2 não possuem circuito ligados a eles.
  • +
+

Registradores responsáveis pelos pinos de I/O

+

Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:

+
    +
  • PORTB: Registrador de dados. Responsável pela escrita nos pinos;
  • +
  • DDRB: Registrador de direção do pino. Responsável pela configuração dos pinos para definir se será entrada ou saída;
  • +
  • PINB: Registrador de entrada da porta. Responsável pela leitura do estado do pino.
  • +
+

Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos teríamos os finais A, B,C, etc. Cada porta só possui no máximo 8 pinos.

+

Na seção 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configurações possíveis para os pinos:

+

configuração GPIO

+

A figura abaixo exibe os registradores responsáveis pelos pino de I/O do PORTB:

+

configuração GPIO

+

Conforme exibido acima, para configurar um pino como entrada digital deve-se configurar o bit DDRBx correspondente ao pino em 0. Se quiser habilitar o pull up para esse deve-se escrever 1 no bit PORTBx correspondente ao pino. A leitura do estado do pino é feita através do registrador PINBx.

+

Vamos verificar um exemplo para fazer a leitura de um botão externo e ligar o LED da Franzininho DIY.

+

Circuito

+

circuito

+

Código

+
#include <avr/io.h>
+#include <util/delay.h>
+
+#define F_CPU 16500000L
+
+// Macros
+#define setBit(valor,bit) (valor |= (1 << bit))
+#define clearBit(valor,bit) (valor &= ~(1 << bit))
+#define toogleBit(valor,bit) (valor ^= (1 << bit))
+#define testBit(valor,bit) (valor & (1 << bit))
+
+int main(void)
+{
+    setBit(DDRB, PB1);         // Configura Pino PB1 como saída (Pino do LED)
+    clearBit(DDRB, PB0);       // Configura pino PB0 como entrada (pino do Botão)
+    setBit(PORTB, PB0);        // Habilita pull up para a entrada PB0
+                               // Lógico 1 quando botão não estiver pressionado
+    while (1)
+    {
+        if (!testBit(PINB, PB0))  // Faz a leitura do botão - Se pressionado
+        {
+            setBit(PORTB, PB1);   // Liga o LED 1
+        }
+        else
+        {
+            clearBit(PORTB, PB1); // Desliga o LED 1
+        }
+    }
+
+    return (0);
+}
+
+

O exemplo exibiu como configurar os pinos, note que tivemos que configurar um pino como saída, para o LED e outro como entrada, para o botão. Note que foi usado o pull up interno.

+

O uso de macros facilitou a manipulação dos bits nos registradores. Recomendo que se você leia esse artigo para entender sobre as macros e as operações efetuadas: https://www.embarcados.com.br/bits-em-linguagem-c/

+

Para leitura do estado do pino, ou seja, se o botão está solto ou pressionado, fazemos um teste a cada iteração no loop infinto. Quando o botão é pressionado o nível logico no pino vai para 0 e quando solto permanece em 1. Conforme o teste 0 liga o LED e 1 apaga o LED.

+

Assim, o funcionamento será:

+
    +
  • Botão Solto = LED apagado
  • +
  • Botão Pressionado = LED Aceso
  • +
+

Bacana, não?

+

Desafio

+

Faça com com que o LED mude estado e permaneça ao soltar o botão, funcionando como uma tecla liga/desliga.

+
AutorFábio Souza
Data:24/04/2021
\ No newline at end of file diff --git a/en/docs/franzininho-diy/exemplos-avr-libc/hello-world/index.html b/en/docs/franzininho-diy/exemplos-avr-libc/hello-world/index.html index 5e14512d4..7521052d2 100755 --- a/en/docs/franzininho-diy/exemplos-avr-libc/hello-world/index.html +++ b/en/docs/franzininho-diy/exemplos-avr-libc/hello-world/index.html @@ -1,17 +1,76 @@ - + - -Hello, World! | Franzininho - - - + +Hello, World! | Franzininho + + + -
-

Hello, World!

Nesse exemplo vamos dar os nossos primeiros passos na programação da Franzininho DIY usando a AVR Libc.

Como de costume o nosso "Hello, World!" na eletrônica será um blink LED. Ao final desse experimento você terá uma estrutura mínima para desenvolver aplicações para o ATtiny85 em C.

Bora, colocar em prática!

Recursos Necessários

  • Placa Franzininho DIY(com Micronucleus)
  • Computador com as ferramentas de software instaladas(link)

Hello, World em linguagem C

Esse exemplo básico nos dará estrutura para todos nossos exemplos daqui pra frente. Como já mencionado, vamos usar a linguagem C em conjunto com a biblioteca AVR Libc. Para esse exemplo você só precisará da placa Franzininho DIY e as ferramentas de softwares.

O código exibe a estrutura mínima de um programa em linguagem C para microcontroladores. Se você tem dificuldades com a linguagem C, recomendo que confira os seguintes materiais:

Nesse momento é importante que você se atente a estrutura do código. Vamos usar alguns registradores para acionar o LED, mas não serão o foco da explicação. Confira os comentários no código a seguir:

Código

#include <avr/io.h>            // Biblioteca para acesso aos registradores do MCU
#include <util/delay.h> // Biblioteca para funções de delay

#define F_CPU 16500000L // Frequencia de clock que o mcu está trabalhando

/**
Essa é a função principal onde é iniciada aplicação
*/
int main(void)
{
DDRB |= (1 << PB1); // Configura Pino PB1 como saída (Pino do LED)

// O programar ficará nesse loop enquanto a placa estiver ligada
while (1)
{
PORTB |= (1 << PB1); // Liga LED
_delay_ms(500); // Aguarda 500 ms

PORTB &= ~(1 << PB1); // Desliga LED
_delay_ms(500); // Aguarda 500 ms
}

return (0); // Necessário um retorno (pois a função retorna int) mesmo que a função nunca retornará
}

Compilação e upload

para compilar o programa, acesse a pasta do exemplo e em seguida o comando make:

exemplos-avr-libc/exemplos/hello$ make

Já temos o makefile configurado na pasta, assim, será feita a compilação e em seguida aparecerá a mensagem para conectar a placa:

../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
> Please plug in the device (will time out in 60 seconds) ...

Conecte a placa no PC ou pressione o botão de RESET se ela já estiver conectada.

Será iniciado o upload.

Resultados

Nesse exemplo o LED irá piscar em intervalos de 500 ms (on) e 500 ms (off).

No próximo exemplo vamos detalhar sobre os registradores de IO. Nesse momento, além da estrutura inicial é importante que você entenda como usar a função _delay_ms().

Essa função espera o tempo passado em milissegundos.

Altere o código para que o led fique 100 ms(on) e 1000 ms (off), veja o efeito.

Conclusão

Nesse exemplo tivemos o primeiro contato com a programação em linguagem C para microcontroladores. Notamos que devemos incluir as bibliotecas externas através do #include e que o programa precisa necessariamente ter a função int main(void).

Dentro da função main temos um loop infinito onde os comandos se repetirão enquanto a placa estiver ligada.

AutorFábio Souza
Data:24/04/2021
- - +

Hello, World!

Nesse exemplo vamos dar os nossos primeiros passos na programação da Franzininho DIY usando a AVR Libc.

+

Como de costume o nosso "Hello, World!" na eletrônica será um blink LED. Ao final desse experimento você terá uma estrutura mínima para desenvolver aplicações para o ATtiny85 em C.

+

Bora, colocar em prática!

+

Recursos Necessários

+
    +
  • Placa Franzininho DIY(com Micronucleus)
  • +
  • Computador com as ferramentas de software instaladas(link)
  • +
+

Hello, World em linguagem C

+

Esse exemplo básico nos dará estrutura para todos nossos exemplos daqui pra frente. Como já mencionado, vamos usar a linguagem C em conjunto com a biblioteca AVR Libc. Para esse exemplo você só precisará da placa Franzininho DIY e as ferramentas de softwares.

+

O código exibe a estrutura mínima de um programa em linguagem C para microcontroladores. Se você tem dificuldades com a linguagem C, recomendo que confira os seguintes materiais:

+ +

Nesse momento é importante que você se atente a estrutura do código. Vamos usar alguns registradores para acionar o LED, mas não serão o foco da explicação. Confira os comentários no código a seguir:

+

Código

+
#include <avr/io.h>            // Biblioteca para acesso aos registradores do MCU
+#include <util/delay.h>        // Biblioteca para funções de delay
+
+#define F_CPU 16500000L        // Frequencia de clock que o mcu está trabalhando
+
+/**
+  Essa é a função principal onde é iniciada aplicação
+*/
+int main(void)
+{
+    DDRB |= (1 << PB1);        // Configura Pino PB1 como saída (Pino do LED)
+
+    // O programar ficará nesse loop enquanto a placa estiver ligada
+    while (1)
+    {
+        PORTB |= (1 << PB1);   // Liga LED
+        _delay_ms(500);        // Aguarda 500 ms
+
+        PORTB &= ~(1 << PB1);  // Desliga LED
+        _delay_ms(500);        // Aguarda 500 ms
+    }
+
+    return (0);                // Necessário um retorno (pois a função retorna int) mesmo que a função nunca retornará
+}
+
+

Compilação e upload

+

para compilar o programa, acesse a pasta do exemplo e em seguida o comando make:

+
exemplos-avr-libc/exemplos/hello$ make
+
+

Já temos o makefile configurado na pasta, assim, será feita a compilação e em seguida aparecerá a mensagem para conectar a placa:

+
../../micronucleus/2.0a4/launcher  -cdigispark --timeout 60 -Uflash:w:main.hex:i
+Running Digispark Uploader...
+Plug in device now... (will timeout in 60 seconds)
+> Please plug in the device (will time out in 60 seconds) ...
+
+

Conecte a placa no PC ou pressione o botão de RESET se ela já estiver conectada.

+

Será iniciado o upload.

+

Resultados

+

Nesse exemplo o LED irá piscar em intervalos de 500 ms (on) e 500 ms (off).

+

No próximo exemplo vamos detalhar sobre os registradores de IO. Nesse momento, além da estrutura inicial é importante que você entenda como usar a função _delay_ms().

+

Essa função espera o tempo passado em milissegundos.

+

Altere o código para que o led fique 100 ms(on) e 1000 ms (off), veja o efeito.

+

Conclusão

+

Nesse exemplo tivemos o primeiro contato com a programação em linguagem C para microcontroladores. Notamos que devemos incluir as bibliotecas externas através do #include e que o programa precisa necessariamente ter a função int main(void).

+

Dentro da função main temos um loop infinito onde os comandos se repetirão enquanto a placa estiver ligada.

+
AutorFábio Souza
Data:24/04/2021
\ No newline at end of file diff --git a/en/docs/franzininho-diy/exemplos-avr-libc/int-ext/index.html b/en/docs/franzininho-diy/exemplos-avr-libc/int-ext/index.html index a1bd2910e..79932c666 100755 --- a/en/docs/franzininho-diy/exemplos-avr-libc/int-ext/index.html +++ b/en/docs/franzininho-diy/exemplos-avr-libc/int-ext/index.html @@ -1,17 +1,88 @@ - + - -Interrupção externa | Franzininho - - - + +Interrupção externa | Franzininho + + + -
-

Interrupção externa

As interrupções externas permitem que o microcontrolador interrompa sua execução de tarefas regulares para executar uma tarefa de prioridade mais alta quando ocorre um evento externo. Isso pode ser útil em aplicações que requerem resposta rápida a eventos externos, como pressionar um botão ou receber um sinal de outro dispositivo.

A configuração de uma interrupção externa no ATTINY85 envolve a definição do pino que será usado como fonte de interrupção, a configuração do nível lógico que causará a interrupção e a definição da rotina de interrupção que será executada quando a interrupção for acionada.

Ao programar a Franzininho DIY (ATTINY85) com a biblioteca avrlibc, você pode facilmente configurar interrupções externas usando funções da biblioteca como sei() e cli(). Além disso, a avrlibc oferece muitas outras bibliotecas úteis para o ATTINY85, tornando o processo de programação mais fácil e eficiente.

Recursos Necessários

  • Placa Franzininho DIY(com Micronucleus)
  • Chave Tactil
  • Jumpers
  • Computador com as ferramentas de software instaladas

Circuito

circuito

Código

/**
*
* @file main.c
* @author Fábio Souza
* @brief Exemplo para leitura de botão e acionamento de LED
* @version 0.1
* @date 2021-02-03
*
* @copyright Franzininho
* This example code is in the Public Domain (or CC0 licensed, at your option.)
* Unless required by applicable law or agreed to in writing, this
* software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied.
*
*/

#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 16500000L

//Macro auxiliares para manipulação de bits
#define setBit(valor,bit) (valor |= (1<<bit))
#define clearBit(valor,bit) (valor &= ~(1<<bit))
#define toogleBit(valor,bit) (valor ^= (1<<bit))
#define testBit(valor,bit) (valor & (1<<bit))

// define o pino que o botão está conectado
#define BUTTON_PIN PB2
// define o pino que o LED está conectado
#define LED_PIN PB1


ISR (INT0_vect) // Interrupt service routine
{
toogleBit(PORTB,LED_PIN);
}

int main()
{
setBit(DDRB,LED_PIN); // Configura Pino PB1 como saída (Pino do LED)
clearBit(DDRB,BUTTON_PIN); //configura pino PB0 como entrada (pino do Botão)
setBit(PORTB,BUTTON_PIN); //habilita pull up para a entrada PB0 - garante nivel
// lógico 1 quando botão não estiver pressionado

setBit(GIMSK,INT0); // Ativa a interrupção externa INT0
setBit(MCUCR,ISC01); //configura borda de descida
sei(); // Habilita as interrupções globais

while(1)
{

}

return 0;
}

Simulação

Desafio

Faça com com que o LED ligue ao pressionar o botao e desligue quando soltar. Para isso você preciará configurar a interrução na borda de subinda.

AutorFábio Souza
Data:05/02/2023
- - +

Interrupção externa

As interrupções externas permitem que o microcontrolador interrompa sua execução de tarefas regulares para executar uma tarefa de prioridade mais alta quando ocorre um evento externo. Isso pode ser útil em aplicações que requerem resposta rápida a eventos externos, como pressionar um botão ou receber um sinal de outro dispositivo.

+

A configuração de uma interrupção externa no ATTINY85 envolve a definição do pino que será usado como fonte de interrupção, a configuração do nível lógico que causará a interrupção e a definição da rotina de interrupção que será executada quando a interrupção for acionada.

+

Ao programar a Franzininho DIY (ATTINY85) com a biblioteca avrlibc, você pode facilmente configurar interrupções externas usando funções da biblioteca como sei() e cli(). Além disso, a avrlibc oferece muitas outras bibliotecas úteis para o ATTINY85, tornando o processo de programação mais fácil e eficiente.

+

Recursos Necessários

+
    +
  • Placa Franzininho DIY(com Micronucleus)
  • +
  • Chave Tactil
  • +
  • Jumpers
  • +
  • Computador com as ferramentas de software instaladas
  • +
+

Circuito

+

circuito

+

Código

+
/**
+ * 
+ * @file main.c
+ * @author Fábio Souza
+ * @brief Exemplo para leitura de botão e acionamento de LED
+ * @version 0.1
+ * @date 2021-02-03
+ * 
+ * @copyright Franzininho 
+ * This example code is in the Public Domain (or CC0 licensed, at your option.)
+ * Unless required by applicable law or agreed to in writing, this
+ * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied.
+ * 
+ */
+
+#include <avr/io.h>
+#include <avr/interrupt.h>
+
+#define F_CPU 16500000L
+ 	
+//Macro auxiliares para manipulação de bits   
+#define setBit(valor,bit) (valor |= (1<<bit))
+#define clearBit(valor,bit) (valor &= ~(1<<bit))
+#define toogleBit(valor,bit) (valor ^= (1<<bit))
+#define testBit(valor,bit)    (valor & (1<<bit))
+
+// define o pino que o botão está conectado
+#define BUTTON_PIN PB2
+// define o pino que o LED está conectado
+#define LED_PIN PB1
+
+
+ISR (INT0_vect)        // Interrupt service routine 
+{
+  toogleBit(PORTB,LED_PIN);
+}
+
+int main()
+{
+  setBit(DDRB,LED_PIN); 	    // Configura Pino PB1 como saída (Pino do LED)
+  clearBit(DDRB,BUTTON_PIN); //configura pino PB0 como entrada (pino do Botão)
+  setBit(PORTB,BUTTON_PIN);  //habilita pull up para a entrada PB0 - garante nivel 
+                             // lógico 1 quando botão não estiver pressionado
+  
+  setBit(GIMSK,INT0);        // Ativa a interrupção externa INT0
+  setBit(MCUCR,ISC01);       //configura borda de descida
+  sei();                     // Habilita as interrupções globais
+
+  while(1)
+  {
+
+  }
+   
+   return 0;
+}
+
+

Simulação

+ +

Desafio

+

Faça com com que o LED ligue ao pressionar o botao e desligue quando soltar. Para isso você preciará configurar a interrução na borda de subinda.

+
AutorFábio Souza
Data:05/02/2023
\ No newline at end of file diff --git a/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos/index.html b/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos/index.html index 7c5235e27..1e236c279 100755 --- a/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos/index.html +++ b/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passos/index.html @@ -1,17 +1,47 @@ - + - -Primeiros Passos | Franzininho - - - + +Primeiros Passos | Franzininho + + + -
-

Primeiros Passos

Esse material tem o objetivo de mostrar os primeiros passos para programação de microcontroladores usando linguagem C e com abordagem mais próxima ao hardware. Serão apresentados uma série de exemplos (com explicação detalhadas sobre a Arquitetura do ATtiny85) para programação da Franzininho DIY usando a AVR Libc.

É importante que você tenha o pinout da Franzininho DIY para fazer as ligações conforme orientações nos exemplos.

pinout Franzininho DIY

Ferramentas necessárias

Você não precisará de um compilador específico ou IDE para compilar os exemplos apresentados. Porém é importante que tenha as seguintes ferramentas instaladas na sua máquina:

  • GCC AVR
  • avr libc
  • binutils-avr
  • make

Instalação das ferramentas necessárias (Linux):

sudo apt install gcc-avr
sudo apt install avr-libc
sudo apt install binutils-avr
sudo apt install make

A placa Franzininho deve estar com o bootloader Micronucleus( bootloader oficial para a Franzininho DIY).

Compilação no Linux

cd ../exemplos-avr-libc/exemplos/01-hello
make all

Arduino IDE

Você também poderá reproduzir todos os exemplos apresentados diretamente na IDE Arduino (sem usar o framework Arduino). Isso facilitará no processo de instalação e configuração das ferramentas e também no upload.

wokwi_logo Wokwi

Você também pode usar o Simulador Online do Wokwi para reproduzir os projetos apresentados nessa série.

PICSimLab

Caso não tenha acesso a Internet ou uma boa conexão, uma outra opção disponível para reproduzir os exemplos na sua máquina é o simulador PICSimLab que possuí suporte ao Franzininho DIY.

Repositórios e materiais de apoio

Todos os exemplos serão hospedados no github do projeto Franzininho. É importante que você use o datasheet do Attiny85 como material de apoio, assim como a documentação da AVR Libc

Aproveite essa jornada.

Saiba mais

Franzininho – Um Arduino para todos

AutorFábio Souza
Data:24/04/2021
- - +

Primeiros Passos

Esse material tem o objetivo de mostrar os primeiros passos para programação de microcontroladores usando linguagem C e com abordagem mais próxima ao hardware. Serão apresentados uma série de exemplos (com explicação detalhadas sobre a Arquitetura do ATtiny85) para programação da Franzininho DIY usando a AVR Libc.

+

É importante que você tenha o pinout da Franzininho DIY para fazer as ligações conforme orientações nos exemplos.

+

pinout Franzininho DIY

+

Ferramentas necessárias

+

Você não precisará de um compilador específico ou IDE para compilar os exemplos apresentados. Porém é importante que tenha as seguintes ferramentas instaladas na sua máquina:

+
    +
  • GCC AVR
  • +
  • avr libc
  • +
  • binutils-avr
  • +
  • make
  • +
+

Instalação das ferramentas necessárias (Linux):

+
sudo apt install gcc-avr
+sudo apt install avr-libc
+sudo apt install binutils-avr
+sudo apt install make
+
+

A placa Franzininho deve estar com o bootloader Micronucleus( bootloader oficial para a Franzininho DIY).

+

Compilação no Linux

+
cd ../exemplos-avr-libc/exemplos/01-hello
+make all
+
+

Arduino IDE

+

Você também poderá reproduzir todos os exemplos apresentados diretamente na IDE Arduino (sem usar o framework Arduino). Isso facilitará no processo de instalação e configuração das ferramentas e também no upload.

+

wokwi_logo Wokwi

+

Você também pode usar o Simulador Online do Wokwi para reproduzir os projetos apresentados nessa série.

+

PICSimLab

+

Caso não tenha acesso a Internet ou uma boa conexão, uma outra opção disponível para reproduzir os exemplos na sua máquina é o simulador PICSimLab que possuí suporte ao Franzininho DIY.

+

Repositórios e materiais de apoio

+

Todos os exemplos serão hospedados no github do projeto Franzininho. É importante que você use o datasheet do Attiny85 como material de apoio, assim como a documentação da AVR Libc

+

Aproveite essa jornada.

+

Saiba mais

+

Franzininho – Um Arduino para todos

+
AutorFábio Souza
Data:24/04/2021
\ No newline at end of file diff --git a/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital/index.html b/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital/index.html index 66625be37..3af3db016 100755 --- a/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital/index.html +++ b/en/docs/franzininho-diy/exemplos-avr-libc/saida-digital/index.html @@ -1,17 +1,106 @@ - + - -Saída Digital | Franzininho - - - + +Saída Digital | Franzininho + + + -
-

Saída Digital

Agora que já estamos com as ferramentas instaladas e a placa Franzininho DIY em mãos, vamos dar início aos estudos dos periféricos internos do ATtiny85.

Nesse artigo vamos explorar os pinos de I/O como saída digital. Ao final, você saberá como acionar dispositivos externos a Franzininho DIY.

Recursos Necessários

  • Placa Franzininho DIY(com Micronucleus)
  • Computador com as ferramentas de software instaladas

Pinos do ATtiny85

O ATtiny85 possui 8 pinos, sendo que 6 deles podemos usar como I/O (entradas ou saídas) digitais. Os pinos de I/O são nomeados conforme a porta que eles pertencem. Na figura a seguir vemos que os pinos do ATtiny85 são nomeados de PBx, onde x é o número correspondente ao pino no registrador (não se preocupe, vamos ver mais detalhes a seguir):

Pinagem do ATtiny85

Cada pino de I/O pode ser usado como entrada ou saída e também como outras funções nesse momento só vamos trabalhar com os pinos funcionando como GPIO (General Porpouse Input/Output).

Conforme exibido na imagem acima, temos os seguintes pinos disponíveis no ATtiny85:

PB0, PB1, PB2, PB3, PB4, PB5.

Algumas Particularidades do circuito da Franzininho DIY

Os pinos de I/O são marcados em Amarelo no Pinout da Franzininho DIY

pinout Franzininho DIY

  • O pino PB5 é configurado como RESET na Franzininho DIY, sendo assim não poderemos usá-lo como I/O.
  • Os pinos PB3 e PB4 são usados para o circuito da USB, sendo assim temos que usá-los com cautela. Geralmente esses pinos são usados apenas como saídas digitais.
  • O LED amarelo da placa está ligado ao pino PB1.
  • Os pinos PB0 E PB2 não possuem circuito ligados a eles.

Registradores responsáveis pelos pinos de I/O

Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:

  • PORTB: Registrador de dados. Responsável pela escrita nos pinos;
  • DDRB: Registrador de direção do pino. Responsável pela configuração dos pinos para definir se será entrada ou saída;
  • PINB: Registrador de entrada da porta. Responsável pela leitura do estado do pino.

Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos teríamos os finais A, B,C, etc. Cada porta só possui no máximo 8 pinos.

Na seção 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configurações possíveis para os pinos:

configuração GPIO

A figura abaixo exibe os registradores responsáveis pelos pino de I/O do PORTB:

configuração GPIO

Note que cada bit dos registradores é responsável por pino sendo indexado pelo número correspondente ao bit. Dessa forma, se quisermos usar o pino PB1 para acionar o LED, devemos configurar o registrador DDRB da seguinte forma:

76543210
--000010

E para acionar ligar/deligar o LED devemos colocar 1 ou no bit correspondente no PORTB.

Vamos a um exemplo para ficar mais claro.

Códigos

#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 16500000L // Frequência do oscilador. usado para a função de delay

int main(void)
{
DDRB = 0b00000010; // Configura Pino PB1 como saída (Pino do LED)

while (1)
{
PORTB = 0b00000010; // Liga o LED 1
_delay_ms(250); // Aguarda 250 ms
PORTB = 0b00000000; // Desliga o LED 1
_delay_ms(250); // Aguarda 250 ms
}

return (0);
}

O exemplo acima pisca o LED em intervalos de 250 ms. A configuração do pino PB1 como saída foi feito colocando o bit1 de DDRB em 1. Já para ligar e desligar o LED foi manipulado o bit 1 de PORTB, hora em 1 hora em 0.

Bacana, não?

podemos melhorar a manipulação dos bits dos registradores usando macros. As macros são rotinas que facilitam nossas vidas. Recomendo que se você leia esse artigo para entender sobre as macros e as operações efetuadas: https://www.embarcados.com.br/bits-em-linguagem-c/

Vamos usar as seguintes macros:

#define setBit(valor,bit) (valor |= (1<<bit))
#define toogleBit(valor,bit) (valor ^= (1<<bit))

Os nomes já são auto-explicativos mas vamos verificar como usá-las no programa em C:

#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 16500000L

// Macros
#define setBit(valor,bit) (valor |= (1 << bit))
#define toogleBit(valor,bit) (valor ^= (1 << bit))

int main(void)
{
setBit(DDRB,PB1); // Configura Pino PB1 como saída (Pino do LED)

while (1)
{
toogleBit(PORTB, PB1); // Inverte o estado do pino
_delay_ms(250); // Aguarda 250 ms
}

return (0);
}

Dessa forma manipulamos somente os bits desejados, não alterando os valores dos outros que poderão ser usados para outras aplicações.

Desafio

Coloque outro LED no pino PB0 e o acione alternadamente ao pino PB1, ou seja, quando LED no PB0 estiver ligado o LED em PB1 deve apagar e vice-versa.

AutorFábio Souza
Data:24/04/2021
- - +

Saída Digital

Agora que já estamos com as ferramentas instaladas e a placa Franzininho DIY em mãos, vamos dar início aos estudos dos periféricos internos do ATtiny85.

+

Nesse artigo vamos explorar os pinos de I/O como saída digital. Ao final, você saberá como acionar dispositivos externos a Franzininho DIY.

+

Recursos Necessários

+
    +
  • Placa Franzininho DIY(com Micronucleus)
  • +
  • Computador com as ferramentas de software instaladas
  • +
+

Pinos do ATtiny85

+

O ATtiny85 possui 8 pinos, sendo que 6 deles podemos usar como I/O (entradas ou saídas) digitais. Os pinos de I/O são nomeados conforme a porta que eles pertencem. Na figura a seguir vemos que os pinos do ATtiny85 são nomeados de PBx, onde x é o número correspondente ao pino no registrador (não se preocupe, vamos ver mais detalhes a seguir):

+

Pinagem do ATtiny85

+

Cada pino de I/O pode ser usado como entrada ou saída e também como outras funções nesse momento só vamos trabalhar com os pinos funcionando como GPIO (General Porpouse Input/Output).

+

Conforme exibido na imagem acima, temos os seguintes pinos disponíveis no ATtiny85:

+

PB0, PB1, PB2, PB3, PB4, PB5.

+

Algumas Particularidades do circuito da Franzininho DIY

+

Os pinos de I/O são marcados em Amarelo no Pinout da Franzininho DIY

+

pinout Franzininho DIY

+
    +
  • O pino PB5 é configurado como RESET na Franzininho DIY, sendo assim não poderemos usá-lo como I/O.
  • +
  • Os pinos PB3 e PB4 são usados para o circuito da USB, sendo assim temos que usá-los com cautela. Geralmente esses pinos são usados apenas como saídas digitais.
  • +
  • O LED amarelo da placa está ligado ao pino PB1.
  • +
  • Os pinos PB0 E PB2 não possuem circuito ligados a eles.
  • +
+

Registradores responsáveis pelos pinos de I/O

+

Para trabalhar com os pinos de I/O no ATtiny85 temos 3 registradores:

+
    +
  • PORTB: Registrador de dados. Responsável pela escrita nos pinos;
  • +
  • DDRB: Registrador de direção do pino. Responsável pela configuração dos pinos para definir se será entrada ou saída;
  • +
  • PINB: Registrador de entrada da porta. Responsável pela leitura do estado do pino.
  • +
+

Note que todos os registradores terminam com B no final. Isso significa que estamos trabalhando com o PORTB. Caso fosse um microcontrolador com maior quantidade de pinos teríamos os finais A, B,C, etc. Cada porta só possui no máximo 8 pinos.

+

Na seção 10 do datasheet do ATtiny85 temos todos os detalhes para se trabalhar com os I/O. A tabela a seguir, retirada do datasheet, exibe as configurações possíveis para os pinos:

+

configuração GPIO

+

A figura abaixo exibe os registradores responsáveis pelos pino de I/O do PORTB:

+

configuração GPIO

+

Note que cada bit dos registradores é responsável por pino sendo indexado pelo número correspondente ao bit. Dessa forma, se quisermos usar o pino PB1 para acionar o LED, devemos configurar o registrador DDRB da seguinte forma:

+
76543210
--000010
+

E para acionar ligar/deligar o LED devemos colocar 1 ou no bit correspondente no PORTB.

+

Vamos a um exemplo para ficar mais claro.

+

Códigos

+
#include <avr/io.h>
+#include <util/delay.h>
+
+#define F_CPU 16500000L        // Frequência do oscilador. usado para a função de delay
+
+int main(void)
+{
+  DDRB = 0b00000010;           // Configura Pino PB1 como saída (Pino do LED)
+
+  while (1)
+  {
+      PORTB = 0b00000010;      // Liga o LED 1
+      _delay_ms(250);          // Aguarda 250 ms
+      PORTB = 0b00000000;      // Desliga o LED 1
+      _delay_ms(250);          // Aguarda 250 ms
+  }
+
+  return (0);
+}
+
+

O exemplo acima pisca o LED em intervalos de 250 ms. A configuração do pino PB1 como saída foi feito colocando o bit1 de DDRB em 1. Já para ligar e desligar o LED foi manipulado o bit 1 de PORTB, hora em 1 hora em 0.

+

Bacana, não?

+

podemos melhorar a manipulação dos bits dos registradores usando macros. As macros são rotinas que facilitam nossas vidas. Recomendo que se você leia esse artigo para entender sobre as macros e as operações efetuadas: https://www.embarcados.com.br/bits-em-linguagem-c/

+

Vamos usar as seguintes macros:

+
#define setBit(valor,bit) (valor |= (1<<bit))
+#define toogleBit(valor,bit) (valor ^= (1<<bit))
+
+

Os nomes já são auto-explicativos mas vamos verificar como usá-las no programa em C:

+
#include <avr/io.h>
+#include <util/delay.h>
+
+#define F_CPU 16500000L
+
+// Macros
+#define setBit(valor,bit) (valor |= (1 << bit))
+#define toogleBit(valor,bit) (valor ^= (1 << bit))
+
+int main(void)
+{
+    setBit(DDRB,PB1);          // Configura Pino PB1 como saída (Pino do LED)
+
+    while (1)
+    {
+        toogleBit(PORTB, PB1); // Inverte o estado do pino
+        _delay_ms(250);        // Aguarda 250 ms
+    }
+
+    return (0);
+}
+
+

Dessa forma manipulamos somente os bits desejados, não alterando os valores dos outros que poderão ser usados para outras aplicações.

+

Desafio

+

Coloque outro LED no pino PB0 e o acione alternadamente ao pino PB1, ou seja, quando LED no PB0 estiver ligado o LED em PB1 deve apagar e vice-versa.

+
AutorFábio Souza
Data:24/04/2021
\ No newline at end of file diff --git a/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int/index.html b/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int/index.html index 9d8a0d53e..c0063fa78 100755 --- a/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int/index.html +++ b/en/docs/franzininho-diy/exemplos-avr-libc/timer0-int/index.html @@ -1,17 +1,109 @@ - + - -Timer 0 - Interrupção | Franzininho - - - + +Timer 0 - Interrupção | Franzininho + + + -
-

Timer 0 - Interrupção

Nesse exemplo vamos entender como usar a interrupção do Timer0 para verificar o seu overflow. Dessa forma não precisaremos ficar monitorando o flag de overflow no loop principal da aplicação.

Interrupção do Timer0

No exemplo anterior configuramos o Timer0 para operar no modo normal. Para monitora a sua contagem monitoramos o flag TOV0 dentro do loop. Como o Timer é um periférico que funciona independente da CPU podemos habilitar a sua contagem e verificar o overflow através da sua interrupção.

Para habilitar a interrupção do Timer0 devermos colocar 1 no bit TOIE0 no registrador TIMSK:

TIMSK

Após isso, para que a interrupção realmente ocorra, devemos habilitar a chave global de interrupção através da função sei();

Usando o Timer0 como temporizador com sua interrupção

Vamos fazer a mesma aplicação do exemplo anterior, que é inverter o estado lo LED em intervalos de 1 s. A diferença aqui é que vamos monitorar os overflows do timer através da rotina de interrupção.

A configuração do timer segue a mesma, já que queremos gerar um delay de 1 segundo.

Assim, precisaremos contar a quantidade de interrupções e quando atingir 63, inverteremos o estado do LED.

Recursos necessários

  • Placa Franzininho DIY(com Micronucleus);
  • LED;
  • Resistor de 470 Ohm;
  • Jumpers;
  • Computador com as ferramentas de software instaladas.

Código exemplo

/**
*
* @file main.c
* @author Fábio Souza
* @brief Exibe como usar a interrupção do timer 0 para temporização
* @version 0.1
* @date 2021-02-13
*
* @copyright Franzininho
* This example code is in the Public Domain (or CC0 licensed, at your option.)
* Unless required by applicable law or agreed to in writing, this
* software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied.
*
*/

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#define F_CPU 16500000L


#define setBit(valor,bit) (valor |= (1<<bit))
#define clearBit(valor,bit) (valor &= ~(1<<bit))
#define toogleBit(valor,bit) (valor ^= (1<<bit))
#define testBit(valor,bit) (valor & (1<<bit))

unsigned char tempo = 0; //contador auxiliar


ISR (TIMER0_OVF_vect) //vetor de interrupção para o timer 0
{
tempo++; //incrementa contador auxiliar
if(tempo >=63) //se passaram-se 63 x 15,89 ms = 1 s
{
toogleBit(PORTB,PB1); //inverte LED
tempo = 0; //reinicia contador
}
}

/**
* @brief Função main
*
* @return int
*/
int main(void)
{

setBit(DDRB,PB1); // Configura Pino PB1 como saída (Pino do LED)

//configuração do timer0 para overflow a aproximadamente 15,89 ms
//t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms
TCCR0A=0x00; //Modo Normal
TCCR0B=0x00;
TCCR0B |= (1<<CS00)|(1<<CS02); //prescaler de 1024
TCNT0=0; //inicia timer com 0
setBit(TIMSK,TOIE0); //habilita interrupção do timer0
sei(); //habilita interrupção global

/**
* @brief loop infinito
*
*/
while (1)
{
//não faz nada no loop
}
return (0);
}
Informação

Note que no loop principal não fizemos nada. Todo o tratamento ficou na interrupção do Timer0.

Simulação do exemplo

  • Wokwi:
- - +

Timer 0 - Interrupção

Nesse exemplo vamos entender como usar a interrupção do Timer0 para verificar o seu overflow. Dessa forma não precisaremos ficar monitorando o flag de overflow no loop principal da aplicação.

+

Interrupção do Timer0

+

No exemplo anterior configuramos o Timer0 para operar no modo normal. Para monitora a sua contagem monitoramos o flag TOV0 dentro do loop. Como o Timer é um periférico que funciona independente da CPU podemos habilitar a sua contagem e verificar o overflow através da sua interrupção.

+

Para habilitar a interrupção do Timer0 devermos colocar 1 no bit TOIE0 no registrador TIMSK:

+

TIMSK

+

Após isso, para que a interrupção realmente ocorra, devemos habilitar a chave global de interrupção através da função sei();

+

Usando o Timer0 como temporizador com sua interrupção

+

Vamos fazer a mesma aplicação do exemplo anterior, que é inverter o estado lo LED em intervalos de 1 s. A diferença aqui é que vamos monitorar os overflows do timer através da rotina de interrupção.

+

A configuração do timer segue a mesma, já que queremos gerar um delay de 1 segundo.

+

Assim, precisaremos contar a quantidade de interrupções e quando atingir 63, inverteremos o estado do LED.

+

Recursos necessários

+
    +
  • Placa Franzininho DIY(com Micronucleus);
  • +
  • LED;
  • +
  • Resistor de 470 Ohm;
  • +
  • Jumpers;
  • +
  • Computador com as ferramentas de software instaladas.
  • +
+

Código exemplo

+
/**
+ * 
+ * @file main.c
+ * @author Fábio Souza
+ * @brief Exibe como usar a interrupção do timer 0 para temporização
+ * @version 0.1
+ * @date 2021-02-13
+ * 
+ * @copyright Franzininho 
+ * This example code is in the Public Domain (or CC0 licensed, at your option.)
+ * Unless required by applicable law or agreed to in writing, this
+ * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied.
+ * 
+ */
+
+#include <avr/io.h>
+#include <util/delay.h> 
+#include <avr/interrupt.h>
+
+#define F_CPU 16500000L
+
+ 	
+#define setBit(valor,bit) (valor |= (1<<bit))
+#define clearBit(valor,bit) (valor &= ~(1<<bit))
+#define toogleBit(valor,bit) (valor ^= (1<<bit))
+#define testBit(valor,bit)    (valor & (1<<bit))
+
+unsigned char tempo = 0;  //contador auxiliar
+
+
+ISR (TIMER0_OVF_vect) //vetor de interrupção para o timer 0
+{
+  tempo++;                     //incrementa contador auxiliar
+  if(tempo >=63)               //se passaram-se 63 x 15,89 ms = 1 s
+  {
+    toogleBit(PORTB,PB1);      //inverte LED
+    tempo = 0;                 //reinicia contador
+  }
+}
+
+/**
+ * @brief Função main
+ * 
+ * @return int 
+ */
+int main(void) 
+{
+  
+  setBit(DDRB,PB1); 	// Configura Pino PB1 como saída (Pino do LED)
+
+  //configuração do timer0 para overflow a aproximadamente 15,89 ms
+  //t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms
+  TCCR0A=0x00;                      //Modo Normal
+  TCCR0B=0x00;
+  TCCR0B |= (1<<CS00)|(1<<CS02);   //prescaler de 1024
+  TCNT0=0;                         //inicia timer com 0
+  setBit(TIMSK,TOIE0);             //habilita interrupção do timer0 
+  sei();                           //habilita interrupção global
+  
+  /**
+   * @brief loop infinito
+   * 
+   */
+  while (1)
+  {
+      //não faz nada no loop 
+  }                                                
+  return (0);                           
+}
+
+

Note que no loop principal não fizemos nada. Todo o tratamento ficou na interrupção do Timer0.

+

Simulação do exemplo

+
    +
  • **Wokwi: **
  • +
+
\ No newline at end of file diff --git a/en/docs/franzininho-diy/exemplos-avr-libc/timer0/index.html b/en/docs/franzininho-diy/exemplos-avr-libc/timer0/index.html index 34abbde73..c1e2b872f 100755 --- a/en/docs/franzininho-diy/exemplos-avr-libc/timer0/index.html +++ b/en/docs/franzininho-diy/exemplos-avr-libc/timer0/index.html @@ -1,17 +1,155 @@ - + - -Timer 0 | Franzininho - - - + +Timer 0 | Franzininho + + + -
-

Timer 0

Os timers são periféricos muito importantes nos microcontroladores. Podemos usá-los para temporização, contagem de eventos, PWM, medir pulsos externos, etc. O ATtiny85 possui 2 timers, chamados de Timer0 e Timer1. Nesse exemplos vamos focar no uso do Timer0 como temporizador.

Características do Timer0

O Timer0 é um módulo temporizador/contador de 8 bits de uso geral. Isso significa que ele pode contar de 0 a 255. A funcionalidade de temporização pode ser estendida ainda mais usando os periféricos de comparação, que permitem que o temporizador conte eventos, gere sinais PWM e assim por diante. Assim é possível gerar temporizações precisas, ondas e sinais PWM independentes da CPU.

A figura a seguir exibe o diagrama de blocos simplificado do Timer0:

Diagrama de blocos do Timer0

Resumo de recursos do Timer0

  • Duas unidades de comparação de saída independentes;
  • Registradores de comparação de saída com buffer duplo;
  • Limpa cronômetro na comparação de correspondência (recarregamento automático);
  • Modulador de largura de pulso com correção de fase (PWM) livre de glitch;
  • Período PWM variável;
  • Gerador de frequência;
  • Três fontes de interrupção independentes (TOV0, OCF0A e OCF0B);

Usando o Timer0 como temporizador

Nesse exemplos vamos usar o Timer0 para gerar delay de 1s para piscar um LED.

Passo para configurar o Timer0 como temporizador

Passo 1: Configurar o Timer0 para trabalhar no modo normal. Nesse modo o timer iniciará a contagem em 0 e irá até máximo de 255. Quando atingido o máximo é gerado um flag de sinalização de overflow e o timer volta a contar a partir do zero.

Para configurar o modo de operação normal, devemos configurar o registrador TCCR0A – Timer/Counter Control Register A da seguinte forma:

  • COM0A[1:0] e COM0B[1:0] = 0

  • WGM0[1:0] = 0 e TCCR0B – WGM02 = 0

Deve-se escrever os seguintes valores em TCCR0A – Timer/Counter Control Register A:

TCCR0A = 0b00000000;

Passo 2: Ajustar o prescaler do clock interno para 1024

Para ajustar o prescale precisamos configurar os bits CS02,CS01 e CS00 do TCCR0B:

  • TCCR0B – CS0[2:0]

Deve-se escrever os seguintes valores em TCCR0B – Timer/Counter Control Register B:

TCCR0B = 0b00000101;

Calculo do Delay

Estamos trabalhando com o clock interno do ATtiny85 em 16.5Mhz. Essa é a fonte de clock para o timer0 em modo de operação normal. Como selecionamos o prescaler para dividir o clock por 1024, temos o incremento do timer0 em:

  • tempo por incremento do timer0 = 1/(16.5M/1024) = 62 us

Assim, o tempo para o timer0 estourar(overflow) é:

  • tempo para o timer0 estourar = 62us x 256 = 15,89ms

Portanto, para ter um delay de 1 segundo precisamos ter:

  • quantidade de overflows do timer0 = 1/15,89ms ≃ 63 vezes

Passos para monitorar o overflow do timer e gerar o delay de 1s

  • Passo 0: Colocar TCNT0 em zero
  • Passo 1: Aguardar a contagem do timer verificando quando TOV0 vai para 1
  • Passo 2: Limpar a flag TOV0 escrevendo 1 nela(Isso mesmo escrevendo 1)
  • Passo 3: Repetir passos 1 e 2 63 vezes para atingir 1 segundo
  • Passo 4: Passou um segundo – Inverter LED

Recursos necessários

  • Placa Franzininho DIY(com Micronucleus)
  • LED
  • Resistor de 470 Ohm
  • Jumpers
  • Computador com as ferramentas de software instaladas

Código exemplo

/**
*
* @file main.c
* @author Fábio Souza
* @brief Exibe como usar o timer zero para temporização
* @version 0.1
* @date 2021-02-13
*
* @copyright Franzininho
* This example code is in the Public Domain (or CC0 licensed, at your option.)
* Unless required by applicable law or agreed to in writing, this
* software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied.
*
*/

#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 16500000L


#define setBit(valor,bit) (valor |= (1<<bit))
#define clearBit(valor,bit) (valor &= ~(1<<bit))
#define toogleBit(valor,bit) (valor ^= (1<<bit))
#define testBit(valor,bit) (valor & (1<<bit))

/**
* @brief Função main
*
* @return int
*/
int main(void)
{

unsigned char tempo = 0; //contador auxiliar

setBit(DDRB,PB1); // Configura Pino PB1 como saída (Pino do LED)

//configuração do timer0 para overflow a aproximadamente 15,89 ms
//t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms
TCCR0A=0x00; //Modo Normal
TCCR0B=0x00;
TCCR0B |= (1<<CS00)|(1<<CS02); //prescaler de 1024
TCNT0=0; //inicia timer com 0

/**
* @brief loop infinito
*
*/
while (1)
{
if(testBit(TIFR,TOV0)) //se timer estourou
{
setBit(TIFR,TOV0); //limpa flag
tempo++; //incrementa contador auxiliar
if(tempo >=63) //se passaram-se 63 x 15,89 ms = 1 s
{
toogleBit(PORTB,PB1); //inverte LED
tempo = 0; //reinicia contador
}
}
}
return (0);
}

Simulação do exemplo

  • Wokwi:
- - +

Timer 0

Os timers são periféricos muito importantes nos microcontroladores. Podemos usá-los para temporização, contagem de eventos, PWM, medir pulsos externos, etc. O ATtiny85 possui 2 timers, chamados de Timer0 e Timer1. Nesse exemplos vamos focar no uso do Timer0 como temporizador.

+

Características do Timer0

+

O Timer0 é um módulo temporizador/contador de 8 bits de uso geral. Isso significa que ele pode contar de 0 a 255. A funcionalidade de temporização pode ser estendida ainda mais usando os periféricos de comparação, que permitem que o temporizador conte eventos, gere sinais PWM e assim por diante. Assim é possível gerar temporizações precisas, ondas e sinais PWM independentes da CPU.

+

A figura a seguir exibe o diagrama de blocos simplificado do Timer0:

+

Diagrama de blocos do Timer0

+

Resumo de recursos do Timer0

+
    +
  • Duas unidades de comparação de saída independentes;
  • +
  • Registradores de comparação de saída com buffer duplo;
  • +
  • Limpa cronômetro na comparação de correspondência (recarregamento automático);
  • +
  • Modulador de largura de pulso com correção de fase (PWM) livre de glitch;
  • +
  • Período PWM variável;
  • +
  • Gerador de frequência;
  • +
  • Três fontes de interrupção independentes (TOV0, OCF0A e OCF0B);
  • +
+

Usando o Timer0 como temporizador

+

Nesse exemplos vamos usar o Timer0 para gerar delay de 1s para piscar um LED.

+

Passo para configurar o Timer0 como temporizador

+

Passo 1: Configurar o Timer0 para trabalhar no modo normal. Nesse modo o timer iniciará a contagem em 0 e irá até máximo de 255. Quando atingido o máximo é gerado um flag de sinalização de overflow e o timer volta a contar a partir do zero.

+

Para configurar o modo de operação normal, devemos configurar o registrador TCCR0A – Timer/Counter Control Register A da seguinte forma:

+
    +
  • COM0A[1:0] e COM0B[1:0] = 0
  • +
+

+
    +
  • WGM0[1:0] = 0 e TCCR0B – WGM02 = 0
  • +
+

+

Deve-se escrever os seguintes valores em TCCR0A – Timer/Counter Control Register A:

+

TCCR0A = 0b00000000;

+

Passo 2: Ajustar o prescaler do clock interno para 1024

+

Para ajustar o prescale precisamos configurar os bits CS02,CS01 e CS00 do TCCR0B:

+
    +
  • TCCR0B – CS0[2:0]
  • +
+

+

Deve-se escrever os seguintes valores em TCCR0B – Timer/Counter Control Register B:

+

TCCR0B = 0b00000101;

+

Calculo do Delay

+

Estamos trabalhando com o clock interno do ATtiny85 em 16.5Mhz. Essa é a fonte de clock para o timer0 em modo de operação normal. Como selecionamos o prescaler para dividir o clock por 1024, temos o incremento do timer0 em:

+
    +
  • tempo por incremento do timer0 = 1/(16.5M/1024) = 62 us
  • +
+

Assim, o tempo para o timer0 estourar(overflow) é:

+
    +
  • tempo para o timer0 estourar = 62us x 256 = 15,89ms
  • +
+

Portanto, para ter um delay de 1 segundo precisamos ter:

+
    +
  • quantidade de overflows do timer0 = 1/15,89ms ≃ 63 vezes
  • +
+

Passos para monitorar o overflow do timer e gerar o delay de 1s

+
    +
  • Passo 0: Colocar TCNT0 em zero
  • +
  • Passo 1: Aguardar a contagem do timer verificando quando TOV0 vai para 1
  • +
  • Passo 2: Limpar a flag TOV0 escrevendo 1 nela(Isso mesmo escrevendo 1)
  • +
  • Passo 3: Repetir passos 1 e 2 63 vezes para atingir 1 segundo
  • +
  • Passo 4: Passou um segundo – Inverter LED
  • +
+

Recursos necessários

+
    +
  • Placa Franzininho DIY(com Micronucleus)
  • +
  • LED
  • +
  • Resistor de 470 Ohm
  • +
  • Jumpers
  • +
  • Computador com as ferramentas de software instaladas
  • +
+

Código exemplo

+
/**
+ * 
+ * @file main.c
+ * @author Fábio Souza
+ * @brief Exibe como usar o timer zero para temporização
+ * @version 0.1
+ * @date 2021-02-13
+ * 
+ * @copyright Franzininho 
+ * This example code is in the Public Domain (or CC0 licensed, at your option.)
+ * Unless required by applicable law or agreed to in writing, this
+ * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied.
+ * 
+ */
+
+#include <avr/io.h>
+#include <util/delay.h> 
+
+#define F_CPU 16500000L
+
+ 	
+#define setBit(valor,bit) (valor |= (1<<bit))
+#define clearBit(valor,bit) (valor &= ~(1<<bit))
+#define toogleBit(valor,bit) (valor ^= (1<<bit))
+#define testBit(valor,bit)    (valor & (1<<bit))
+
+/**
+ * @brief Função main
+ * 
+ * @return int 
+ */
+int main(void) 
+{
+  
+  unsigned char tempo = 0;  //contador auxiliar
+
+  setBit(DDRB,PB1); 	// Configura Pino PB1 como saída (Pino do LED)
+
+  //configuração do timer0 para overflow a aproximadamente 15,89 ms
+  //t = (1/16.5Mhz) x 1024 x 256 = 15,89 ms
+  TCCR0A=0x00;                      //Modo Normal
+  TCCR0B=0x00;
+  TCCR0B |= (1<<CS00)|(1<<CS02);   //prescaler de 1024
+  TCNT0=0;                         //inicia timer com 0
+  
+  /**
+   * @brief loop infinito
+   * 
+   */
+  while (1)
+  {
+    if(testBit(TIFR,TOV0))         //se timer estourou
+    {
+      setBit(TIFR,TOV0);           //limpa flag
+      tempo++;                     //incrementa contador auxiliar
+      if(tempo >=63)               //se passaram-se 63 x 15,89 ms = 1 s
+      {
+        toogleBit(PORTB,PB1);      //inverte LED
+        tempo = 0;                 //reinicia contador
+      }
+    }
+  }                                                
+  return (0);                           
+}
+
+

Simulação do exemplo

+
    +
  • **Wokwi: **
  • +
+ +
\ No newline at end of file diff --git a/en/docs/franzininho-diy/exemplos-avr-libc/todo/index.html b/en/docs/franzininho-diy/exemplos-avr-libc/todo/index.html index f4671b92e..fae676b0e 100755 --- a/en/docs/franzininho-diy/exemplos-avr-libc/todo/index.html +++ b/en/docs/franzininho-diy/exemplos-avr-libc/todo/index.html @@ -1,17 +1,26 @@ - + - -TODO | Franzininho - - - + +TODO | Franzininho + + + -
-

TODO

A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a AVR LibC com a Franzininho DIY.

Fique a vontade para colaborar na construção dos materiais e códigos.

ExemplosStatusNota
Primeiros Passos🟢
Hello, World!🟢
Saída Digital🟢
Entrada Digital🟢
Timer 0🟢
Timer 0 - Interrupção🟢
Contador de pulsos externos🟢
Instrumento musical com Buzzer🟢
Interrupção externa🟢
Timer0 CTC🔴
Timer0 PWM🔴
Timer 1🔴
Timer 2 Interrupção🔴
Timer 1 PWM🔴
Conversor AD🔴
I2C🔴
SPI🔴
EEPROM🔴
Configuração de Clock🔴
Sleep🔴
Fuse bits🔴

Legenda:

  • 🟢 Feito
  • 🟡 Em progresso
  • 🔴 Ainda não implementado

Repositório de Exemplos

- - +

TODO

A tabela abaixo exibe o mapemento e status dos exemplos planejados para explorar a AVR LibC com a Franzininho DIY.

+

Fique a vontade para colaborar na construção dos materiais e códigos.

+
ExemplosStatusNota
Primeiros Passos🟢
Hello, World!🟢
Saída Digital🟢
Entrada Digital🟢
Timer 0🟢
Timer 0 - Interrupção🟢
Contador de pulsos externos🟢
Instrumento musical com Buzzer🟢
Interrupção externa🟢
Timer0 CTC🔴
Timer0 PWM🔴
Timer 1🔴
Timer 2 Interrupção🔴
Timer 1 PWM🔴
Conversor AD🔴
I2C🔴
SPI🔴
EEPROM🔴
Configuração de Clock🔴
Sleep🔴
Fuse bits🔴
+

Legenda:

+
    +
  • 🟢 Feito
  • +
  • 🟡 Em progresso
  • +
  • 🔴 Ainda não implementado
  • +
+

Repositório de Exemplos

+
\ No newline at end of file diff --git a/en/docs/franzininho-diy/girassol-automatizado/index.html b/en/docs/franzininho-diy/girassol-automatizado/index.html index 9a4b560fa..8da8ad61c 100755 --- a/en/docs/franzininho-diy/girassol-automatizado/index.html +++ b/en/docs/franzininho-diy/girassol-automatizado/index.html @@ -1,17 +1,75 @@ - + - -Girassol Automatizado | Franzininho - - - + +Girassol Automatizado | Franzininho + + + -
-

Girassol Automatizado

Nesse exemplo vamos fazer um girassol automatizado que se movimenta conforme a posição da luz.

Materiais:

  • Placa Franzininho DIY;
  • Protoboard;
  • LED 3mm;
  • 1 Resistor LDR (foto resistores 10 k)
  • 1 Servo motor
  • Jumpers macho/fêmea

Circuito

No protoboard você deve inserir o foto resistores e o servo motoro, conforme a imagem abaixo:

Circuito

Código


/*
Franzininho
Exemplo: Girassol Automatizado
Nesse exemplo é de um girassol automatizado com dois fotos resistores, um servo motor, entre outros materiais, confira.
*/
//

#include <Servo.h>

int sensor = A;
int servoMotor = 1;

int valorSensor =0;
int analogServo = 90;

Servo servo;

void setup() {
servo.attach(servoMotor);
servo.write(anguloServo);
}

void loop() {
valorSensor = analogRead(sensor);
if(valorSensor <512)
{
if(anguloServo < 170)anguloServo++;
}
if(valorSensor = >512)
{
if(anguloServo > 10)anguloServo--;
}

servo.write(anguloServo);
delay(50);
}

Video explicativo

Este projeto foi feiro para colaborar no projeto Co.Lab da Red Hat, confira esse e outros na plataforma:https://www.redhat.com/pt-br/colab-repo

Co.Lab | Workshop: Robótica Educacional - Aprenda sobre Ciência da Natureza e Eletrônica (Parte 1)

Co.Lab | Workshop: Robótica Educacional - Aprenda sobre Ciência da Natureza e Eletrônica (Parte 2)

Referência

Arduino Sunflower

AutorDiana Santos
Data:22/01/2022
- - +

Girassol Automatizado

Nesse exemplo vamos fazer um girassol automatizado que se movimenta conforme a posição da luz.

+

Materiais:

+
    +
  • Placa Franzininho DIY;
  • +
  • Protoboard;
  • +
  • LED 3mm;
  • +
  • 1 Resistor LDR (foto resistores 10 k)
  • +
  • 1 Servo motor
  • +
  • Jumpers macho/fêmea
  • +
+

Circuito

+

No protoboard você deve inserir o foto resistores e o servo motoro, conforme a imagem abaixo:

+

Circuito

+

Código

+

+/*
+Franzininho
+Exemplo:  Girassol Automatizado
+Nesse exemplo é de um girassol automatizado com dois fotos resistores,  um servo motor, entre outros materiais, confira.
+*/
+//
+
+#include <Servo.h>
+
+int sensor = A;
+int servoMotor = 1;
+
+int valorSensor =0;
+int analogServo = 90;
+
+Servo servo;
+
+void setup() {
+ servo.attach(servoMotor);
+ servo.write(anguloServo);
+}
+
+void loop() {
+ valorSensor = analogRead(sensor);
+ if(valorSensor <512)
+ {
+   if(anguloServo < 170)anguloServo++;
+ }
+ if(valorSensor = >512)
+ {
+   if(anguloServo > 10)anguloServo--;
+ }
+
+servo.write(anguloServo);
+delay(50);
+}
+
+
+

Video explicativo

+

Este projeto foi feiro para colaborar no projeto Co.Lab da Red Hat, confira esse e outros na plataforma:https://www.redhat.com/pt-br/colab-repo

+

Co.Lab | Workshop: Robótica Educacional - Aprenda sobre Ciência da Natureza e Eletrônica (Parte 1)

+ +

Co.Lab | Workshop: Robótica Educacional - Aprenda sobre Ciência da Natureza e Eletrônica (Parte 2)

+ +

Referência

+

Arduino Sunflower

+
AutorDiana Santos
Data:22/01/2022
\ No newline at end of file diff --git a/en/docs/franzininho-diy/identificando-componentes/index.html b/en/docs/franzininho-diy/identificando-componentes/index.html index feff79a4e..c2f01e4d5 100755 --- a/en/docs/franzininho-diy/identificando-componentes/index.html +++ b/en/docs/franzininho-diy/identificando-componentes/index.html @@ -1,17 +1,70 @@ - + - -Identificando os componentes | Franzininho - - - + +Identificando os componentes | Franzininho + + + -
-

Identificando os componentes

Placa de Circuito impresso

A placa de circuito impresso é responsável por receber todos os componentes. Ela pode ser feita de fibra de vidro ou fenolite. Para a Franzininho DIY foi desenvolvido um projeto em face simples, o que permite a fabricação caseira.

PCB

Na parte superior da placa (TOP) há os desenhos dos componentes, indicando a posição de cada um. Os componentes são encaixados em seus respectivos locais e depois são soldados através da parte inferior (Bottom).

TOP e Bottom da placa Franzininho DIY V2

Resistores

Os resistores são componentes passivos que se opõem à passagem de corrente elétrica no circuito. Existem diversos tipos de resistores disponíveis. Na Franzininho DIY usamos resistores de carbono de 1/4 W. Os anéis coloridos indicam o valor e tolerância do resistor.

Tabela Código de cores para resistores de 4 faixas

Fonte: http://blog.render.com.br/eletronica/como-calcular-o-valor-de-um-resistor/

Na Franzininho DIY usamos 5 resistores, com as seguintes referências e valores:

  • R1 e R2 - 68 R (Azul, Cinza, Preto, Dourado)

Resistores de 68 Ohm

  • R3 - 1K5 (Marrom, Verde, Vermelho, Dourado)

Resistor de 1500 Ohm

R4 e R5 - 1K (Marrom, Preto, Vermelho, Dourado)

Resistor de 1k Ohm

Capacitores

Capacitores são dispositivos elétricos capazes de armazenar carga elétrica em um campo elétrico. Na Franzininho DIY temos 2 tipos de capacitores:

C1 - Capacitor Cerâmico 100 nF x 50 V

Capacitor Cerâmico 100 nF

C2 - Capacitor eletrolítico 10uF x 35V

Capacitor eletrolítico 10uF x 35V

LEDs

O LED (Light Emitting Diode) é usado para a emissão de luz em locais e instrumentos onde se torna mais conveniente a sua utilização no lugar de uma lâmpada.

Na Franzininho DIY são usados dois leds difusos de 3 mm

ON - LED Verde, LED - LED Amarelo

LEDs 3mm

Chave táctil

É um botão de contato momentâneo. Na Franzininho DIY usamos uma chave táctil NA (normalmente aberta) de 4,3 x 6 x 6 mm que tem a função de botão de Reset.

Chave - RESET

Chave táctil

Soquete

O soquete é usado para o encaixe de circuitos integrados, facilitando a sua troca na placa.

Na Franzininho DIY usamos um soquete de 8 pinos para acomodar o Microcontrolador ATtiny85

IC1 - Soquete

Soquete torneado 8 pinos

Barra de pinos

São usadas para expansão de pinos e entrada de alimentação na placa. Na Franzininho DIY usamos 3 vias para o conector de alimentação e 8 vias para o conector de expansão da placa

  • J1 - Barra de 3 pinos
  • P0, P1...GND - Barra de 8 pinos

Barra de pinos

Regulador de Tensão

Usado para abaixar a tensão de entrada para um nível em que o circuito possa trabalhar. Na Franzininho DIY usamos um regulador de tensão de 5V, o 78L05

IC2 - 78L05 - Regulador de tensão 5V

Regulador de tensão 78L05

Conector USB

Usado para conectar a placa ao computador ou a um circuito de alimentação com conector USB. Na Franzininho DIY usamos um Conector USB Macho 90º com trava

Conector USB Macho 90º com trava

ATtiny85

É o cérebro da Franzininho DIY e o componente mais caro. Tenha cuidado na hora de encaixar no soquete. Siga as orientações de montagem.

ATtiny85

- - +

Identificando os componentes

Placa de Circuito impresso

+

A placa de circuito impresso é responsável por receber todos os componentes. Ela pode ser feita de fibra de vidro ou fenolite. Para a Franzininho DIY foi desenvolvido um projeto em face simples, o que permite a fabricação caseira.

+

PCB

+

Na parte superior da placa (TOP) há os desenhos dos componentes, indicando a posição de cada um. Os componentes são encaixados em seus respectivos locais e depois são soldados através da parte inferior (Bottom).

+

TOP e Bottom da placa Franzininho DIY V2

+

Resistores

+

Os resistores são componentes passivos que se opõem à passagem de corrente elétrica no circuito. Existem diversos tipos de resistores disponíveis. Na Franzininho DIY usamos resistores de carbono de 1/4 W. Os anéis coloridos indicam o valor e tolerância do resistor.

+

Tabela Código de cores para resistores de 4 faixas

+

Fonte: http://blog.render.com.br/eletronica/como-calcular-o-valor-de-um-resistor/

+

Na Franzininho DIY usamos 5 resistores, com as seguintes referências e valores:

+
    +
  • R1 e R2 - 68 R (Azul, Cinza, Preto, Dourado)
  • +
+

Resistores de 68 Ohm

+
    +
  • R3 - 1K5 (Marrom, Verde, Vermelho, Dourado)
  • +
+

Resistor de 1500 Ohm

+

R4 e R5 - 1K (Marrom, Preto, Vermelho, Dourado)

+

Resistor de 1k Ohm

+

Capacitores

+

Capacitores são dispositivos elétricos capazes de armazenar carga elétrica em um campo elétrico. Na Franzininho DIY temos 2 tipos de capacitores:

+

C1 - Capacitor Cerâmico 100 nF x 50 V

+

Capacitor Cerâmico 100 nF

+

C2 - Capacitor eletrolítico 10uF x 35V

+

Capacitor eletrolítico 10uF x 35V

+

LEDs

+

O LED (Light Emitting Diode) é usado para a emissão de luz em locais e instrumentos onde se torna mais conveniente a sua utilização no lugar de uma lâmpada.

+

Na Franzininho DIY são usados dois leds difusos de 3 mm

+

ON - LED Verde, LED - LED Amarelo

+

LEDs 3mm

+

Chave táctil

+

É um botão de contato momentâneo. Na Franzininho DIY usamos uma chave táctil NA (normalmente aberta) de 4,3 x 6 x 6 mm que tem a função de botão de Reset.

+

Chave - RESET

+

Chave táctil

+

Soquete

+

O soquete é usado para o encaixe de circuitos integrados, facilitando a sua troca na placa.

+

Na Franzininho DIY usamos um soquete de 8 pinos para acomodar o Microcontrolador ATtiny85

+

IC1 - Soquete

+

Soquete torneado 8 pinos

+

Barra de pinos

+

São usadas para expansão de pinos e entrada de alimentação na placa. Na Franzininho DIY usamos 3 vias para o conector de alimentação e 8 vias para o conector de expansão da placa

+
    +
  • J1 - Barra de 3 pinos
  • +
  • P0, P1...GND - Barra de 8 pinos
  • +
+

Barra de pinos

+

Regulador de Tensão

+

Usado para abaixar a tensão de entrada para um nível em que o circuito possa trabalhar. Na Franzininho DIY usamos um regulador de tensão de 5V, o 78L05

+

IC2 - 78L05 - Regulador de tensão 5V

+

Regulador de tensão 78L05

+

Conector USB

+

Usado para conectar a placa ao computador ou a um circuito de alimentação com conector USB. Na Franzininho DIY usamos um Conector USB Macho 90º com trava

+

Conector USB Macho 90º com trava

+

ATtiny85

+

É o cérebro da Franzininho DIY e o componente mais caro. Tenha cuidado na hora de encaixar no soquete. Siga as orientações de montagem.

+

ATtiny85

\ No newline at end of file diff --git a/en/docs/franzininho-diy/led-rgb/index.html b/en/docs/franzininho-diy/led-rgb/index.html index 5265b2cce..26c768fe3 100755 --- a/en/docs/franzininho-diy/led-rgb/index.html +++ b/en/docs/franzininho-diy/led-rgb/index.html @@ -1,17 +1,65 @@ - + - -LED RGB | Franzininho - - - + +LED RGB | Franzininho + + + -
-

LED RGB

Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas três cores.

Você pode controlar da forma que você quiser, confira o código simples que está na documentação.

Modifique, crie e compartilhe!

Materiais

  • 1 Placa Franzininho DIY;
  • 1 Protoboard;
  • 1 LED RGB catodo comum;
  • 3 Resistor 1k
  • 3 Jumpers macho/fêmea;

Circuito

Na protoboard você pode montar da seguinte forma:

Circuito

Sketch

//RGB com a Franzininho DIY

const int red = 0;
const int green = 1;
const int blue = 2;

void setup() {
// configura os pinos de cada cor como saída:
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
}

void loop() {
// aciona o LED na cor vermelha:
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
digitalWrite(blue, LOW);
delay(5000); // aguarda 5000ms

// aciona o LED na cor verde:
digitalWrite(red, LOW);
digitalWrite(green, HIGH);
digitalWrite(blue, LOW);
delay(5000); // aguarda 5000ms

// aciona o LED na cor azul:
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(blue, HIGH);
delay(5000); // aguarda 5000ms
}

Simulação

Video de Funcionamento

- - +

LED RGB

Esse exemplo aprenderemos a como ligar o LED RGB com a Franzininho DIY suas três cores.

+

Você pode controlar da forma que você quiser, confira o código simples que está na documentação.

+

Modifique, crie e compartilhe!

+

Materiais

+
    +
  • 1 Placa Franzininho DIY;
  • +
  • 1 Protoboard;
  • +
  • 1 LED RGB catodo comum;
  • +
  • 3 Resistor 1k
  • +
  • 3 Jumpers macho/fêmea;
  • +
+

Circuito

+

Na protoboard você pode montar da seguinte forma:

+

Circuito

+

Sketch

+
//RGB com a Franzininho DIY
+
+const int red = 0; 
+const int green = 1; 
+const int blue = 2; 
+
+void setup() {
+  // configura os pinos de cada cor como saída:
+  pinMode(red, OUTPUT);
+  pinMode(green, OUTPUT);
+  pinMode(blue, OUTPUT);
+}
+
+void loop() {
+  // aciona o LED na cor vermelha:
+  digitalWrite(red, HIGH);
+  digitalWrite(green, LOW);
+  digitalWrite(blue, LOW);
+  delay(5000); // aguarda 5000ms 
+  
+  // aciona o LED na cor verde:
+  digitalWrite(red, LOW);
+  digitalWrite(green, HIGH);
+  digitalWrite(blue, LOW);
+  delay(5000); // aguarda 5000ms 
+
+  // aciona o LED na cor azul:
+  digitalWrite(red, LOW);
+  digitalWrite(green, LOW);
+  digitalWrite(blue, HIGH);
+  delay(5000); // aguarda 5000ms 
+}
+
+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/en/docs/franzininho-diy/leitura-tecla/index.html b/en/docs/franzininho-diy/leitura-tecla/index.html index 7c11326e9..8595f8aef 100755 --- a/en/docs/franzininho-diy/leitura-tecla/index.html +++ b/en/docs/franzininho-diy/leitura-tecla/index.html @@ -1,17 +1,49 @@ - + - -Leitura de Tecla | Franzininho - - - + +Leitura de Tecla | Franzininho + + + -
-

Leitura de Tecla

Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada.

Materiais

  • Placa Franzininho;
  • Protoboard;
  • LED 3mm;
  • 1 Resistor 330;
  • 1 Resistor de 1k;
  • 1 Botão;
  • Jumpers macho/fêmea

Circuito

No protoboard você deve inserir o LED, resistores e o botão, conforme a imagem abaixo:

Circuito leitura tecla

Sketch

/*
Franzininho
Exemplo: Leitura de Tecla - Pull Down
Esse exemplo exibe como ler uma tecla com resistor de pull down e acionar um led quando ela for pressionada
*/
const int LED = 1; //pino para o LED
const int BOTAO = 2; //pino para o botão
int val = 0; // val será utilizado para armazenar o estado do pino
void setup(){
pinMode(LED,OUTPUT); //o LED é uma saída
pinMode(BOTAO,INPUT); //o BOTAO é uma entrada
}
void loop (){
val = digitalRead(BOTAO); // lê e armazena o valor de entrada
digitalWrite(LED, val); //aciona LED conforme valor lido do botão
}

Simulação

Video de Funcionamento

- - +

Leitura de Tecla

Nesse exemplo vamos fazer a leitura de uma tecla e acionar um LED quando a mesma for pressionada.

+

Materiais

+
    +
  • Placa Franzininho;
  • +
  • Protoboard;
  • +
  • LED 3mm;
  • +
  • 1 Resistor 330;
  • +
  • 1 Resistor de 1k;
  • +
  • 1 Botão;
  • +
  • Jumpers macho/fêmea
  • +
+

Circuito

+

No protoboard você deve inserir o LED, resistores e o botão, conforme a imagem abaixo:

+

Circuito leitura tecla

+

Sketch

+
/*
+  Franzininho
+  Exemplo: Leitura de Tecla - Pull Down
+  Esse exemplo exibe como ler uma tecla com resistor de pull down e acionar um led quando ela for pressionada
+*/
+const int LED = 1; //pino para o LED
+const int BOTAO = 2; //pino para o botão
+int val = 0; // val será utilizado para armazenar o estado do pino
+void setup(){
+  pinMode(LED,OUTPUT); //o LED é uma saída
+  pinMode(BOTAO,INPUT); //o BOTAO é uma entrada
+}
+void loop (){
+val = digitalRead(BOTAO); // lê e armazena o valor de entrada
+digitalWrite(LED, val); //aciona LED conforme valor lido do botão
+}
+
+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/en/docs/franzininho-diy/lista-de-materiais/index.html b/en/docs/franzininho-diy/lista-de-materiais/index.html index 68a3b7c5d..21ac723ac 100755 --- a/en/docs/franzininho-diy/lista-de-materiais/index.html +++ b/en/docs/franzininho-diy/lista-de-materiais/index.html @@ -1,17 +1,18 @@ - + - -Lista de Materiais | Franzininho - - - + +Lista de Materiais | Franzininho + + + -
-

Lista de Materiais

Aqui você encontra a lista de materiais para montagem da Franzininho DIY.

Confira a referência e descrição de cada componente.

Lista de materiais (BOM)

ReferênciaDescrição
C1Capacitor Cerâmico 100 nF x 50 V
C2Capacitor eletrolítico 10 uF x 35 V
D1Diodo Zener 3,6 V 0,5W
D2Diodo Zener 3,6 V 0,5W
D3Diodo 1N4148
IC1Microcontrolador ATTINY85 - 20PU
IC278L05 - Regulador de tensão
SQ1Soquete Para CI - 8 pinos
JP3Barra de pinos estampada 15 mm 180° - 8 vias
J1Barra de pinos estampada 15 mm 180° - 3 vias
LEDLed 3mm Amarelo Difuso
ONLed 3mm Verde Difuso
R1Resistor 68 R - 5% 1/4 W
R2Resistor 68 R - 5% 1/4 W
R3Resistor 1K5 - 5% 1/4 W
R4Resistor 1K - 5% 1/4 W
R5Resistor 1K - 5% 1/4 W
RESETChave Táctil 6x6x5 mm
USBConector USB Macho 90º com trava
PCBPlaca de circuito impresso Franzininho V2
Ajuda

Se tiver alguma dúvida sobre os componentes, consulte a comunidade Franzininho no Discord

- - +

Lista de Materiais

Aqui você encontra a lista de materiais para montagem da Franzininho DIY.

+

Confira a referência e descrição de cada componente.

+

Lista de materiais (BOM)

+
ReferênciaDescrição
C1Capacitor Cerâmico 100 nF x 50 V
C2Capacitor eletrolítico 10 uF x 35 V
D1Diodo Zener 3,6 V 0,5W
D2Diodo Zener 3,6 V 0,5W
D3Diodo 1N4148
IC1Microcontrolador ATTINY85 - 20PU
IC278L05 - Regulador de tensão
SQ1Soquete Para CI - 8 pinos
JP3Barra de pinos estampada 15 mm 180° - 8 vias
J1Barra de pinos estampada 15 mm 180° - 3 vias
LEDLed 3mm Amarelo Difuso
ONLed 3mm Verde Difuso
R1Resistor 68 R - 5% 1/4 W
R2Resistor 68 R - 5% 1/4 W
R3Resistor 1K5 - 5% 1/4 W
R4Resistor 1K - 5% 1/4 W
R5Resistor 1K - 5% 1/4 W
RESETChave Táctil 6x6x5 mm
USBConector USB Macho 90º com trava
PCBPlaca de circuito impresso Franzininho V2
+

Se tiver alguma dúvida sobre os componentes, consulte a comunidade Franzininho no Discord

\ No newline at end of file diff --git a/en/docs/franzininho-diy/montagem/index.html b/en/docs/franzininho-diy/montagem/index.html index f129abe27..f1fe90f7f 100755 --- a/en/docs/franzininho-diy/montagem/index.html +++ b/en/docs/franzininho-diy/montagem/index.html @@ -1,17 +1,86 @@ - + - -Montagem da Franzininho DIY | Franzininho - - - + +Montagem da Franzininho DIY | Franzininho + + + -
-

Montagem da Franzininho DIY

Passo a passo da montagem da Franzininho DIY V2RV2

Antes de colocar a mão na massa

montagem Franzininho DIY

Antes de tudo você deve preparar o ambiente, separando as ferramentas necessárias para a soldagem. Vamos precisar de:

  • Ferro de solda;
  • Estanho;
  • Alicate de corte diagonal para eletrônica;
  • Óculos de proteção;

Você também deve separar os componentes para facilitar na hora de soldar. Você encontra os componentes na lista de materiais. Tudo organizado? Então vamos lá?!

Montando a sua Franzininho DIY

De início você terá uma placa sem componentes, conforme a imagem abaixo:

montagem Franzininho DIY

Sequência de montagem

Você deve sempre começar pelos componentes baixos. Siga a sequência recomendada abaixo.

Diodo 1N1448

O primeiro componente a ser colocado é o diodo 1N4148 no D3.

Atenção

Cuidando com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa.

montagem Franzininho DIY

Diodos Zener (3V6)

Temos dois diodos zeners que deverão ser colocados nas referências D1 e D2.

Atenção

Cuidado com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa.

montagem Franzininho DIY

Resistores de 68R

Nas referências R1 e R2 você irá colocar os resistores de 68R que são representado pelas cores (azul, cinza, preto e dourado).

montagem Franzininho DIY

Resistor 1k5

Em R3 deve-se colocar o resistor de 1k5 que é representado nas cores (marrom, verde, vermelho e dourado).

montagem Franzininho DIY

Resistores 1k

Resistores de 1k que são representados nas cores (marrom, preto, vermelho e dourado) devem ser colocados em R4 e R5.

montagem Franzininho DIY

Soquete 8 pinos

O soquete deve ser colocado no IC1 que traz a facilidade do encaixe do ATtiny85.

Atenção

Verifique a posição do soquete a meia lua deve ficar virada para o lado do barramento de pinos da placa.

montagem Franzininho DIY

Chave táctil

A chave você consegue colocar apenas em uma posição, então é só encaixá-la onde está localizada como RESET.

montagem Franzininho DIY

Capacitor Cerâmico

No C1 você irá colocar o capacitor cerâmico.

montagem Franzininho DIY

LED Verde

O LED verde deve ser colocado no ON.

Cuidado com polaridade dos terminais dos LED.

Terminal maior (positivo) - Terminal menor (negativo)

montagem Franzininho DIY

LED Amarelo

O LED amarelo deve ser colocado no LED.

Cuidado com polaridade dos terminais dos LED.

Terminal maior (positivo) - Terminal menor (negativo)

montagem Franzininho DIY

Regulador de tensão

No IC2 você deve colocar o regulador. Ele tem 3 terminais e deve ser colocado conforme o desenho na placa.

Siga o desenho do componente na placa para se orientar no encaixe.

montagem Franzininho DIY

Barra de 3 pinos

Em J1, onde está indicado com VIN, GND, VCC, você irá colocar a barra com três pinos.

montagem Franzininho DIY

Barra de 8 pinos

Deverá ser colocada onde estão indicados (GND, VCC, P6, ..., P1,P0)

Apoie bem a barra. Solde apenas um terminal e verifique se ela ficou alinhada.

montagem Franzininho DIY

Capacitor eletrolítico

Agora vamos colocar o capacitor eletrolítico em C2.

montagem Franzininho DIY

Conector USB

Quase lá! Iremos agora colocar o conector USB, conforme o encaixe dele.

montagem Franzininho DIY

ATtiny85

Por último iremos colocar o microcontrolador ATtiny85 no soquete de 8 pinos.

Tome cuidado com a posição de encaixe do microcontrolador. Se oriente pelo desenho do soquete e faça uma dupla checagem antes de ligar a placa.

montagem Franzininho DIY

Pronto!

Sua Franzininho versão V2RV2 está montada, agora é só programar e criar vários projetos.

- - +

Montagem da Franzininho DIY

Passo a passo da montagem da Franzininho DIY V2RV2

+

Antes de colocar a mão na massa

+

montagem Franzininho DIY

+

Antes de tudo você deve preparar o ambiente, separando as ferramentas necessárias para a soldagem. Vamos precisar de:

+
    +
  • Ferro de solda;
  • +
  • Estanho;
  • +
  • Alicate de corte diagonal para eletrônica;
  • +
  • Óculos de proteção;
  • +
+

Você também deve separar os componentes para facilitar na hora de soldar. Você encontra os componentes na lista de materiais. Tudo organizado? Então vamos lá?!

+

Montando a sua Franzininho DIY

+

De início você terá uma placa sem componentes, conforme a imagem abaixo:

+

montagem Franzininho DIY

+

Você deve sempre começar pelos componentes baixos. Siga a sequência recomendada abaixo.

+

Diodo 1N1448

+

O primeiro componente a ser colocado é o diodo 1N4148 no D3.

+

Cuidando com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa.

+

montagem Franzininho DIY

+

Diodos Zener (3V6)

+

Temos dois diodos zeners que deverão ser colocados nas referências D1 e D2.

+

Cuidado com a polaridade do diodo. A faixa preta do diodo deve ser colocada conforme o desenho do componente na placa.

+

montagem Franzininho DIY

+

Resistores de 68R

+

Nas referências R1 e R2 você irá colocar os resistores de 68R que são representado pelas cores (azul, cinza, preto e dourado).

+

montagem Franzininho DIY

+

Resistor 1k5

+

Em R3 deve-se colocar o resistor de 1k5 que é representado nas cores (marrom, verde, vermelho e dourado).

+

montagem Franzininho DIY

+

Resistores 1k

+

Resistores de 1k que são representados nas cores (marrom, preto, vermelho e dourado) devem ser colocados em R4 e R5.

+

montagem Franzininho DIY

+

Soquete 8 pinos

+

O soquete deve ser colocado no IC1 que traz a facilidade do encaixe do ATtiny85.

+

Verifique a posição do soquete a meia lua deve ficar virada para o lado do barramento de pinos da placa.

+

montagem Franzininho DIY

+

Chave táctil

+

A chave você consegue colocar apenas em uma posição, então é só encaixá-la onde está localizada como RESET.

+

montagem Franzininho DIY

+

Capacitor Cerâmico

+

No C1 você irá colocar o capacitor cerâmico.

+

montagem Franzininho DIY

+

LED Verde

+

O LED verde deve ser colocado no ON.

+

Terminal maior (positivo) - Terminal menor (negativo)

+

montagem Franzininho DIY

+

LED Amarelo

+

O LED amarelo deve ser colocado no LED.

+

Terminal maior (positivo) - Terminal menor (negativo)

+

montagem Franzininho DIY

+

Regulador de tensão

+

No IC2 você deve colocar o regulador. Ele tem 3 terminais e deve ser colocado conforme o desenho na placa.

+ +

montagem Franzininho DIY

+

Barra de 3 pinos

+

Em J1, onde está indicado com VIN, GND, VCC, você irá colocar a barra com três pinos.

+

montagem Franzininho DIY

+

Barra de 8 pinos

+

Deverá ser colocada onde estão indicados (GND, VCC, P6, ..., P1,P0)

+ +

montagem Franzininho DIY

+

Capacitor eletrolítico

+

Agora vamos colocar o capacitor eletrolítico em C2.

+

montagem Franzininho DIY

+

Conector USB

+

Quase lá! Iremos agora colocar o conector USB, conforme o encaixe dele.

+

montagem Franzininho DIY

+

ATtiny85

+

Por último iremos colocar o microcontrolador ATtiny85 no soquete de 8 pinos.

+ +

montagem Franzininho DIY

+

Pronto!

+

Sua Franzininho versão V2RV2 está montada, agora é só programar e criar vários projetos.

\ No newline at end of file diff --git a/en/docs/franzininho-diy/pacote/index.html b/en/docs/franzininho-diy/pacote/index.html index 599b2b688..a6962d5cf 100755 --- a/en/docs/franzininho-diy/pacote/index.html +++ b/en/docs/franzininho-diy/pacote/index.html @@ -1,17 +1,40 @@ - + - -Configuração da Arduino IDE | Franzininho - - - + +Configuração da Arduino IDE | Franzininho + + + -
-

Configuração da Arduino IDE

Para programação da Franzininho DIY recomendamos o uso do pacote ATtinyCore, mantido pelo Spence Konde, aqui.

tip

Em breve teremos um pacote Franzininho que facilitará o processo de configuração da IDE. Fique ligado(a) nas atualizações.

Configuração da Arduino IDE

Após instalar a Arduino IDE(baixe aqui), acesse Arquivo -> Preferências e cole a URL a seguir em URL Adicionais Para Gerenciadores de Placas:

http://drazzy.com/package_drazzy.com_index.json

URL ATTINY CORE

Agora, abra o Gerenciador de placas, acesse: Ferramentas -> Placa -> Gerenciador de placas e procure por ATTinyCore. Após encontrar o pacote clique em instalar e aguarde a instalação:

Instalação do Pacote

Pronto. agora vamos configurar a placa. Selecione a placa ATTiny85 (Micronucleus/Digispark):

Selecionando a Placa

As demais configurações devem ficar da seguinte forma:

Configurações

Agora vamos carregar um Sketch para verificarmos se está tudo certo e entendermos o processo Upload para a placa.

Upload de código

Abra o exemplo Blink. Acesse Arquivo -> Exemplos -> 01.Basics -> Blink:

Blink

Agora vamos carregar o Sketch para a placa. Clique no botão Carregar:

Botão upload

Após a compilação será exibida a seguinte mensagem:

MEnsagem

Conecte a placa na porta USB. Caso a placa ja esteja conectada pressione o botão de reset ao ver essa mensagem. O código será carregado para a placa:

Carregando o código

Após o upload o LED amarelo da placa passará a piscar.

Se você chegou até aqui e não teve nenhum problema, parabéns! Você já pode testar os exemplos aqui na documentação ou fazer os seus próprios projetos.

Caso tenha algum problema verifique se consegue resolver com as soluções a seguir.

Resolvendo problemas de configuração e upload

danger

Em breve

- - +

Configuração da Arduino IDE

Para programação da Franzininho DIY recomendamos o uso do pacote ATtinyCore, mantido pelo Spence Konde, aqui.

+

Em breve teremos um pacote Franzininho que facilitará o processo de configuração da IDE. Fique ligado(a) nas atualizações.

+

Configuração da Arduino IDE

+

Após instalar a Arduino IDE(baixe aqui), acesse **Arquivo -> Preferências ** e cole a URL a seguir em URL Adicionais Para Gerenciadores de Placas:

+

http://drazzy.com/package_drazzy.com_index.json

+

URL ATTINY CORE

+

Agora, abra o Gerenciador de placas, acesse: Ferramentas -> Placa -> Gerenciador de placas e procure por ATTinyCore. Após encontrar o pacote clique em instalar e aguarde a instalação:

+

Instalação do Pacote

+

Pronto. agora vamos configurar a placa. Selecione a placa ATTiny85 (Micronucleus/Digispark):

+

Selecionando a Placa

+

As demais configurações devem ficar da seguinte forma:

+

Configurações

+

Agora vamos carregar um Sketch para verificarmos se está tudo certo e entendermos o processo Upload para a placa.

+

Upload de código

+

Abra o exemplo Blink. Acesse Arquivo -> Exemplos -> 01.Basics -> Blink:

+

Blink

+

Agora vamos carregar o Sketch para a placa. Clique no botão Carregar:

+

Botão upload

+

Após a compilação será exibida a seguinte mensagem:

+

MEnsagem

+

Conecte a placa na porta USB. Caso a placa ja esteja conectada pressione o botão de reset ao ver essa mensagem. O código será carregado para a placa:

+

Carregando o código

+

Após o upload o LED amarelo da placa passará a piscar.

+

Se você chegou até aqui e não teve nenhum problema, parabéns! Você já pode testar os exemplos aqui na documentação ou fazer os seus próprios projetos.

+

Caso tenha algum problema verifique se consegue resolver com as soluções a seguir.

+

Resolvendo problemas de configuração e upload

+

Em breve

\ No newline at end of file diff --git a/en/docs/franzininho-diy/picsimlab/primeiros-passos/index.html b/en/docs/franzininho-diy/picsimlab/primeiros-passos/index.html index f8c1a0744..cd225beaf 100755 --- a/en/docs/franzininho-diy/picsimlab/primeiros-passos/index.html +++ b/en/docs/franzininho-diy/picsimlab/primeiros-passos/index.html @@ -1,19 +1,42 @@ - + - -Franzininho DIY no PICSimLab | Franzininho - - - + +Franzininho DIY no PICSimLab | Franzininho + + + -
-

Franzininho DIY no PICSimLab

PICSimLab é um emulador em tempo real de placas de desenvolvimento com depurador MPLABX/avr-gdb integrado. O PICSimLab suporta alguns microcontroladores PIC e AVR (outros em breve).

tip

Faça o Download do PICSimLab: https://github.com/lcgamboa/picsimlab/releases

A placa Franzininho DIY está disponível para simulação no PICSimLab,

Veja no video abaixo os passos para gravação e depuração da Franzininho DIY no PICSimLab:

Timeline do video

  • 00:00 Introdução
  • 02:23 Arduino IDE (gravação)
  • 05:45 Arduino IDE tinyDebug (mensagens pela serial virtual)
  • 11:20 Sloeber IDE (eclipse) (gravação/depuração)
  • 27:55 avr gcc e gdb no terminal (gravação/depuração)
  • 37:52 MPLABX IDE (gravação/depuração)

Observação

  • Para instalar o suporte ao GDB instalar o suporte ao "arduino megaAVR boards" no Sloeber (passo que deu errado no vídeo)
  • O caminho do GDB dentro da pasta do Sloeber: Sloeber/arduinoPlugin/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-gdb

Downloads

Download do PICSimLab: https://github.com/lcgamboa/picsimlab/releases -Download do MPLABX: https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide -Download do XC8:https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers

- - +

Franzininho DIY no PICSimLab

PICSimLab é um emulador em tempo real de placas de desenvolvimento com depurador MPLABX/avr-gdb integrado. O PICSimLab suporta alguns microcontroladores PIC e AVR (outros em breve).

+

Faça o Download do PICSimLab: https://github.com/lcgamboa/picsimlab/releases

+

A placa Franzininho DIY está disponível para simulação no PICSimLab,

+

Veja no video abaixo os passos para gravação e depuração da Franzininho DIY no PICSimLab:

+ +

Timeline do video

+
    +
  • 00:00 Introdução
  • +
  • 02:23 Arduino IDE (gravação)
  • +
  • 05:45 Arduino IDE tinyDebug (mensagens pela serial virtual)
  • +
  • 11:20 Sloeber IDE (eclipse) (gravação/depuração)
  • +
  • 27:55 avr gcc e gdb no terminal (gravação/depuração)
  • +
  • 37:52 MPLABX IDE (gravação/depuração)
  • +
+ + +

Observação

+
    +
  • Para instalar o suporte ao GDB instalar o suporte ao "arduino megaAVR boards" no Sloeber (passo que deu errado no vídeo)
  • +
  • O caminho do GDB dentro da pasta do Sloeber: Sloeber/arduinoPlugin/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/bin/avr-gdb
  • +
+

Downloads

+

Download do PICSimLab: https://github.com/lcgamboa/picsimlab/releases +Download do MPLABX: https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide +Download do XC8:https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers

\ No newline at end of file diff --git a/en/docs/franzininho-diy/pisca-led/index.html b/en/docs/franzininho-diy/pisca-led/index.html index dae17e2aa..7d3bf8543 100755 --- a/en/docs/franzininho-diy/pisca-led/index.html +++ b/en/docs/franzininho-diy/pisca-led/index.html @@ -1,17 +1,51 @@ - + - -Pisca LED | Franzininho - - - + +Pisca LED | Franzininho + + + -
-

Pisca LED

O primeiro contato com a programação com o Arduino, você faz o blink (que faz com que o led pisque em intervalos de tempo). Com a Franzininho não é diferente, você pode testar com o próprio LED que ela tem ou caso você queira, pode ligar um LED em uma protoboard. A seguir vamos explicar como fazer um blink com a Franzininho.

resultado Pisca LED

Materiais:

  • Placa Franzininho;
  • Protoboard;
  • LED 3mm;
  • Resistor 330;
  • Jumpers

Circuito

Na protoboard você pode montar o circuito para acionamento do LED da seguinte forma:

Circuito Pisca LED

Sketch

/*
Pisca LED - Blink

Esse exemplo exibe como piscar o LED presente na placa ou um LED externo ligado ao pino 1 da Franzininho em intervalos de 1 segundo.

*/

const int LED = 1; //pino digital conectado ao LED

void setup(){
pinMode(LED,OUTPUT); //pino digital de saída
}

void loop(){
digitalWrite(LED,HIGH); //acende o led da placa
delay(1000); //aguarda um segundo
digitalWrite(LED,LOW); //apaga o led da placa
delay(1000); //aguarda um segundo
}

Simulação

Video de Funcionamento

- - +

Pisca LED

O primeiro contato com a programação com o Arduino, você faz o blink (que faz com que o led pisque em intervalos de tempo). Com a Franzininho não é diferente, você pode testar com o próprio LED que ela tem ou caso você queira, pode ligar um LED em uma protoboard. A seguir vamos explicar como fazer um blink com a Franzininho.

+

resultado Pisca LED

+

Materiais:

+
    +
  • Placa Franzininho;
  • +
  • Protoboard;
  • +
  • LED 3mm;
  • +
  • Resistor 330;
  • +
  • Jumpers
  • +
+

Circuito

+

Na protoboard você pode montar o circuito para acionamento do LED da seguinte forma:

+

Circuito Pisca LED

+

Sketch

+
/*
+  Pisca LED - Blink
+
+  Esse exemplo exibe como piscar o LED presente na placa ou um LED externo ligado ao pino 1 da Franzininho em intervalos de 1 segundo.
+
+*/
+
+const int LED = 1; //pino digital conectado ao LED
+
+void setup(){
+  pinMode(LED,OUTPUT); //pino digital de saída
+}
+
+void loop(){
+  digitalWrite(LED,HIGH);   //acende o led da placa
+  delay(1000);             //aguarda um segundo
+  digitalWrite(LED,LOW);  //apaga o led da placa
+  delay(1000);           //aguarda um segundo
+}
+
+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/en/docs/franzininho-diy/saidas-pwm/index.html b/en/docs/franzininho-diy/saidas-pwm/index.html index 0904bd5fb..125cfdb1e 100755 --- a/en/docs/franzininho-diy/saidas-pwm/index.html +++ b/en/docs/franzininho-diy/saidas-pwm/index.html @@ -1,17 +1,65 @@ - + - -Saídas PWM | Franzininho - - - + +Saídas PWM | Franzininho + + + -
-

Saídas PWM

O que é PWM?

PWM, do inglês Pulse Width Modulation, é uma técnica utilizada por sistemas digitais para variação do valor médio de uma forma de onda periódica. A técnica consiste em manter a frequência de uma onda quadrada fixa e variar o tempo que o sinal fica em nível lógico alto. Esse tempo é chamado de duty cycle, ou seja, o ciclo ativo da forma de onda. No gráfico abaixo são exibidas algumas modulações PWM:

Sinal PWM

Analisando as formas de onda nota-se que a frequência da forma de onda tem o mesmo valor e varia-se o duty cycle da forma de onda. Quando o duty cicle está em 0% o valor médio da saída encontra-se em 0 V e consequentemente para um duty cycle de 100% a saída assume seu valor máximo, que no caso é 5V. Para um duty cycle de 50% a saída assumirá 50% do valor da tensão, 2,5 V, e assim sucessivamente para cada variação no duty cycle. Portanto, para calcular o valor médio da tensão de saída de um sinal PWM pode-se utilizar a seguinte equação:

Vout = (duty cycle/100)* Vcc

Onde:

  • Vout - tensão de saída em V;
  • duty cycle - valor do ciclo ativo do PWM em %;
  • Vcc - tensão de alimentação em V.

PWM pode ser usada para diversas aplicações, como por exemplo:

  • controle de velocidade de motores;
  • variação da luminosidade de leds;
  • geração de sinais analógicos;
  • geração de sinais de áudio.

Fonte: Usando as saídas PWM do Arduino

Na Franzininho temos 3 pinos que pode ser usado como saidas PWM(PWM0,PWM1 e PWM4) conforme pinout:

Pinagem Franzininho DIY

Verificar limitações de uso dos pinos

Função

A função analogWrite() escreve um valor de PWM em um pino digital que possui a função PWM. Para usar o pino como saída PWM é necessário configurá-lo como saída digital.

Sintaxe:

analogWrite(pino, valor);

Parâmetros:

  • pino: número do pino onde será gerado o sinal PWM (0,1,4 na Franzininho);
  • valor: valor médio da tensão de saída que será gerado por PWM, entre 0 e 255, onde 0 representa 0V e 255, 5V.

Exemplo

Vamos controlar o brilho do LED conforme o valor lido no potenciômetro:

Circuito

const byte LED = 1; //pino do LED
const byte POT = A1; //pino do Potenciômetro

void setup() {
pinMode(LED,OUTPUT);
}

void loop() {

int valor = analogRead(POT); // lê o valor do potenciômetro
analogWrite(LED,valor/4); //escreve no LED valor entre 0 e 255

}

Simulação

- - +

Saídas PWM

O que é PWM?

+

PWM, do inglês Pulse Width Modulation, é uma técnica utilizada por sistemas digitais para variação do valor médio de uma forma de onda periódica. A técnica consiste em manter a frequência de uma onda quadrada fixa e variar o tempo que o sinal fica em nível lógico alto. Esse tempo é chamado de duty cycle, ou seja, o ciclo ativo da forma de onda. No gráfico abaixo são exibidas algumas modulações PWM:

+

Sinal PWM

+

Analisando as formas de onda nota-se que a frequência da forma de onda tem o mesmo valor e varia-se o duty cycle da forma de onda. Quando o duty cicle está em 0% o valor médio da saída encontra-se em 0 V e consequentemente para um duty cycle de 100% a saída assume seu valor máximo, que no caso é 5V. Para um duty cycle de 50% a saída assumirá 50% do valor da tensão, 2,5 V, e assim sucessivamente para cada variação no duty cycle. Portanto, para calcular o valor médio da tensão de saída de um sinal PWM pode-se utilizar a seguinte equação:

+

Vout = (duty cycle/100)* Vcc

+

Onde:

+
    +
  • Vout - tensão de saída em V;
  • +
  • duty cycle - valor do ciclo ativo do PWM em %;
  • +
  • Vcc - tensão de alimentação em V.
  • +
+

PWM pode ser usada para diversas aplicações, como por exemplo:

+
    +
  • controle de velocidade de motores;
  • +
  • variação da luminosidade de leds;
  • +
  • geração de sinais analógicos;
  • +
  • geração de sinais de áudio.
  • +
+

Fonte: Usando as saídas PWM do Arduino

+

Na Franzininho temos 3 pinos que pode ser usado como saidas PWM(PWM0,PWM1 e PWM4) conforme pinout:

+

Pinagem Franzininho DIY

+
+

Verificar limitações de uso dos pinos

+
+

Função

+

A função analogWrite() escreve um valor de PWM em um pino digital que possui a função PWM. Para usar o pino como saída PWM é necessário configurá-lo como saída digital.

+

Sintaxe:

+

analogWrite(pino, valor);

+

Parâmetros:

+
    +
  • pino: número do pino onde será gerado o sinal PWM (0,1,4 na Franzininho);
  • +
  • valor: valor médio da tensão de saída que será gerado por PWM, entre 0 e 255, onde 0 representa 0V e 255, 5V.
  • +
+

Exemplo

+

Vamos controlar o brilho do LED conforme o valor lido no potenciômetro:

+

Circuito

+
const byte LED = 1; //pino do LED
+const byte POT = A1; //pino do Potenciômetro
+
+void setup() {
+  pinMode(LED,OUTPUT);
+}
+
+void loop() {
+
+  int valor = analogRead(POT); // lê o valor do potenciômetro
+  analogWrite(LED,valor/4);    //escreve no LED valor entre 0 e 255
+
+}
+
+

Simulação

+
\ No newline at end of file diff --git a/en/docs/franzininho-diy/semaforo/index.html b/en/docs/franzininho-diy/semaforo/index.html index a5ff07b61..a4b535b94 100755 --- a/en/docs/franzininho-diy/semaforo/index.html +++ b/en/docs/franzininho-diy/semaforo/index.html @@ -1,17 +1,65 @@ - + - -Semáforo | Franzininho - - - + +Semáforo | Franzininho + + + -
-

Semáforo

Nesse exemplo vamos fazer um semáforo de uma via com Franzininho DIY.

Materiais

  • Placa Franzininho;
  • Protoboard;
  • LED vermelho
  • LED amarelo
  • LED verde
  • 3 Resistores 330 R
  • Jumpers

Circuito

Faça a seguinte ligação no protoboard:

circuito semaforo

Sketch

/*
Franzininho
Exemplo: Semáforo
Nesse exemplo vamos fazer um semáforo de uma via.
*/
int vermelho = 2; //LED Vermelho
int amarelo = 1; //LED Amarelo
int verde = 0; //LED Verde

void setup() {
pinMode(vermelho,OUTPUT); //define LED vermelho como Saída
pinMode(verde,OUTPUT); //define LED verde como Saída
pinMode(amarelo,OUTPUT); //define LED Amarelo como Saída
}

void loop() {
//fase 1
digitalWrite(vermelho,HIGH);
digitalWrite(amarelo,LOW);
digitalWrite(verde,LOW);
delay(5000);
//fase 2
digitalWrite(vermelho,LOW);
digitalWrite(amarelo,HIGH);
digitalWrite(verde,LOW);
delay(1000);
//fase 3
digitalWrite(vermelho,LOW);
digitalWrite(amarelo,LOW);
digitalWrite(verde,HIGH);
delay(5000);
}

Simulação

Video de Funcionamento

- - +

Semáforo

Nesse exemplo vamos fazer um semáforo de uma via com Franzininho DIY.

+

Materiais

+
    +
  • Placa Franzininho;
  • +
  • Protoboard;
  • +
  • LED vermelho
  • +
  • LED amarelo
  • +
  • LED verde
  • +
  • 3 Resistores 330 R
  • +
  • Jumpers
  • +
+

Circuito

+

Faça a seguinte ligação no protoboard:

+

circuito semaforo

+

Sketch

+
/*
+  Franzininho
+  Exemplo: Semáforo
+Nesse exemplo vamos fazer um semáforo de uma via.
+*/
+int vermelho = 2; //LED Vermelho
+int amarelo = 1; //LED Amarelo
+int verde = 0; //LED Verde
+
+void setup() {
+ pinMode(vermelho,OUTPUT); //define LED vermelho como Saída
+ pinMode(verde,OUTPUT);   //define LED verde como Saída
+ pinMode(amarelo,OUTPUT); //define LED Amarelo como Saída
+}
+
+void loop() {
+  //fase 1
+  digitalWrite(vermelho,HIGH);
+  digitalWrite(amarelo,LOW);
+  digitalWrite(verde,LOW);
+  delay(5000);
+  //fase 2
+  digitalWrite(vermelho,LOW);
+  digitalWrite(amarelo,HIGH);
+  digitalWrite(verde,LOW);
+ delay(1000);
+ //fase 3
+  digitalWrite(vermelho,LOW);
+  digitalWrite(amarelo,LOW);
+  digitalWrite(verde,HIGH);
+  delay(5000);
+}
+
+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/en/docs/franzininho-diy/sensor-luz-ldr/index.html b/en/docs/franzininho-diy/sensor-luz-ldr/index.html index aba6266be..f729227b6 100755 --- a/en/docs/franzininho-diy/sensor-luz-ldr/index.html +++ b/en/docs/franzininho-diy/sensor-luz-ldr/index.html @@ -1,17 +1,57 @@ - + - -Sensor de luz com LDR | Franzininho - - - + +Sensor de luz com LDR | Franzininho + + + -
-

Sensor de luz com LDR

Nesse exemplo vamos ler um sensor LDR usando a entrada analógica.

Será exibido um exemplo de funcionamento de uma fotocélula, onde ao escurecer será aceso o LED, como acontece com a luz da rua.

Materiais

  • Placa Franzininho;
  • Protoboard;
  • 1 Resistor 10K;
  • 1 LDR(10K)
  • Jumpers

Circuito

Faça a seguinte ligação no protoboard:

Sketch

/*
Franzininho
Exemplo: Sensor de Luz - LDR
Nesse exemplo vamos ler um sensor LDR usando a entrada analógica. Será exibido um exemplo de funcionamento de uma fotocélula, onde ao escurecer será aceso o LED, como acontece na luz da rua. ;)
*/
//Sensor de luz com LDR
int ledPin = 1; //Led no pino 1 - LED da placa
int ldrPin = A1; //LDR no pino analógico A1
int ldrValor = 0; //Valor lido do LDR

void setup() {
pinMode(ledPin,OUTPUT); //define LED como Saída
}

void loop() {
//ler o valor do LDR
ldrValor = analogRead(ldrPin); //O valor lido será entre 0 e 1023
//se o valor lido for maior que 800, liga o led
if (ldrValor>= 800){
digitalWrite(ledPin, HIGH); //aciona saída
} else { // senão, apaga o led
digitalWrite(ledPin,LOW); //desliga saída
}
delay(100);
}

Simulação

Video de Funcionamento

- - +

Sensor de luz com LDR

Nesse exemplo vamos ler um sensor LDR usando a entrada analógica.

+

Será exibido um exemplo de funcionamento de uma fotocélula, onde ao escurecer será aceso o LED, como acontece com a luz da rua.

+

Materiais

+
    +
  • Placa Franzininho;
  • +
  • Protoboard;
  • +
  • 1 Resistor 10K;
  • +
  • 1 LDR(10K)
  • +
  • Jumpers
  • +
+

Circuito

+

Faça a seguinte ligação no protoboard:

+

+

Sketch

+
/*
+  Franzininho
+  Exemplo: Sensor de Luz - LDR
+ Nesse exemplo vamos ler um sensor LDR usando a entrada analógica. Será exibido um exemplo de funcionamento de uma fotocélula, onde ao escurecer será aceso o LED, como acontece na luz da rua. ;)
+*/
+//Sensor de luz com LDR
+int ledPin = 1; //Led no pino 1 - LED da placa
+int ldrPin = A1; //LDR no pino analógico A1
+int ldrValor = 0; //Valor lido do LDR
+
+void setup() {
+ pinMode(ledPin,OUTPUT); //define LED como Saída
+}
+
+void loop() {
+ //ler o valor do LDR
+ ldrValor = analogRead(ldrPin); //O valor lido será entre 0 e 1023
+ //se o valor lido for maior que 800, liga o led
+ if (ldrValor>= 800){
+   digitalWrite(ledPin, HIGH);      //aciona saída
+ } else {  // senão, apaga o led            
+   digitalWrite(ledPin,LOW);        //desliga saída
+ }
+ delay(100);
+}
+
+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/en/docs/franzininho-diy/sobre/index.html b/en/docs/franzininho-diy/sobre/index.html index 99dd84d29..4c08a9fd8 100755 --- a/en/docs/franzininho-diy/sobre/index.html +++ b/en/docs/franzininho-diy/sobre/index.html @@ -1,18 +1,59 @@ - + - -Placa Franzininho DIY | Franzininho - - - + +Placa Franzininho DIY | Franzininho + + + -
-

Placa Franzininho DIY

A Franzininho DIY foi desenvolvida com a proposta de “Faça você mesmo” e com base na plataforma Arduino. O objetivo é que as pessoas que a adquirem, trilhem a jornada do Maker de eletrônica, montando e programando a sua própria placa compatível com Arduino.

Placa Franzininho DIY

Ela é fornecida em formato de Kit para soldar, não recomendamos que você adquira a Franzininho DIY já soldada, pois o objetivo pedagógico compreende a jornada de montagem.

Kit Franzininho DIY

É uma excelente opção para oficinas de Soldagem eletrônica e primeiros passos com a programação Arduino. Com componentes fáceis de identificar e também de soldar, permite que qualquer pessoa com pouco ou nenhum conhecimento em soldagem consiga montar a sua placa tranquilamente e criar em pouco tempo projetos como, automação, robôs, jogos entre outros(Veja os exemplos em nossa documentação).

Oficina Franzininho DIY

A placa é baseada no microcontrolador ATtiny85 e foi criada para fins educacionais, é voltada para estudantes de curso técnico e engenharia, makers e hobbistas que desejam aprender sobre prototipagem, soldagem, eletrônica e programação em uma verdadeira experiência DIY.

A placa possui 5 pinos de I/O, LED indicador de Alimentação, LED de uso geral, conector USB para alimentação e gravação, conector para alimentação externa e botão de Reset.

Pinout

pinagem Franzininho DIY

Versões de placas

Houve uma alteração da numeração dos pinos 4 e 5 no silk a partir da V2RV2. -Ainda é necessário ajustar no software

Resumo de recursos

  • Microcontrolador: ATtiny85
  • Pinos de I/O: até 6
  • Entradas Analógicas: até 4
  • PWM: 3
  • I2C: 1
  • SPI: 1
  • Tensão de funcionamento: 5V
  • Alimentação: USB(5V) ou externa (de 7,5V à 9V)

Documentação

Ela pode ser programada diretamente na IDE do Arduino inclusive com Ardublock. também pode ser programada em linguagem C usando IDE mais avançadas.

Projeto Open Hardware

O projeto é open hardware e foi publicado em CC-BY-SA-4.0

A Franzininho DIY está certificada na OSHWA com UID BR000003

BR000003

Importante

Para reprodução do projeto ou derivações, é importante verificar os requisitos da licença , copyright e boas práticas.

Onde comprar

Varejo

Atacado

Entrar em contato: contato@franzininho.com.br

- - +

Placa Franzininho DIY

A Franzininho DIY foi desenvolvida com a proposta de “Faça você mesmo” e com base na plataforma Arduino. O objetivo é que as pessoas que a adquirem, trilhem a jornada do Maker de eletrônica, montando e programando a sua própria placa compatível com Arduino.

+

Placa Franzininho DIY

+

Ela é fornecida em formato de Kit para soldar, não recomendamos que você adquira a Franzininho DIY já soldada, pois o objetivo pedagógico compreende a jornada de montagem.

+

Kit Franzininho DIY

+

É uma excelente opção para oficinas de Soldagem eletrônica e primeiros passos com a programação Arduino. Com componentes fáceis de identificar e também de soldar, permite que qualquer pessoa com pouco ou nenhum conhecimento em soldagem consiga montar a sua placa tranquilamente e criar em pouco tempo projetos como, automação, robôs, jogos entre outros(Veja os exemplos em nossa documentação).

+

Oficina Franzininho DIY

+

A placa é baseada no microcontrolador ATtiny85 e foi criada para fins educacionais, é voltada para estudantes de curso técnico e engenharia, makers e hobbistas que desejam aprender sobre prototipagem, soldagem, eletrônica e programação em uma verdadeira experiência DIY.

+

A placa possui 5 pinos de I/O, LED indicador de Alimentação, LED de uso geral, conector USB para alimentação e gravação, conector para alimentação externa e botão de Reset.

+

Pinout

+

pinagem Franzininho DIY

+

Houve uma alteração da numeração dos pinos 4 e 5 no silk a partir da V2RV2. +Ainda é necessário ajustar no software

+

Resumo de recursos

+
    +
  • Microcontrolador: ATtiny85
  • +
  • Pinos de I/O: até 6
  • +
  • Entradas Analógicas: até 4
  • +
  • PWM: 3
  • +
  • I2C: 1
  • +
  • SPI: 1
  • +
  • Tensão de funcionamento: 5V
  • +
  • Alimentação: USB(5V) ou externa (de 7,5V à 9V)
  • +
+

Documentação

+

Ela pode ser programada diretamente na IDE do Arduino inclusive com Ardublock. também pode ser programada em linguagem C usando IDE mais avançadas.

+ +

Projeto Open Hardware

+

O projeto é open hardware e foi publicado em CC-BY-SA-4.0

+

A Franzininho DIY está certificada na OSHWA com UID BR000003

+

BR000003

+

Para reprodução do projeto ou derivações, é importante verificar os requisitos da licença , copyright e boas práticas.

+

Onde comprar

+

Varejo

+ +

Atacado

+

Entrar em contato: contato@franzininho.com.br

\ No newline at end of file diff --git a/en/docs/franzininho-diy/tecla-liga-desliga/index.html b/en/docs/franzininho-diy/tecla-liga-desliga/index.html index 5db119e47..ef529bbbd 100755 --- a/en/docs/franzininho-diy/tecla-liga-desliga/index.html +++ b/en/docs/franzininho-diy/tecla-liga-desliga/index.html @@ -1,17 +1,56 @@ - + - -Tecla Liga/Desliga | Franzininho - - - + +Tecla Liga/Desliga | Franzininho + + + -
-

Tecla Liga/Desliga

Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos.

Materiais

  • Placa Franzininho;
  • Protoboard;
  • LED 3mm;
  • 1 Resistor 3300;
  • 1 Resistor de 1K;
  • 1 Botão;
  • Jumpers;

Circuito

No protoboard você deve inserir o LED, resistores e o botão, conforme a imagem abaixo:

Circuito

Sketch

/*
Franzininho
Exemplo: Tecla liga/desliga
Esse exemplo exibe como fazer ligar e desligar uma saída através de uma tecla
*/
const int LED = 1; //pino para o LED
const int BOTAO = 2; //pino para o botão
int estadoAnteriorBotao = 0; // armazena o estado anterior do botão

void setup(){
pinMode(LED,OUTPUT); //o LED é uma saída
pinMode(BOTAO,INPUT); //o BOTAO é uma entrada
}

void loop (){
int estadoAtualBT= digitalRead(BOTAO); // Lê estado do botão
delay(10);

if ((estadoAtualBT != estadoAnteriorBotao)&& (estadoAtualBT == LOW)){ //Se o botão foi pressionado e o seu estado mudou
digitalWrite(LED,!digitalRead(LED)); //inverte estado do LED
}
estadoAnteriorBotao = estadoAtualBT; //salva o estado do botão para comparar na próxima leitura
}

Simulação

Video de Funcionamento

- - +

Tecla Liga/Desliga

Nesse exemplo vamos fazer uma tecla liga/desliga, que pode ser usada para acionamentos diversos.

+

Materiais

+
    +
  • Placa Franzininho;
  • +
  • Protoboard;
  • +
  • LED 3mm;
  • +
  • 1 Resistor 3300;
  • +
  • 1 Resistor de 1K;
  • +
  • 1 Botão;
  • +
  • Jumpers;
  • +
+

Circuito

+

No protoboard você deve inserir o LED, resistores e o botão, conforme a imagem abaixo:

+

Circuito

+

Sketch

+
/*
+  Franzininho
+  Exemplo: Tecla liga/desliga
+  Esse exemplo exibe como fazer ligar e desligar uma saída através de uma tecla
+*/
+const int LED = 1; //pino para o LED
+const int BOTAO = 2; //pino para o botão
+int estadoAnteriorBotao = 0;   // armazena o estado anterior do botão
+
+void setup(){
+  pinMode(LED,OUTPUT); //o LED é uma saída
+  pinMode(BOTAO,INPUT); //o BOTAO é uma entrada
+}
+
+void loop (){
+ int estadoAtualBT= digitalRead(BOTAO);      // Lê estado do botão
+ delay(10);
+
+if ((estadoAtualBT != estadoAnteriorBotao)&& (estadoAtualBT == LOW)){       //Se o botão foi pressionado e o seu estado mudou
+  digitalWrite(LED,!digitalRead(LED)); //inverte estado do LED
+}
+  estadoAnteriorBotao = estadoAtualBT;  //salva o estado do botão para comparar na próxima leitura
+}
+
+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/en/docs/franzininho-diy/theremim/index.html b/en/docs/franzininho-diy/theremim/index.html index ac1b20dda..77bce123a 100755 --- a/en/docs/franzininho-diy/theremim/index.html +++ b/en/docs/franzininho-diy/theremim/index.html @@ -1,17 +1,53 @@ - + - -Theremim | Franzininho - - - + +Theremim | Franzininho + + + -
-

Theremim

O Theremim é um instrumento musical eletrônico controlado sem contato físico. O nome vem do seu inventor, Léon Theremin, que patenteou o dispositivo em 1928.

Nesse tutorial você fará uma versão simplificada do Theremim usando a Franzininho DIY.

Materiais necessários

  • Franzininho DIY
  • 2 LDR 10K
  • BC548
  • Resistor 330 R
  • Alto falante 8 ohm

Circuito

Circuito Theremim

Código

O código a seguir ler o valor da entrada analógica e atua na saída do speaker:

/*
* Theremim Franzininho
* Autor: Fábio Souza
* Data: 10/09/2018
*/
int speaker = 0; // pino de saída do falante
int sensor = 1;

void setup()
{
pinMode(speaker, OUTPUT);
}

// Theremin
void loop()
{
digitalWrite(speaker, HIGH);
delayMicroseconds(analogRead(sensor)<<2);
digitalWrite(speaker, LOW);
delayMicroseconds(analogRead(sensor)<<2);
}

Simulação

Video de Funcionamento

- - +

Theremim

O Theremim é um instrumento musical eletrônico controlado sem contato físico. O nome vem do seu inventor, Léon Theremin, que patenteou o dispositivo em 1928.

+

Nesse tutorial você fará uma versão simplificada do Theremim usando a Franzininho DIY.

+

Materiais necessários

+
    +
  • Franzininho DIY
  • +
  • 2 LDR 10K
  • +
  • BC548
  • +
  • Resistor 330 R
  • +
  • Alto falante 8 ohm
  • +
+

Circuito

+

Circuito Theremim

+

Código

+

O código a seguir ler o valor da entrada analógica e atua na saída do speaker:

+
/*
+ * Theremim Franzininho
+ * Autor: Fábio Souza
+ * Data: 10/09/2018
+ */
+int speaker = 0; // pino de saída do falante
+int sensor = 1;
+
+void setup()
+{
+ pinMode(speaker, OUTPUT);
+}
+
+// Theremin
+void loop()
+{
+ digitalWrite(speaker, HIGH);
+ delayMicroseconds(analogRead(sensor)<<2);
+ digitalWrite(speaker, LOW);
+ delayMicroseconds(analogRead(sensor)<<2);
+}
+
+

Simulação

+ +

Video de Funcionamento

+
\ No newline at end of file diff --git a/en/docs/franzininho-diy/tutoriais-i2c/index.html b/en/docs/franzininho-diy/tutoriais-i2c/index.html index 3d26fd8e4..b7fb1d241 100755 --- a/en/docs/franzininho-diy/tutoriais-i2c/index.html +++ b/en/docs/franzininho-diy/tutoriais-i2c/index.html @@ -1,17 +1,14 @@ - + - -I2C | Franzininho - - - + +I2C | Franzininho + + + - - - + \ No newline at end of file diff --git a/en/docs/franzininho-diy/wokwi/primeiros-passos/index.html b/en/docs/franzininho-diy/wokwi/primeiros-passos/index.html index b63671c75..f9eaf5813 100755 --- a/en/docs/franzininho-diy/wokwi/primeiros-passos/index.html +++ b/en/docs/franzininho-diy/wokwi/primeiros-passos/index.html @@ -1,20 +1,127 @@ - + - -Como simular a Franzininho DIY no Wokwi | Franzininho - - - + +Como simular a Franzininho DIY no Wokwi | Franzininho + + + -
-

Como simular a Franzininho DIY no Wokwi

Wokwi é um simulador online para Arduino e Eletrônica. Foi desenvolvido para makers, por makers.

Você pode usar o Wokwi para aprender a programar o Franzininho DIY, criar protótipos de suas idéias, e compartilhar seus projetos com outros makers.

Wokwi Franzininho DIY

Dica

Use o Template do Franzininho DIY clicando na imagem acima para começar um novo projeto no Wokwi.

Primeiros passos

Vamos começar o nosso programa acendendo o LED1 do Franzinino DIY no simulador, para isso copie ou digite o código abaixo no editor do Wokwi conforme imagem abaixo.

Wokwi Code Editor

Código do exemplo 1

const byte LED1 = 1;

void setup() {
pinMode(LED1, OUTPUT); // Configura como pino de saída digital
}

void loop() {
digitalWrite(LED1, HIGH); // Acende o LED interno
delay(1000); // Aguarda um segundo
digitalWrite(LED1, LOW); // Apaga o LED interno
delay(1000); // Aguarda um segundo
}

Em seguida, vamos executar o nosso programa clicando no botão verde conforme a imagem abaixo.

Wokwi Simulation

Peças

Vamos chamar os novos módulos ou componentes de peças, que seriam como por exemplo, as peças de um jogo de montagem, onde vamos adicionando cada uma para depois fazermos as ligações entre elas.

Cada projeto de simulação contém um arquivo diagram.json localizado no editor de código. Este arquivo define as peças -que serão usadas para a simulação, suas propriedades e as conexões entre os componentes.

O editor de diagramas fornece uma maneira interativa de editar seu diagrama: adicionando peças à simulação e definindo as conexões entre elas.

Adicionando uma nova peça

Para adicionar uma nova peça, clique no botão roxo "+" na parte superior do editor de diagramas.

Você verá um menu com uma lista de peças que você pode adicionar. Escolha uma peça para adicioná-la. A peça será adicionada na posição (0, 0), e então você pode arrastá-la para a posição desejada, conforme imagem abaixo.

Wokwi Add part

Rotacionando uma peça

Gire uma peça clicando nela (para selecioná-la) e pressionando "R". A peça girará 90 graus no sentido horário. Se você precisar girar uma peça -com um valor diferente (por exemplo, 45 graus), você pode conseguir isso editando o arquivo diagram.json no editor de código.

Removendo uma peça

Exclua uma peça clicando nela (para selecioná-la) e em seguida pressionando a tecla Delete.

Ligações

Criação de uma ligação entre as duas peças

Para criar um novo fio entre duas peças, clique em um dos pinos que deseja conectar. Em seguida, clique no segundo pino (alvo). Isso criará o fio.

Wokwi Add part

Se quiser que o fio vá de uma maneira específica, você pode guiá-lo clicando para onde deseja que ele vá após selecionar o primeiro pino.

Para cancelar um novo fio (exclua-o sem selecionar um pino de destino), clique com o botão direito do mouse ou pressione Escape.

Para excluir uma ligação apenas clique com o botão esquerdo do mouse no fio que ele será removido.

Wokwi Add part

Ligação entre os fios

Para fazer mais de uma ligação na mesma peça, apenas arraste o fio até o pino da peça, conforme a imagem abaixo.

Wokwi Add part

Atenção

Cuidado para não clicar em cima de um fio existente ao arrastar o segundo fio e removê-lo sem querer. Procure sempre clicar em cima do pino da peça.

Código do exemplo 2

const byte BUTTON = 0;
const byte LED1 = 1;

int buttonState = 0;

void setup() {
pinMode(LED1, OUTPUT); // Configura como pino de saída digital
pinMode(BUTTON, INPUT); // Configura como pino de entrada
}

void loop() {
// Lê o estado do botão
buttonState = digitalRead(BUTTON);

// Verifica se está pressionado
if (buttonState == LOW) {
digitalWrite(LED1, HIGH); // Acende o LED interno
} else {
digitalWrite(LED1, LOW); // Apaga o LED interno
}
}

Mudando a cor de um fio

A cor dos novos fios é determinada automaticamente pela função do pino: os fios que começam nos pinos de aterramento são pretos e os outros fios são verdes.

O editor interativo não oferece suporte para definir a cor dos fios. Você pode, no entanto, alterar a cor de qualquer fio editando o diagram.json, saiba mais.

Atalhos do teclado

A tabela a seguir resume os atalhos do teclado:

TeclaFunção
-Reduz o zoom
+Aumenta o zoom
RGira a peça selecionada
DeleteRemove a peça selecionada
?Abre a documentação da peça selecionada
EscapeCancela o fio (no modo de fiação)

Usuários do Firefox: se os atalhos do teclado não funcionarem, certifique-se de que a configuração "Pesquisar texto ao começar a digitar" esteja desabilitada.

Desfazer / Refazer

Qualquer mudança que você fizer no editor interativo também se refletirá em diagram.json.

O editor interativo não tem o recurso de desfazer no momento (há uma solicitação aberta para isso).

Você ainda pode obter o histórico completo de Desfazer se selecionar a guia "diagram.json" no editor de código. Quaisquer alterações feitas no editor de diagramas interativo -refletirá imediatamente no editor de código e você poderá desfazê-los clicando no editor de código e pressionando Ctrl+Z.

Observe que isso só funciona se a guia "diagram.json" estiver ativa enquanto você faz alterações. Esta é uma solução temporária até implementarmos o Desfazer no editor de diagramas interativo.

Saiba mais

Caso queira saber mais sobre outras funcionalidades do simulador, dê uma olhada na lista abaixo. Você pode também consultar as peças na lista de Referência do Diagrama, disponível na documentação do Wokwi.

Exemplos no Simulador

- - +

Como simular a Franzininho DIY no Wokwi

Wokwi é um simulador online para Arduino e Eletrônica. Foi desenvolvido para makers, por makers.

+

Você pode usar o Wokwi para aprender a programar o Franzininho DIY, criar protótipos de suas idéias, e compartilhar seus projetos com outros makers.

+

Wokwi Franzininho DIY

+

Use o Template do Franzininho DIY clicando na imagem acima para começar um novo projeto no Wokwi.

+

Primeiros passos

+

Vamos começar o nosso programa acendendo o LED1 do Franzinino DIY no simulador, para isso copie ou digite o código abaixo no editor do Wokwi conforme imagem abaixo.

+

Wokwi Code Editor

+

Código do exemplo 1

+
const byte LED1 = 1;
+
+void setup() {
+  pinMode(LED1, OUTPUT);     // Configura como pino de saída digital
+}
+
+void loop() {
+  digitalWrite(LED1, HIGH);  // Acende o LED interno
+  delay(1000);               // Aguarda um segundo
+  digitalWrite(LED1, LOW);   // Apaga o LED interno
+  delay(1000);               // Aguarda um segundo
+}
+
+

Em seguida, vamos executar o nosso programa clicando no botão verde conforme a imagem abaixo.

+

Wokwi Simulation

+

Peças

+

Vamos chamar os novos módulos ou componentes de peças, que seriam como por exemplo, as peças de um jogo de montagem, onde vamos adicionando cada uma para depois fazermos as ligações entre elas.

+

Cada projeto de simulação contém um arquivo diagram.json localizado no editor de código. Este arquivo define as peças +que serão usadas para a simulação, suas propriedades e as conexões entre os componentes.

+

O editor de diagramas fornece uma maneira interativa de editar seu diagrama: adicionando peças à simulação e definindo as conexões entre elas.

+

Adicionando uma nova peça

+

Para adicionar uma nova peça, clique no botão roxo "+" na parte superior do editor de diagramas.

+

Você verá um menu com uma lista de peças que você pode adicionar. Escolha uma peça para adicioná-la. A peça será adicionada na posição (0, 0), e então você pode arrastá-la para a posição desejada, conforme imagem abaixo.

+

Wokwi Add part

+

Rotacionando uma peça

+

Gire uma peça clicando nela (para selecioná-la) e pressionando "R". A peça girará 90 graus no sentido horário. Se você precisar girar uma peça +com um valor diferente (por exemplo, 45 graus), você pode conseguir isso editando o arquivo diagram.json no editor de código.

+

Removendo uma peça

+

Exclua uma peça clicando nela (para selecioná-la) e em seguida pressionando a tecla Delete.

+

Ligações

+

Criação de uma ligação entre as duas peças

+

Para criar um novo fio entre duas peças, clique em um dos pinos que deseja conectar. Em seguida, clique no segundo pino (alvo). Isso criará o fio.

+

Wokwi Add part

+

Se quiser que o fio vá de uma maneira específica, você pode guiá-lo clicando para onde deseja que ele vá após selecionar o primeiro pino.

+

Para cancelar um novo fio (exclua-o sem selecionar um pino de destino), clique com o botão direito do mouse ou pressione Escape.

+

Para excluir uma ligação apenas clique com o botão esquerdo do mouse no fio que ele será removido.

+

Wokwi Add part

+

Ligação entre os fios

+

Para fazer mais de uma ligação na mesma peça, apenas arraste o fio até o pino da peça, conforme a imagem abaixo.

+

Wokwi Add part

+

Cuidado para não clicar em cima de um fio existente ao arrastar o segundo fio e removê-lo sem querer. Procure sempre clicar em cima do pino da peça.

+

Código do exemplo 2

+
const byte BUTTON = 0;
+const byte LED1 = 1;
+
+int buttonState = 0;
+
+void setup() {
+  pinMode(LED1, OUTPUT);      // Configura como pino de saída digital
+  pinMode(BUTTON, INPUT);     // Configura como pino de entrada
+}
+
+void loop() {
+  // Lê o estado do botão
+  buttonState = digitalRead(BUTTON);
+
+  // Verifica se está pressionado
+  if (buttonState == LOW) {
+    digitalWrite(LED1, HIGH); // Acende o LED interno
+  } else {
+    digitalWrite(LED1, LOW);  // Apaga o LED interno
+  }
+}
+
+

Mudando a cor de um fio

+

A cor dos novos fios é determinada automaticamente pela função do pino: os fios que começam nos pinos de aterramento são pretos e os outros fios são verdes.

+

O editor interativo não oferece suporte para definir a cor dos fios. Você pode, no entanto, alterar a cor de qualquer fio editando o diagram.json, saiba mais.

+

Atalhos do teclado

+

A tabela a seguir resume os atalhos do teclado:

+
TeclaFunção
-Reduz o zoom
+Aumenta o zoom
RGira a peça selecionada
DeleteRemove a peça selecionada
?Abre a documentação da peça selecionada
EscapeCancela o fio (no modo de fiação)
+

Usuários do Firefox: se os atalhos do teclado não funcionarem, certifique-se de que a configuração "Pesquisar texto ao começar a digitar" esteja desabilitada.

+

Desfazer / Refazer

+

Qualquer mudança que você fizer no editor interativo também se refletirá em diagram.json.

+

O editor interativo não tem o recurso de desfazer no momento (há uma solicitação aberta para isso).

+

Você ainda pode obter o histórico completo de Desfazer se selecionar a guia "diagram.json" no editor de código. Quaisquer alterações feitas no editor de diagramas interativo +refletirá imediatamente no editor de código e você poderá desfazê-los clicando no editor de código e pressionando Ctrl+Z.

+

Observe que isso só funciona se a guia "diagram.json" estiver ativa enquanto você faz alterações. Esta é uma solução temporária até implementarmos o Desfazer no editor de diagramas interativo.

+

Saiba mais

+

Caso queira saber mais sobre outras funcionalidades do simulador, dê uma olhada na lista abaixo. Você pode também consultar as peças na lista de Referência do Diagrama, disponível na documentação do Wokwi.

+ +

Exemplos no Simulador

+
\ No newline at end of file diff --git a/en/docs/franzininho-tiny/franzininho-tiny/index.html b/en/docs/franzininho-tiny/franzininho-tiny/index.html index c806beab0..b293ec15d 100755 --- a/en/docs/franzininho-tiny/franzininho-tiny/index.html +++ b/en/docs/franzininho-tiny/franzininho-tiny/index.html @@ -1,17 +1,46 @@ - + - -Placa Franzininho Tiny | Franzininho - - - + +Placa Franzininho Tiny | Franzininho + + + -
-

Placa Franzininho Tiny

A Franzininho Tiny veio para dar squencia ao excelente trabalho feito pela Franzininho DIY. Em muitas aplicações a soldagem não é viável, assim, muitas vezes foram solicitadas placas Franzininho DIY soldadas, o que não era a proposta da placa no formato DIY.

Para facilitar, escolhemos um microcontrolador que mantenha a compatibilidade com a Franzininho DIY, porém com mais opções de pinos e no formato SMD.

A Franzininho Tiny tem um form factor compatível com protoboard e já vem montada e pronta para programar:

Franzininho Tiny

Resumo de recursos

  • Microcontrolador: ATtiny841
  • Pinos de I/O: até 11 (alguns estão ligados a USB)
  • Entradas Analógicas: até 9
  • PWM: 4
  • I2C: 1
  • SPI: 1
  • UART: 1
  • Tensão de funcionamento: 5V
  • Alimentação: USB(5V) ou externa (de 7,5V à 9V)

Documentação

Projeto Open Hardware

Assim como a Franzininho DIY, a placa Franzininho tiny também foi publicada como projeto de hardware aberto. Para essa placa foi escolhida a CERN Open Hardware Licence, uma licenças mais adequada para projetos de hardware.

Conforme definido no “how to” da licença, no repositório do projeto estão incluídos os seguintes arquivos:

  • LICENSE.TXT
  • cern_ohl_v_1_2_howto.pdf
  • CHANGES.TXT
  • COPYRIGHT.TXT
  • PRODUCT.TXT
Importante

Para reprodução do projeto ou derivações, é importante verificar os requisitos da licença , copyright e boas práticas.

Onde comprar

Entrar em contato: contato@franzininho.com.br

- - +

Placa Franzininho Tiny

A Franzininho Tiny veio para dar squencia ao excelente trabalho feito pela Franzininho DIY. Em muitas aplicações a soldagem não é viável, assim, muitas vezes foram solicitadas placas Franzininho DIY soldadas, o que não era a proposta da placa no formato DIY.

+

Para facilitar, escolhemos um microcontrolador que mantenha a compatibilidade com a Franzininho DIY, porém com mais opções de pinos e no formato SMD.

+

A Franzininho Tiny tem um form factor compatível com protoboard e já vem montada e pronta para programar:

+

Franzininho Tiny

+

Resumo de recursos

+
    +
  • Microcontrolador: ATtiny841
  • +
  • Pinos de I/O: até 11 (alguns estão ligados a USB)
  • +
  • Entradas Analógicas: até 9
  • +
  • PWM: 4
  • +
  • I2C: 1
  • +
  • SPI: 1
  • +
  • UART: 1
  • +
  • Tensão de funcionamento: 5V
  • +
  • Alimentação: USB(5V) ou externa (de 7,5V à 9V)
  • +
+

Documentação

+ +

Projeto Open Hardware

+

Assim como a Franzininho DIY, a placa Franzininho tiny também foi publicada como projeto de hardware aberto. Para essa placa foi escolhida a CERN Open Hardware Licence, uma licenças mais adequada para projetos de hardware.

+

Conforme definido no “how to” da licença, no repositório do projeto estão incluídos os seguintes arquivos:

+
    +
  • LICENSE.TXT
  • +
  • cern_ohl_v_1_2_howto.pdf
  • +
  • CHANGES.TXT
  • +
  • COPYRIGHT.TXT
  • +
  • PRODUCT.TXT
  • +
+

Para reprodução do projeto ou derivações, é importante verificar os requisitos da licença , copyright e boas práticas.

+

Onde comprar

+

Entrar em contato: contato@franzininho.com.br

\ No newline at end of file diff --git a/en/docs/franzininho-wifi-lab01/index.html b/en/docs/franzininho-wifi-lab01/index.html index 6cc77a296..1731a9acf 100755 --- a/en/docs/franzininho-wifi-lab01/index.html +++ b/en/docs/franzininho-wifi-lab01/index.html @@ -1,17 +1,76 @@ - + - -Franzininho WiFi LAB01 | Franzininho - - - + +Franzininho WiFi LAB01 | Franzininho + + + -
-

Franzininho WiFi LAB01

A Franzininho WiFi LAB01 é uma placa de expansão para a placa Franzininho WiFi, com a proposta de ser um laboratório para auxiliar no ensino e aprendizagem do ESP32, com base na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experiencias.

Franzininho WiFi LAB01

Nesse material você encontra os detalhes do hardware da Franzininho WiFi LAB01.

Saiba mais sobre a Franzininho WiFi: Placa Franzininho WiFi

Franzininho WiFi LAB01

A placa Franzininho WiFi LAB01 foi desenvolvida para facilitar o ensino e aprendizagem em diversos níveis e abordagens com a Franzininho WiFi.

Essa placa é o laboratório base para os exemplos apresentados com a Franzininho WiFi sendo usada em oficinas, workshops e formações em diversos níveis de abordagem, desde iniciantes até desenvolvedores experientes.

Recursos da Franzininho WiFi LAB01

  • Conector para placa Franzininho WiFi
  • 6 chaves tácteis
  • Conector para display IPS 240×240 ST7789
  • Conector para display OLED 0.96 SSD1306
  • DHT11
  • LDR
  • LED RGB
  • BUZZER
  • Expansões:
    • 5 x I2C
    • 2 UARTs
    • Alimentação (5V, GND)
    • 6x Conector para garras jacarés (TOUCH, entrada DIGITAL)
    • Todos os I/Os da Franzininho WiFi
  • JTAG
  • Possibilidade de desabilitar/habilitar recursos para uso dos I/Os por outro recurso

Resumo dos recursos da placa

Recursos da Franzininho WiFi LAB01

Esquemático

Franzininho-wifi-lab01-esquematico.png

Licença

A Franzininho WiFi LAB01 é um projeto open source e está disponível sob a licença CERN Open Hardware License.

O projeto, criado em fevereiro de 2022 no EasyEDA, está disponível em: https://oshwlab.com/fabiosouza/shield-franzininho-wifi.

Usando os pinos de expansão da placa

A placa Franzininho WiFi LAB01 foi pensanda para o uso dos recursos existentes na placa e também dando a possibilidade para adicionar recursos externos. Por exemplo, se voce precisar adicionar um rele para acionamento de potência, ou outro sensor, você pode usar os pinos de expansão da placa.

Franzininho-wifi-lab01-expansoes.png

Caso o pino da Franzininho WiFi que voce queira usar esteja sendo usado por um dos recursos onboard da placa, voce pode desabilitar através dos jumper correspondente:

Franzininho-wifi-lab01-jumpers.png

Além disso, ela possui alguns barramentos de comunicações que facilitam a conexão de módulos externos. É posivel ligar 5 módulos I2C e 2 UARTs#

Mapa de pinos Franzininho vs Recurso onboard

PinoRecurso
I01LDR
I02BT6
IO3BT5
IO4BT4
IO5BT3
IO6BT2
IO7BT1
IO8OLED_SDA
IO9OLED_SCL
IO10TFT_DC
IO11TFT_RES
IO12LED AZUL
IO13LED VERDE
IO14LED VERMELHO
IO15DHT11
IO17BUZZER
IO35TFT_SDA
IO36TFT_scl

JTAG

A Franzininho WiFI LAB01 possui conector para JTAG compatível com o ESP-PROG

Franzininho-wifi-lab01-jtag.png

Como Programar?

Conforme apresentado no artigo “Como programar a Franzininho WiFi? Descubra agora mesmo!“, a Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns são:

  • ESP-IDF, Arduino, CircuitPython e MicroPython

Exemplos de código:

Onde adquirir a placa?

Adquira sua placa em: https://cursos.embarcados.com.br/cursos/franzininho-wifi-lab01/

Se você quiser equipar o laboratório da sua instituição com essa placa, entre em contato conosco para reservar com antecedência antes da produção.

Contato: contato@embarcados.com.br

- - +

Franzininho WiFi LAB01

A Franzininho WiFi LAB01 é uma placa de expansão para a placa Franzininho WiFi, com a proposta de ser um laboratório para auxiliar no ensino e aprendizagem do ESP32, com base na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experiencias.

+

Franzininho WiFi LAB01

+

Nesse material você encontra os detalhes do hardware da Franzininho WiFi LAB01.

+

Saiba mais sobre a Franzininho WiFi: Placa Franzininho WiFi

+

Franzininho WiFi LAB01

+

A placa Franzininho WiFi LAB01 foi desenvolvida para facilitar o ensino e aprendizagem em diversos níveis e abordagens com a Franzininho WiFi.

+

Essa placa é o laboratório base para os exemplos apresentados com a Franzininho WiFi sendo usada em oficinas, workshops e formações em diversos níveis de abordagem, desde iniciantes até desenvolvedores experientes.

+

Recursos da Franzininho WiFi LAB01

+
    +
  • Conector para placa Franzininho WiFi
  • +
  • 6 chaves tácteis
  • +
  • Conector para display IPS 240×240 ST7789
  • +
  • Conector para display OLED 0.96 SSD1306
  • +
  • DHT11
  • +
  • LDR
  • +
  • LED RGB
  • +
  • BUZZER
  • +
  • Expansões: +
      +
    • 5 x I2C
    • +
    • 2 UARTs
    • +
    • Alimentação (5V, GND)
    • +
    • 6x Conector para garras jacarés (TOUCH, entrada DIGITAL)
    • +
    • Todos os I/Os da Franzininho WiFi
    • +
    +
  • +
  • JTAG
  • +
  • Possibilidade de desabilitar/habilitar recursos para uso dos I/Os por outro recurso
  • +
+

Resumo dos recursos da placa

+

Recursos da Franzininho WiFi LAB01

+

Esquemático

+

Franzininho-wifi-lab01-esquematico.png

+

Licença

+

A Franzininho WiFi LAB01 é um projeto open source e está disponível sob a licença CERN Open Hardware License.

+

O projeto, criado em fevereiro de 2022 no EasyEDA, está disponível em: https://oshwlab.com/fabiosouza/shield-franzininho-wifi.

+

Usando os pinos de expansão da placa

+

A placa Franzininho WiFi LAB01 foi pensanda para o uso dos recursos existentes na placa e também dando a possibilidade para adicionar recursos externos. Por exemplo, se voce precisar adicionar um rele para acionamento de potência, ou outro sensor, você pode usar os pinos de expansão da placa.

+

Franzininho-wifi-lab01-expansoes.png

+

Caso o pino da Franzininho WiFi que voce queira usar esteja sendo usado por um dos recursos onboard da placa, voce pode desabilitar através dos jumper correspondente:

+

Franzininho-wifi-lab01-jumpers.png

+

Além disso, ela possui alguns barramentos de comunicações que facilitam a conexão de módulos externos. É posivel ligar 5 módulos I2C e 2 UARTs#

+

Mapa de pinos Franzininho vs Recurso onboard

+
PinoRecurso
I01LDR
I02BT6
IO3BT5
IO4BT4
IO5BT3
IO6BT2
IO7BT1
IO8OLED_SDA
IO9OLED_SCL
IO10TFT_DC
IO11TFT_RES
IO12LED AZUL
IO13LED VERDE
IO14LED VERMELHO
IO15DHT11
IO17BUZZER
IO35TFT_SDA
IO36TFT_scl
+

JTAG

+

A Franzininho WiFI LAB01 possui conector para JTAG compatível com o ESP-PROG

+

Franzininho-wifi-lab01-jtag.png

+

Como Programar?

+

Conforme apresentado no artigo “Como programar a Franzininho WiFi? Descubra agora mesmo!“, a Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns são:

+
    +
  • ESP-IDF, Arduino, CircuitPython e MicroPython
  • +
+

Exemplos de código:

+ +

Onde adquirir a placa?

+

Adquira sua placa em: https://cursos.embarcados.com.br/cursos/franzininho-wifi-lab01/

+

Se você quiser equipar o laboratório da sua instituição com essa placa, entre em contato conosco para reservar com antecedência antes da produção.

+

Contato: contato@embarcados.com.br

\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-arduino/blink/index.html b/en/docs/franzininho-wifi/exemplos-arduino/blink/index.html index 73e6e4714..43de9cb69 100755 --- a/en/docs/franzininho-wifi/exemplos-arduino/blink/index.html +++ b/en/docs/franzininho-wifi/exemplos-arduino/blink/index.html @@ -1,17 +1,14 @@ - + - -Blink | Franzininho - - - + +Blink | Franzininho + + + - - - + \ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-arduino/dht11/index.html b/en/docs/franzininho-wifi/exemplos-arduino/dht11/index.html index 11e871698..9ec45b5f7 100755 --- a/en/docs/franzininho-wifi/exemplos-arduino/dht11/index.html +++ b/en/docs/franzininho-wifi/exemplos-arduino/dht11/index.html @@ -1,17 +1,138 @@ - + - -Leitura DHT11 | Franzininho - - - + +Leitura DHT11 | Franzininho + + + -
-

Leitura DHT11

Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores no terminal serial.

Materiais necessários

Identifique os seguintes materiais necessários para este projeto:

  • 1 Franzininho WiFi.
  • 1 Sensor DHT11
  • 1 Resistor de 10k
  • 1 Protoboard.
  • Cabos de ligação.

Circuito

Realize a montagem do circuito da maneira indicada pela figura a seguir:

Circuito DHT11

Código

Para usar o sensor DHT com a Franzininho WiFi no Arduino, precisamos instalar uma bibloteca. Vamos usar a biblioteca mantida pela Adafruit.

Vamos instalar a biblioteca usando o gerenciador de biblitecas do Arduino. Acesso Ferramentas -> Gerenciar Bibliotecas. Procure por DHT e instale a bibloteca DHT sensor library da Adafruit:

Instalação da Biblioteca

Agora vamos fazer a leitura do sensor e imprimir os valores de temperatura e umidade no terminal serial.

/*************************************************************************************
* Exemplo para leitura de sensor DHT11
*
*
* Bibliotecas necessarias
* DHT da Adafruit - Instalar pelo gerenciador de bibliotecas
*
* por: Fábio Souza
*************************************************************************************/

#include "DHT.h"

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);


/*********************************************************************************
* Função Setup
* Configurações iniciais da aplicação
*********************************************************************************/
void setup()
{
Serial.begin(19200);
Serial.println("Teste de leitura do sensor DHT11");
dht.begin();
}

/*********************************************************************************
* Função loop
*********************************************************************************/
void loop()
{

float umidade = dht.readHumidity();
float temperatura = dht.readTemperature();

delay(500);


// Se as variáveis temperatura e umidade não forem valores válidos, acusará falha de leitura.
if (isnan(temperatura) || isnan(umidade))
{
Serial.println("Falha na leitura do dht11...");
}
else //se não, exibirá os valores lidos
{
//Imprime os dados no monitor serial
Serial.print("Umidade: ");
Serial.print(umidade);
Serial.print(" %\t"); //tab
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(" °C");
}
}

Análise do código

Na primeira parte do código adicionamo as bibliotecas a serem usadas na aplicação e a instancia do DHT11:

#define DHTPIN 2 
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

Na função setup() fizemos a inicialização do DHT11 e da comunicação Serial:

void setup() 
{
Serial.begin(19200);
Serial.println("Teste de leitura do sensor DHT11");
dht.begin();
}

No loop() infinito fazemos a leitura da temperatura e umidade a cada 500 ms e imprimimos na serial. Caso ocorra falha na leitura do DHT11 é exibido uma mensagem de erro:

void loop() 
{

float umidade = dht.readHumidity();
float temperatura = dht.readTemperature();

delay(500);


// Se as variáveis temperatura e umidade não forem valores válidos, acusará falha de leitura.
if (isnan(temperatura) || isnan(umidade))
{
Serial.println("Falha na leitura do dht11...");
}
else //se não, exibirá os valores lidos
{
//Imprime os dados no monitor serial
Serial.print("Umidade: ");
Serial.print(umidade);
Serial.print(" %\t"); //tab
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(" °C");
}
}

Resultado

A figura a seguir exibe os valores lidos no monitor serial:

Terminal Serial

Conclusão

O sensor DHT11( e similares) possibilita que façamos leitura de temperatura e umidade de uma forma simples e eficiente. Através de 1 fio de comunicação conseguimos fazer a leitura das duas grandezas. Como a comunicação é um pouco complexa, o uso de uma biblioteca facilita a comunicação com o dispositivo. A biblioteca mantida pela Adafruit é muito eficiente e estável.

info

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

AutorFábio Souza
Data:23/10/2021
- - +

Leitura DHT11

Nesse exemplo vamos fazer a leitura do sensor de temperatura e umidade, DHT11, e imprimir os valores no terminal serial.

+

Materiais necessários

+

Identifique os seguintes materiais necessários para este projeto:

+
    +
  • 1 Franzininho WiFi.
  • +
  • 1 Sensor DHT11
  • +
  • 1 Resistor de 10k
  • +
  • 1 Protoboard.
  • +
  • Cabos de ligação.
  • +
+

Circuito

+

Realize a montagem do circuito da maneira indicada pela figura a seguir:

+

Circuito DHT11

+

Código

+

Para usar o sensor DHT com a Franzininho WiFi no Arduino, precisamos instalar uma bibloteca. Vamos usar a biblioteca mantida pela Adafruit.

+

Vamos instalar a biblioteca usando o gerenciador de biblitecas do Arduino. Acesso Ferramentas -> Gerenciar Bibliotecas. Procure por DHT e instale a bibloteca DHT sensor library da Adafruit:

+

Instalação da Biblioteca

+

Agora vamos fazer a leitura do sensor e imprimir os valores de temperatura e umidade no terminal serial.

+
/*************************************************************************************
+ * Exemplo para leitura de sensor DHT11
+ * 
+ * 
+ * Bibliotecas necessarias
+ * DHT da Adafruit - Instalar pelo gerenciador de bibliotecas
+ *  
+ *  por: Fábio Souza
+ *************************************************************************************/
+
+#include "DHT.h"
+ 
+#define DHTPIN 2 
+#define DHTTYPE DHT11
+ 
+DHT dht(DHTPIN, DHTTYPE);
+
+
+/*********************************************************************************
+ *  Função Setup
+ *  Configurações iniciais da aplicação
+ *********************************************************************************/
+void setup() 
+{
+Serial.begin(19200);
+Serial.println("Teste de leitura do sensor DHT11");
+dht.begin();
+}
+
+/*********************************************************************************
+ *  Função loop
+ *********************************************************************************/
+void loop() 
+{
+
+  float umidade = dht.readHumidity();
+  float temperatura = dht.readTemperature();
+
+  delay(500);
+  
+
+  // Se as variáveis temperatura e umidade não forem valores válidos, acusará falha de leitura.
+  if (isnan(temperatura) || isnan(umidade)) 
+  {
+  Serial.println("Falha na leitura do dht11...");
+  } 
+  else //se não, exibirá os valores lidos 
+  {
+    //Imprime os dados no monitor serial
+    Serial.print("Umidade: ");
+    Serial.print(umidade);
+    Serial.print(" %\t"); //tab
+    Serial.print("Temperatura: ");
+    Serial.print(temperatura);
+    Serial.println(" °C");
+  }
+}
+
+

Análise do código

+

Na primeira parte do código adicionamo as bibliotecas a serem usadas na aplicação e a instancia do DHT11:

+
#define DHTPIN 2 
+#define DHTTYPE DHT11
+ 
+DHT dht(DHTPIN, DHTTYPE);
+
+

Na função setup() fizemos a inicialização do DHT11 e da comunicação Serial:

+
void setup() 
+{
+Serial.begin(19200);
+Serial.println("Teste de leitura do sensor DHT11");
+dht.begin();
+}
+
+

No loop() infinito fazemos a leitura da temperatura e umidade a cada 500 ms e imprimimos na serial. Caso ocorra falha na leitura do DHT11 é exibido uma mensagem de erro:

+
void loop() 
+{
+
+  float umidade = dht.readHumidity();
+  float temperatura = dht.readTemperature();
+
+  delay(500);
+  
+
+  // Se as variáveis temperatura e umidade não forem valores válidos, acusará falha de leitura.
+  if (isnan(temperatura) || isnan(umidade)) 
+  {
+  Serial.println("Falha na leitura do dht11...");
+  } 
+  else //se não, exibirá os valores lidos 
+  {
+    //Imprime os dados no monitor serial
+    Serial.print("Umidade: ");
+    Serial.print(umidade);
+    Serial.print(" %\t"); //tab
+    Serial.print("Temperatura: ");
+    Serial.print(temperatura);
+    Serial.println(" °C");
+  }
+}
+
+

Resultado

+

A figura a seguir exibe os valores lidos no monitor serial:

+

Terminal Serial

+

Conclusão

+

O sensor DHT11( e similares) possibilita que façamos leitura de temperatura e umidade de uma forma simples e eficiente. Através de 1 fio de comunicação conseguimos fazer a leitura das duas grandezas. Como a comunicação é um pouco complexa, o uso de uma biblioteca facilita a comunicação com o dispositivo. A biblioteca mantida pela Adafruit é muito eficiente e estável.

+

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

+
AutorFábio Souza
Data:23/10/2021
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard/index.html b/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard/index.html index 2b9720e98..bed35db53 100755 --- a/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard/index.html +++ b/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboard/index.html @@ -1,17 +1,67 @@ - + - -Neopixel RGB LED Onboard | Franzininho - - - + +Neopixel RGB LED Onboard | Franzininho + + + -
-

Neopixel RGB LED Onboard

Nesse exemplo vamos aprender usar o LED RGB Neopixel onboard na Franzininho WiFi.

Instalação da biblioteca

Na IDE Arduino, clique em Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas

Neopixel

Selecione: "Adafruit NeoPixel by Adafruit Versão X.X.X" e clique em Instalar

Neopixel

Após selecionar a placa Franzininho conforme os outros tutoriais, poderá ser usado o código de exemplo abaixo:

Código de Exemplo

// inclui biblioteca NeoPixel
#include <Adafruit_NeoPixel.h>

// O Led RGB está conectado ao pino 18 do Franzininho
#define PIN 18
// Há apenas um LED
#define NUMPIXELS 1

// quantidade de cores que serão mostradas
#define MAXCOLORS 4

// Instância do objeto "Adafruit_NeoPixel"
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

//cores
#define RED pixels.Color(255, 0, 0) // vermelho
#define GREEN pixels.Color(0, 255, 0) // verde
#define BLUE pixels.Color(0, 0, 255) // azul
#define WHITE pixels.Color(255, 255, 255) // branco

// array com todas as cores para uso em laço for
// uint32_t é o tipo retornado pela função Color
uint32_t cores[MAXCOLORS] = {RED, GREEN, BLUE, WHITE};

void setup() {

// Inicializa o NeoPixel
pixels.begin();
}

void loop() {

// "apaga" o LED RGB
pixels.clear();

// exibe as cores em sequência definida no array cores
for(int i = 0; i<MAXCOLORS;i++){
pixels.setPixelColor(0,cores[i]);
pixels.show(); // envia o pixel atualizado para o hardware
delay(300); // tempo para exibição da cor
}
}

Tente exibir outras cores e animações. Compartilhe seus resultados com a comunidade.

info

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

AutorHenrique Vilela
Data:07/10/2021
- - +

Neopixel RGB LED Onboard

Nesse exemplo vamos aprender usar o LED RGB Neopixel onboard na Franzininho WiFi.

+

Instalação da biblioteca

+

Na IDE Arduino, clique em Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas

+

Neopixel

+

Selecione: "Adafruit NeoPixel by Adafruit Versão X.X.X" e clique em Instalar

+

Neopixel

+

Após selecionar a placa Franzininho conforme os outros tutoriais, poderá ser usado o código de exemplo abaixo:

+

Código de Exemplo

+
// inclui biblioteca NeoPixel
+#include <Adafruit_NeoPixel.h>
+
+// O Led RGB está conectado ao pino 18 do Franzininho
+#define PIN         18
+// Há apenas um LED
+#define NUMPIXELS   1
+
+// quantidade de cores que serão mostradas
+#define MAXCOLORS 4
+
+// Instância do objeto "Adafruit_NeoPixel"
+Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
+
+//cores
+#define RED    pixels.Color(255, 0, 0)     // vermelho
+#define GREEN  pixels.Color(0, 255, 0)     // verde
+#define BLUE   pixels.Color(0, 0, 255)     // azul
+#define WHITE  pixels.Color(255, 255, 255) // branco
+
+// array com todas as cores para uso em laço for
+// uint32_t é o tipo retornado pela função Color
+uint32_t   cores[MAXCOLORS] = {RED, GREEN, BLUE, WHITE};
+
+void setup() {
+  
+  // Inicializa o NeoPixel
+  pixels.begin();
+}
+
+void loop() {
+  
+  // "apaga" o LED RGB
+  pixels.clear();
+
+  // exibe as cores em sequência definida no array cores
+  for(int i = 0; i<MAXCOLORS;i++){
+    pixels.setPixelColor(0,cores[i]);
+    pixels.show();  // envia o pixel atualizado para o hardware
+    delay(300);  // tempo para exibição da cor
+  }
+}
+
+

Tente exibir outras cores e animações. Compartilhe seus resultados com a comunidade.

+

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

+
AutorHenrique Vilela
Data:07/10/2021
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos/index.html b/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos/index.html index 16fd2e210..a2c50b09f 100755 --- a/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos/index.html +++ b/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passos/index.html @@ -1,18 +1,67 @@ - + - -Primeiros Passos | Franzininho - - - + +Primeiros Passos | Franzininho + + + -
-

Primeiros Passos

A Franzininho WiFi foi adicionada recentemente a plataforma Arduino através do pacote para ESP32 da Espressif. Essa foi uma contribuição do Pedro Minatel para o projeto Franzininho. Pedro enviou um PR com a adição da Franzininho WiFi no modo CDC e também como MSC.

Nesse tutorial aprenderemos configurar a Arduino IDE e fazer o upload de código para a placa Franzininho WiFi.

Usamos como base para esse tutorial a documentação da Espressif para Arduino: https://docs.espressif.com/projects/arduino-esp32/en/latest/

Video com a configuração

Arduino IDE

Arduino é uma plataforma de prototipação de projetos eletrônicos composta por placas e uma interface de programação chamada Arduino.

Antes de começarmos as configurações é importante que você instale a Arduino IDE em seu sistema operacional. Acesse: https://www.arduino.cc/en/software e baixe a versão adequada para o seu sistema operacional.

Estamos usando para esse tutorial a Arduino IDE 1.8.15, recomendamos essa versão ou superior.

Download IDE

Instalação do pacote ESP32 para Arduino

Para instalação do pacote ESP32 para Arduino usaremos a ferramenta Gerenciador de placas na própria IDE.

Siga os seguintes passos:

  1. Abra a Arduino IDe e acesse Arquivos -> Preferências;
  2. Cole em “URLs adicionais para Gerenciadores de Placas” a seguinte URL: -https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  3. Clique em OK;
  4. Vá em Ferramentas > Placa > Gerenciador de Placas;
  5. Ao abrir, procure por ESP32-S2, e clique em instalar;

Veja como o passo a passo na imagem abaixo:

pacote passo a passo

Pronto, agora é só ir em placa e procurar pela Franzininho WiFi:

Selecionando a placa

Faça a seguinte configuração:

Configuração

Agora faremos um exemplo para verificar o processo de upload.

Abra o exemplo GetChipID:

Exemplo

Agora faremos o upload para a placa. Se for a primeira vez que você usará a Arduino IDE para programar a Franzininho WiFi você deverá colocar a placa em modo DFU para carregar o código. Após isso não precisará mais fazer esse procedimento.

Dica

Isso deverá sempre ser feito se você programar a placa com outras plataformas como ESP-IDF, CircuitPython, etc. Apos esse procedimento é só programar a placa pressionando upload, como estamos acostumado a fazer com outras placas.

Colocando a placa em modo DFU

  1. Plugue a placa na USB;

  2. Pressione o botão Boot e segure;

  3. Pressione o botão Reset e solte em seguida;

  4. Solte o botão Boot.

Para fazer carregar o código na placa clique em Upload:

Uoload

Abra o monitor serial e configure a velocidade para 115200 bps:

Monitor Serial

Será exibido o modelo e chip ID.

Agora você pode carregar qualquer código para a placa sem precisar colocá-la em modo DFU.

tip

A Franzininho WiFi MSC funciona da mesma forma para upload via Arduino IDE. A diferença é que nesse modo podemos carregar binários sem uso da IDE, apenas carregando o binário para o dispositivo de armazenamento criado no computador.

- - +

Primeiros Passos

A Franzininho WiFi foi adicionada recentemente a plataforma Arduino através do pacote para ESP32 da Espressif. Essa foi uma contribuição do Pedro Minatel para o projeto Franzininho. Pedro enviou um PR com a adição da Franzininho WiFi no modo CDC e também como MSC.

+

Nesse tutorial aprenderemos configurar a Arduino IDE e fazer o upload de código para a placa Franzininho WiFi.

+

Usamos como base para esse tutorial a documentação da Espressif para Arduino: https://docs.espressif.com/projects/arduino-esp32/en/latest/

+

Video com a configuração

+ +

Arduino IDE

+

Arduino é uma plataforma de prototipação de projetos eletrônicos composta por placas e uma interface de programação chamada Arduino.

+

Antes de começarmos as configurações é importante que você instale a Arduino IDE em seu sistema operacional. Acesse: https://www.arduino.cc/en/software e baixe a versão adequada para o seu sistema operacional.

+

Estamos usando para esse tutorial a Arduino IDE 1.8.15, recomendamos essa versão ou superior.

+

Download IDE

+

Instalação do pacote ESP32 para Arduino

+

Para instalação do pacote ESP32 para Arduino usaremos a ferramenta Gerenciador de placas na própria IDE.

+

Siga os seguintes passos:

+
    +
  1. Abra a Arduino IDe e acesse Arquivos -> Preferências;
  2. +
  3. Cole em “URLs adicionais para Gerenciadores de Placas” a seguinte URL: +https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  4. +
  5. Clique em OK;
  6. +
  7. Vá em Ferramentas > Placa > Gerenciador de Placas;
  8. +
  9. Ao abrir, procure por ESP32-S2, e clique em instalar;
  10. +
+

Veja como o passo a passo na imagem abaixo:

+

pacote passo a passo

+

Pronto, agora é só ir em placa e procurar pela Franzininho WiFi:

+

Selecionando a placa

+

Faça a seguinte configuração:

+

Configuração

+

Agora faremos um exemplo para verificar o processo de upload.

+

Abra o exemplo GetChipID:

+

Exemplo

+

Agora faremos o upload para a placa. Se for a primeira vez que você usará a Arduino IDE para programar a Franzininho WiFi você deverá colocar a placa em modo DFU para carregar o código. Após isso não precisará mais fazer esse procedimento.

+

Isso deverá sempre ser feito se você programar a placa com outras plataformas como ESP-IDF, CircuitPython, etc. Apos esse procedimento é só programar a placa pressionando upload, como estamos acostumado a fazer com outras placas.

+

Colocando a placa em modo DFU

+
    +
  1. +

    Plugue a placa na USB;

    +
  2. +
  3. +

    Pressione o botão Boot e segure;

    +
  4. +
  5. +

    Pressione o botão Reset e solte em seguida;

    +
  6. +
  7. +

    Solte o botão Boot.

    +
  8. +
+

Para fazer carregar o código na placa clique em Upload:

+

Uoload

+

Abra o monitor serial e configure a velocidade para 115200 bps:

+

Monitor Serial

+

Será exibido o modelo e chip ID.

+

Agora você pode carregar qualquer código para a placa sem precisar colocá-la em modo DFU.

+

A Franzininho WiFi MSC funciona da mesma forma para upload via Arduino IDE. A diferença é que nesse modo podemos carregar binários sem uso da IDE, apenas carregando o binário para o dispositivo de armazenamento criado no computador.

\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-circuitpython/dht11/index.html b/en/docs/franzininho-wifi/exemplos-circuitpython/dht11/index.html index b757bbbc9..498810e78 100755 --- a/en/docs/franzininho-wifi/exemplos-circuitpython/dht11/index.html +++ b/en/docs/franzininho-wifi/exemplos-circuitpython/dht11/index.html @@ -1,17 +1,84 @@ - + - -Sensor de temperatura e umidade DHT11 | Franzininho - - - + +Sensor de temperatura e umidade DHT11 | Franzininho + + + -
-

Sensor de temperatura e umidade DHT11

Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11.

Materiais necessários

Identifique os seguintes materiais necessários para este projeto:

  • 1 Franzininho WiFi.
  • 1 Sensor DHT11
  • 1 Resistor de 10k
  • 1 Protoboard.
  • Cabos de ligação.

Circuito

Realize a montagem do circuito da maneira indicada pela figura a seguir:

Circuito DHT11

Código

Para usar o sensor DHT com a Franzininho WiFi, precisamos instalar o módulo adafruit_dht na placa antes de criarmos nosso código.

As bibliotecas para o CircuitPython podem ser obtidas através do endereço https://circuitpython.org/libraries. Escolha e baixe o arquivo de acordo com a versão do CircuitPyhthon que você tem instalado na Franzininho WiFi.

Em seguida, copie o seguinte arquivo diretamente para a pasta lib do sistema de arquivos da Franzininho WiFi:

  • adafruit_dht.mpy

Instalação da Biblioteca

Para demonstrar o uso do módulo do sensor DHT, digite o código abaixo e conecte ao terminal serial (REPL) da placa para verificar os valores de temperatura e umidade lidos.

""" Leitura de temperatura e umidade com DHT11 """

import board
import time
import adafruit_dht

dht = adafruit_dht.DHT11(board.IO2)

while True:
try:
temperatura = dht.temperature
umidade = dht.humidity
# Imprime valores lidos na serial
print("Temperatura: {:.1f} °C \t Umidade: {}%".format(temperatura, umidade))
except RuntimeError as e:
# A leitura do DHT11 pode falhar
print("Falha na leitura do DHT11: ", e.args)

time.sleep(1)

Análise do código

Na primeira parte do código temos a importação das bibliotecas a serem usadas na aplicação. Note que importamos o módulo adafruit_dht que instalamos na pasta lib da placa:

import board
import time
import adafruit_dht

Em seguida criamos uma instância e escolhemos o modo DHT11, ja que é possível trabalhar com outros modelos com essa biblioteca. É necessario passar como parâmetro o pino que está conectado a linha de comunicação do sensor. Em nosso caso passamos o pino 2:

dht = adafruit_dht.DHT11(board.IO2)

No loop infinito fazemos a leitura dos valores de temperatura e umidade a cada 1 segundo através dos metodos dht.temperature e dht.humidity, e imprimimos os valores lidos no terminal serial.

while True:
try:
temperatura = dht.temperature
umidade = dht.humidity
# Imprime valores lidos na serial
print("Temperatura: {:.1f} °C \t Umidade: {}%".format(temperatura, umidade))
except RuntimeError as e:
# A leitura do DHT11 pode falhar
print("Falha na leitura do DHT11: ", e.args)

time.sleep(1)

Resultado

A figura a seguir exibe os valores lidos no terminal serial(REPL):

Terminal Serial

Conclusão

O sensor DHT11( e similares) possibilita que façamos leitura de temperatura e umidade de uma forma simples e eficiente. Através de 1 fio de comunicação conseguimos fazer a leitura das duas grandezas. Como a comunicação é um pouco complexa, o uso de uma biblioteca facilita a comunicação com o dispositivo.

info

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

AutorFábio Souza
Data:10/10/2021
- - +

Sensor de temperatura e umidade DHT11

Nesse exemplo aprenderemos usar ler valores de temperatura e umidade com o sensor DHT11.

+

Materiais necessários

+

Identifique os seguintes materiais necessários para este projeto:

+
    +
  • 1 Franzininho WiFi.
  • +
  • 1 Sensor DHT11
  • +
  • 1 Resistor de 10k
  • +
  • 1 Protoboard.
  • +
  • Cabos de ligação.
  • +
+

Circuito

+

Realize a montagem do circuito da maneira indicada pela figura a seguir:

+

Circuito DHT11

+

Código

+

Para usar o sensor DHT com a Franzininho WiFi, precisamos instalar o módulo adafruit_dht na placa antes de criarmos nosso código.

+

As bibliotecas para o CircuitPython podem ser obtidas através do endereço https://circuitpython.org/libraries. Escolha e baixe o arquivo de acordo com a versão do CircuitPyhthon que você tem instalado na Franzininho WiFi.

+

Em seguida, copie o seguinte arquivo diretamente para a pasta lib do sistema de arquivos da Franzininho WiFi:

+
    +
  • adafruit_dht.mpy
  • +
+

Instalação da Biblioteca

+

Para demonstrar o uso do módulo do sensor DHT, digite o código abaixo e conecte ao terminal serial (REPL) da placa para verificar os valores de temperatura e umidade lidos.

+
""" Leitura de temperatura e umidade com DHT11 """
+
+import board
+import time
+import adafruit_dht
+
+dht = adafruit_dht.DHT11(board.IO2)
+
+while True:
+    try:
+        temperatura = dht.temperature
+        umidade = dht.humidity
+        # Imprime valores lidos na serial
+        print("Temperatura: {:.1f} °C \t Umidade: {}%".format(temperatura, umidade))
+    except RuntimeError as e:
+        # A leitura do DHT11 pode falhar
+        print("Falha na leitura do DHT11: ", e.args)
+
+    time.sleep(1)
+
+

Análise do código

+

Na primeira parte do código temos a importação das bibliotecas a serem usadas na aplicação. Note que importamos o módulo adafruit_dht que instalamos na pasta lib da placa:

+
import board
+import time
+import adafruit_dht
+
+

Em seguida criamos uma instância e escolhemos o modo DHT11, ja que é possível trabalhar com outros modelos com essa biblioteca. É necessario passar como parâmetro o pino que está conectado a linha de comunicação do sensor. Em nosso caso passamos o pino 2:

+
dht = adafruit_dht.DHT11(board.IO2)
+
+

No loop infinito fazemos a leitura dos valores de temperatura e umidade a cada 1 segundo através dos metodos dht.temperature e dht.humidity, e imprimimos os valores lidos no terminal serial.

+
while True:
+    try:
+        temperatura = dht.temperature
+        umidade = dht.humidity
+        # Imprime valores lidos na serial
+        print("Temperatura: {:.1f} °C \t Umidade: {}%".format(temperatura, umidade))
+    except RuntimeError as e:
+        # A leitura do DHT11 pode falhar
+        print("Falha na leitura do DHT11: ", e.args)
+
+    time.sleep(1)
+
+

Resultado

+

A figura a seguir exibe os valores lidos no terminal serial(REPL):

+

Terminal Serial

+

Conclusão

+

O sensor DHT11( e similares) possibilita que façamos leitura de temperatura e umidade de uma forma simples e eficiente. Através de 1 fio de comunicação conseguimos fazer a leitura das duas grandezas. Como a comunicação é um pouco complexa, o uso de uma biblioteca facilita a comunicação com o dispositivo.

+

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

+
AutorFábio Souza
Data:10/10/2021
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c/index.html b/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c/index.html index b296a78b4..2b2e2ce52 100755 --- a/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c/index.html +++ b/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2c/index.html @@ -1,17 +1,94 @@ - + - -Display OLED I2C | Franzininho - - - + +Display OLED I2C | Franzininho + + + -
-

Display OLED I2C

Nesse exemplo aprenderemos usar o display OLED com comunicação I2C explorando as funcionalidades básicas usando o CircuitPython.

Materiais necessários

Identifique os seguintes materiais necessários para este projeto:

  • 1 Franzininho WiFi.
  • 1 Display OLED 128x64 I2C.
  • 1 Protoboard.
  • Cabos de ligação.

Circuito

A próxima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:

Circuito Display OLED I2C

Resumindo o que é mostrado nas Figuras 4.2 até 4.5, a conexão dos terminais do OLED aos terminais das respectivas placas de desenvolvimento deve ser realizada conforme a tabela a seguir.

OLED I2CFranzininho WiFi
SDA (DATA)GPIO8
SCK (CLK)GPIO9
VDD3V3
GNDGND

Código

Como o display OLED é um componente com funcionamento bastante complexo, vamos fazer uso de uma biblioteca que implementa todas as funcionalidades, permitindo que nossos programas possam ser implementados de maneira bastante simples e produtiva.

As bibliotecas para o CircuitPython podem ser obtidas através do endereço https://circuitpython.org/libraries. Escolha e baixe o arquivo de acordo com a versão do CircuitPyhthon que você tem instalado na Franzininho WiFi.

Bibliotecas

Em seguida, copie os seguintes arquivos diretamente para a posta lib do sistema de arquivos da Franzininho WiFi:

  • adafruit_ssd1306.mpy
  • adafruit_framebuf.mpy

Copie também o arquivo font5x8.bin, mas neste caso, para a pasta raiz da Franzininho WiFi. Por fim, implemente o programa abaixo no arquivo code.py que está localizado na pasta raiz da Franzininho WiFi.

import board
import busio
import adafruit_ssd1306
import time

i2c = busio.I2C(scl=board.IO9, sda=board.IO8)
oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)

try:
inverter = False
while True:
oled.invert(inverter)
oled.fill(0)
oled.rect(0, 0, 128, 64, 1)
oled.rect(2, 2, 124, 60, 1)
oled.text('Franzininho', 4, 4, 1)
oled.text('WiFi', 4, 14, 1)
oled.show()
inverter = not inverter
time.sleep(2)
finally:
oled.invert(False)
oled.fill(0)
oled.show()

Análise do código

Devemos importar as bibliotecas busio e adafruit_ssd1306, que serão responsáveis pelas classes que irão possibilitar a comunicação I2C e o uso do display OLED, respectivamente.

import busio
import adafruit_ssd1306

A comunicação I2C será realizada através do terminais IO9 e IO8 da Franzininho WiFi, conforme podemos observar na pinagem, disponível em https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi

i2c = busio.I2C(scl=board.IO9, sda=board.IO8)

A configuração do display OLED deve levar em conta as suas dimensões e o seu endereço no barramento I2C.

oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)

Neste programa o objetivo e realizar a inversão da exibição do conteúdo no display a cada 2 segundos. Desta forma, será usado o método invert que receberá uma variável booleana como parâmetro, sendo seu valor alternado entre True e False.

oled.invert(inverter)

O método fill é usado para preencher toda área do display e atuará em conjunto com o método invert. Como se trata de um display monocromático temos duas cores disponíveis, 0 (zero) que representa o preto (pixel desligado) e 1 (um) para especificar o branco (pixel ligado), caso o método invert tenha recebido como parâmetro o valor False. Por outro lado, caso invert receber True como parâmetro, 1 (um) vai representar o preto (pixel desligado) e 0 (zero) vai especificar o branco (pixel ligado).

oled.invert(inverter)
oled.fill(0)

Na sequência foi usado o método rect para desenhar um retângulo começando nas coordenadas x = 0 e y = 0 e com 128 pixels de largura e 64 pixels de altura e, logo em seguida, um outro retângulo levemente inferior. O último parâmetro do método rect consiste na cor que, neste exemplo, será branco. Desta forma, acabamos desenhando uma borda dupla que envolve toda a área do display.

oled.rect(0, 0, 128, 64, 1)
oled.rect(2, 2, 124, 60, 1)

O método text possibilita exibir um texto nas coordenadas e na cor especificadas.

oled.text('Franzininho', 4, 4, 1)
oled.text('WiFi', 4, 14, 1)

O método show, irá executar os métodos usados anteriormente, ou seja, fill, rect e text no display. Ou seja, qualquer conteúdo só é exibido no display quando o método show é executado.

oled.show()

Tente exibir outros textos e imagens. Compartilhe seus resultados com a comunidade.

info

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

AutorCláudio Luís Vieira Oliveira
Data:07/10/2021
- - +

Display OLED I2C

Nesse exemplo aprenderemos usar o display OLED com comunicação I2C explorando as funcionalidades básicas usando o CircuitPython.

+

Materiais necessários

+

Identifique os seguintes materiais necessários para este projeto:

+
    +
  • 1 Franzininho WiFi.
  • +
  • 1 Display OLED 128x64 I2C.
  • +
  • 1 Protoboard.
  • +
  • Cabos de ligação.
  • +
+

Circuito

+

A próxima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:

+

Circuito Display OLED I2C

+

Resumindo o que é mostrado nas Figuras 4.2 até 4.5, a conexão dos terminais do OLED aos terminais das respectivas placas de desenvolvimento deve ser realizada conforme a tabela a seguir.

+
OLED I2CFranzininho WiFi
SDA (DATA)GPIO8
SCK (CLK)GPIO9
VDD3V3
GNDGND
+

Código

+

Como o display OLED é um componente com funcionamento bastante complexo, vamos fazer uso de uma biblioteca que implementa todas as funcionalidades, permitindo que nossos programas possam ser implementados de maneira bastante simples e produtiva.

+

As bibliotecas para o CircuitPython podem ser obtidas através do endereço https://circuitpython.org/libraries. Escolha e baixe o arquivo de acordo com a versão do CircuitPyhthon que você tem instalado na Franzininho WiFi.

+

Bibliotecas

+

Em seguida, copie os seguintes arquivos diretamente para a posta lib do sistema de arquivos da Franzininho WiFi:

+
    +
  • adafruit_ssd1306.mpy
  • +
  • adafruit_framebuf.mpy
  • +
+

Copie também o arquivo font5x8.bin, mas neste caso, para a pasta raiz da Franzininho WiFi. Por fim, implemente o programa abaixo no arquivo code.py que está localizado na pasta raiz da Franzininho WiFi.

+
import board
+import busio
+import adafruit_ssd1306
+import time
+
+i2c = busio.I2C(scl=board.IO9, sda=board.IO8)
+oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)
+
+try:
+  inverter = False
+  while True:
+    oled.invert(inverter)
+    oled.fill(0)
+    oled.rect(0, 0, 128, 64, 1)
+    oled.rect(2, 2, 124, 60, 1)
+    oled.text('Franzininho', 4, 4, 1)
+    oled.text('WiFi', 4, 14, 1)
+    oled.show()
+    inverter = not inverter
+    time.sleep(2)
+finally:
+  oled.invert(False)
+  oled.fill(0)
+  oled.show()
+
+

Análise do código

+

Devemos importar as bibliotecas busio e adafruit_ssd1306, que serão responsáveis pelas classes que irão possibilitar a comunicação I2C e o uso do display OLED, respectivamente.

+
import busio
+import adafruit_ssd1306
+
+

A comunicação I2C será realizada através do terminais IO9 e IO8 da Franzininho WiFi, conforme podemos observar na pinagem, disponível em https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi

+
i2c = busio.I2C(scl=board.IO9, sda=board.IO8)
+
+

A configuração do display OLED deve levar em conta as suas dimensões e o seu endereço no barramento I2C.

+
oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C)
+
+

Neste programa o objetivo e realizar a inversão da exibição do conteúdo no display a cada 2 segundos. Desta forma, será usado o método invert que receberá uma variável booleana como parâmetro, sendo seu valor alternado entre True e False.

+
oled.invert(inverter)
+
+

O método fill é usado para preencher toda área do display e atuará em conjunto com o método invert. Como se trata de um display monocromático temos duas cores disponíveis, 0 (zero) que representa o preto (pixel desligado) e 1 (um) para especificar o branco (pixel ligado), caso o método invert tenha recebido como parâmetro o valor False. Por outro lado, caso invert receber True como parâmetro, 1 (um) vai representar o preto (pixel desligado) e 0 (zero) vai especificar o branco (pixel ligado).

+
oled.invert(inverter)
+oled.fill(0)
+
+

Na sequência foi usado o método rect para desenhar um retângulo começando nas coordenadas x = 0 e y = 0 e com 128 pixels de largura e 64 pixels de altura e, logo em seguida, um outro retângulo levemente inferior. O último parâmetro do método rect consiste na cor que, neste exemplo, será branco. Desta forma, acabamos desenhando uma borda dupla que envolve toda a área do display.

+
oled.rect(0, 0, 128, 64, 1)
+oled.rect(2, 2, 124, 60, 1)
+
+

O método text possibilita exibir um texto nas coordenadas e na cor especificadas.

+
oled.text('Franzininho', 4, 4, 1)
+oled.text('WiFi', 4, 14, 1)
+
+

O método show, irá executar os métodos usados anteriormente, ou seja, fill, rect e text no display. Ou seja, qualquer conteúdo só é exibido no display quando o método show é executado.

+
oled.show()
+
+

Tente exibir outros textos e imagens. Compartilhe seus resultados com a comunidade.

+

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

+
AutorCláudio Luís Vieira Oliveira
Data:07/10/2021
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas/index.html b/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas/index.html index c60c19076..bd6457686 100755 --- a/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas/index.html +++ b/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicas/index.html @@ -1,17 +1,134 @@ - + - -Entrada Analógica | Franzininho - - - + +Entrada Analógica | Franzininho + + + -
-

Entrada Analógica

Neste exemplo aprenderemos como usar as entradas analógicas. Veremos qual módulo precisamos usar e como fazer a leitura do valor analógico usando um potenciômetro. Ao final faremos um exemplo para ligar e desligar um LED a partir do valor lido na entrada analógica. Assim, ao final dessa etapa você estará apto para ler sensores analógicos.

Materiais necessários

  • 1 Placa Franzininho WiFi com CircuitPython;
  • 1 Protoboard;
  • 1 potenciômetro de 10K;
  • 1 LED vermelho de 3 mm;
  • 1 Resistor 330 Ω;
  • Jumpers.

Circuito

Para os primeiros exemplos, faça a seguinte montagem:

Circuito

Código

Digite o código abaixo no arquivo code.py que está no diretório CIRCUITPY:

#Leitura de Entrada analógica -  Exemplo 2
import time #importa módulo de temporização
import board #importa módulo da placa
from analogio import AnalogIn #immport módulo de entrada analógica

analog_in = AnalogIn(board.IO1) #mapeia pino analógico

while True: #loop infinito
print((analog_in.value,)) #imprime o valor da leitura analógica
time.sleep(0.2) #aguarda 200 ms

Salve o arquivo e teste o funcionamento girando o potenciômetro e no Mu Editor visualize os dados no terminal serial e no gráfico:

Teste 1

Note que os valores de conversão AD são exibidos no terminal e no gráfico.

Agora faremos um exemplo para converter esses valores em tensão.

Digite o seguinte código:

#Leitura de Entrada analógica - Exemplo 2
import time #importa módulo de temporização
import board #importa módulo da placa
from analogio import AnalogIn #import módulo de entrada analógica

analog_in = AnalogIn(board.IO1) #mapeia pino analógico

def ler_tensao(pin):
return (pin.value * 3.3) / 65536

while True: #loop infinito
print((ler_tensao(analog_in),)) #imprime o valor da leitura analógica
time.sleep(0.2) #aguarda 200 ms

Salve o arquivo e teste o funcionamento girando o potenciômetro e no Mu Editor visualize os dados no terminal serial e no gráfico:

Teste 2

Note que exibimos agora o valor de tensão.

Análise do código (Exemplos 1 e 2)

Para acessar os pinos da placa precisamos importar o módulo board:

import board

Como precisaremos de intervalos de temporização importamos o módulo time:

import time

Trabalharemos como entradas analógicas nesse exemplo, assim, precisamos importar o seguinte módulo em analogio:

from analogio import AnalogIn #import módulo de entrada analógica

A Franzininho Wifi possui diversas entradas analógicas. Para esse exemplo usamos a entrada analógica no pino IO1

analog_in = AnalogIn(board.IO1) #mapeia pino analógico

No loop infinito fazemos a leitura da conversão AD lendo o valor presente no pino em intervalos de 200 ms. No primeiro exemplos fizemos apenas a impressão do valor convertido:

while  True: #loop infinito  
print((analog_in.value,)) #imprime o valor da leitura analógica
time.sleep(0.2) #aguarda 200 ms

Já no segundo exemplo fizemos uma função que converte o valor lido no pino em tensão:

def  ler_tensao(pin):  
return (pin.value * 3.3) / 65536

while True: #loop infinito
print((ler_tensao(analog_in),)) #imprime o valor da leitura analógica
time.sleep(0.2) #aguarda 200 ms

Agora faremos uma aplicação para ligar e desligar um LED dependo do valor lido no potenciômetro.

Digite o seguinte código:

#Leitura de Entrada analógica - Exemplo 3
import time #importa módulo de temporização
import board #importa módulo da placa
from analogio import AnalogIn #immport módulo de entrada analógica
from digitalio import DigitalInOut, Direction

analog_in = AnalogIn(board.IO1) #mapeia pino analógico

led = DigitalInOut(board.IO4)
led.direction = Direction.OUTPUT

def ler_tensao(pin):
return (pin.value * 3.3) / 65536

while True: #loop infinito
print((ler_tensao(analog_in),)) #imprime o valor da leitura analógica

if(ler_tensao(analog_in)>2.5): #se valor lido for maior que 2.5V
led.value = 1 #liga LED
else: #se não
led.value =0 #desliga o LED

time.sleep(0.2) #aguarda 200 ms

Salve o arquivo e teste o funcionamento girando o potenciômetro. Verifique se o LED acenderá quando ultrapassar o valor de 2,5V (exibido no terminal). Quando abaixo de 2,5V o LED deve apagar.

Teste 3

Análise do código (Exemplo 3)

Nesse exemplo adicionamos uma saída digital para controlar um LED.

Dica

Se você ainda não sabe trabalhar com entradas analógicas. Consulte o exemplo Entradas e Saídas Digitais.

No loop principal fizemos um teste para verificar o valor de tensão da entrada analógico, caso acima de 2,5V liga o LED e abaixo de 2,5 V desliga o LED.

while  True: #loop infinito  
print((ler_tensao(analog_in),)) #imprime o valor da leitura analógica

if(ler_tensao(analog_in)>2.5): #se valor lido for maior que 2.5V
led.value = 1 #liga LED
else: #se não
led.value =0 #desliga o LED

time.sleep(0.2) #aguarda 200 ms

Conclusão

Neste exemplo, aprendemos como fazer a leitura de uma entrada analógica. Para você ler outras entradas pode seguir o mesmo padrão. Porém, é importante verificar se o pino possui essa funcionalidade.

Com esse recurso poderemos ler diversos sensores analógicos como de temperatura, acelerômetro, som, etc.

Desafio

Faça a leitura de outro potenciômetro usando outra entrada analógica. Exiba no gráfico o valor dos 2 potenciômetros em simultâneo.

AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
- - +

Entrada Analógica

Neste exemplo aprenderemos como usar as entradas analógicas. Veremos qual módulo precisamos usar e como fazer a leitura do valor analógico usando um potenciômetro. Ao final faremos um exemplo para ligar e desligar um LED a partir do valor lido na entrada analógica. Assim, ao final dessa etapa você estará apto para ler sensores analógicos.

+

Materiais necessários

+
    +
  • 1 Placa Franzininho WiFi com CircuitPython;
  • +
  • 1 Protoboard;
  • +
  • 1 potenciômetro de 10K;
  • +
  • 1 LED vermelho de 3 mm;
  • +
  • 1 Resistor 330 Ω;
  • +
  • Jumpers.
  • +
+

Circuito

+

Para os primeiros exemplos, faça a seguinte montagem:

+

Circuito

+

Código

+

Digite o código abaixo no arquivo code.py que está no diretório CIRCUITPY:

+
#Leitura de Entrada analógica -  Exemplo 2
+import time            #importa módulo de temporização
+import board            #importa módulo da placa
+from analogio import AnalogIn    #immport módulo de entrada analógica
+
+analog_in = AnalogIn(board.IO1) #mapeia pino analógico
+
+while True:             #loop infinito
+    print((analog_in.value,))    #imprime o valor da leitura analógica
+    time.sleep(0.2)         #aguarda 200 ms
+
+

Salve o arquivo e teste o funcionamento girando o potenciômetro e no Mu Editor visualize os dados no terminal serial e no gráfico:

+

Teste 1

+

Note que os valores de conversão AD são exibidos no terminal e no gráfico.

+

Agora faremos um exemplo para converter esses valores em tensão.

+

Digite o seguinte código:

+
#Leitura de Entrada analógica - Exemplo 2
+import time            #importa módulo de temporização
+import board            #importa módulo da placa
+from analogio import AnalogIn    #import módulo de entrada analógica
+
+analog_in = AnalogIn(board.IO1) #mapeia pino analógico
+
+def ler_tensao(pin):
+    return (pin.value * 3.3) / 65536
+
+while True:             #loop infinito
+    print((ler_tensao(analog_in),))    #imprime o valor da leitura analógica
+    time.sleep(0.2)         #aguarda 200 ms
+
+

Salve o arquivo e teste o funcionamento girando o potenciômetro e no Mu Editor visualize os dados no terminal serial e no gráfico:

+

Teste 2

+

Note que exibimos agora o valor de tensão.

+

Análise do código (Exemplos 1 e 2)

+

Para acessar os pinos da placa precisamos importar o módulo board:

+
import board
+
+

Como precisaremos de intervalos de temporização importamos o módulo time:

+
import time
+
+

Trabalharemos como entradas analógicas nesse exemplo, assim, precisamos importar o seguinte módulo em analogio:

+
from analogio import AnalogIn #import módulo de entrada analógica
+
+

A Franzininho Wifi possui diversas entradas analógicas. Para esse exemplo usamos a entrada analógica no pino IO1

+
analog_in = AnalogIn(board.IO1) #mapeia pino analógico
+
+

No loop infinito fazemos a leitura da conversão AD lendo o valor presente no pino em intervalos de 200 ms. No primeiro exemplos fizemos apenas a impressão do valor convertido:

+
while  True: #loop infinito  
+    print((analog_in.value,))  #imprime o valor da leitura analógica  
+    time.sleep(0.2) #aguarda 200 ms
+
+

Já no segundo exemplo fizemos uma função que converte o valor lido no pino em tensão:

+
def  ler_tensao(pin):  
+    return (pin.value * 3.3) / 65536  
+  
+while  True: #loop infinito  
+    print((ler_tensao(analog_in),))  #imprime o valor da leitura analógica  
+    time.sleep(0.2) #aguarda 200 ms
+
+

Agora faremos uma aplicação para ligar e desligar um LED dependo do valor lido no potenciômetro.

+

Digite o seguinte código:

+
#Leitura de Entrada analógica - Exemplo 3
+import time            #importa módulo de temporização
+import board            #importa módulo da placa
+from analogio import AnalogIn    #immport módulo de entrada analógica
+from digitalio import DigitalInOut, Direction
+
+analog_in = AnalogIn(board.IO1) #mapeia pino analógico
+
+led = DigitalInOut(board.IO4)
+led.direction = Direction.OUTPUT
+
+def ler_tensao(pin):
+    return (pin.value * 3.3) / 65536
+
+while True:             #loop infinito
+    print((ler_tensao(analog_in),))    #imprime o valor da leitura analógica
+    
+    if(ler_tensao(analog_in)>2.5):      #se valor lido for maior que 2.5V
+        led.value = 1               #liga LED
+    else:                   #se não
+        led.value =0               #desliga o LED
+    
+    time.sleep(0.2)         #aguarda 200 ms
+
+

Salve o arquivo e teste o funcionamento girando o potenciômetro. Verifique se o LED acenderá quando ultrapassar o valor de 2,5V (exibido no terminal). Quando abaixo de 2,5V o LED deve apagar.

+

Teste 3

+

Análise do código (Exemplo 3)

+

Nesse exemplo adicionamos uma saída digital para controlar um LED.

+

Se você ainda não sabe trabalhar com entradas analógicas. Consulte o exemplo Entradas e Saídas Digitais.

+

No loop principal fizemos um teste para verificar o valor de tensão da entrada analógico, caso acima de 2,5V liga o LED e abaixo de 2,5 V desliga o LED.

+
while  True: #loop infinito  
+    print((ler_tensao(analog_in),))  #imprime o valor da leitura analógica  
+  
+    if(ler_tensao(analog_in)>2.5): #se valor lido for maior que 2.5V  
+        led.value = 1  #liga LED  
+    else:  #se não  
+        led.value =0  #desliga o LED  
+    
+    time.sleep(0.2) #aguarda 200 ms
+
+

Conclusão

+

Neste exemplo, aprendemos como fazer a leitura de uma entrada analógica. Para você ler outras entradas pode seguir o mesmo padrão. Porém, é importante verificar se o pino possui essa funcionalidade.

+

Com esse recurso poderemos ler diversos sensores analógicos como de temperatura, acelerômetro, som, etc.

+

Faça a leitura de outro potenciômetro usando outra entrada analógica. Exiba no gráfico o valor dos 2 potenciômetros em simultâneo.

+
AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais/index.html b/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais/index.html index 41ad5a565..3fd8040f7 100755 --- a/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais/index.html +++ b/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitais/index.html @@ -1,18 +1,84 @@ - + - -Entradas e Saídas Digitais | Franzininho - - - + +Entradas e Saídas Digitais | Franzininho + + + -
-

Entradas e Saídas Digitais

Agora que já entendemos a estrutura básica de um programa no CircuitoPython, exploraremos os pinos de I/O como entrada e saída digital. Este exemplo exibe como ler um botão (entrada digital) e acionar um LED (saída digital). Quando o botão for pressionado o estado do LED deverá ser invertido. Assim, ao final teremos um botão Liga/Desliga para controlar o LED.

Materiais necessários

  • 1 Placa Franzininho WiFi com CircuitPython;
  • 1 Protoboard;
  • 1 LED vermelho de 3 mm;
  • 1 Resistor 330 Ω;
  • 1 Botão;
  • Jumpers.

Circuito

Faça a seguinte montagem:

Circuito Entrada e Saida digital

Código

Digite o código abaixo no arquivo code.py que está dentro do diretório CIRCUITPY e salve o arquivo:

# Entradas e Saídas digitais - Botão Liga/Desliga
import time
import board
from digitalio import DigitalInOut, Direction, Pull

# Configura o pino do botão
btn = DigitalInOut(board.IO5) # mapea para pino 5
btn.direction = Direction.INPUT # configura como entrada
btn.pull = Pull.UP # habilita pull-up interno


# Configura o pino do led
led = DigitalInOut(board.IO4) # mapea para pino 4
led.direction = Direction.OUTPUT # configura como saída

# loop infinito
while True:
if btn.value ==0: # Se botão pressionado
led.value=not led.value # inverte estado do LED
while btn.value==0: # Aguarda botão ser solto
time.sleep(0.01) # delay de 10 ms

Análise do código

Para acessar os pinos da placa precisamos importar o módulo board:

import board

Como precisaremos de intervalos de temporização importamos o módulo time:

import time

Trabalharemos como entradas e saídas digitais nesse exemplo. Para isso, precisamos importar os seguintes módulos em digitalio:

from digitalio import DigitalInOut, Direction

O botão deve ser configurado como uma entrada digital no pino 5. Além disso, como não usamos resistor de pull-up externo devemos configurar o pull-up interno:

# Configura o pino do botão
btn = DigitalInOut(board.IO5) # mapea para pino 5
btn.direction = Direction.INPUT # configura como entrada
btn.pull = Pull.UP # habilita pull-up interno

O LED foi configurado como uma saída digital no pino 4, da mesma forma que fizemos no exemplo anterior:

# Configura o pino do led
led = DigitalInOut(board.IO4) # mapea para pino 4
led.direction = Direction.OUTPUT # configura como saída

No loop infinito testamos o valor do pio do botão, caso esteja em nível 0 significa que o usuário apertou. Assim toda vez que o botão é pressionado o valor do LED é invertido. Para evitar que o sejam realizadas diversas operações é aguardado que o usuário solte o botão antes de ler o botão novamente. Essa espera é feita com um loop -while:

# loop infinito
while True:
if btn.value ==0: # Se botão pressionado
led.value=not led.value # inverte estado do LED
while btn.value==0: # Aguarda botão ser solto
time.sleep(0.01) # delay de 10 ms

Conclusão

Neste exemplo, fizemos uma aplicação simples para leitura de uma entrada digital(botão) e acionamento de uma saída digital(LED). Esse exemplo servirá de base para quando você precisar trabalhar com entradas e saídas digitais em seus projetos. A configuração é sempre a mesma.

Desafio

Inclua mais um botão e mais um LED no circuito com funcionamento igual ao que fizemos.

AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
- - +

Entradas e Saídas Digitais

Agora que já entendemos a estrutura básica de um programa no CircuitoPython, exploraremos os pinos de I/O como entrada e saída digital. Este exemplo exibe como ler um botão (entrada digital) e acionar um LED (saída digital). Quando o botão for pressionado o estado do LED deverá ser invertido. Assim, ao final teremos um botão Liga/Desliga para controlar o LED.

+

Materiais necessários

+
    +
  • 1 Placa Franzininho WiFi com CircuitPython;
  • +
  • 1 Protoboard;
  • +
  • 1 LED vermelho de 3 mm;
  • +
  • 1 Resistor 330 Ω;
  • +
  • 1 Botão;
  • +
  • Jumpers.
  • +
+

Circuito

+

Faça a seguinte montagem:

+

Circuito Entrada e Saida digital

+

Código

+

Digite o código abaixo no arquivo code.py que está dentro do diretório CIRCUITPY e salve o arquivo:

+
# Entradas e Saídas digitais - Botão Liga/Desliga
+import time
+import board
+from digitalio import DigitalInOut, Direction, Pull
+
+# Configura o pino do botão
+btn = DigitalInOut(board.IO5)      	# mapea para pino 5 
+btn.direction = Direction.INPUT  	# configura como entrada
+btn.pull = Pull.UP                  # habilita pull-up interno
+
+
+# Configura o pino do led
+led = DigitalInOut(board.IO4)       # mapea para pino 4 
+led.direction = Direction.OUTPUT   	# configura como saída
+
+# loop infinito
+while True:
+	if btn.value ==0:			   	# Se botão pressionado                
+		led.value=not led.value		# inverte estado do LED
+		while btn.value==0:			# Aguarda botão ser solto
+			time.sleep(0.01)		# delay de 10 ms
+
+

Análise do código

+

Para acessar os pinos da placa precisamos importar o módulo board:

+
import board
+
+

Como precisaremos de intervalos de temporização importamos o módulo time:

+
import time
+
+

Trabalharemos como entradas e saídas digitais nesse exemplo. Para isso, precisamos importar os seguintes módulos em digitalio:

+
from digitalio import DigitalInOut, Direction
+
+

O botão deve ser configurado como uma entrada digital no pino 5. Além disso, como não usamos resistor de pull-up externo devemos configurar o pull-up interno:

+
# Configura o pino do botão
+btn = DigitalInOut(board.IO5)      	# mapea para pino 5 
+btn.direction = Direction.INPUT  	# configura como entrada
+btn.pull = Pull.UP                  # habilita pull-up interno
+
+

O LED foi configurado como uma saída digital no pino 4, da mesma forma que fizemos no exemplo anterior:

+
# Configura o pino do led
+led = DigitalInOut(board.IO4)       # mapea para pino 4 
+led.direction = Direction.OUTPUT   	# configura como saída
+
+

No loop infinito testamos o valor do pio do botão, caso esteja em nível 0 significa que o usuário apertou. Assim toda vez que o botão é pressionado o valor do LED é invertido. Para evitar que o sejam realizadas diversas operações é aguardado que o usuário solte o botão antes de ler o botão novamente. Essa espera é feita com um loop +while:

+
# loop infinito
+while True:
+	if btn.value ==0:			   	# Se botão pressionado                
+		led.value=not led.value		# inverte estado do LED
+		while btn.value==0:			# Aguarda botão ser solto
+			time.sleep(0.01)		# delay de 10 ms
+
+

Conclusão

+

Neste exemplo, fizemos uma aplicação simples para leitura de uma entrada digital(botão) e acionamento de uma saída digital(LED). Esse exemplo servirá de base para quando você precisar trabalhar com entradas e saídas digitais em seus projetos. A configuração é sempre a mesma.

+

Inclua mais um botão e mais um LED no circuito com funcionamento igual ao que fizemos.

+
AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas/index.html b/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas/index.html index abe58414c..6af2e10a4 100755 --- a/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas/index.html +++ b/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentas/index.html @@ -1,18 +1,131 @@ - + - -Instalando as ferramentas | Franzininho - - - + +Instalando as ferramentas | Franzininho + + + -
-

Instalando as ferramentas

O CircuitPython não exige ferramentas específicas para programação. Um simples editor de texto já é suficiente. Porém, para facilitar e dar maior produtividade a codificação podemos usar algumas ferramentas.

Recomendamos as seguintes ferramentas para trabalhar com o CircuitPython:

Nesse tutorial focaremos no Mu Editor pela simplicidade e facilidade do seu uso. Abaixo exibimos o processo de instalação para os sistemas operacionais Windows e Linux.

Windows

Instalando o Mu Editor

Para a instalação do Mu Editor no Windows você deve seguir os seguintes passos:

Passo 1: Acesse o site https://codewith.mu/ e clique em Download:

imagem1

Passo 2: Clique na opção Windows Installer.

imagem2

Passo 3: Salve-o em seu computador.

imagem3

Passo 4: Aguarde até terminar o download e após isso clique em abrir o arquivo que você acabou de baixar.

imagem4

Passo 5: Após baixar o programa, dê dois cliques e então irá aparecer uma tela onde você terá que aceitar os termos de uso do software, clique na caixa de seleção e pressione Install e aguarde a instalação.

imagem5

Passo 8: Procure em seu computador: Mu Editor

imagem8

Passo 9: Ao abrir o programa aguarde, está é a tela de inicio do Mu Editor.

imagem-extra

Passo 10: Após isso escolha CircuitPython, conforme a imagem abaixo: -se por acaso ele não abrir, clique em "Modo".

imagem9

Passo 11: Pronto, agora é só se divertir!

imagem10

Passo 12: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na próxima seção.

Instalação de terminal serial para acesso ao REPL (Opcional)

A seguir apresentaremos a instalação de terminal serial para acesso ao REPL através da comunicação serial.

Instalaremos o terminal serial Putty para nossos exemplos. Faça o download em: https://www.putty.org/

No site, clique na primeira opção

imagem1

Veja qual é o seu sistema. No meu caso é de 64bits por isso vou clicar na opção de 64 bits x86. Após isso é só salvar.

imagem2

Após realizar o download, dê dois cliques no arquivo. Será aberta a janela conforme a figura abaixo. Clique em next e depois em install:

imagem4

imagem3

Novamente clique em install:

imagem4

Aguarde e clique em finish:

imagem5

Pronto finalizamos a etapa de configuração. O próximo passo é abrir o programa PuTTy em seu computador, mais abaixo estarei explicando os primeiros passos com ele.

Como citei acima, abra o programa PuTTY

imagem1

imagem2

Então abrirá uma janela conforme a imagem acima. Enquanto isso, vamos até o gerenciador de dispositivos.

Vá em Portas (COM e LTP). Aqui você encontra em qual porta a placa está conectada. Clicando para expandir você verá Dispositivo Serial USB (COM3)

imagem3

Agora faremos algumas alterações, conforme a imagem abaixo, em COM 1 altere para COM3 e selecione a opção Serial e clique em open.

imagem4

Então aparecerá uma tela, similar a um terminal. Pressione Ctrl + C para entrar no interpretador Python da placa:

imagem5

Agora que a placa já está conectada, podemos enviar alguns comandos para ela executar através do REPL.

Digite print(“Olá, Mundo!”) e dê o enter.

imagem6

Executamos acima o comando print. Você pode testar outras mensagens trocando o texto que está entre aspas.

Podemos também executar algumas operações matemáticas.

imagem7

Também podemos ter acesso às funções do CircuitPython para acesso ao hardware. Vamos ver quais pinos a Franzininho WiFi possui disponível?

Digite import board, dê enter. Digite dir(board) e dê o enter.

imagem8

Esses são os pinos que trabalharemos para nossas aplicações.

Essa foi apenas uma experiência rápida para acesso ao REPL. Essa ferramenta nos ajudará a testar códigos ou dispositivos rapidamente.

Para editar códigos maiores e projetos que você precisa salvar, recomendamos que edite no arquivo code.py

Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):

Linux

Instalando o Mu Editor

Para a instalar o Mu Editor no Linux você deve seguir os passos a seguir:

Passo 1: Acesse o site https://codewith.mu/ e clique em Download:

imagem1

Passo 2: Clique na opção Python Package (Linux or Native Python)

imagem2

Passo 3: Abra seu terminal e digite o comando abaixo, ele vai instalar bibliotecas do python, aguarde até finalizar:

pip3 install mu-editor==1.1.0b5

Passo 4: Agora digite este comando:

mu-editor

Passo 5: Pronto, agora é só se divertir!

imagem3

Passo 6: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na próxima seção.

Instalação de terminal serial para acesso ao REPL (Opcional)

A seguir apresentaremos a instalação de terminal serial para acesso ao REPL através da comunicação serial.

Instale um terminal, por exemplo, para instalar o picocom, digite os comandos abaixo:

sudo apt-get update  
sudo apt-get install picocom

Para acessar a Franzininho WiFi através do REPL usando o terminal serial no Linux, o primeiro passo é conectar a placa Franzininho Wifi em seu computador e logo irá aparecer algo parecido com um dispositivo de pendrive, conforme a imagem abaixo:

imagem1

Agora abriremos o terminal Serial e a porta serial que a placa está conectada. Abra o terminal de comandos e digite o seguinte comando: picomcom /dev/ttyACM0 de enter.

imagem2

Agora pressione Ctrl+C no teclado e então aparecerá >>>

imagem3

Pronto, estamos na placa Franzininho WiFi e podemos enviar comandos diretamente para ela.

Digite: print(“Hello World”) e aperte o enter (você pode escrever qualquer coisa nas aspas, então aparecerá o que você escreveu:

imagem4

Note que estamos executando comando Python através do REPL.

Agora faremos uma operação matemática, digite um numero, escolha uma operação matemática e digite outro valor, aperte o enter e observe o resultado:

imagem5

Agora digite o seguinte código no terminal:

import board  
dir(board)

Então aparecerá o conjunto de pinos disponíveis na Franzininho Wifi.

imagem6

Esse foi apenas uma experiência rápia para acesso ao REPL. Essa ferramenta nos ajudará a testar códigos ou dispositivos rapidamente.

Para editar códigos maiores e projetos que você precisa salvar, recomendamos que edite no arquivo code.py

Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):

imagem7

Agora veremos o que é possível fazer com o CircuitPyhton. Bora lá?

Ferramentas Alternativas

Franzininho WiFi: Configurando o Thonny IDE para trabalhar com CircuitPython

AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
- - +

Instalando as ferramentas

O CircuitPython não exige ferramentas específicas para programação. Um simples editor de texto já é suficiente. Porém, para facilitar e dar maior produtividade a codificação podemos usar algumas ferramentas.

+

Recomendamos as seguintes ferramentas para trabalhar com o CircuitPython:

+ +

Nesse tutorial focaremos no Mu Editor pela simplicidade e facilidade do seu uso. Abaixo exibimos o processo de instalação para os sistemas operacionais Windows e Linux.

+ +

Windows

+

Instalando o Mu Editor

+

Para a instalação do Mu Editor no Windows você deve seguir os seguintes passos:

+

Passo 1: Acesse o site https://codewith.mu/ e clique em Download:

+

imagem1

+

Passo 2: Clique na opção Windows Installer.

+

imagem2

+

Passo 3: Salve-o em seu computador.

+

imagem3

+

Passo 4: Aguarde até terminar o download e após isso clique em abrir o arquivo que você acabou de baixar.

+

imagem4

+

Passo 5: Após baixar o programa, dê dois cliques e então irá aparecer uma tela onde você terá que aceitar os termos de uso do software, clique na caixa de seleção e pressione Install e aguarde a instalação.

+

imagem5

+

Passo 8: Procure em seu computador: Mu Editor

+

imagem8

+

Passo 9: Ao abrir o programa aguarde, está é a tela de inicio do Mu Editor.

+

imagem-extra

+

Passo 10: Após isso escolha CircuitPython, conforme a imagem abaixo: +se por acaso ele não abrir, clique em "Modo".

+

imagem9

+

Passo 11: Pronto, agora é só se divertir!

+

imagem10

+

Passo 12: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na próxima seção.

+

Instalação de terminal serial para acesso ao REPL (Opcional)

+

A seguir apresentaremos a instalação de terminal serial para acesso ao REPL através da comunicação serial.

+

Instalaremos o terminal serial Putty para nossos exemplos. Faça o download em: https://www.putty.org/

+

No site, clique na primeira opção

+

imagem1

+

Veja qual é o seu sistema. No meu caso é de 64bits por isso vou clicar na opção de 64 bits x86. Após isso é só salvar.

+

imagem2

+

Após realizar o download, dê dois cliques no arquivo. Será aberta a janela conforme a figura abaixo. Clique em next e depois em install:

+

imagem4

+

imagem3

+

Novamente clique em install:

+

imagem4

+

Aguarde e clique em finish:

+

imagem5

+

Pronto finalizamos a etapa de configuração. O próximo passo é abrir o programa PuTTy em seu computador, mais abaixo estarei explicando os primeiros passos com ele.

+

Como citei acima, abra o programa PuTTY

+

imagem1

+

imagem2

+

Então abrirá uma janela conforme a imagem acima. Enquanto isso, vamos até o gerenciador de dispositivos.

+

Vá em Portas (COM e LTP). Aqui você encontra em qual porta a placa está conectada. Clicando para expandir você verá Dispositivo Serial USB (COM3)

+

imagem3

+

Agora faremos algumas alterações, conforme a imagem abaixo, em COM 1 altere para COM3 e selecione a opção Serial e clique em open.

+

imagem4

+

Então aparecerá uma tela, similar a um terminal. Pressione Ctrl + C para entrar no interpretador Python da placa:

+

imagem5

+

Agora que a placa já está conectada, podemos enviar alguns comandos para ela executar através do REPL.

+

Digite print(“Olá, Mundo!”) e dê o enter.

+

imagem6

+

Executamos acima o comando print. Você pode testar outras mensagens trocando o texto que está entre aspas.

+

Podemos também executar algumas operações matemáticas.

+

imagem7

+

Também podemos ter acesso às funções do CircuitPython para acesso ao hardware. Vamos ver quais pinos a Franzininho WiFi possui disponível?

+

Digite import board, dê enter. Digite dir(board) e dê o enter.

+

imagem8

+

Esses são os pinos que trabalharemos para nossas aplicações.

+

Essa foi apenas uma experiência rápida para acesso ao REPL. Essa ferramenta nos ajudará a testar códigos ou dispositivos rapidamente.

+

Para editar códigos maiores e projetos que você precisa salvar, recomendamos que edite no arquivo code.py

+

Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):

+

Linux

+

Instalando o Mu Editor

+

Para a instalar o Mu Editor no Linux você deve seguir os passos a seguir:

+

Passo 1: Acesse o site https://codewith.mu/ e clique em Download:

+

imagem1

+

Passo 2: Clique na opção Python Package (Linux or Native Python)

+

imagem2

+

Passo 3: Abra seu terminal e digite o comando abaixo, ele vai instalar bibliotecas do python, aguarde até finalizar:

+

pip3 install mu-editor==1.1.0b5

+

Passo 4: Agora digite este comando:

+
mu-editor
+
+

Passo 5: Pronto, agora é só se divertir!

+

imagem3

+

Passo 6: Abra o arquivo code.py e comece a se divertir com o Hello, World! apresentado na próxima seção.

+

Instalação de terminal serial para acesso ao REPL (Opcional)

+

A seguir apresentaremos a instalação de terminal serial para acesso ao REPL através da comunicação serial.

+

Instale um terminal, por exemplo, para instalar o picocom, digite os comandos abaixo:

+
sudo apt-get update  
+sudo apt-get install picocom
+
+

Para acessar a Franzininho WiFi através do REPL usando o terminal serial no Linux, o primeiro passo é conectar a placa Franzininho Wifi em seu computador e logo irá aparecer algo parecido com um dispositivo de pendrive, conforme a imagem abaixo:

+

imagem1

+

Agora abriremos o terminal Serial e a porta serial que a placa está conectada. Abra o terminal de comandos e digite o seguinte comando: picomcom /dev/ttyACM0 de enter.

+

imagem2

+

Agora pressione Ctrl+C no teclado e então aparecerá >>>

+

imagem3

+

Pronto, estamos na placa Franzininho WiFi e podemos enviar comandos diretamente para ela.

+

Digite: print(“Hello World”) e aperte o enter (você pode escrever qualquer coisa nas aspas, então aparecerá o que você escreveu:

+

imagem4

+

Note que estamos executando comando Python através do REPL.

+

Agora faremos uma operação matemática, digite um numero, escolha uma operação matemática e digite outro valor, aperte o enter e observe o resultado:

+

imagem5

+

Agora digite o seguinte código no terminal:

+
import board  
+dir(board)
+
+

Então aparecerá o conjunto de pinos disponíveis na Franzininho Wifi.

+

imagem6

+

Esse foi apenas uma experiência rápia para acesso ao REPL. Essa ferramenta nos ajudará a testar códigos ou dispositivos rapidamente.

+

Para editar códigos maiores e projetos que você precisa salvar, recomendamos que edite no arquivo code.py

+

Para acessar esse arquivo, abra o dispositivo de armazenamento (CIRCUITPY):

+

imagem7

+

Agora veremos o que é possível fazer com o CircuitPyhton. Bora lá?

+

Ferramentas Alternativas

+

Franzininho WiFi: Configurando o Thonny IDE para trabalhar com CircuitPython

+ +
AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world/index.html b/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world/index.html index 09afa6f12..a1a3158b7 100755 --- a/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world/index.html +++ b/en/docs/franzininho-wifi/exemplos-circuitpython/hello-world/index.html @@ -1,19 +1,74 @@ - + - -Hello World! | Franzininho - - - + +Hello World! | Franzininho + + + -
-

Hello World!

Nesse primeiro exemplo faremos um blink LED, nosso “Hello, World!” com a placa Franzininho WiFi programada em CircuitPython. Assim, aquecemos os motores para explorar diversas aplicações com CircuitPython na Franzininho WiFi.

Materiais necessários

  • 1 Placa Franzininho Wifi com CircuitPython;
  • 1 Protoboard;
  • 1 LED vermelho 3 mm;
  • 1 resistor 330 Ω;
  • Jumpers.

Circuito

Nosso primeiro circuito é bem simples. Realize a seguinte montagem:

franzininho-wifi-hello-world

Código

Digite o código abaixo no arquivo code.py que está no diretório CIRCUITPY e salve o arquivo:

Obs. Provavelmente você encontrará outro código no arquivo code.py. Apague-o e insira o código novo.

""" Hello, World! (Pisca LED)"""
import board
import time
from digitalio import DigitalInOut, Direction

# Configurando o pino do LED, o led que configurei foi o pino 4 = IO4
led = DigitalInOut(board.IO4)
led.direction = Direction.OUTPUT

#loop infinito - executando sempre
while True:
led.value = True
time.sleep(0.5)
led.value = False
time.sleep(0.5)

Finalizando a edição do arquivo, salve-o. -Após salvar o arquivo o LED pisca em intervalos de 0,5 segundos. (Blink LED)

Análise do código

Para acessar os pinos da placa precisamos importar o módulo board:

import board

Como precisaremos de intervalos de temporização importamos o módulo sleep:

import time

O LED foi conectado ao pino 4(IO4) da Franzininho WiFi. Como o LED é um atuador, preciamos configurar o pino como uma saída digital. Para isso, precisamos importar os seguintes módulos: -from digitalio import DigitalInOut, Direction

from digitalio import DigitalInOut, Direction

Com os módulos importados podemos acessar as funções de configuração do pino digital:

led = DigitalInOut(board.IO4)
led.direction = Direction.OUTPUT

Note que primeiro mapeamos o pino e depois configuramos a direção.

Para que o LED fique piscando infinitamente em intervalos de 500 ms, fazemos um loop infinito com o laço while. O valor do LED é invertido a cada 0,5 s loop:

while True:    
led.value = True
time.sleep(0.5)
led.value = False
time.sleep(0.5)
Sugestão

Altere o tempo de intervalo para 0.1 e 1 e observe o efeito.

Conclusão

Neste primeiro exemplo de programação da Franzininho WiFi com o CircuitPython fizemos um código simples em Python para piscar o LED em intervalos de 0,5 segundos. Esse exemplo serviu para nos ensinar como importar as bibliotecas, configurar o pino como saída digital e criar um loop infinito para piscar o LED. Você pode alterar o intervalo de tempo alterando o parâmetro na função sleep.

Com esse exemplo dominado, podemos passar para a próxima etapa.

AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
- - +

Hello World!

Nesse primeiro exemplo faremos um blink LED, nosso “Hello, World!” com a placa Franzininho WiFi programada em CircuitPython. Assim, aquecemos os motores para explorar diversas aplicações com CircuitPython na Franzininho WiFi.

+

Materiais necessários

+
    +
  • 1 Placa Franzininho Wifi com CircuitPython;
  • +
  • 1 Protoboard;
  • +
  • 1 LED vermelho 3 mm;
  • +
  • 1 resistor 330 Ω;
  • +
  • Jumpers.
  • +
+

Circuito

+

Nosso primeiro circuito é bem simples. Realize a seguinte montagem:

+

franzininho-wifi-hello-world

+

Código

+

Digite o código abaixo no arquivo code.py que está no diretório CIRCUITPY e salve o arquivo:

+

Obs. Provavelmente você encontrará outro código no arquivo code.py. Apague-o e insira o código novo.

+
""" Hello, World! (Pisca LED)"""
+import board
+import time
+from digitalio import DigitalInOut, Direction
+
+# Configurando o pino do LED, o led que configurei foi o pino 4 = IO4
+led = DigitalInOut(board.IO4)
+led.direction = Direction.OUTPUT
+
+#loop infinito - executando sempre
+while True:    
+    led.value = True
+    time.sleep(0.5)
+    led.value = False
+    time.sleep(0.5)
+
+

Finalizando a edição do arquivo, salve-o. +Após salvar o arquivo o LED pisca em intervalos de 0,5 segundos. (Blink LED)

+

Análise do código

+

Para acessar os pinos da placa precisamos importar o módulo board:

+
import board
+
+

Como precisaremos de intervalos de temporização importamos o módulo sleep:

+
import time
+
+

O LED foi conectado ao pino 4(IO4) da Franzininho WiFi. Como o LED é um atuador, preciamos configurar o pino como uma saída digital. Para isso, precisamos importar os seguintes módulos: +from digitalio import DigitalInOut, Direction

+
from digitalio import DigitalInOut, Direction
+
+

Com os módulos importados podemos acessar as funções de configuração do pino digital:

+
led = DigitalInOut(board.IO4)
+led.direction = Direction.OUTPUT
+
+

Note que primeiro mapeamos o pino e depois configuramos a direção.

+

Para que o LED fique piscando infinitamente em intervalos de 500 ms, fazemos um loop infinito com o laço while. O valor do LED é invertido a cada 0,5 s loop:

+
while True:    
+    led.value = True
+    time.sleep(0.5)
+    led.value = False
+    time.sleep(0.5)
+
+

Altere o tempo de intervalo para 0.1 e 1 e observe o efeito.

+

Conclusão

+

Neste primeiro exemplo de programação da Franzininho WiFi com o CircuitPython fizemos um código simples em Python para piscar o LED em intervalos de 0,5 segundos. Esse exemplo serviu para nos ensinar como importar as bibliotecas, configurar o pino como saída digital e criar um loop infinito para piscar o LED. Você pode alterar o intervalo de tempo alterando o parâmetro na função sleep.

+

Com esse exemplo dominado, podemos passar para a próxima etapa.

+
AutorDiana Santos
AutorFábio Souza
Data:16/09/2021
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao/index.html b/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao/index.html index f85cb4970..e04d00d5b 100755 --- a/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao/index.html +++ b/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacao/index.html @@ -1,24 +1,154 @@ - + - -Sistema de irrigação automático | Franzininho - - - + +Sistema de irrigação automático | Franzininho + + + -
-

Sistema de irrigação automático

Um sistema de irrigação automático é uma solução para ajudar a manter de forma sistemática a irrigação -de suas plantas.

Esse sistema permite programar as regras de acordo com as necessidades das plantas. Isso garante uma economia +

Sistema de irrigação automático

Um sistema de irrigação automático é uma solução para ajudar a manter de forma sistemática a irrigação +de suas plantas.

+

Esse sistema permite programar as regras de acordo com as necessidades das plantas. Isso garante uma economia de água e tempo, para quem possui um jardim ou horta e para grandes sistemas de irrigação -na agricultura.

Agora vamos descrever um exemplo de um sistema de irrigação automatico possível de construir de forma simples mas com grande -poder de automação.

Materiais Usados

  • 1 Placa Franzininho WiFi
  • 1 Sensor de umidade do solo - Higrômetro com saida digital e analogica
  • 1 Protoboard de 830 pontos
  • 1 Mini bomba de água submersa 5v
  • 1 Relé 5v
  • Cabos Jumpers - Macho/Macho e Macho/Femea

Circuito Eletrônico

Para o exemplo que vamos ver a seguir, realize a seguinte montagem:

Circuito Servo Motor

Observações:

  • O relé é conectado a 5V da placa
  • Cabos azuis: saídas digitais
  • Cabos vermelhos: VCC
  • Cabos pretos: GND

Código-fonte

Para iniciar, é necessário já ter seguido o tutorial de Primeiros passos, que também se encontra na página da Franzininho em documentação, -ter o CircuitPython instalado na placa e para esse projeto utilizamos o Mu editor. Para obter esse ambiente basta seguir os passos em Instalando as ferramentas.

A partir daqui consideramos que os primeiros passos de instalação e do ambiente foram concluídos. -Abaixo está o código do sistema na placa usando CircuitPython, você pode copiar e colar o código fonte na sua IDE.

import board
import time

from digitalio import DigitalInOut, Direction, Pull
from analogio import AnalogIn

relay = DigitalInOut(board.IO0)
relay.switch_to_output()

humid_analog = AnalogIn(board.IO1)
humid_digital = DigitalInOut(board.IO4)
humid_digital.direction = Direction.INPUT

relay.value = True

wait_time = 1
watering_time = 1

dry_value = 51130

while True:
try:
print("humid (Digital value):", humid_digital.value)
print("humid (Analogic value):", humid_analog.value)

time.sleep(1);

if humid_analog.value > dry_value :
print("Starting watering...")

relay.value = False

time.sleep(watering_time)
print("Finishing watering.")

else:
relay.value = True
time.sleep(wait_time)

except RuntimeError as e:
print("Read failure")

time.sleep(1)

Após terminar de escrever, e analisar no ambiente de desenvolvimento. Basta salvar e apertar no serial para executar no mu-editor. Caso esteja utilizando outra IDE, basta executá-la no ambiente escolhido.

Entendendo o Código-fonte

O primeiro módulo que vamos importar, é o board. Ele possibilita o acesso aos pinos da placa:

import board

Este módulo fornece várias funções relacionadas ao tempo:

import time

O digitalio é um módulo que contém classes para fornecer acesso a IO digital básico:

from digitalio import DigitalInOut, Direction, Pull

Cria um objeto e conecta o objeto com uma entrada analógica:

from analogio import AnalogIn 

Agora, vamos atribuir o relé:

relay = DigitalInOut(board.IO0)
relay.switch_to_output()

Atribuimos as entradas analógicas e digitais do sensor de umidade do solo na porta 1, sendo esta uma porta analógica e na porta 4 a digital do franzinho. Configurando também o pino como entrada digital:

humid_analog = AnalogIn(board.IO1)        # analog
humid_digital = DigitalInOut(board.IO4) # digital
humid_digital.direction = Direction.INPUT

O relé foi configurado para usar a porta "sempre fechada",então precisamos defini-lo com o valor verdadeiro para que o relé fique inativo:

relay.value = True

Período de tempo para verificar o sistema. O controle desse período de tempo para manter a rega da planta depende da voltagem que alimenta a bomba:

wait_time = 1
watering_time = 1

Adaptado de acordo com o sensor de umidade do solo, é necessario fazer laguns testes na sua terra para saber o valor da terra que vai ser utilizada:

dry_value = 51130

Por fim, dentro do while True, o nosso loop, faremos com que os sensores leiam continuamente e imprima os valores lidos do sensor de umidade do solo:

while True:
try:

print("humid (Digital value):", humid_digital.value)
print("humid (Analogic value):", humid_analog.value)

time.sleep(1);

Já na condição abaixo, caso o sensor receba um valor que indique que a terra está seca, entramos no condicional if e conectamos o relé no "sempre fechado", -e é por isso que adicionar um Falso a "sempre fechado", signinifica aberto. Então a bomba é acionada realizando a irrigação:

if humid_analog.value > dry_value :
print("Starting watering...")

relay.value = False

time.sleep(watering_time)
print("Finishing watering.")

Se o nível estiver OK, apenas nos certificamos de que o relé esteja fechado:

        else:
relay.value = True
time.sleep(wait_time)

E colocamos o sensor para dormir novamente:

    time.sleep(1)

Também é possivel encontrar o codigo em https://github.com/GiulianeEC/SystemOfIrrigation_Franzininho

Conclusão

No decorrer da explicação, aprendemos a como montar de maneira simples um protótipo de irrigação automatizado.

AutorGiuliane Eulália Corrêa
Data:28/01/2023
- - +na agricultura.

+

Agora vamos descrever um exemplo de um sistema de irrigação automatico possível de construir de forma simples mas com grande +poder de automação.

+

Materiais Usados

+
    +
  • 1 Placa Franzininho WiFi
  • +
  • 1 Sensor de umidade do solo - Higrômetro com saida digital e analogica
  • +
  • 1 Protoboard de 830 pontos
  • +
  • 1 Mini bomba de água submersa 5v
  • +
  • 1 Relé 5v
  • +
  • Cabos Jumpers - Macho/Macho e Macho/Femea
  • +
+

Circuito Eletrônico

+

Para o exemplo que vamos ver a seguir, realize a seguinte montagem:

+

Circuito Servo Motor

+

Observações:

+
    +
  • O relé é conectado a 5V da placa
  • +
  • Cabos azuis: saídas digitais
  • +
  • Cabos vermelhos: VCC
  • +
  • Cabos pretos: GND
  • +
+

Código-fonte

+

Para iniciar, é necessário já ter seguido o tutorial de Primeiros passos, que também se encontra na página da Franzininho em documentação, +ter o CircuitPython instalado na placa e para esse projeto utilizamos o Mu editor. Para obter esse ambiente basta seguir os passos em Instalando as ferramentas.

+

A partir daqui consideramos que os primeiros passos de instalação e do ambiente foram concluídos. +Abaixo está o código do sistema na placa usando CircuitPython, você pode copiar e colar o código fonte na sua IDE.

+
import board
+import time
+
+from digitalio import DigitalInOut, Direction, Pull
+from analogio import AnalogIn  
+
+relay = DigitalInOut(board.IO0)
+relay.switch_to_output()
+
+humid_analog = AnalogIn(board.IO1)       
+humid_digital = DigitalInOut(board.IO4)   
+humid_digital.direction = Direction.INPUT 
+
+relay.value = True
+
+wait_time = 1
+watering_time = 1
+
+dry_value = 51130
+
+while True:
+    try:
+        print("humid (Digital value):", humid_digital.value)
+        print("humid (Analogic value):", humid_analog.value)
+
+        time.sleep(1);
+
+        if humid_analog.value > dry_value :
+            print("Starting watering...")
+
+            relay.value = False
+
+            time.sleep(watering_time)
+            print("Finishing watering.")
+
+        else:
+            relay.value = True
+            time.sleep(wait_time)
+
+    except RuntimeError as e:
+        print("Read failure")
+
+    time.sleep(1)
+
+

Após terminar de escrever, e analisar no ambiente de desenvolvimento. Basta salvar e apertar no serial para executar no mu-editor. Caso esteja utilizando outra IDE, basta executá-la no ambiente escolhido.

+

Entendendo o Código-fonte

+

O primeiro módulo que vamos importar, é o board. Ele possibilita o acesso aos pinos da placa:

+
import board
+
+

Este módulo fornece várias funções relacionadas ao tempo:

+
import time
+
+

O digitalio é um módulo que contém classes para fornecer acesso a IO digital básico:

+
from digitalio import DigitalInOut, Direction, Pull
+
+

Cria um objeto e conecta o objeto com uma entrada analógica:

+
from analogio import AnalogIn 
+
+

Agora, vamos atribuir o relé:

+
relay = DigitalInOut(board.IO0)
+relay.switch_to_output()
+
+

Atribuimos as entradas analógicas e digitais do sensor de umidade do solo na porta 1, sendo esta uma porta analógica e na porta 4 a digital do franzinho. Configurando também o pino como entrada digital:

+
humid_analog = AnalogIn(board.IO1)        # analog
+humid_digital = DigitalInOut(board.IO4)   # digital
+humid_digital.direction = Direction.INPUT
+
+

O relé foi configurado para usar a porta "sempre fechada",então precisamos defini-lo com o valor verdadeiro para que o relé fique inativo:

+
relay.value = True
+
+

Período de tempo para verificar o sistema. O controle desse período de tempo para manter a rega da planta depende da voltagem que alimenta a bomba:

+
wait_time = 1
+watering_time = 1
+
+

Adaptado de acordo com o sensor de umidade do solo, é necessario fazer laguns testes na sua terra para saber o valor da terra que vai ser utilizada:

+
dry_value = 51130
+
+

Por fim, dentro do while True, o nosso loop, faremos com que os sensores leiam continuamente e imprima os valores lidos do sensor de umidade do solo:

+
while True:
+    try:
+
+        print("humid (Digital value):", humid_digital.value)
+        print("humid (Analogic value):", humid_analog.value)
+
+        time.sleep(1);
+
+

Já na condição abaixo, caso o sensor receba um valor que indique que a terra está seca, entramos no condicional if e conectamos o relé no "sempre fechado", +e é por isso que adicionar um Falso a "sempre fechado", signinifica aberto. Então a bomba é acionada realizando a irrigação:

+
if humid_analog.value > dry_value :
+            print("Starting watering...")
+
+            relay.value = False
+
+            time.sleep(watering_time)
+            print("Finishing watering.")
+
+
+

Se o nível estiver OK, apenas nos certificamos de que o relé esteja fechado:

+
        else:
+            relay.value = True
+            time.sleep(wait_time)
+
+
+

E colocamos o sensor para dormir novamente:

+
    time.sleep(1)
+
+

Também é possivel encontrar o codigo em https://github.com/GiulianeEC/SystemOfIrrigation_Franzininho

+

Conclusão

+

No decorrer da explicação, aprendemos a como montar de maneira simples um protótipo de irrigação automatizado.

+
AutorGiuliane Eulália Corrêa
Data:28/01/2023
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos/index.html b/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos/index.html index 6eb59e0b3..b81853aa7 100755 --- a/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos/index.html +++ b/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos/index.html @@ -1,17 +1,29 @@ - + - -Primeiros Passos | Franzininho - - - + +Primeiros Passos | Franzininho + + + -
-

Primeiros Passos

Este documento pretende ajudá-lo a configurar a placa Franzininho WiFi para ser programada usando o CircuitPython.

O CircuitPython é um fork do projeto MicroPython, realizado pela empresa Adafruit. A Adafruit vem desenvolvendo diversas bibliotecas e recursos para programação de microcontroladores com Python. Saiba mais sobre o projeto em: CircuitPython.

A seguir apresentamos os passos para gravação do CircuitPython na Franzininho WiFi e preparar o ambiente.

O que é CircuitPython?

CircuitPython é uma linguagem de programação projetada para simplificar a experimentação e o aprendizado de programação em placas com microcontroladores de baixo custo. Isso torna os primeiros passos mais fáceis do que nunca, sem a necessidade de downloads iniciais no computador de trabalho. Assim, após configurar a placa, abra qualquer editor de texto e comece a editar o código.

O CircuitPython traz o Python para dentro dos microcontroladores. Você pode saber mais sobre o projeto CircuitPython aqui: learn.adafruit.com/circuitpython

A placa Franzininho WiFi foi adicionada ao CircuitPython e todas as releases do CircuitPyhton serão compilados para ela. Esse foi um passo muito importante para o projeto e possibilitará o desenvolvimento de aplicações com o ESP32-S2 usando a linguagem Python.

Instalação

Antes de começar a diversão de programar a Franzininho WIFI com o CircuitPython, precisamos realizar alguns passos para configuração. Nesta etapa gravaremos o firmware do CircuitPython na Franzininho WiFi e prepararemos o ambiente para você usar sua placa.

info

Se sua placa já está com o CircuitPython, você não precisa fazer essa etapa. Para verificar se sua placa está com CircuitPython plugue-a no computador e veja se é criado um dispositivo de armazenamento chamado CIRCUITPY. Caso contrário, faça o procedimento abaixo.

Nesse momento você precisará apenas de um computador com o sistema operacional que você está acostumado a usar e a placa Franzininho WiFi.

Bora! Colocar a mão na massa?

Gravação do CircuitPython na Franzininho WiFi

Ferramenta de gravação: https://franzininho.github.io/webdfu-franzininho-wifi/dfu-util/

AutorFábio Souza
Data:16/09/2021
- - +

Primeiros Passos

Este documento pretende ajudá-lo a configurar a placa Franzininho WiFi para ser programada usando o CircuitPython.

+

O CircuitPython é um fork do projeto MicroPython, realizado pela empresa Adafruit. A Adafruit vem desenvolvendo diversas bibliotecas e recursos para programação de microcontroladores com Python. Saiba mais sobre o projeto em: CircuitPython.

+

A seguir apresentamos os passos para gravação do CircuitPython na Franzininho WiFi e preparar o ambiente.

+

O que é CircuitPython?

+

CircuitPython é uma linguagem de programação projetada para simplificar a experimentação e o aprendizado de programação em placas com microcontroladores de baixo custo. Isso torna os primeiros passos mais fáceis do que nunca, sem a necessidade de downloads iniciais no computador de trabalho. Assim, após configurar a placa, abra qualquer editor de texto e comece a editar o código.

+

O CircuitPython traz o Python para dentro dos microcontroladores. Você pode saber mais sobre o projeto CircuitPython aqui: learn.adafruit.com/circuitpython

+

A placa Franzininho WiFi foi adicionada ao CircuitPython e todas as releases do CircuitPyhton serão compilados para ela. Esse foi um passo muito importante para o projeto e possibilitará o desenvolvimento de aplicações com o ESP32-S2 usando a linguagem Python.

+

Instalação

+

Antes de começar a diversão de programar a Franzininho WIFI com o CircuitPython, precisamos realizar alguns passos para configuração. Nesta etapa gravaremos o firmware do CircuitPython na Franzininho WiFi e prepararemos o ambiente para você usar sua placa.

+

Se sua placa já está com o CircuitPython, você não precisa fazer essa etapa. Para verificar se sua placa está com CircuitPython plugue-a no computador e veja se é criado um dispositivo de armazenamento chamado CIRCUITPY. Caso contrário, faça o procedimento abaixo.

+

Nesse momento você precisará apenas de um computador com o sistema operacional que você está acostumado a usar e a placa Franzininho WiFi.

+

Bora! Colocar a mão na massa?

+

Gravação do CircuitPython na Franzininho WiFi

+ +

Ferramenta de gravação: https://franzininho.github.io/webdfu-franzininho-wifi/dfu-util/

+
AutorFábio Souza
Data:16/09/2021
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-circuitpython/pwm/index.html b/en/docs/franzininho-wifi/exemplos-circuitpython/pwm/index.html index 583e32471..3cea22c5c 100755 --- a/en/docs/franzininho-wifi/exemplos-circuitpython/pwm/index.html +++ b/en/docs/franzininho-wifi/exemplos-circuitpython/pwm/index.html @@ -1,19 +1,111 @@ - + - -PWM - Pulse Width Modulation | Franzininho - - - + +PWM - Pulse Width Modulation | Franzininho + + + -
-

PWM - Pulse Width Modulation

Neste artigo vamos aprender a usar o PWM no CircuitPython, uma técnica muito usada para controle de potência. Veja como é fácil aplicar.

PWM é abreviação para, Pulse Width Modulation – que significa – Modulação por Largura de Pulso. Essa é uma técnica onde, uma saída digital é usada para simular uma saída analógica. Isso acontece por meio de mudanças constantes de sinal, que são imperceptíveis e, dessa maneira o componente conectado a esse pino apenas tira uma média de quanto tempo está em estado alto e baixo. Quanto mais tempo ligado, maior o valor e, consequentemente, quando menor tempo ligado, menor o valor.

Neste exemplo, vamos aprender a usar PWM com CircuitPython na Franzininho WiFi.

Materiais necessários

  • 1 Placa Franzininho WiFi com CircuitPython;
  • 1 Protoboard;
  • 1 LED;
  • 1 potenciômetro de 10 kΩ;
  • 1 resistor de 220 Ω ou 330 Ω;
  • Jumpers.

Circuito

Para os nossos primeiros experimentos, realize a seguinte montagem:

franzininho-wifi-pwm -Figura 1 – Circuito para teste de PWM com CircuitPython na Franzininho WiFi

Código para PWM com CircuitPython

Para esse código, utilizaremos a biblioteca simpleio, que será necessária para realizarmos a conversão de valores. As bibliotecas do CircuitPython podem ser encontradas no seguinte endereço: https://circuitpython.org/libraries. Faça o download, de acordo com a versão do CircuitPython instalada na sua Franzininho WiFi.

franzininho-wifi-pwm

Após baixar o arquivo, copie a pasta desejada para a pasta de arquivos da Franzininho WiFi:

simpleio.mpy

Escreva o código abaixo no arquivo code.py, que está localizado no diretório da Franzininho:

import pwmio
import math
import simpleio
from analogio import AnalogIn
from time import sleep

potIn = board.IO2
pot = AnalogIn(potIn)

LED = board.IO4
led = pwmio.PWMOut(LED)

def converter(pin):
pinValue = pin.value
mapValue = math.trunc(simpleio.map_range
(pinValue, 536, 51355, 0, 65535))
print('Valor Original: ', pinValue,
'Valor Convertido: ', mapValue)
return mapValue

while True:
potValue = converter(pot)
led.duty_cycle = potValue
sleep(0.1)

Depois de finalizar a edição do código, salve. Execute o programa.

Utilizaremos o módulo board para acessarmos os pinos da Franzininho:

import board

E para configurarmos os pinos PWM, é necessário importarmos o pwmio:

import pwmio

Além disso, será necessário a biblioteca math, para “eliminar” as casas decimais:

import math

Como dito anteriormente, usaremos o módulo simpleio:

import simpleio

Ademais, importaremos a função AnalogIn do módulo analogio para, configuramos o potenciômetro como uma entrada analógica:

from analogio import AnalogIn

Também, iremos chamar a função sleep, da biblioteca time, pois precisaremos de intervalos de temporização:

from time import sleep

Agora, após importarmos todas os módulos que vamos utilizar, vamos configurar os pinos. Primeiro, vamos associar o GPIO2 a uma variável chamada potIn. Após isso, vamos criar um objeto chamado pot e configurá-lo como uma entrada analógica:

LED = board.IO4
led = pwmio.PWMOut(LED)

Configurações iniciais encerradas! Depois disso, vamos criar uma função chamada converte. Como parâmetro, essa função receberá o pino que estamos realizando a leitura:

def converter(pin):

Dentro da função, realizaremos a leitura do valor do potenciômetro, que será armazenada na variável pinValue:

pinValue = pin.value

Além disso, vamos converter o valor do potenciômetro para o valor aceito pelos pinos PWM. Para isso, vamos usar a função simpleio.map_range. Os parâmetros dessa função são: valor bruto (no caso, o valor recebido naquele instante), valor mínimo de entrada, valor máximo de entrada, valor mínimo de saída e valor máximo de saída. E, vamos precisar da função math.trunc, que eliminará as casas decimais. Todas essas informações ficarão armazenadas na variável mapValue:

mapValue = math.trunc(simpleio.map_range
(pinValue, 536, 51355, 0, 65535))

Colocaremos o print apenas para visualizarmos a conversão:

print('Valor Original: ', pinValue,
'Valor Convertido: ', mapValue)
return mapValue

E a função nos retornará o valor de mapValue:

return mapValue

E por fim, o loop. Dentro do while True, vamos associar o valor retornado pela função converte a variável potValue e mandar esse valor para o led. Para enviarmos um valor para o componente, utilizamos a função duty_cycle, que é o ciclo de trabalho, ou seja, quanto tempo o sinal estará ligado ou não. Também, colocaremos um delay:

while True:
potValue = converter(pot)
led.duty_cycle = potValue
sleep(0.1)

Conclusão

Nesse exemplo, aprendemos a como usar os pinos PWM com CircuitPython e, como controlá-los através de um potenciômetro. Além disso, aprendemos a como mapear valores. No próximo exemplo, vamos aprender a como usar Servos Motores. -Outros artigos da série.

AutorMateus Adriano Ventura Vieira
Data:09/05/2022
- - +

PWM - Pulse Width Modulation

Neste artigo vamos aprender a usar o PWM no CircuitPython, uma técnica muito usada para controle de potência. Veja como é fácil aplicar.

+

PWM é abreviação para, Pulse Width Modulation – que significa – Modulação por Largura de Pulso. Essa é uma técnica onde, uma saída digital é usada para simular uma saída analógica. Isso acontece por meio de mudanças constantes de sinal, que são imperceptíveis e, dessa maneira o componente conectado a esse pino apenas tira uma média de quanto tempo está em estado alto e baixo. Quanto mais tempo ligado, maior o valor e, consequentemente, quando menor tempo ligado, menor o valor.

+

Neste exemplo, vamos aprender a usar PWM com CircuitPython na Franzininho WiFi.

+

Materiais necessários

+
    +
  • 1 Placa Franzininho WiFi com CircuitPython;
  • +
  • 1 Protoboard;
  • +
  • 1 LED;
  • +
  • 1 potenciômetro de 10 kΩ;
  • +
  • 1 resistor de 220 Ω ou 330 Ω;
  • +
  • Jumpers.
  • +
+

Circuito

+

Para os nossos primeiros experimentos, realize a seguinte montagem:

+

franzininho-wifi-pwm +Figura 1 – Circuito para teste de PWM com CircuitPython na Franzininho WiFi

+

Código para PWM com CircuitPython

+

Para esse código, utilizaremos a biblioteca simpleio, que será necessária para realizarmos a conversão de valores. As bibliotecas do CircuitPython podem ser encontradas no seguinte endereço: https://circuitpython.org/libraries. Faça o download, de acordo com a versão do CircuitPython instalada na sua Franzininho WiFi.

+

franzininho-wifi-pwm

+

Após baixar o arquivo, copie a pasta desejada para a pasta de arquivos da Franzininho WiFi:

+

simpleio.mpy

+

Escreva o código abaixo no arquivo code.py, que está localizado no diretório da Franzininho:

+
import pwmio
+import math
+import simpleio
+from analogio import AnalogIn
+from time import sleep
+
+potIn = board.IO2
+pot = AnalogIn(potIn)
+
+LED = board.IO4
+led = pwmio.PWMOut(LED)
+
+def converter(pin):
+    pinValue = pin.value
+    mapValue = math.trunc(simpleio.map_range
+               (pinValue, 536, 51355, 0, 65535))
+    print('Valor Original: ', pinValue,
+          'Valor Convertido: ', mapValue)
+    return mapValue
+
+while True:
+    potValue = converter(pot)
+    led.duty_cycle = potValue
+    sleep(0.1)
+
+

Depois de finalizar a edição do código, salve. Execute o programa.

+

Utilizaremos o módulo board para acessarmos os pinos da Franzininho:

+
import board
+
+

E para configurarmos os pinos PWM, é necessário importarmos o pwmio:

+
import pwmio
+
+

Além disso, será necessário a biblioteca math, para “eliminar” as casas decimais:

+
import math
+
+

Como dito anteriormente, usaremos o módulo simpleio:

+
import simpleio
+
+

Ademais, importaremos a função AnalogIn do módulo analogio para, configuramos o potenciômetro como uma entrada analógica:

+
from analogio import AnalogIn
+
+

Também, iremos chamar a função sleep, da biblioteca time, pois precisaremos de intervalos de temporização:

+
from time import sleep
+
+

Agora, após importarmos todas os módulos que vamos utilizar, vamos configurar os pinos. Primeiro, vamos associar o GPIO2 a uma variável chamada potIn. Após isso, vamos criar um objeto chamado pot e configurá-lo como uma entrada analógica:

+
LED = board.IO4
+led = pwmio.PWMOut(LED)
+
+

Configurações iniciais encerradas! Depois disso, vamos criar uma função chamada converte. Como parâmetro, essa função receberá o pino que estamos realizando a leitura:

+
def converter(pin):
+
+

Dentro da função, realizaremos a leitura do valor do potenciômetro, que será armazenada na variável pinValue:

+
pinValue = pin.value
+
+

Além disso, vamos converter o valor do potenciômetro para o valor aceito pelos pinos PWM. Para isso, vamos usar a função simpleio.map_range. Os parâmetros dessa função são: valor bruto (no caso, o valor recebido naquele instante), valor mínimo de entrada, valor máximo de entrada, valor mínimo de saída e valor máximo de saída. E, vamos precisar da função math.trunc, que eliminará as casas decimais. Todas essas informações ficarão armazenadas na variável mapValue:

+
mapValue = math.trunc(simpleio.map_range
+               (pinValue, 536, 51355, 0, 65535))
+
+

Colocaremos o print apenas para visualizarmos a conversão:

+
print('Valor Original: ', pinValue,
+          'Valor Convertido: ', mapValue)
+    return mapValue
+
+

E a função nos retornará o valor de mapValue:

+
return mapValue
+
+

E por fim, o loop. Dentro do while True, vamos associar o valor retornado pela função converte a variável potValue e mandar esse valor para o led. Para enviarmos um valor para o componente, utilizamos a função duty_cycle, que é o ciclo de trabalho, ou seja, quanto tempo o sinal estará ligado ou não. Também, colocaremos um delay:

+
while True:
+    potValue = converter(pot)
+    led.duty_cycle = potValue
+    sleep(0.1)
+
+

Conclusão

+

Nesse exemplo, aprendemos a como usar os pinos PWM com CircuitPython e, como controlá-los através de um potenciômetro. Além disso, aprendemos a como mapear valores. No próximo exemplo, vamos aprender a como usar Servos Motores. +Outros artigos da série.

+
AutorMateus Adriano Ventura Vieira
Data:09/05/2022
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04/index.html b/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04/index.html index e8846a050..43c6ad977 100755 --- a/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04/index.html +++ b/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04/index.html @@ -1,19 +1,77 @@ - + - -Sensor de Distância Ultrassônico HC-SR04 | Franzininho - - - + +Sensor de Distância Ultrassônico HC-SR04 | Franzininho + + + -
-

Sensor de Distância Ultrassônico HC-SR04

Nesse exemplo aprenderemos a ler valores de distância com o sensor HC-SR04 usando o CircuitPython.

Materiais necessários

Identifique os seguintes materiais necessários para este projeto:

  • 1 Franzininho WiFi.
  • 1 Sensor de Distância Ultrassônico HC-SR04.
  • 1 Protoboard.
  • Cabos de ligação.

Circuito

A próxima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:

Circuito HC-SR04

A tabela abaixo resume as conexões entre o sensor e a Franzininho:

HC-SR04Franzininho WiFi
EchoGPIO35
TrigGPIO36
Vcc5v
GndGND

Código

Neste exemplo, vamos fazer o uso de uma biblioteca que implementa os métodos necessários para uso do sensor.

As bibliotecas para o CircuitPython podem ser obtidas através do endereço https://circuitpython.org/libraries. Escolha e baixe o arquivo de acordo com a versão do CircuitPyhthon que você tem instalado na Franzininho WiFi.

Bibliotecas

Em seguida, copie o arquivo diretamente para a pasta lib do sistema de arquivos da Franzininho WiFi:

  • adafruit_hcsr04.mpy

Implemente o programa abaixo no arquivo code.py que está localizado na pasta raiz da Franzininho WiFi.

import board
import time
import adafruit_hcsr04

sonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)

while True:
try:
print((sonar.distance,))
except RuntimeError:
print("Retrying!")
time.sleep(0.1)

Análise do código

Para acessar os pinos da placa precisamos importar o módulo board:

import board

Como precisaremos fazer o uso do sleep, importamos o módulo time:

import time

A biblioteca que vamos utilizar para realizar as leituras do sensor é o adafruit_hcsr04, importaremos esse módulo:

import adafruit_hcsr04

Em seguida criamos uma instância da classe HCSR04, passando como parâmetro trigger_pin sendo o pino 36, o echo_pin o pino 35 e o timeout sendo 0.5 segundos. +

Sensor de Distância Ultrassônico HC-SR04

Nesse exemplo aprenderemos a ler valores de distância com o sensor HC-SR04 usando o CircuitPython.

+

Materiais necessários

+

Identifique os seguintes materiais necessários para este projeto:

+
    +
  • 1 Franzininho WiFi.
  • +
  • 1 Sensor de Distância Ultrassônico HC-SR04.
  • +
  • 1 Protoboard.
  • +
  • Cabos de ligação.
  • +
+

Circuito

+

A próxima etapa consiste em realizar a montagem da maneira indicada pela figura a seguir:

+

Circuito HC-SR04

+

A tabela abaixo resume as conexões entre o sensor e a Franzininho:

+
HC-SR04Franzininho WiFi
EchoGPIO35
TrigGPIO36
Vcc5v
GndGND
+

Código

+

Neste exemplo, vamos fazer o uso de uma biblioteca que implementa os métodos necessários para uso do sensor.

+

As bibliotecas para o CircuitPython podem ser obtidas através do endereço https://circuitpython.org/libraries. Escolha e baixe o arquivo de acordo com a versão do CircuitPyhthon que você tem instalado na Franzininho WiFi.

+

Bibliotecas

+

Em seguida, copie o arquivo diretamente para a pasta lib do sistema de arquivos da Franzininho WiFi:

+
    +
  • adafruit_hcsr04.mpy
  • +
+

Implemente o programa abaixo no arquivo code.py que está localizado na pasta raiz da Franzininho WiFi.

+
import board
+import time
+import adafruit_hcsr04
+
+sonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)
+
+while True:
+    try:
+        print((sonar.distance,))
+    except RuntimeError:
+        print("Retrying!")
+    time.sleep(0.1)
+
+

Análise do código

+

Para acessar os pinos da placa precisamos importar o módulo board:

+
import board
+
+

Como precisaremos fazer o uso do sleep, importamos o módulo time:

+
import time
+
+

A biblioteca que vamos utilizar para realizar as leituras do sensor é o adafruit_hcsr04, importaremos esse módulo:

+
import adafruit_hcsr04
+
+

Em seguida criamos uma instância da classe HCSR04, passando como parâmetro trigger_pin sendo o pino 36, o echo_pin o pino 35 e o timeout sendo 0.5 segundos. O trigger_pin (em português: Gatilho) tem a função de disparar uma espécie de onda sonora ultrassônica, a qual irá colidir com algum obstáculo e retorna para o sensor fazendo com que o pino echo_pin envie pulsos para a Franzininho, o tempo desse processo será convertido em distância. O parâmetro timeout é o tempo máximo de leitura do sensor, que nesse caso é 0.5 segundos. -Conforme podemos observar na pinagem, disponível em https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi

sonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)

No loop infinito fazemos a leitura do valor de distância a cada 0.1 segundos através dos método sonar.distance, e imprimimos o valor lido no terminal serial. O valor retornado de sonar.distance tem a unidade de medida centímetros.

while True:
try:
print((sonar.distance,))
except RuntimeError:
print("Retrying!")
time.sleep(0.1)

Resultado

A figura a seguir exibe os valores lidos no terminal serial(REPL):

Terminal Serial

info

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

AutorWallace Brito
Data:31/10/2021
- - +Conforme podemos observar na pinagem, disponível em https://franzininho.github.io/docs-franzininho-site/docs/franzininho-wifi/franzininho-wifi

+
sonar = adafruit_hcsr04.HCSR04(trigger_pin=board.IO36, echo_pin=board.IO35, timeout=0.5)
+
+

No loop infinito fazemos a leitura do valor de distância a cada 0.1 segundos através dos método sonar.distance, e imprimimos o valor lido no terminal serial. O valor retornado de sonar.distance tem a unidade de medida centímetros.

+
while True:
+    try:
+        print((sonar.distance,))
+    except RuntimeError:
+        print("Retrying!")
+    time.sleep(0.1)
+
+

Resultado

+

A figura a seguir exibe os valores lidos no terminal serial(REPL):

+

Terminal Serial

+

Se tiver alguma dúvida consulte a comunidade Franzininho no Discord

+
AutorWallace Brito
Data:31/10/2021
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console/index.html b/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console/index.html index 4197221f6..2fbcc5037 100755 --- a/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console/index.html +++ b/en/docs/franzininho-wifi/exemplos-circuitpython/serial-console/index.html @@ -1,20 +1,116 @@ - + - -Serial Console | Franzininho - - - + +Serial Console | Franzininho + + + -
-

Serial Console

Neste exemplo iremos utilizar o console serial para controlar a cor do LED da Franzininho WiFi com CircuitPython.

Materiais necessários

  • 1 Placa Franzininho Wifi com CircuitPython;

Circuito

Para este exemplo não será necessário nenhum componente extra, apenas a placa Franzininho WiFi:

franzininho-wifi-serial-console

Obs. Neste exemplo vamos utilizar o Mu Editor, mas qualquer editor com suporte a comunicação serial pode ser utilizado.

Código

Digite o código abaixo no arquivo code.py que está no diretório CIRCUITPY e salve o arquivo:

Observação

Provavelmente você encontrará outro código no arquivo code.py. -Apague-o e insira o código novo.

# code.py

""" Controle da cor do LED RGB através da serial console """
import board
import digitalio
import neopixel_write

pin = digitalio.DigitalInOut(board.NEOPIXEL)
pin.direction = digitalio.Direction.OUTPUT

while True:
print("Digite a intesidade da cor vermelho:")
r = int(input())
print("Digite a intesidade da cor verde:")
g = int(input())
print("Digite a intesidade da cor azul:")
b = int(input())
cor = bytearray([r, g, b])
neopixel_write.neopixel_write(pin, cor)
print("Cor: {} {} {}".format(r,g,b) )
print("[ENTER] - para mudar a cor.")
input()

Finalizando a edição do arquivo, salve-o. -Após salvar o arquivo, abra o console serial do Mu Editor.

Análise do código

Para acessar os pinos da placa precisamos importar o módulo board:

import board

Utilizaremos o LED Neopixel existente na própria placa da Franzininho WiFi, este LED está conectado a GPIO 18 do ESP32-S2 da Franzininho WiFi.

franzininho-wifi-serial-console

Como o LED é um atuador, precisamos configurar o pino como uma saída digital. Para isso, precisamos importar o módulo:

import digitalio

O LED RGB Neopixel utiliza um protocolo de comunicação específico já que dentro do LED existe um chip de controle integrado que controla os três LED dentro do encapsulamento. -Para facilitar a implementação de nosso programa, optamos por utilizar um biblioteca disponível dentro do próprio circuitpython que é a neopixel_write:

import neopixel_write

Com todos os módulos importados, podemos acessar as funções de configuração do pino digital:

pin = digitalio.DigitalInOut(board.NEOPIXEL)
pin.direction = digitalio.Direction.OUTPUT

Note que primeiro mapeamos o pino e depois configuramos a direção.

Diferentemente de outros framework como Arduino, ESP-IDF e a maioria dos framework escrito em C/C++, o interpretador do Python já habilitar UART para a comunicação serial por padrão, dispensado a inicialização da serial como seria no Arduino por exemplo.

Fragmento de código necessário para configurar a comunicação serial no Arduino:

Serial.begin(115200);
Dica

Nunca mais você vai esquecer de habilitar a serial antes de tentar imprimir. 😉

Neste exemplo duas funções são importante destacar. São as funções que permite escrever e ler dados do console.

A função "print" para imprimir mensagem no console serial.

print("Algum coisa para ser impresso na serial")

E a função "input" para ler valores do console serial.

uma_variavel = input()

Agora vamos criar nosso loop principal:

while True:
print('Digite a intensidade da cor vermelho:')
r = int(input())
print('Digite a intensidade da cor verde:')
g = int(input())
print('Digite a intensidade da cor azul:')
b = int(input())
cor = bytearray([r, g, b])
neopixel_write.neopixel_write(pin, cor)
print('Cor: {} {} {}'.format(r,g,b) )
print('[ENTER] - para mudar a cor.')
input()

No loop principal iremos utilizar as funções print/input para ler o valor das cores dos três LED.

Iremos montar um bytearray e chamar a função neopixel_write para atualizar a cor do LED Neopixel.

cor = bytearray([r, g, b])

A função neopixel_write precisa apenas de dois parâmetros, o pino onde está conectado o LED e um bytearray contendo um byte para cada uma das cores do LED.

neopixel_write.neopixel_write(pin, cor)

O bytearray segue o seguinte formato: primeiro byte representa a intensidade do LED vermelho (Red), o segundo byte representa a intensidade do LED verde (Green) e o terceiro byte representa a intensidade do LED azul (Blue).

Execução

Para abrir o console serial no Mu Editor, click no botão "Serial" e depois pressione "Ctrl + D" para reiniciar a execução do script na placa. Logo em seguida você poderá ver a primeira mensagem do script, solicitado o valor da primeira cor no console, a cor vermelha.

franzininho-wifi-serial-console

Aqui temos um exemplo de execução no console serial do Mu Editor.

franzininho-wifi-serial-console

Resultado da execução na placa Franzininho WiFi.

franzininho-wifi-serial-console

Outro exemplo de execução.

franzininho-wifi-serial-console

Sugestão de experimento

Execute uma informando os valores [10,10,10], execute novamente agora informando os valores [100,100,100] e observe a diferença entre as duas execuções.

Conclusão

Neste exemplo exploramos duas importante ferramentas no desenvolvimento de qualquer projeto, a comunicação serial do console e o LED Builtin da placa Franzininho WiFi que também é um LED Neopixel que pode dar um charme a mais a seus projetos!!!

AutorEwerton Leandro de Sousa
Data:07/10/2021
- - +

Serial Console

Neste exemplo iremos utilizar o console serial para controlar a cor do LED da Franzininho WiFi com CircuitPython.

+

Materiais necessários

+
    +
  • 1 Placa Franzininho Wifi com CircuitPython;
  • +
+

Circuito

+

Para este exemplo não será necessário nenhum componente extra, apenas a placa Franzininho WiFi:

+

franzininho-wifi-serial-console

+

Obs. Neste exemplo vamos utilizar o Mu Editor, mas qualquer editor com suporte a comunicação serial pode ser utilizado.

+

Código

+

Digite o código abaixo no arquivo code.py que está no diretório CIRCUITPY e salve o arquivo:

+

Provavelmente você encontrará outro código no arquivo code.py. +Apague-o e insira o código novo.

+
# code.py
+
+""" Controle da cor do LED RGB através da serial console """
+import board
+import digitalio
+import neopixel_write
+
+pin = digitalio.DigitalInOut(board.NEOPIXEL)
+pin.direction = digitalio.Direction.OUTPUT
+
+while True:
+    print("Digite a intesidade da cor vermelho:")
+    r = int(input())
+    print("Digite a intesidade da cor verde:")
+    g = int(input())
+    print("Digite a intesidade da cor azul:")
+    b = int(input())
+    cor = bytearray([r, g, b])
+    neopixel_write.neopixel_write(pin, cor)
+    print("Cor: {} {} {}".format(r,g,b) )
+    print("[ENTER] - para mudar a cor.")
+    input()
+
+

Finalizando a edição do arquivo, salve-o. +Após salvar o arquivo, abra o console serial do Mu Editor.

+

Análise do código

+

Para acessar os pinos da placa precisamos importar o módulo board:

+
import board
+
+

Utilizaremos o LED Neopixel existente na própria placa da Franzininho WiFi, este LED está conectado a GPIO 18 do ESP32-S2 da Franzininho WiFi.

+

franzininho-wifi-serial-console

+

Como o LED é um atuador, precisamos configurar o pino como uma saída digital. Para isso, precisamos importar o módulo:

+
import digitalio
+
+

O LED RGB Neopixel utiliza um protocolo de comunicação específico já que dentro do LED existe um chip de controle integrado que controla os três LED dentro do encapsulamento. +Para facilitar a implementação de nosso programa, optamos por utilizar um biblioteca disponível dentro do próprio circuitpython que é a neopixel_write:

+
import neopixel_write
+
+

Com todos os módulos importados, podemos acessar as funções de configuração do pino digital:

+
pin = digitalio.DigitalInOut(board.NEOPIXEL)
+pin.direction = digitalio.Direction.OUTPUT
+
+

Note que primeiro mapeamos o pino e depois configuramos a direção.

+

Diferentemente de outros framework como Arduino, ESP-IDF e a maioria dos framework escrito em C/C++, o interpretador do Python já habilitar UART para a comunicação serial por padrão, dispensado a inicialização da serial como seria no Arduino por exemplo.

+

Fragmento de código necessário para configurar a comunicação serial no Arduino:

+
Serial.begin(115200);
+
+

Nunca mais você vai esquecer de habilitar a serial antes de tentar imprimir. 😉

+

Neste exemplo duas funções são importante destacar. São as funções que permite escrever e ler dados do console.

+

A função "print" para imprimir mensagem no console serial.

+
print("Algum coisa para ser impresso na serial")
+
+

E a função "input" para ler valores do console serial.

+
uma_variavel = input()
+
+

Agora vamos criar nosso loop principal:

+
while True:
+    print('Digite a intensidade da cor vermelho:')
+    r = int(input())
+    print('Digite a intensidade da cor verde:')
+    g = int(input())
+    print('Digite a intensidade da cor azul:')
+    b = int(input())
+    cor = bytearray([r, g, b])
+    neopixel_write.neopixel_write(pin, cor)
+    print('Cor: {} {} {}'.format(r,g,b) )
+    print('[ENTER] - para mudar a cor.')
+    input()
+
+

No loop principal iremos utilizar as funções print/input para ler o valor das cores dos três LED.

+

Iremos montar um bytearray e chamar a função neopixel_write para atualizar a cor do LED Neopixel.

+
cor = bytearray([r, g, b])
+
+

A função neopixel_write precisa apenas de dois parâmetros, o pino onde está conectado o LED e um bytearray contendo um byte para cada uma das cores do LED.

+
neopixel_write.neopixel_write(pin, cor)
+
+

O bytearray segue o seguinte formato: primeiro byte representa a intensidade do LED vermelho (Red), o segundo byte representa a intensidade do LED verde (Green) e o terceiro byte representa a intensidade do LED azul (Blue).

+

Execução

+

Para abrir o console serial no Mu Editor, click no botão "Serial" e depois pressione "Ctrl + D" para reiniciar a execução do script na placa. Logo em seguida você poderá ver a primeira mensagem do script, solicitado o valor da primeira cor no console, a cor vermelha.

+

franzininho-wifi-serial-console

+

Aqui temos um exemplo de execução no console serial do Mu Editor.

+

franzininho-wifi-serial-console

+

Resultado da execução na placa Franzininho WiFi.

+

franzininho-wifi-serial-console

+

Outro exemplo de execução.

+

franzininho-wifi-serial-console

+

Execute uma informando os valores [10,10,10], execute novamente agora informando os valores [100,100,100] e observe a diferença entre as duas execuções.

+

Conclusão

+

Neste exemplo exploramos duas importante ferramentas no desenvolvimento de qualquer projeto, a comunicação serial do console e o LED Builtin da placa Franzininho WiFi que também é um LED Neopixel que pode dar um charme a mais a seus projetos!!!

+
AutorEwerton Leandro de Sousa
Data:07/10/2021
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor/index.html b/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor/index.html index 41bc36c85..37d6a7460 100755 --- a/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor/index.html +++ b/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motor/index.html @@ -1,17 +1,158 @@ - + - -Servo motor | Franzininho - - - + +Servo motor | Franzininho + + + -
-

Servo motor

Um servo motor é um pequeno motor de corrente contínua. Diferentemente dos demais motores DC, onde apenas controlamos a velocidade de giro, conseguimos controlar a posição de um servo, através do PWM.

O servo que vamos utilizar nesse exemplo, tem a resolução de meia volta, ou seja, de 0° a 180°.

Materiais Necessários

  • 1 Placa Franzininho WiFi com CircuitPython;
  • 1 Micro servo 9g;
  • 1 Protoboard;
  • 1 potenciômetro de 10 kΩ;
  • Jumpers.

Circuito

Para os exemplos que vamos ver a seguir, realize a seguinte montagem:

Circuito Servo Motor

Observação: o servo deve ser conectado ao 5V da placa. E, caso deseje usar mais de dois servos, uma fonte externa deve ser usada.

Códigos

Assim como quando aprendemos a usar PWM, vamos importar o módulo simpleio. Também, vamos importar um novo módulo para trabalharmos com o servo motor.

Para ter acesso a esses módulos, acesse o endereço: https://circuitpython.org/libraries. Faça o download, de acordo com a versão do CircuitPython instalada na sua Franzininho WiFi.

Circuito Servo Motor

Após finalizar o download, importe os dois módulos para a pasta de arquivos da Franzininho WiFi:

  • simpleio.mpy;
  • adafruit_motor.

Exemplo 1

No primeiro exemplo, vamos aprender a como programar um servo motor usando CircuitPython. Para isso, copie o código abaixo:

import board
import pwmio
from adafruit_motor import servo
from time import sleep

pin = board.IO1
pwm = pwmio.PWMOut(pin, frequency = 50)

my_servo = servo.Servo(pwm)

while True:
for angle in range(0, 180, 10):
my_servo.angle = angle
sleep(0.1)
for angle in range(180, 0, -10):
my_servo.angle = angle
sleep(0.1)

Salve e execute o código.

Exemplo 2

Já nesse exemplo, vamos controlar o posicionamento do servo através de um potenciômetro. E para isso, vamos usar alguns recursos que aprendemos anteriormente. Escreva o código abaixo:

import board
import pwmio
from adafruit_motor import servo
import simpleio
import math
from analogio import AnalogIn
from time import sleep

pin = board.IO1
pwm = pwmio.PWMOut(pin, frequency = 50)
my_servo = servo.Servo(pwm)

potPin = board.IO2
pot = AnalogIn(potPin)

def converter(pin):
pinValue = pin.value
mapValue = math.trunc(simpleio.map_range
(pinValue, 536, 51355, 0, 180))
return mapValue

while True:
angle = converter(pot)
my_servo.angle = angle
sleep(0.1)

Após terminar de escrever, salve o código e teste-o.

Análise dos Códigos

Exemplo 1

O primeiro módulo que vamos importar, é o board. Ele possibilita o acesso aos pinos da placa:

import board

Para conseguirmos usar os pinos PWM, precisamos do módulo pwmio:

import pwmio

Também, será necessário a biblioteca auxiliar adafruit_motor.servo. Ela será útil para controlar o servo com base na saída PWM:

from adafruit_motor import servo

E, por último, precisaremos da função sleep do módulo time, para intervalos de temporização:

from time import sleep

Agora, vamos atribuir o GPIO1 da placa a variável pin:

pin  =  board.IO1

Também, configuraremos esse pino como uma saída PWM. Repare, que diferente do LED, precisamos informar a frequência, pois, por padrão ela está configurada com 500Hz e o padrão do servo motor é 50Hz:

pwm  =  pwmio.PWMOut(pin,  frequency  =  50)

Além disso, vamos criar o objeto my_servo e atribuir o pino pwm a ele:

my_servo  =  servo.Servo(pwm)

Por fim, dentro do while True, o nosso loop, faremos com que o servo se mova continuamente. Para isso, usaremos a estrutura de repetição for e o comando range( ), que gera uma lista.

Como parâmetros do primeiro laço, vamos informar o valor inicial (0), valor final(180) e o intervalo de contagem, ou seja, de 10 em 10. Dentro do laço, esse valor será enviado para o servo a cada 0.1 segundos:

while True:
for angle in range(0, 180, 10):
my_servo.angle = angle
sleep(0.1)

Já no segundo laço, faremos o mesmo. Porém, invés de incrementar de 10 em 10, a contagem será decrescente:

for angle in range(180, 0, -10): 
my_servo.angle = angle
sleep(0.1)

Exemplo 2

Além dos módulos que já usamos no primeiro exemplo, precisaremos importar simpleio, para usarmos a função de mapeamento:

import simpleio

Vamos precisar também da biblioteca math:

import math

E, da função AnalogIn da biblioteca analogio:

from analogio import AnalogIn

Além de configurarmos o servo, também vamos configurar o potenciômetro. Para isso, primeiro vamos atribuir o GPIO2 a variável potPin:

potPin  =  board.IO2

Por fim, vamos atribuir esse pino ao objeto pot como uma entrada analógica:

pot  =  AnalogIn(potPin)

Agora, vamos criar uma função chamada converte. Essa função receberá como parâmetro o pino que estamos lendo:

def converter(pin):

Dentro da função, faremos a leitura do valor enviado pelo potenciômetro e armazená-la na variável pinValue:

pinValue  =  pin.value

Ademais, converteremos o valor da leitura para graus. Para tal, usaremos a função simpleio.map_range. Os parâmetros dessa função são: valor bruto (valor da leitura naquele instante), valor mínimo de entrada, valor máximo de entrada, valor mínimo de saída e valor máximo de saída. Também, precisaremos da função math.trunc, que eliminará as casas decimais. Todas essas informações ficarão armazenadas na variável mapValue:

mapValue = math.trunc(simpleio.map_range(pinValue, 536, 51355, 0, 180))

E, a função nos retornará o valor de mapValue:

return  mapValue

No laço de repetição infinita, while True, atribuiremos o valor retornado pela função converte a variável angle. Esse valor será enviado para o servo motor a cada 0.1 segundos:

while True:
angle = converter(pot)
my_servo.angle = angle
sleep(0.1)

Conclusão

No decorrer da explicação, aprendemos a como usar um servo motor de uma maneira simples utilizando CircuitPython. Também, pudemos ver como usar um potenciômetro para controlar a movimentação dos nossos servos.

AutorMateus Adriano Ventura Vieira
Data:17/05/2022
- - +

Servo motor

Um servo motor é um pequeno motor de corrente contínua. Diferentemente dos demais motores DC, onde apenas controlamos a velocidade de giro, conseguimos controlar a posição de um servo, através do PWM.

+

O servo que vamos utilizar nesse exemplo, tem a resolução de meia volta, ou seja, de 0° a 180°.

+

Materiais Necessários

+
    +
  • 1 Placa Franzininho WiFi com CircuitPython;
  • +
  • 1 Micro servo 9g;
  • +
  • 1 Protoboard;
  • +
  • 1 potenciômetro de 10 kΩ;
  • +
  • Jumpers.
  • +
+

Circuito

+

Para os exemplos que vamos ver a seguir, realize a seguinte montagem:

+

Circuito Servo Motor

+

Observação: o servo deve ser conectado ao 5V da placa. E, caso deseje usar mais de dois servos, uma fonte externa deve ser usada.

+

Códigos

+

Assim como quando aprendemos a usar PWM, vamos importar o módulo simpleio. Também, vamos importar um novo módulo para trabalharmos com o servo motor.

+

Para ter acesso a esses módulos, acesse o endereço: https://circuitpython.org/libraries. Faça o download, de acordo com a versão do CircuitPython instalada na sua Franzininho WiFi.

+

Circuito Servo Motor

+

Após finalizar o download, importe os dois módulos para a pasta de arquivos da Franzininho WiFi:

+
    +
  • simpleio.mpy;
  • +
  • adafruit_motor.
  • +
+

Exemplo 1

+

No primeiro exemplo, vamos aprender a como programar um servo motor usando CircuitPython. Para isso, copie o código abaixo:

+
import board
+import pwmio
+from adafruit_motor import servo 
+from time import sleep
+
+pin = board.IO1
+pwm = pwmio.PWMOut(pin, frequency = 50)
+
+my_servo = servo.Servo(pwm)
+
+while True:
+    for angle in range(0, 180, 10): 
+        my_servo.angle = angle
+        sleep(0.1)
+    for angle in range(180, 0, -10): 
+        my_servo.angle = angle
+        sleep(0.1)
+
+

Salve e execute o código.

+

Exemplo 2

+

Já nesse exemplo, vamos controlar o posicionamento do servo através de um potenciômetro. E para isso, vamos usar alguns recursos que aprendemos anteriormente. Escreva o código abaixo:

+
import board
+import pwmio
+from adafruit_motor import servo
+import simpleio
+import math
+from analogio import AnalogIn
+from time import sleep
+
+pin = board.IO1
+pwm = pwmio.PWMOut(pin, frequency = 50)
+my_servo = servo.Servo(pwm)
+
+potPin = board.IO2
+pot = AnalogIn(potPin)
+
+def converter(pin):
+    pinValue = pin.value
+    mapValue = math.trunc(simpleio.map_range
+               (pinValue, 536, 51355, 0, 180))
+    return mapValue
+
+while True:
+    angle = converter(pot)
+    my_servo.angle = angle
+    sleep(0.1)
+
+

Após terminar de escrever, salve o código e teste-o.

+

Análise dos Códigos

+

Exemplo 1

+

O primeiro módulo que vamos importar, é o board. Ele possibilita o acesso aos pinos da placa:

+
import board
+
+

Para conseguirmos usar os pinos PWM, precisamos do módulo pwmio:

+
import pwmio
+
+

Também, será necessário a biblioteca auxiliar adafruit_motor.servo. Ela será útil para controlar o servo com base na saída PWM:

+
from adafruit_motor import servo
+
+

E, por último, precisaremos da função sleep do módulo time, para intervalos de temporização:

+
from time import sleep
+
+

Agora, vamos atribuir o GPIO1 da placa a variável pin:

+
pin  =  board.IO1
+
+

Também, configuraremos esse pino como uma saída PWM. Repare, que diferente do LED, precisamos informar a frequência, pois, por padrão ela está configurada com 500Hz e o padrão do servo motor é 50Hz:

+
pwm  =  pwmio.PWMOut(pin,  frequency  =  50)
+
+

Além disso, vamos criar o objeto my_servo e atribuir o pino pwm a ele:

+
my_servo  =  servo.Servo(pwm)
+
+

Por fim, dentro do while True, o nosso loop, faremos com que o servo se mova continuamente. Para isso, usaremos a estrutura de repetição for e o comando range( ), que gera uma lista.

+

Como parâmetros do primeiro laço, vamos informar o valor inicial (0), valor final(180) e o intervalo de contagem, ou seja, de 10 em 10. Dentro do laço, esse valor será enviado para o servo a cada 0.1 segundos:

+
while True:
+    for angle in range(0, 180, 10): 
+        my_servo.angle = angle
+        sleep(0.1)
+
+

Já no segundo laço, faremos o mesmo. Porém, invés de incrementar de 10 em 10, a contagem será decrescente:

+
for angle in range(180, 0, -10): 
+        my_servo.angle = angle
+        sleep(0.1)
+
+

Exemplo 2

+

Além dos módulos que já usamos no primeiro exemplo, precisaremos importar simpleio, para usarmos a função de mapeamento:

+
import simpleio
+
+

Vamos precisar também da biblioteca math:

+
import math
+
+

E, da função AnalogIn da biblioteca analogio:

+
from analogio import AnalogIn
+
+

Além de configurarmos o servo, também vamos configurar o potenciômetro. Para isso, primeiro vamos atribuir o GPIO2 a variável potPin:

+
potPin  =  board.IO2
+
+

Por fim, vamos atribuir esse pino ao objeto pot como uma entrada analógica:

+
pot  =  AnalogIn(potPin)
+
+

Agora, vamos criar uma função chamada converte. Essa função receberá como parâmetro o pino que estamos lendo:

+
def converter(pin):
+
+

Dentro da função, faremos a leitura do valor enviado pelo potenciômetro e armazená-la na variável pinValue:

+
pinValue  =  pin.value
+
+

Ademais, converteremos o valor da leitura para graus. Para tal, usaremos a função simpleio.map_range. Os parâmetros dessa função são: valor bruto (valor da leitura naquele instante), valor mínimo de entrada, valor máximo de entrada, valor mínimo de saída e valor máximo de saída. Também, precisaremos da função math.trunc, que eliminará as casas decimais. Todas essas informações ficarão armazenadas na variável mapValue:

+
mapValue = math.trunc(simpleio.map_range(pinValue, 536, 51355, 0, 180))
+
+

E, a função nos retornará o valor de mapValue:

+
return  mapValue
+
+

No laço de repetição infinita, while True, atribuiremos o valor retornado pela função converte a variável angle. Esse valor será enviado para o servo motor a cada 0.1 segundos:

+
while True:
+    angle = converter(pot)
+    my_servo.angle = angle
+    sleep(0.1)
+
+

Conclusão

+

No decorrer da explicação, aprendemos a como usar um servo motor de uma maneira simples utilizando CircuitPython. Também, pudemos ver como usar um potenciômetro para controlar a movimentação dos nossos servos.

+
AutorMateus Adriano Ventura Vieira
Data:17/05/2022
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo/index.html b/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo/index.html index a152747f2..5904b01c8 100755 --- a/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo/index.html +++ b/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivo/index.html @@ -1,17 +1,95 @@ - + - -Pinos de Toque Capacitivo | Franzininho - - - + +Pinos de Toque Capacitivo | Franzininho + + + -
-

Pinos de Toque Capacitivo

A capacitância pode ser definida, basicamente, como a capacidade de um corpo de armazenar energia elétrica. Dessa maneira, os pinos de toque capacitivo detectam a mudança na capacitância de um elemento. Esses pinos, podem ser utilizados por toque, e até mesmo, pela aproximação de um dedo.

Neste exemplo, vamos fazer um “interruptor” por aproximação e, aprender como usar o módulo responsável pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.

Materiais necessários

  • 1 Placa Franzininho WiFi com CircuitPython;
  • 1 Protoboard;
  • 1 LED;
  • 1 resistor de 220 Ω ou 330 Ω;
  • Jumpers.

Circuito

Realize a seguinte montagem para este projeto. No lugar do “sensor” de toque capacitivo, pode ser utilizado um jumper, um pedaço de fio ou qualquer outro material.

Circuito

Código

Implemente o código abaixo e teste seu circuito.

#Toque Capacitivo

import board
import touchio
from digitalio import DigitalInOut, Direction
from time import sleep

estado = 0

pin = board.IO1
touch = touchio.TouchIn(pin)

led = DigitalInOut(board.IO4)
led.direction = Direction.OUTPUT

while True:
if touch.value:
estado = not estado

led.value = estado
sleep(1)

Após finalizar a edição do código, salve-o. Execute o programa. Ao aproximar, ou, encostar o dedo no “sensor” escolhido por você, ele deve funcionar como um interruptor, ligando e desligando o LED.

Análise do Código

Para acessarmos os pinos da placa devemos importar o módulo board:

import board

Além disso, para o uso dos pinos de toque capacitivo, usaremos a biblioteca touchio:

import touchio

E, para configurarmos o LED como uma saída digital, temos que importar as funções DigitalInOut e Direction do módulo digitalio:

from digitalio import DigitalInOut,  Direction

Por último, vamos chamar a função sleep do módulo time, que usaremos para intervalos de temporização:

from time import sleep

Após importarmos as bibliotecas necessárias, criaremos uma variável estado, que vai armazenar o estado do LED:

estado  =  0

Agora, vamos configurar o GPIO1, como um pino touch. Primeiro, iremos atribuir esse pino a uma variável, no caso, a variável pin. Após isso, iremos criar o objeto touch e atribuir o pin a esse objeto:

pin  =  board.IO1
touch = touchio.TouchIn(pin)

Ademais, iremos atribuir o GPIO4 a varável led e, configurá-lo como uma saída digital:

led  =  DigitalInOut(board.IO4)
led.direction = Direction.OUTPUT

Na sequência, criaremos um laço infinito (while True). Dentro do loop, verificamos se houve mudança na capacitância do “sensor”. Caso aconteça a mudança, o estado do led também mudará:

while True:
if touch.value:
estado = not estado

led.value = estado
sleep(1)

Como ajustar a sensibilidade do touch?

Nesse exemplo, estamos acionando o led apenas por aproximar o dedo. Porém, pode ser que você deseje ajustar o seu “sensor” para acionar por toque. Para isso, vamos utilizar o comando threshold.

Primeiro, vamos verificar a medição do toque bruto. Para isso, utilizaremos a função raw_value. Depois, ajustaremos a sensibilidade, para que ele seja acionado apenas por toque:

pin = board.IO1
touch = touchio.TouchIn(pin)
print(touch.raw_value)
touch.threshold = 17300

Após adicionarmos a função threshold, o led só é acionado se tocarmos o “sensor”. Isso acontece, pois, o configuramos com uma sensibilidade menor, ou seja, um valor mínimo de capacitância maior, para que a mudança seja percebida pela placa.

Conclusão

Aprendemos, através de um exemplo prático, a como usar um pino toque capacitivo, que, em muitas situações pode ser usado para substituir botões e interruptores, por exemplo, apresentando-se como uma solução mais simples, pois seu funcionamento não é mecânico. Além disso, pudemos ver como ajustar a sensibilidade desse sensor as nossas necessidades.

AutorMateus Adriano Ventura Vieira
Data:06/05/2022
- - +

Pinos de Toque Capacitivo

A capacitância pode ser definida, basicamente, como a capacidade de um corpo de armazenar energia elétrica. Dessa maneira, os pinos de toque capacitivo detectam a mudança na capacitância de um elemento. Esses pinos, podem ser utilizados por toque, e até mesmo, pela aproximação de um dedo.

+

Neste exemplo, vamos fazer um “interruptor” por aproximação e, aprender como usar o módulo responsável pelos pinos de toque capacitivo. Ademais, veremos como ajustar a sensibilidade desse recurso.

+

Materiais necessários

+
    +
  • 1 Placa Franzininho WiFi com CircuitPython;
  • +
  • 1 Protoboard;
  • +
  • 1 LED;
  • +
  • 1 resistor de 220 Ω ou 330 Ω;
  • +
  • Jumpers.
  • +
+

Circuito

+

Realize a seguinte montagem para este projeto. No lugar do “sensor” de toque capacitivo, pode ser utilizado um jumper, um pedaço de fio ou qualquer outro material.

+

Circuito

+

Código

+

Implemente o código abaixo e teste seu circuito.

+
#Toque Capacitivo
+
+import board 
+import touchio
+from digitalio import DigitalInOut, Direction
+from time import sleep 
+
+estado = 0
+
+pin = board.IO1
+touch = touchio.TouchIn(pin)
+
+led = DigitalInOut(board.IO4)
+led.direction = Direction.OUTPUT
+
+while True:
+    if touch.value:
+        estado = not estado
+    
+    led.value = estado
+    sleep(1)
+
+

Após finalizar a edição do código, salve-o. Execute o programa. Ao aproximar, ou, encostar o dedo no “sensor” escolhido por você, ele deve funcionar como um interruptor, ligando e desligando o LED.

+

Análise do Código

+

Para acessarmos os pinos da placa devemos importar o módulo board:

+
import board
+
+

Além disso, para o uso dos pinos de toque capacitivo, usaremos a biblioteca touchio:

+
import touchio
+
+

E, para configurarmos o LED como uma saída digital, temos que importar as funções DigitalInOut e Direction do módulo digitalio:

+
from digitalio import DigitalInOut,  Direction
+
+

Por último, vamos chamar a função sleep do módulo time, que usaremos para intervalos de temporização:

+
from time import sleep
+
+

Após importarmos as bibliotecas necessárias, criaremos uma variável estado, que vai armazenar o estado do LED:

+
estado  =  0
+
+

Agora, vamos configurar o GPIO1, como um pino touch. Primeiro, iremos atribuir esse pino a uma variável, no caso, a variável pin. Após isso, iremos criar o objeto touch e atribuir o pin a esse objeto:

+
pin  =  board.IO1
+touch  =  touchio.TouchIn(pin)
+
+

Ademais, iremos atribuir o GPIO4 a varável led e, configurá-lo como uma saída digital:

+
led  =  DigitalInOut(board.IO4)
+led.direction  =  Direction.OUTPUT
+
+

Na sequência, criaremos um laço infinito (while True). Dentro do loop, verificamos se houve mudança na capacitância do “sensor”. Caso aconteça a mudança, o estado do led também mudará:

+
while True:
+    if touch.value:
+        estado = not estado
+    
+    led.value = estado
+    sleep(1)
+
+

Como ajustar a sensibilidade do touch?

+

Nesse exemplo, estamos acionando o led apenas por aproximar o dedo. Porém, pode ser que você deseje ajustar o seu “sensor” para acionar por toque. Para isso, vamos utilizar o comando threshold.

+

Primeiro, vamos verificar a medição do toque bruto. Para isso, utilizaremos a função raw_value. Depois, ajustaremos a sensibilidade, para que ele seja acionado apenas por toque:

+
pin = board.IO1
+touch = touchio.TouchIn(pin)
+print(touch.raw_value)
+touch.threshold = 17300
+
+

Após adicionarmos a função threshold, o led só é acionado se tocarmos o “sensor”. Isso acontece, pois, o configuramos com uma sensibilidade menor, ou seja, um valor mínimo de capacitância maior, para que a mudança seja percebida pela placa.

+

Conclusão

+

Aprendemos, através de um exemplo prático, a como usar um pino toque capacitivo, que, em muitas situações pode ser usado para substituir botões e interruptores, por exemplo, apresentando-se como uma solução mais simples, pois seu funcionamento não é mecânico. Além disso, pudemos ver como ajustar a sensibilidade desse sensor as nossas necessidades.

+
AutorMateus Adriano Ventura Vieira
Data:06/05/2022
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-espidf/aws/index.html b/en/docs/franzininho-wifi/exemplos-espidf/aws/index.html index ef6093a91..427a175ad 100755 --- a/en/docs/franzininho-wifi/exemplos-espidf/aws/index.html +++ b/en/docs/franzininho-wifi/exemplos-espidf/aws/index.html @@ -1,18 +1,156 @@ - + - -Primeiros passos com a AWS | Franzininho - - - + +Primeiros passos com a AWS | Franzininho + + + -
-

Primeiros passos com a AWS

Introdução

Neste tutorial exploraremos a utilização do AWS IoT Core para conectar a placa Franzininho WiFi à nuvem utilizando o ESP-IDF. Além do IoT Core, a AWS oferece várias outras formas de conectar um dispositivo, como AWS IoT Greengrass Stream Manager ou AWS IoT SiteWise. Esses outros serviços para ingestão e visualização de dados podem ser vistos nesse link.

AWS IOT Core

O AWS IoT Core é o broker de mensagens que permite conectar dispositivos IoT com a nuvem AWS e seus diversos serviços. Através dele, podemos criar, configurar e gerenciar nossos dispositivos.

Atualmente suporta os seguintes protocolos de comunicação:

  • MQTT
  • MQTT over WSS (Websockets Secure)
  • HTTPS
  • LoRaWAN

Resumidamente, o serviço se baseia em:

  • Things: Dispositivos (“coisas”) que queremos conectar;
  • Jobs: Ações remotas que você pode agendar para realizar operações nos seus dispositivos, como atualizações de firmware;
  • Rules: Regras através das quais podemos direcionar as mensagens recebidas pelo broker para outros serviços da AWS, por exemplo, para armazenar dados no DynamoDB.
  • Segurança: onde é possível gerenciar os certificados de autorização, políticas (policies) e papeis (roles) de autenticação.

Parte 1 - Criando a Franzininho na AWS

Para seguir o tutorial, você deve ter acesso ao console da AWS. Para começar, vamos criar uma nova “coisa” (thing) para representar nossa Franzininho na nuvem. Certifique-se que você está na região mais próxima antes de começar, selecionando-a no menu do canto superior direito. Para o Brasil, a região é sa-east-1.

  1. Na AWS, procure pelo serviço IoT Core (Service > Internet of Things > IoT core) e crie uma nova “coisa” em Manage > All devices > Things > Create new thing.

  2. Vamos criar apenas um dispositivo (Create a single thing), mas saiba que também é possível criar vários de uma vez (Create many things). Você precisará especificar as propriedades desse dispositivo:

  • Thing name: o nome do seu dispositivo para identificá-lo de forma única. Escolha sabiamente, pois essa propriedade não pode ser alterada depois que o dispositivo é criado.
  • Configurações adicionais: podem ser utilizadas para detalhar, organizar, gerenciar e pesquisar os dispositivos, como tipo, atributos ou grupos.
  • Device shadow permite que o estado do seu dispositivo fique disponível para outros serviços mesmo que ele não esteja conectado.

Por enquanto, basta preencher o nome e prosseguir. Chamarei o meu carinhosamente de Franz.

Criar thing

  1. Para conseguir se autenticar ao serivço da AWS, cada dispositivo deve ter um certificado. Utilizaremos o gerado automaticamente (Auto-generate a new certificate), mas você também tem a opção de utilizar certificados próprios.

  2. Para gerenciar o nível de acesso desse certificado aos recursos, é preciso criar uma política de autorização (policy), que é uma lista de ações permitidas ou proibidas para aquele certificado. Você pode criar uma política direto dessa aba, em Create policy, ou pela barra de navegação do IoT Core em Security > Policies.

Uma policy deve ter um nome e uma ou mais declarações (statements). Cada declaração é composta por um efeito de uma ação à um recurso.

O efeito pode ser de permissão (allow) ou proibição (deny).

As possíveis ações desse serviço são várias, mas utilizaremos as seguintes principais:

  • iot:Connect: permite a conexão do dispositivo ao serviço;
  • iot:Publish: permite que o dispositivo publique mensagens no broker;
  • iot:Receive: permite que o dispositivo receba mensagem do broker;
  • iot:Subscribe: permite que o dispositivo se inscreva nos tópicos do broker.

E o recurso é o nome do serviço da AWS que a ação vai se utilizar, neste caso arn:aws:iot:region:account-id.

Você pode adicionar policies já existentes utilizando a aba Policy Examples ou criá-las manualmente. Para este exemplo, utilizei as seguintes políticas:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"
},
{
"Effect": "Allow",
"Action": "iot:Publish",
"Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"
},
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": "arn:aws:iot:sa-east-1:<account-id>:topicfilter/${iot:Connection.Thing.ThingName}/*"
},
{
"Effect": "Allow",
"Action": "iot:Publish",
"Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"
},
{
"Effect": "Allow",
"Action": "iot:Receive",
"Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"
}
]
}

Altere o <account-id> para o número da sua conta, disponível no menu do canto superior direito.

Account ID

  1. Por fim, baixe os arquivos de certificados e chaves que a AWS criou automaticamente para autenticar esse dispositivo. Este é o único momento que você conseguirá baixar as chaves para esse certificado, então guarde-as com carinho para utilizá-los no próximo passo.

Parte 2 - Conectando a Franzininho com ESP-IDF

Agora que temos nosso dispositivo configurado, precisamos escrever o firmware para conectá-lo. A própria Espressif disponibiliza um SDK para comunicação com AWS IoT baseada no FreeRTOS. Para utilizar, basta clonar o repositório, preferencialmente direto na pasta de componentes do seu diretório de instalação.

git clone https://github.com/espressif/esp-aws-iot <esp-dir-path>/esp-idf/components

Dentro desse componente, já são disponibilizados alguns exemplos para utilizar com a AWS. Vamos começar utilizando o exemplo básico de MQTT em examples/mqtt/tls_mutual_auth.

Para configurar, utilizaremos o menuconfig:

  1. Nas configurações do exemplo (Example Configuration), insira o nome do dispositivo exatamente como foi criado na AWS (Franz, no meu caso) e o endpoint do broker MQTT, que está disponível no menu AWS IoT > Settings > Device endpoint na sua conta do AWS. As demais configurações podem ser deixadas como padrão.

Device Endpoint -Menuconfig

  1. Nas configurações de rede (Example Connection Configuration), insira as configurações da sua rede Wi-Fi (SSID e senha)

  2. O método padrão de autenticação com a AWS é utilizando credenciais PKI embarcadas no diretório certs/. Lembra dos certificados que foram gerados automaticamente ao criar um dispositivo? É aqui que você vai colocá-los para embarcar no dispositivo. Copie o certificado, a chave privada e um dos certificados de root que você tinha armazenado anteriormente.

cp certificate.pem.crt main/certs/client.crt
cp private.pem.key main/certs/client.key
cp AmazonRootCAx.pem main/certs/root_cert_auth.pem

Com tudo configurado, é só buildar e passar pra placa (siga o tutorial em Primeiros passos). Este exemplo se conecta ao broker MQTT, se sobrescreve no tópico CLIENT_IDENTIFIER "/example/topic” (Franz/example/topic, por exemplo) e publica mensagens de Hello World.

Sua conexão foi estabelecida com sucesso caso receba a mensagem a seguir:

I (7329) coreMQTT: Connection accepted.
I (7339) coreMQTT: Received MQTT CONNACK successfully from broker.
I (7349) coreMQTT: MQTT connection established with the broker.
I (7349) coreMQTT: MQTT connection successfully established with broker.

Parte 3 - Monitorando a Franzininho

Agora que a Franzininho está conectado, podemos monitorar sua atividade pelo console da AWS.

  • Você pode ver as mensagens mais recentes em Manage > Things > Nome do seu dispositivo > Activity.

Menu Activity

  • E você também pode interagir através do MQTT Test Client, por exemplo, publicando no tópico CLIENT_IDENTIFIER "/example/topic” que estamos inscritos.

MQTT Test Client

A mensagem recebida pode ser vista na Franzininho:

I (17668) coreMQTT: Packet received. ReceivedBytes=66.
I (17668) coreMQTT: De-serialized incoming PUBLISH packet: DeserializerResult=MQTTSuccess.
I (17668) coreMQTT: State record updated. New state=MQTTPublishDone.
I (17678) coreMQTT: Incoming QOS : 0.
I (17678) coreMQTT: Incoming Publish Topic Name: Franz/example/topic matches subscribed topic.
Incoming Publish message Packet Id is 0.
Incoming Publish Message : {
"message": "Hello from AWS IoT console"
}.

E é isso, agora você pode brincar de Internet das Coisas com sua Franzininho WiFi utilizando a AWS!

AutoraAna Carolina Cabral
Data:07/01/2023
- - +

Primeiros passos com a AWS

Introdução

+

Neste tutorial exploraremos a utilização do AWS IoT Core para conectar a placa Franzininho WiFi à nuvem utilizando o ESP-IDF. Além do IoT Core, a AWS oferece várias outras formas de conectar um dispositivo, como AWS IoT Greengrass Stream Manager ou AWS IoT SiteWise. Esses outros serviços para ingestão e visualização de dados podem ser vistos nesse link.

+

AWS IOT Core

+

O AWS IoT Core é o broker de mensagens que permite conectar dispositivos IoT com a nuvem AWS e seus diversos serviços. Através dele, podemos criar, configurar e gerenciar nossos dispositivos.

+

Atualmente suporta os seguintes protocolos de comunicação:

+
    +
  • MQTT
  • +
  • MQTT over WSS (Websockets Secure)
  • +
  • HTTPS
  • +
  • LoRaWAN
  • +
+

Resumidamente, o serviço se baseia em:

+
    +
  • Things: Dispositivos (“coisas”) que queremos conectar;
  • +
  • Jobs: Ações remotas que você pode agendar para realizar operações nos seus dispositivos, como atualizações de firmware;
  • +
  • Rules: Regras através das quais podemos direcionar as mensagens recebidas pelo broker para outros serviços da AWS, por exemplo, para armazenar dados no DynamoDB.
  • +
  • Segurança: onde é possível gerenciar os certificados de autorização, políticas (policies) e papeis (roles) de autenticação.
  • +
+

Parte 1 - Criando a Franzininho na AWS

+

Para seguir o tutorial, você deve ter acesso ao console da AWS. Para começar, vamos criar uma nova “coisa” (thing) para representar nossa Franzininho na nuvem. Certifique-se que você está na região mais próxima antes de começar, selecionando-a no menu do canto superior direito. Para o Brasil, a região é sa-east-1.

+
    +
  1. +

    Na AWS, procure pelo serviço IoT Core (Service > Internet of Things > IoT core) e crie uma nova “coisa” em Manage > All devices > Things > Create new thing.

    +
  2. +
  3. +

    Vamos criar apenas um dispositivo (Create a single thing), mas saiba que também é possível criar vários de uma vez (Create many things). Você precisará especificar as propriedades desse dispositivo:

    +
  4. +
+
    +
  • Thing name: o nome do seu dispositivo para identificá-lo de forma única. Escolha sabiamente, pois essa propriedade não pode ser alterada depois que o dispositivo é criado.
  • +
  • Configurações adicionais: podem ser utilizadas para detalhar, organizar, gerenciar e pesquisar os dispositivos, como tipo, atributos ou grupos.
  • +
  • Device shadow permite que o estado do seu dispositivo fique disponível para outros serviços mesmo que ele não esteja conectado.
  • +
+

Por enquanto, basta preencher o nome e prosseguir. Chamarei o meu carinhosamente de Franz.

+

Criar thing

+
    +
  1. +

    Para conseguir se autenticar ao serivço da AWS, cada dispositivo deve ter um certificado. Utilizaremos o gerado automaticamente (Auto-generate a new certificate), mas você também tem a opção de utilizar certificados próprios.

    +
  2. +
  3. +

    Para gerenciar o nível de acesso desse certificado aos recursos, é preciso criar uma política de autorização (policy), que é uma lista de ações permitidas ou proibidas para aquele certificado. Você pode criar uma política direto dessa aba, em Create policy, ou pela barra de navegação do IoT Core em Security > Policies.

    +
  4. +
+

Uma policy deve ter um nome e uma ou mais declarações (statements). Cada declaração é composta por um efeito de uma ação à um recurso.

+

O efeito pode ser de permissão (allow) ou proibição (deny).

+

As possíveis ações desse serviço são várias, mas utilizaremos as seguintes principais:

+
    +
  • iot:Connect: permite a conexão do dispositivo ao serviço;
  • +
  • iot:Publish: permite que o dispositivo publique mensagens no broker;
  • +
  • iot:Receive: permite que o dispositivo receba mensagem do broker;
  • +
  • iot:Subscribe: permite que o dispositivo se inscreva nos tópicos do broker.
  • +
+

E o recurso é o nome do serviço da AWS que a ação vai se utilizar, neste caso arn:aws:iot:region:account-id.

+

Você pode adicionar policies já existentes utilizando a aba Policy Examples ou criá-las manualmente. Para este exemplo, utilizei as seguintes políticas:

+
{
+  "Version": "2012-10-17",
+  "Statement": [
+    {
+      "Effect": "Allow",
+      "Action": "iot:Connect",
+      "Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"
+    },
+    {
+      "Effect": "Allow",
+      "Action": "iot:Publish",
+      "Resource": "arn:aws:iot:sa-east-1:<account-id>:client/${iot:Connection.Thing.ThingName}"
+    },
+    {
+      "Effect": "Allow",
+      "Action": "iot:Subscribe",
+      "Resource": "arn:aws:iot:sa-east-1:<account-id>:topicfilter/${iot:Connection.Thing.ThingName}/*"
+    },
+    {
+      "Effect": "Allow",
+      "Action": "iot:Publish",
+      "Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"
+    },
+    {
+      "Effect": "Allow",
+      "Action": "iot:Receive",
+      "Resource": "arn:aws:iot:sa-east-1:<account-id>:topic/${iot:Connection.Thing.ThingName}/*"
+    }
+  ]
+}
+
+

Altere o <account-id> para o número da sua conta, disponível no menu do canto superior direito.

+

Account ID

+
    +
  1. Por fim, baixe os arquivos de certificados e chaves que a AWS criou automaticamente para autenticar esse dispositivo. Este é o único momento que você conseguirá baixar as chaves para esse certificado, então guarde-as com carinho para utilizá-los no próximo passo.
  2. +
+

Parte 2 - Conectando a Franzininho com ESP-IDF

+

Agora que temos nosso dispositivo configurado, precisamos escrever o firmware para conectá-lo. A própria Espressif disponibiliza um SDK para comunicação com AWS IoT baseada no FreeRTOS. Para utilizar, basta clonar o repositório, preferencialmente direto na pasta de componentes do seu diretório de instalação.

+
git clone https://github.com/espressif/esp-aws-iot <esp-dir-path>/esp-idf/components
+
+

Dentro desse componente, já são disponibilizados alguns exemplos para utilizar com a AWS. Vamos começar utilizando o exemplo básico de MQTT em examples/mqtt/tls_mutual_auth.

+

Para configurar, utilizaremos o menuconfig:

+
    +
  1. Nas configurações do exemplo (Example Configuration), insira o nome do dispositivo exatamente como foi criado na AWS (Franz, no meu caso) e o endpoint do broker MQTT, que está disponível no menu AWS IoT > Settings > Device endpoint na sua conta do AWS. As demais configurações podem ser deixadas como padrão.
  2. +
+

Device Endpoint +Menuconfig

+
    +
  1. +

    Nas configurações de rede (Example Connection Configuration), insira as configurações da sua rede Wi-Fi (SSID e senha)

    +
  2. +
  3. +

    O método padrão de autenticação com a AWS é utilizando credenciais PKI embarcadas no diretório certs/. Lembra dos certificados que foram gerados automaticamente ao criar um dispositivo? É aqui que você vai colocá-los para embarcar no dispositivo. Copie o certificado, a chave privada e um dos certificados de root que você tinha armazenado anteriormente.

    +
  4. +
+
cp certificate.pem.crt main/certs/client.crt
+cp private.pem.key main/certs/client.key
+cp AmazonRootCAx.pem main/certs/root_cert_auth.pem
+
+

Com tudo configurado, é só buildar e passar pra placa (siga o tutorial em Primeiros passos). Este exemplo se conecta ao broker MQTT, se sobrescreve no tópico CLIENT_IDENTIFIER "/example/topic” (Franz/example/topic, por exemplo) e publica mensagens de Hello World.

+

Sua conexão foi estabelecida com sucesso caso receba a mensagem a seguir:

+
I (7329) coreMQTT: Connection accepted.
+I (7339) coreMQTT: Received MQTT CONNACK successfully from broker.
+I (7349) coreMQTT: MQTT connection established with the broker.
+I (7349) coreMQTT: MQTT connection successfully established with broker.
+
+

Parte 3 - Monitorando a Franzininho

+

Agora que a Franzininho está conectado, podemos monitorar sua atividade pelo console da AWS.

+
    +
  • Você pode ver as mensagens mais recentes em Manage > Things > Nome do seu dispositivo > Activity.
  • +
+

Menu Activity

+
    +
  • E você também pode interagir através do MQTT Test Client, por exemplo, publicando no tópico CLIENT_IDENTIFIER "/example/topic” que estamos inscritos.
  • +
+

MQTT Test Client

+

A mensagem recebida pode ser vista na Franzininho:

+
I (17668) coreMQTT: Packet received. ReceivedBytes=66.
+I (17668) coreMQTT: De-serialized incoming PUBLISH packet: DeserializerResult=MQTTSuccess.
+I (17668) coreMQTT: State record updated. New state=MQTTPublishDone.
+I (17678) coreMQTT: Incoming QOS : 0.
+I (17678) coreMQTT: Incoming Publish Topic Name: Franz/example/topic matches subscribed topic.
+Incoming Publish message Packet Id is 0.
+Incoming Publish Message : {
+  "message": "Hello from AWS IoT console"
+}.
+
+

E é isso, agora você pode brincar de Internet das Coisas com sua Franzininho WiFi utilizando a AWS!

+
AutoraAna Carolina Cabral
Data:07/01/2023
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica/index.html b/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica/index.html index 43379c801..cf93d5a74 100755 --- a/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica/index.html +++ b/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogica/index.html @@ -1,17 +1,88 @@ - + - -Entrada Analógica | Franzininho - - - + +Entrada Analógica | Franzininho + + + -
-

Entrada Analógica

Nesse exemplo vamos entender como usar o Conversor Analógico-Digital (Analog to Digital Converter(ADC)) na Franzininho WiFi. O objetivo deste exemplo é apresentar projeto simples para configurar o ADC, ler o valor de uma entrada analógica controlada por um potenciômetro e imprimir o valor da conversão através da comunicação serial. Ao final, estaremos preparados para fazer leitura analógica simples como também para utilização de sensores mais complexos.

Recursos

  • Placa Franzininho WiFi
  • Potenciômetro
  • Protoboard
  • Jumpers
  • Computador com ESP-IDF instalado e configurado.

Desenvolvimento

Um potenciômetro é um dispositivo analógico rotativo operado mecanicamente por meio de Um potenciômetro é um dispositivo analógico rotativo operado mecanicamente por meio de 3 terminais, ele fornece uma quantidade variável de resistência quando seu eixo é girado. Quando uma tensão é aplicada nos terminais do potenciômetro, que está conectado a uma entrada analógica, conseguimos medir uma resistência produzida pelo potenciômetro como um valor analógico.

potenciometro

O Conversor Analogico-Digital é um dispositivo que converte um sinal analógico num sinal digital. Logo, este exemplo vem com o intuito de monitorar o estado do potenciômetro a partir de uma comunicação serial, assim podemos ter base para trabalharmos futuramente com sensores analógicos.

Conecte os três fios do potenciômetro à sua placa. O primeiro fio vai de um dos pinos externos do potenciômetro para o GND. Já o segundo vai do outro pino externo do potenciômetro para 3,3 Volts. E por último, o terceiro vai do pino do meio do potenciômetro ao pino analógico GPIO1.

Quando se gira o potenciômetro, altera-se a resistência, impactando diretamente no pino central do potenciômetro, portanto, muda-se a tensão. Quando o eixo é girado no sentido direito a tensão se aproxima de 3,3V, ao contrário se aproxima de 0. Essa tensão que você está lendo na entrada analógica.

A Franzininho WIFI possui 20 entradas de ADC, sendo que o ADC1 possui 10 canais configurados do GPIO1 ao GPIO10, já o ADC2 possui 10 canais configurados do GPIO11 ao GPIO20. O conversor analógico-digital da ESP32-S2 que iremos utilizar possui 12bits de resolução, portanto, ele lê a tensão e a converte em um número entre 0 a 4095. A função adc1_get_raw() irá fazer a captura da quantidade de tensão aplicada ao pino do canal configurado.

Esquemático

esquemático

Em uma protoboard, conecte os três fios do potenciômetro na Franzininho WIFI. O primeiro vai de um dos pinos externos do potenciômetro para o GND. O segundo vai do outro pino externo do potenciômetro para 3,3 volts. O terceiro vai do pino do meio do potenciômetro ao pino analógico GPIO1.

Código

/*
Autor : Kayann Soares
Utilização simples da Leitura de Dados Analogicos.
*/

// Bibliotecas Necessarias
#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include <driver/adc.h>

// Main
void app_main(){

// Configurando a resolução do ADC para 13bits
adc1_config_width(ADC_WIDTH_BIT_13);
// Configurando o Channel do ADC para o Channel 0
adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_DB_11);


while(1){

// Função que de leitura do valor analogico, passando o ADC1 que é o do GPIO1
int sensorValue = adc1_get_raw(ADC1_CHANNEL_0);

// Imprimindo valores lidos
printf("%d\n", sensorValue);

// Rotina de Delay de 1 segundo
vTaskDelay(1000 / portTICK_PERIOD_MS);
// Descarrega os buffers de saída de dados
fflush(stdout);

}
}

Você encontra o projeto completo em: Entrada Analógica

Compilação

Após a codificação vamos compilar o código, mas antes selecione o set-target para ESP 32-S2:

idf.py set-target esp32s2

Após a compilação vamos enviar o código fonte para nossa placa, no editor pressione o ícone de raio para dar o FLASH e aguarde alguns segundos para assim dar início ao programa

compilar

Para vermos a saída de dados do nosso projeto clique no ícone no formato de monitor:

upload

Resultados

Valores mostrados no terminal quando o potenciômetro é rotacionado.

resultado

Conclusão

Concluímos o estudo do periférico base para iniciar no desenvolvimento com microcontroladores da Espressif usando o Framework IDF, a partir desse artigo podemos replicar para as demais famílias do ESP32, estes conceitos podem ser levados também para trabalharmos com outros microcontroladores que utilizem C e uma programação mais abstrata. Este artigo visa no estudo do periférico ADC, ao final deste projeto é possível aprender a utilizar o ADC da Franzininho WiFi para leitura de dados analógicos e lhe dará o desafio de aplicar esse aprendizado na leitura de sensores analógicos para você aplicar em seus projetos utilizando o ESP-IDF. Bons estudos.

AutorKayann Soares
Data:01/06/2021
- - +

Entrada Analógica

Nesse exemplo vamos entender como usar o Conversor Analógico-Digital (Analog to Digital Converter(ADC)) na Franzininho WiFi. O objetivo deste exemplo é apresentar projeto simples para configurar o ADC, ler o valor de uma entrada analógica controlada por um potenciômetro e imprimir o valor da conversão através da comunicação serial. Ao final, estaremos preparados para fazer leitura analógica simples como também para utilização de sensores mais complexos.

+

Recursos

+
    +
  • Placa Franzininho WiFi
  • +
  • Potenciômetro
  • +
  • Protoboard
  • +
  • Jumpers
  • +
  • Computador com ESP-IDF instalado e configurado.
  • +
+

Desenvolvimento

+

Um potenciômetro é um dispositivo analógico rotativo operado mecanicamente por meio de Um potenciômetro é um dispositivo analógico rotativo operado mecanicamente por meio de 3 terminais, ele fornece uma quantidade variável de resistência quando seu eixo é girado. Quando uma tensão é aplicada nos terminais do potenciômetro, que está conectado a uma entrada analógica, conseguimos medir uma resistência produzida pelo potenciômetro como um valor analógico.

+

potenciometro

+

O Conversor Analogico-Digital é um dispositivo que converte um sinal analógico num sinal digital. Logo, este exemplo vem com o intuito de monitorar o estado do potenciômetro a partir de uma comunicação serial, assim podemos ter base para trabalharmos futuramente com sensores analógicos.

+

Conecte os três fios do potenciômetro à sua placa. O primeiro fio vai de um dos pinos externos do potenciômetro para o GND. Já o segundo vai do outro pino externo do potenciômetro para 3,3 Volts. E por último, o terceiro vai do pino do meio do potenciômetro ao pino analógico GPIO1.

+

Quando se gira o potenciômetro, altera-se a resistência, impactando diretamente no pino central do potenciômetro, portanto, muda-se a tensão. Quando o eixo é girado no sentido direito a tensão se aproxima de 3,3V, ao contrário se aproxima de 0. Essa tensão que você está lendo na entrada analógica.

+

A Franzininho WIFI possui 20 entradas de ADC, sendo que o ADC1 possui 10 canais configurados do GPIO1 ao GPIO10, já o ADC2 possui 10 canais configurados do GPIO11 ao GPIO20. O conversor analógico-digital da ESP32-S2 que iremos utilizar possui 12bits de resolução, portanto, ele lê a tensão e a converte em um número entre 0 a 4095. A função adc1_get_raw() irá fazer a captura da quantidade de tensão aplicada ao pino do canal configurado.

+

Esquemático

+

esquemático

+

Em uma protoboard, conecte os três fios do potenciômetro na Franzininho WIFI. O primeiro vai de um dos pinos externos do potenciômetro para o GND. O segundo vai do outro pino externo do potenciômetro para 3,3 volts. O terceiro vai do pino do meio do potenciômetro ao pino analógico GPIO1.

+

Código

+
/*
+    Autor : Kayann Soares
+    Utilização simples da Leitura de Dados Analogicos.
+*/
+
+// Bibliotecas Necessarias
+#include <stdio.h>
+#include "sdkconfig.h"
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "esp_system.h"
+#include "esp_spi_flash.h"
+#include <driver/adc.h>
+
+// Main
+void app_main(){
+
+  // Configurando a resolução do ADC para 13bits        
+  adc1_config_width(ADC_WIDTH_BIT_13);
+  // Configurando o Channel do ADC para o Channel 0
+  adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_DB_11);
+
+
+  while(1){
+
+    // Função que de leitura do valor analogico, passando o ADC1 que é o do GPIO1
+    int sensorValue = adc1_get_raw(ADC1_CHANNEL_0);
+
+    // Imprimindo valores lidos
+    printf("%d\n", sensorValue);
+
+    // Rotina de Delay de 1 segundo
+    vTaskDelay(1000 / portTICK_PERIOD_MS);
+    // Descarrega os buffers de saída de dados
+    fflush(stdout);
+
+  }
+}
+
+
+

Você encontra o projeto completo em: Entrada Analógica

+

Compilação

+

Após a codificação vamos compilar o código, mas antes selecione o set-target para ESP 32-S2:

+
idf.py set-target esp32s2
+
+

Após a compilação vamos enviar o código fonte para nossa placa, no editor pressione o ícone de raio para dar o FLASH e aguarde alguns segundos para assim dar início ao programa

+

compilar

+

Para vermos a saída de dados do nosso projeto clique no ícone no formato de monitor:

+

upload

+

Resultados

+

Valores mostrados no terminal quando o potenciômetro é rotacionado.

+

resultado

+

Conclusão

+

Concluímos o estudo do periférico base para iniciar no desenvolvimento com microcontroladores da Espressif usando o Framework IDF, a partir desse artigo podemos replicar para as demais famílias do ESP32, estes conceitos podem ser levados também para trabalharmos com outros microcontroladores que utilizem C e uma programação mais abstrata. Este artigo visa no estudo do periférico ADC, ao final deste projeto é possível aprender a utilizar o ADC da Franzininho WiFi para leitura de dados analógicos e lhe dará o desafio de aplicar esse aprendizado na leitura de sensores analógicos para você aplicar em seus projetos utilizando o ESP-IDF. Bons estudos.

+
AutorKayann Soares
Data:01/06/2021
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital/index.html b/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital/index.html index b8afc30c0..a20aa6293 100755 --- a/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital/index.html +++ b/en/docs/franzininho-wifi/exemplos-espidf/entrada-digital/index.html @@ -1,17 +1,140 @@ - + - -Entrada digital | Franzininho - - - + +Entrada digital | Franzininho + + + -
-

Entrada digital

Seguindo nas aplicações com o ESP-IDF naa placa Franzininho WiFi vamos dar continuidade aos trabalhos com o periférico de Entrada/Saída de Propósito Geral ou do inglês General Purpose Input/Output (GPIO) . O objetivo deste texto é apresentar um exemplo de projeto para configurar os pinos como entrada digital. Ao final, estaremos preparados para manipular tanto as saídas digitais, vista anteriormente, quanto às entradas de digitais.

Recursos Necessários

Os materiais necessários para realizar esse exemplo são:

  • Placa Franzininho WiFi;
  • Protoboard;
  • Botão ou chave táctil;
  • LED;
  • Resistor de 220 ou 330 Ohm;
  • Cabos Jumpers;
  • Computador com ESP-IDF instalado e configurado.

Recursos Necessários

Os materiais necessários para realizar esse exemplo são:

  • Placa Franzininho WiFi;
  • Protoboard;
  • Botão ou chave táctil;
  • LED;
  • Resistor de 220 ou 330 Ohm;
  • Cabos Jumpers;
  • Computador com ESP-IDF instalado e configurado.

Desenvolvimento

Nesse artigo vamos apresentar um exemplo de projeto utilizando as duas funções do periférico GPIO: entrada digital e saída digital. Na entrada digital vamos realizar a leitura do botão táctil e armazenar seu estado em uma variável que irá interagir com o monitor e um LED externo, atuando como uma saída digital que irá nos indicar o estado atual do botão.

O programa desenvolvido possibilita utilizar duas topologias de circuito : pull up ou pull down, para mais informações sobre essas topologias acesse os links referente a cada circuito. Nesse exemplo de projeto iremos utilizar a topologia com o pull up interno do processador, desta forma deve-se observar os comentários ao longo do código a fim de habilitar ou desabilitar as topologias de circuito.

Na placa Franzininho WiFI temos 38 pinos programáveis com o periférico GPIO, encorajamos aos leitores que alterem o código da forma como achar necessário e praticar a codificação do programa a fim de consolidar o conhecimento adquirido.

Esquemático

Para darmos início ao projeto é importante realizar a montagem do circuito em protoboard observando com cuidado as conexões, iremos conectar um dos terminais do resistor no GPIO 2 e outro no LED externo por fim ligamos a GPIO 15 no botão táctil. Abaixo segue o esquemático proposto:

circuito

Código

O programa desenvolvido possui uma estrutura bem simples e não é necessário acrescentar nenhuma biblioteca, apenas a manutenção dos arquivos de cabeçalho já presentes no projeto. Ao criar um novo projeto no IDF automaticamente já temos arquivos configurados e prontos para programação do dispositivo, desta forma digite e comente as linhas do seguinte código no arquivo main.c :

/*
Autor : Halysson Junior
Data: 31/03/21
Descrição:
Neste exemplo utilizou-se um botão táctil (entrada digital) para acionar um LED (saída digital)
e mostra seu estado no terminal.

*/

// Inclusão arquivos de cabeçalho

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "sdkconfig.h"

// Definições de Pinos
#define BTN 15
#define LED 2

// Definição de habilitação (PULLUP / PULLDOWN)
#define PULLUP
// #define PULLDOWN (Para habilitar pulldown descomente aqui e comente -> " #define PULLUP ")

// Definições de estado lógico (caso altere para pulldown, deve-se inverter os estado lógicos)
#define ON 1
#define OFF 0

void app_main(void){ // Main

gpio_pad_select_gpio(LED);
gpio_set_direction(LED,GPIO_MODE_OUTPUT);// onfigura LED como saída digital

gpio_pad_select_gpio(BTN);
gpio_set_direction(BTN,GPIO_MODE_INPUT); // Configura LED como saída digital

#ifdef PULLDOWN // Habilita pulldown

gpio_pulldown_en(BTN);
gpio_pullup_dis(BTN);

#endif

#ifdef PULLUP // Habilita pullup
gpio_pullup_en(BTN);
gpio_pulldown_dis(BTN);

#endif

// Váriavel Local
bool last_state_btn = 0; // Armazena o último estado do botão

while (1) { // Loop

// Váriavel Local
bool state_btn = gpio_get_level(BTN); // Leitura do botão

if(!state_btn && !last_state_btn) {
gpio_set_level(LED,ON); // Se botão for zero então ... liga LED
printf("LED LIGADO"); // Mostra informação no monitor "LED LIGADO"
last_state_btn = true; // Botão pressionado
}

else if(state_btn && last_state_btn){
gpio_set_level(LED,OFF); // Senão... desliga LED
printf ("LED DESLIGADO"); // Mostra informação no monitor "LED DESLIGADO"
last_state_btn = false; // Botão solto
}
vTaskDelay(1/ portTICK_PERIOD_MS); // Rotina de Delay de 1 segundo
fflush(stdout); // Descarrega os buffers de saída de dados

}// endLoop

}// endMain

Você encontra o projeto completo na documentação da Franzininho: Button

Caso ainda não tenha instalado e configurado o IDF no seu computador ou tenha dúvidas sobre as ferramentas, acesse o tutorial de instalação (Clique Aqui).

Compilação

Após a codificação vamos compilar o código, mas antes selecione o set-target para ESP 32-S2:

idf.py set-target esp32s2

Ao final da compilação o resultado final deve ser semelhante à imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu código.

resultado da compilação

Após a etapa de compilação vamos enviar o código fonte para nossa placa, no editor pressione o ícone abaixo e aguarde alguns segundos para assim dar início ao programa “Button”(seta preta) e para vermos a saída de dados do nosso projeto clique no ícone no formato de monitor (seta vermelha):

atalhos de compilação

Resultados

Finalizando o exemplo de projeto o leitor deve ter observado que no programa Button, foram utilizadas as estruturas de condição IF / ELSE IF para interagir com o estado atual do botão, adicionou-se às uma nova label nativa para indicar as entradas digitais (GPIO_MODE_INPUT) e as funções para indicar topologia do circuito ( gpio_pullup_en()/gpio pulldown_dis()) utilizado e verificar a leitura digital no pino definido no cabeçalho do código.

Abaixo segue o resultado final dos dados de saída no monitor:

saída monitor serial

Abaixo segue o nosso circuito do nosso projeto:

teste na bancada

Conclusão

Nesse projeto concluímos o estudo do periférico base para iniciar no mundo dos microcontroladores, pois a partir desse conhecimento adquirido podemos reciclar para as outras famílias do ESP32, como também em outros chips baseados na linguagem C para estruturar seu programa. Como mencionado na seção de Desenvolvimento, este segundo artigo deseja consolidar o conhecimento nesse periférico (GPIO), por tanto deixo o desafio de criar um contador de pulsos de 0 até 10 e reiniciado sempre quando forma maior que 10, ao final de cada contagem deve-se acionar um LED e mostrar quantas contagens já foram feitas. Desejo sorte àqueles que irão realizar o desafio e bons estudos, que a força esteja com todos nós.

AutorHalysson Junior
Data:01/06/2021
- - +

Entrada digital

Seguindo nas aplicações com o ESP-IDF naa placa Franzininho WiFi vamos dar continuidade aos trabalhos com o periférico de Entrada/Saída de Propósito Geral ou do inglês General Purpose Input/Output (GPIO) . O objetivo deste texto é apresentar um exemplo de projeto para configurar os pinos como entrada digital. Ao final, estaremos preparados para manipular tanto as saídas digitais, vista anteriormente, quanto às entradas de digitais.

+

Recursos Necessários

+

Os materiais necessários para realizar esse exemplo são:

+
    +
  • Placa Franzininho WiFi;
  • +
  • Protoboard;
  • +
  • Botão ou chave táctil;
  • +
  • LED;
  • +
  • Resistor de 220 ou 330 Ohm;
  • +
  • Cabos Jumpers;
  • +
  • Computador com ESP-IDF instalado e configurado.
  • +
+

Recursos Necessários

+

Os materiais necessários para realizar esse exemplo são:

+
    +
  • Placa Franzininho WiFi;
  • +
  • Protoboard;
  • +
  • Botão ou chave táctil;
  • +
  • LED;
  • +
  • Resistor de 220 ou 330 Ohm;
  • +
  • Cabos Jumpers;
  • +
  • Computador com ESP-IDF instalado e configurado.
  • +
+

Desenvolvimento

+

Nesse artigo vamos apresentar um exemplo de projeto utilizando as duas funções do periférico GPIO: entrada digital e saída digital. Na entrada digital vamos realizar a leitura do botão táctil e armazenar seu estado em uma variável que irá interagir com o monitor e um LED externo, atuando como uma saída digital que irá nos indicar o estado atual do botão.

+

O programa desenvolvido possibilita utilizar duas topologias de circuito : pull up ou pull down, para mais informações sobre essas topologias acesse os links referente a cada circuito. Nesse exemplo de projeto iremos utilizar a topologia com o pull up interno do processador, desta forma deve-se observar os comentários ao longo do código a fim de habilitar ou desabilitar as topologias de circuito.

+

Na placa Franzininho WiFI temos 38 pinos programáveis com o periférico GPIO, encorajamos aos leitores que alterem o código da forma como achar necessário e praticar a codificação do programa a fim de consolidar o conhecimento adquirido.

+

Esquemático

+

Para darmos início ao projeto é importante realizar a montagem do circuito em protoboard observando com cuidado as conexões, iremos conectar um dos terminais do resistor no GPIO 2 e outro no LED externo por fim ligamos a GPIO 15 no botão táctil. Abaixo segue o esquemático proposto:

+

circuito

+

Código

+

O programa desenvolvido possui uma estrutura bem simples e não é necessário acrescentar nenhuma biblioteca, apenas a manutenção dos arquivos de cabeçalho já presentes no projeto. Ao criar um novo projeto no IDF automaticamente já temos arquivos configurados e prontos para programação do dispositivo, desta forma digite e comente as linhas do seguinte código no arquivo main.c :

+
/*
+    Autor : Halysson Junior
+    Data: 31/03/21
+    Descrição:
+    Neste exemplo utilizou-se um botão táctil (entrada digital) para acionar um LED (saída digital)
+    e mostra seu estado no terminal.
+
+*/
+
+// Inclusão arquivos de cabeçalho
+
+#include <stdio.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "driver/gpio.h"
+#include "sdkconfig.h"
+
+// Definições de Pinos
+#define BTN 15
+#define LED 2
+
+// Definição de habilitação (PULLUP / PULLDOWN)
+#define PULLUP
+// #define PULLDOWN (Para habilitar pulldown descomente aqui e comente -> " #define PULLUP ")
+
+// Definições de estado lógico (caso altere para pulldown, deve-se inverter os estado lógicos)
+#define ON 1
+#define OFF 0
+
+void app_main(void){  // Main
+
+ gpio_pad_select_gpio(LED);                
+ gpio_set_direction(LED,GPIO_MODE_OUTPUT);// onfigura LED como saída digital
+
+ gpio_pad_select_gpio(BTN);  
+ gpio_set_direction(BTN,GPIO_MODE_INPUT); // Configura LED como saída digital
+
+  #ifdef PULLDOWN // Habilita pulldown
+
+   gpio_pulldown_en(BTN);
+   gpio_pullup_dis(BTN);  
+
+  #endif
+
+  #ifdef PULLUP  // Habilita pullup
+  gpio_pullup_en(BTN);
+  gpio_pulldown_dis(BTN);
+
+  #endif
+
+// Váriavel Local
+bool last_state_btn = 0; // Armazena o último estado do botão       
+
+    while (1) { // Loop
+
+    // Váriavel Local  
+     bool state_btn = gpio_get_level(BTN); // Leitura do botão
+
+      if(!state_btn && !last_state_btn) {
+          gpio_set_level(LED,ON);           // Se botão for zero então ... liga LED
+          printf("LED LIGADO");             // Mostra informação no monitor "LED LIGADO"
+          last_state_btn = true;            // Botão pressionado
+      }
+
+      else if(state_btn && last_state_btn){
+        gpio_set_level(LED,OFF);            // Senão... desliga LED
+         printf ("LED DESLIGADO");          // Mostra informação no monitor "LED DESLIGADO"
+        last_state_btn = false;             // Botão solto
+      }
+      vTaskDelay(1/ portTICK_PERIOD_MS);    // Rotina de Delay de 1 segundo
+      fflush(stdout);                       // Descarrega os buffers de saída de dados   
+
+    }// endLoop
+
+}// endMain
+
+

Você encontra o projeto completo na documentação da Franzininho: Button

+

Caso ainda não tenha instalado e configurado o IDF no seu computador ou tenha dúvidas sobre as ferramentas, acesse o tutorial de instalação (Clique Aqui).

+

Compilação

+

Após a codificação vamos compilar o código, mas antes selecione o set-target para ESP 32-S2:

+
idf.py set-target esp32s2
+
+

Ao final da compilação o resultado final deve ser semelhante à imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu código.

+

resultado da compilação

+

Após a etapa de compilação vamos enviar o código fonte para nossa placa, no editor pressione o ícone abaixo e aguarde alguns segundos para assim dar início ao programa “Button”(seta preta) e para vermos a saída de dados do nosso projeto clique no ícone no formato de monitor (seta vermelha):

+

atalhos de compilação

+

Resultados

+

Finalizando o exemplo de projeto o leitor deve ter observado que no programa Button, foram utilizadas as estruturas de condição IF / ELSE IF para interagir com o estado atual do botão, adicionou-se às uma nova label nativa para indicar as entradas digitais (GPIO_MODE_INPUT) e as funções para indicar topologia do circuito ( gpio_pullup_en()/gpio pulldown_dis()) utilizado e verificar a leitura digital no pino definido no cabeçalho do código.

+

Abaixo segue o resultado final dos dados de saída no monitor:

+

saída monitor serial

+

Abaixo segue o nosso circuito do nosso projeto:

+

teste na bancada

+

Conclusão

+

Nesse projeto concluímos o estudo do periférico base para iniciar no mundo dos microcontroladores, pois a partir desse conhecimento adquirido podemos reciclar para as outras famílias do ESP32, como também em outros chips baseados na linguagem C para estruturar seu programa. Como mencionado na seção de Desenvolvimento, este segundo artigo deseja consolidar o conhecimento nesse periférico (GPIO), por tanto deixo o desafio de criar um contador de pulsos de 0 até 10 e reiniciado sempre quando forma maior que 10, ao final de cada contagem deve-se acionar um LED e mostrar quantas contagens já foram feitas. Desejo sorte àqueles que irão realizar o desafio e bons estudos, que a força esteja com todos nós.

+
AutorHalysson Junior
Data:01/06/2021
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf/index.html b/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf/index.html index 9659fba0c..4ff439b19 100755 --- a/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf/index.html +++ b/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idf/index.html @@ -1,17 +1,106 @@ - + - -Hello World! ESP-IDF | Franzininho - - - + +Hello World! ESP-IDF | Franzininho + + + -
-

Hello World! ESP-IDF

O artigo proposto dará início a uma série de projetos utilizando o framework oficial da Espressif, o IDF. O objetivo deste artigo é apresentar um exemplo de projeto que sirva como base para aqueles que estão dando seus primeiros passos na família de microcontroladores ESP32.

Como é de praxe na programação sempre que iniciamos uma nova linguagem ou quando aprendemos sobre um novo processador o primeiro projeto a ser criado é o “Olá Mundo“, caso contrário teremos um eterno azar, então o que acha de começarmos a estudar e apresentar nosso projeto ao Mundo?

Ao final desse exemplo você saberá como é a estrutura básica de um programa no ESP-IDF e estará pronto para os próximos passos.

Recursos Necessários

Para esse exemplo você precisará dos seguintes recursos:

  • Placa Franzininho WiFi;
  • Protoboard;
  • LED;
  • Resistor 220R ou 150R;
  • Computador com ESP-IDF instalado e configurado

Desenvolvimento

Nesse projeto foi utilizado a Franzininho WiFi, uma placa de desenvolvimento baseada no módulo ESP 32-S2 (Wroom ou Wrover), o qual faz parte de uma iniciativa open hardware para ensinar sobre programação e eletrônica aliando habilidades na soldagem de componentes eletrônicos.

Como mencionado, vamos fazer o Olá Mundo (Hello, World!), um programa base que tem como objetivo apresentar os recursos primários do processador em estudo. Nesse primeiro projeto vamos explorar as GPIOs, configuradas como saída digital, conectada a um LED externo para ligar e desligar numa frequência de 1 Hertz (1 segundo) e enviar alguns dados de saída para serem mostrados no monitor do editor, para aqueles que estão migrando do Arduino já estão familiarizados com esse exemplo, o famoso “Blink”.

Esquemático

Antes de começarmos a escrever as primeiras linhas de código vamos realizar a montagem do circuito, vale ressaltar que na placa Franzininho WiFi há um LED RGB on board endereçável, contudo será utilizado um LED externo, conectado a GPIO 2 ,para o primeiro projeto, vamos nos familiarizarmos com os comandos básicos. Abaixo segue o esquemático proposto:

Hello World_circuito

Código

O nosso código possui uma estrutura bem simples e não é necessário acrescentar nenhuma biblioteca. Ao criar um novo projeto no IDF já temos arquivos configurados e prontos para programação do dispositivo, desta forma digite e comente as linhas do seguinte código no arquivo main.c :

/*
Descrição: Exemplo que mostra Hello World utilizando quatro modalidade de saída de dados por meio do
terminal e interagindo com um LED externo para indicação de estado.

Autor: Halysson Junior
Data : 28/03/21
*/


// Arquivos de cabeçalho
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "driver/gpio.h"


// Definição de pino

#define LED 2

// Variável Global
char status[2] = {'L','H'}; // Caracter para indicar estado do LED H- HIGH e L - LOW


void app_main(void) // Main
{

gpio_pad_select_gpio(LED);// Mapeamento do pino LED
gpio_set_direction(LED,GPIO_MODE_OUTPUT); // Definição

printf("Exemplo - Hello World \n");// Mostra informação no terminal


//Variáveis Local
bool i = 0 ; // Varia o estado lógico do LED

for (;;) {// Loop

i= i^1; // Operação lógica XOR para alternar o estado do LED
gpio_set_level(LED,i); // Envia os níveis lógicos 1 ou 0

printf("Hello World, i am Franzininho WiFi ----> LED status : %c \n", status[i]);

vTaskDelay(1000 / portTICK_PERIOD_MS); // Rotina de Delay de 1 segundo
fflush(stdout); // Descarrega os buffers de saída de dados

}// end Loop


}// end Main

Você encontra o projeto completo na documentação da Franzininho: Hello_World

Caso ainda não tenha instalado e configurado o IDF no seu computador ou tem dúvidas sobre as ferramentas, acesse o tutorial de instalação

Compilação

Após a codificação vamos compilar o código, mas antes selecione o set target para ESP 32-S2.

idf.py set-target esp32s2

Ao final da compilação o resultado final deve ser semelhante à imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu código.

resultado da compilação

Agora vamos enviar o código fonte para nossa placa, no editor vamos pressionar o ícone abaixo e aguarde alguns segundos para assim dar início ao programa “Olá Mundo”.

Gravando

Para vermos a saída de dados do nosso projeto clique no ícone apresentado abaixo.

Monitor

Resultados

Com a finalização do projeto o leitor observou que utilizamos uma estruturação da linguagem C (main(), printf, fflush()), laços de repetição (for()) e alguns tipos de variáveis primitivas (int e char) para formar nosso código . Aliados a isso utilizamos labels nativas do IDF para definir os pinos de entrada ou saída digital (GPIO_MODE_OUTPUT ).

Abaixo segue o resultado final dos dados de saída :

monitor

Abaixo segue o nosso circuito do nosso projeto

Monitor

Portanto, a partir deste projeto é possível aplicar a lógica estruturada no código em diversos outros tipos de sensores, por exemplo : sensor de vibração, sensor infravermelho, sensor de som e outros sensores digitais comumente comercializados.

Conclusão

Nesse projeto apresentamos os conceitos básicos para aqueles que desejam dar o pontapé inicial nos estudos sobre o IDF, contudo aconselhamos aos leitores a modificar o código no intuito de revisar a linguagem C e fixar algumas funções nativas, os quais serão normalmente utilizadas em outros projetos também não limitar-se apenas aos periféricos GPIOs do microcontrolador, pois o ESP32-S2 possui diversos recursos tanto em hardware quanto em software. Desta forma o artigo servirá de acervo aos leitores para relembrar conceitos específicos e aprimorar os que já possuem.

AutorHalysson Junior
Data:13/05/2021
- - +

Hello World! ESP-IDF

O artigo proposto dará início a uma série de projetos utilizando o framework oficial da Espressif, o IDF. O objetivo deste artigo é apresentar um exemplo de projeto que sirva como base para aqueles que estão dando seus primeiros passos na família de microcontroladores ESP32.

+

Como é de praxe na programação sempre que iniciamos uma nova linguagem ou quando aprendemos sobre um novo processador o primeiro projeto a ser criado é o “Olá Mundo“, caso contrário teremos um eterno azar, então o que acha de começarmos a estudar e apresentar nosso projeto ao Mundo?

+

Ao final desse exemplo você saberá como é a estrutura básica de um programa no ESP-IDF e estará pronto para os próximos passos.

+

Recursos Necessários

+

Para esse exemplo você precisará dos seguintes recursos:

+
    +
  • Placa Franzininho WiFi;
  • +
  • Protoboard;
  • +
  • LED;
  • +
  • Resistor 220R ou 150R;
  • +
  • Computador com ESP-IDF instalado e configurado
  • +
+

Desenvolvimento

+

Nesse projeto foi utilizado a Franzininho WiFi, uma placa de desenvolvimento baseada no módulo ESP 32-S2 (Wroom ou Wrover), o qual faz parte de uma iniciativa open hardware para ensinar sobre programação e eletrônica aliando habilidades na soldagem de componentes eletrônicos.

+

Como mencionado, vamos fazer o Olá Mundo (Hello, World!), um programa base que tem como objetivo apresentar os recursos primários do processador em estudo. Nesse primeiro projeto vamos explorar as GPIOs, configuradas como saída digital, conectada a um LED externo para ligar e desligar numa frequência de 1 Hertz (1 segundo) e enviar alguns dados de saída para serem mostrados no monitor do editor, para aqueles que estão migrando do Arduino já estão familiarizados com esse exemplo, o famoso “Blink”.

+

Esquemático

+

Antes de começarmos a escrever as primeiras linhas de código vamos realizar a montagem do circuito, vale ressaltar que na placa Franzininho WiFi há um LED RGB on board endereçável, contudo será utilizado um LED externo, conectado a GPIO 2 ,para o primeiro projeto, vamos nos familiarizarmos com os comandos básicos. Abaixo segue o esquemático proposto:

+

Hello World_circuito

+

Código

+

O nosso código possui uma estrutura bem simples e não é necessário acrescentar nenhuma biblioteca. Ao criar um novo projeto no IDF já temos arquivos configurados e prontos para programação do dispositivo, desta forma digite e comente as linhas do seguinte código no arquivo main.c :

+
/*
+ Descrição: Exemplo que mostra Hello World utilizando quatro modalidade de saída de dados por meio do
+ terminal e interagindo com um LED externo para indicação de estado.
+
+ Autor: Halysson Junior
+ Data : 28/03/21
+*/
+
+
+// Arquivos de cabeçalho
+#include <stdio.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "esp_system.h"
+#include "driver/gpio.h"
+
+
+// Definição de pino
+
+#define LED 2
+
+// Variável Global
+char status[2] = {'L','H'}; // Caracter para indicar estado do LED H- HIGH e L - LOW
+
+
+void app_main(void) // Main
+{
+
+    gpio_pad_select_gpio(LED);// Mapeamento do pino LED
+    gpio_set_direction(LED,GPIO_MODE_OUTPUT); // Definição
+
+    printf("Exemplo - Hello World \n");// Mostra informação no terminal
+
+
+    //Variáveis Local
+     bool i = 0 ; // Varia o estado lógico do LED
+
+      for (;;) {// Loop
+
+        i= i^1; // Operação lógica XOR para alternar o estado do LED
+        gpio_set_level(LED,i); // Envia os níveis lógicos 1 ou 0
+
+       printf("Hello World, i am Franzininho WiFi ----> LED status : %c \n", status[i]);
+
+        vTaskDelay(1000 / portTICK_PERIOD_MS); // Rotina de Delay de 1 segundo
+        fflush(stdout);  // Descarrega os buffers de saída de dados   
+
+    }// end Loop
+
+
+}// end Main
+
+

Você encontra o projeto completo na documentação da Franzininho: Hello_World

+

Caso ainda não tenha instalado e configurado o IDF no seu computador ou tem dúvidas sobre as ferramentas, acesse o tutorial de instalação

+

Compilação

+

Após a codificação vamos compilar o código, mas antes selecione o set target para ESP 32-S2.

+

idf.py set-target esp32s2

+

Ao final da compilação o resultado final deve ser semelhante à imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu código.

+

resultado da compilação

+

Agora vamos enviar o código fonte para nossa placa, no editor vamos pressionar o ícone abaixo e aguarde alguns segundos para assim dar início ao programa “Olá Mundo”.

+

Gravando

+

Para vermos a saída de dados do nosso projeto clique no ícone apresentado abaixo.

+

Monitor

+

Resultados

+

Com a finalização do projeto o leitor observou que utilizamos uma estruturação da linguagem C (main(), printf, fflush()), laços de repetição (for()) e alguns tipos de variáveis primitivas (int e char) para formar nosso código . Aliados a isso utilizamos labels nativas do IDF para definir os pinos de entrada ou saída digital (GPIO_MODE_OUTPUT ).

+

Abaixo segue o resultado final dos dados de saída :

+

monitor

+

Abaixo segue o nosso circuito do nosso projeto

+

Monitor

+

Portanto, a partir deste projeto é possível aplicar a lógica estruturada no código em diversos outros tipos de sensores, por exemplo : sensor de vibração, sensor infravermelho, sensor de som e outros sensores digitais comumente comercializados.

+

Conclusão

+

Nesse projeto apresentamos os conceitos básicos para aqueles que desejam dar o pontapé inicial nos estudos sobre o IDF, contudo aconselhamos aos leitores a modificar o código no intuito de revisar a linguagem C e fixar algumas funções nativas, os quais serão normalmente utilizadas em outros projetos também não limitar-se apenas aos periféricos GPIOs do microcontrolador, pois o ESP32-S2 possui diversos recursos tanto em hardware quanto em software. Desta forma o artigo servirá de acervo aos leitores para relembrar conceitos específicos e aprimorar os que já possuem.

+
AutorHalysson Junior
Data:13/05/2021
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-espidf/ledc/index.html b/en/docs/franzininho-wifi/exemplos-espidf/ledc/index.html index ddb85b451..b37eea2c4 100755 --- a/en/docs/franzininho-wifi/exemplos-espidf/ledc/index.html +++ b/en/docs/franzininho-wifi/exemplos-espidf/ledc/index.html @@ -1,17 +1,151 @@ - + - -PWM com LEDC | Franzininho - - - + +PWM com LEDC | Franzininho + + + -
-

PWM com LEDC

Seguindo os estudos do ESP-IDF, vamos agora estudar um novo periférico, o LED Control (LEDC), o qual tem a função de controlar a intensidade luminosa do LED e também servir como fonte geradora de sinal pulsado, Pulse Width Modulation (PWM), para diferentes propósitos como: controle de velocidade em motores de corrente contínua (CC), angulação em servomotores, mudança de cores em LED RGB e outras mais aplicações.

Com isso, ao final deste artigo estaremos familiarizados com os recursos oferecidos pelo periférico além de dominar as configurações básicas para implementar em projetos.

Recursos Necessários

Os materiais necessários para realizar esse exemplo são:

  • Placa Franzininho WiFi;
  • Protoboard;
  • LED;
  • Resistor de 220 Ohm;
  • Cabos Jumpers;
  • Computador com ESP-IDF instalado e configurado.

Desenvolvimento

Na placa Franzininho WiFi o periférico LEDC está disposto em dois grupos de oito canais, sendo um grupo operando no High Speed Mode (HSM) e outro em Low Speed Mode (LSM) operando independente uns dos outros . O modo High Speed é implementado em hardware oferecendo mudanças automáticas sem interferir no duty cycle do PWM, ou seja, caso haja alterações na temporização serão atualizadas no próximo estouro do timer. Em contraste isso o modo Low Speed deve ser explicitar o via software as configurações de temporização.

Para utilizarmos esse periféricos precisamos seguir algumas etapas fundamentais para nossa aplicação de estudo que são: Configuração do Temporizador , Configuração do Canal e Alteração do PWM.

  • Configuração do Temporizador : nessa primeira etapa vamos especificar a frequência e a resolução do sinal PWM preenchendo a estrutura de dados ledc_timer_config_t e apontando-a para a função led_timer_config() .

  • Configuração do Canal: nessa segunda etapa iremos direcionar o GPIO que será a saída do sinal PWM, o qual é selecionado dentro da estrutura de configuração do periférico.

  • Alteração do PWM: na última etapa vamos realizar o aumento e a redução do duty cycle na saída da geradora de sinal criando assim o fade no LED externo, o qual será habilitado via hardware pela função ledc_fade_func_install().

Com a finalização das três etapas de configuração o acionamento do periférico LED Control estará em funcionamento, contudo devemos agora seguir para montagem do circuito para concluir o projeto.

Configuração do Periférico LED Control

Esquemático

Nesta parte daremos início a montagem do circuito em protoboard, iremos conectar um dos terminais do resistor no GPIO 2 e outro no LED externo.

Abaixo segue o esquemático proposto :

Imagem do Circuito

Código

/*
Autor: Halysson Junior
Data : 10/04/21

Nesse exemplo foi configurado o periferico LEDC para controlar a intensidade do LED.

*/

// Inclusão de arqivos de cabeçalho
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/ledc.h"
#include "esp_err.h"

// Definição para configuração do periférico
#define LEDC_GPIO 2
#define LEDC_FADE_TIME 500
#define LEDC_RESOLUTION 1024
#define LEDC_FREQ 5000


void app_main(void) // Main
{

// Estrutura de dados para receber as váriaveis de configuração de frequência (1Hz, 100 Hz e outros), modo (HIGH ou LOW) e selecionar o TIMER (0,1,2)

ledc_timer_config_t timer = { // Configuração do timer

.speed_mode = LEDC_LOW_SPEED_MODE, // Modo de Velocidade -> LOW
.duty_resolution = LEDC_TIMER_10_BIT, // Resolução do do ciclo de trabalho (2^10 = 1024 valores)
.timer_num = LEDC_TIMER_0, // Utilizado o TIMER 0
.freq_hz = LEDC_FREQ, // Frequência de operação do sinal PWM
.clk_cfg = LEDC_AUTO_CLK // Seleção automatica da fonte geradora do clock (interna ou externa)

};


ledc_timer_config(&timer); // Envia o endereço da estrutura timer para a função de configuração do canal PWM

/*
NOTA:
A frequencia e a resolução do ciclo de trabalho são independentes. Para uma elevada frequência do PWM,
terá uma baixa resolução do ciclo de trabalho disponivel e vice-versa
*/

// Estrutura de dados para receber as váriaveis de configuração de frequencia (1Hz, 100 Hz e outros), modo (HIGH ou LOW), selecionar o TIMER (0,1,2)

ledc_channel_config_t channel_LEDC = {
.gpio_num = LEDC_GPIO, // Seleciona o pino para atuar o PWM
.speed_mode = LEDC_LOW_SPEED_MODE, // Modo de Velocidade -> LOW
.channel = LEDC_CHANNEL_0,
.timer_sel = LEDC_TIMER_0,
.duty = 0,
.hpoint = 0

};

ledc_channel_config(&channel_LEDC);


ledc_fade_func_install(0); // Inicializa o serviço do Fade

for(;;){ // Loop

// Define e inicia a função de fade no periférico LEDC
ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , 0 , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);
ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , LEDC_RESOLUTION , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);


}// endLoop

}//endMain

/*
*** Paramentrização da função " ledc_set_fade_time_and_start(); " ***

ledc_set_fade_time_and_start(ledc_mode_tspeed_mode, ledc_channel_tchannel, uint32_t target_duty, uint32_t max_fade_time_ms, ledc_fade_mode_tfade_mode)

ledc_mode_tspeed_mode -> modo do timer utilizado
ledc_channel_tchannel -> indice do canal LEDC (0-7)
uint32_t target_duty -> (2 ** resolução_ciclo_de_trabalho) - 1
uint32_t max_fade_time_ms -> tempo máximo (ms) para o fading
ledc_fade_mode_tfade_mode ->
*/

O programa desenvolvido possui uma estrutura bem simples e não é necessário acrescentar nenhuma biblioteca, apenas a manutenção dos arquivos de cabeçalho já presentes no projeto.

Ao criar um novo projeto no IDF automaticamente já temos arquivos configurados e prontos para programação do dispositivo, desta forma digite e comente as linhas do seguinte código no arquivo main.c :

Você encontra o projeto completo na documentação da Franzininho: PWM_LEDC

Caso ainda não tenha instalado e configurado o IDF no seu computador ou tenha dúvidas sobre as ferramentas, acesse o tutorial de instalação (Clique Aqui).

Compilação

Após a codificação vamos compilar o código, mas antes selecione o set-target para ESP32-S2. Caso não possua a placa Franzininho WiFi altere o target para o modelo de ESP32 utilizando em seu projeto.

idf.py set-target esp32s2

Ao final da compilação o resultado final deve ser semelhante à imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu código.

Imagem do Terminal Visual Code

Após a etapa de compilação vamos enviar o código fonte para nossa placa, no editor pressione o ícone abaixo e aguarde alguns segundos para assim dar início ao upload do programa “PWM” (seta preta) .

Barra inferior do Visual Code

Resultados

Após enviar seu código e com o circuito devidamente montado o LED externo conectado começará a aumentar e diminuir sua intensidade luminosa gradualmente criando o fade desejado. Na figura 5 temos a imagem do osciloscópio mostrando a forma de onda gerada e o duty cycle atuando no momento e na figura 6 o circuito em perfeito funcionamento.

Saída do sinal PWM

Imagem do circuito em funcionamento

Conclusão

Neste exemplo apresentamos tópicos intermediários sobre a manipulação do periférico LED Control, utilizamos conceitos importantes da linguagem C estrutura de dados e ponteiros implementado na configuração do sinal pulsado.

Deve-se deixar claro que o artigo aborda um conteúdo para darmos os primeiros passo com este periférico, encorajamos que o leitor reconfigure a saída do sinal PWM como também acesse a documentação oferecida pela Espressif para compreender como o hardware do chip comporta-se com cada configuração realizada além das funções implementadas em software.

AutorHalysson Junior
Data:22/07/2021
- - +

PWM com LEDC

Seguindo os estudos do ESP-IDF, vamos agora estudar um novo periférico, o LED Control (LEDC), o qual tem a função de controlar a intensidade luminosa do LED e também servir como fonte geradora de sinal pulsado, Pulse Width Modulation (PWM), para diferentes propósitos como: controle de velocidade em motores de corrente contínua (CC), angulação em servomotores, mudança de cores em LED RGB e outras mais aplicações.

+

Com isso, ao final deste artigo estaremos familiarizados com os recursos oferecidos pelo periférico além de dominar as configurações básicas para implementar em projetos.

+

Recursos Necessários

+

Os materiais necessários para realizar esse exemplo são:

+
    +
  • Placa Franzininho WiFi;
  • +
  • Protoboard;
  • +
  • LED;
  • +
  • Resistor de 220 Ohm;
  • +
  • Cabos Jumpers;
  • +
  • Computador com ESP-IDF instalado e configurado.
  • +
+

Desenvolvimento

+

Na placa Franzininho WiFi o periférico LEDC está disposto em dois grupos de oito canais, sendo um grupo operando no High Speed Mode (HSM) e outro em Low Speed Mode (LSM) operando independente uns dos outros . O modo High Speed é implementado em hardware oferecendo mudanças automáticas sem interferir no duty cycle do PWM, ou seja, caso haja alterações na temporização serão atualizadas no próximo estouro do timer. Em contraste isso o modo Low Speed deve ser explicitar o via software as configurações de temporização.

+

Para utilizarmos esse periféricos precisamos seguir algumas etapas fundamentais para nossa aplicação de estudo que são: Configuração do Temporizador , Configuração do Canal e Alteração do PWM.

+
    +
  • +

    Configuração do Temporizador : nessa primeira etapa vamos especificar a frequência e a resolução do sinal PWM preenchendo a estrutura de dados ledc_timer_config_t e apontando-a para a função led_timer_config() .

    +
  • +
  • +

    Configuração do Canal: nessa segunda etapa iremos direcionar o GPIO que será a saída do sinal PWM, o qual é selecionado dentro da estrutura de configuração do periférico.

    +
  • +
  • +

    Alteração do PWM: na última etapa vamos realizar o aumento e a redução do duty cycle na saída da geradora de sinal criando assim o fade no LED externo, o qual será habilitado via hardware pela função ledc_fade_func_install().

    +
  • +
+

Com a finalização das três etapas de configuração o acionamento do periférico LED Control estará em funcionamento, contudo devemos agora seguir para montagem do circuito para concluir o projeto.

+

Configuração do Periférico LED Control

+

Esquemático

+

Nesta parte daremos início a montagem do circuito em protoboard, iremos conectar um dos terminais do resistor no GPIO 2 e outro no LED externo.

+

Abaixo segue o esquemático proposto :

+

Imagem do Circuito

+

Código

+
/*
+   Autor: Halysson Junior
+   Data : 10/04/21   
+
+    Nesse exemplo foi configurado o periferico LEDC para controlar a intensidade do LED.
+     
+*/
+
+// Inclusão de arqivos de cabeçalho
+#include <stdio.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "driver/ledc.h"
+#include "esp_err.h"
+
+// Definição para configuração do periférico
+#define LEDC_GPIO         2
+#define LEDC_FADE_TIME    500
+#define LEDC_RESOLUTION   1024
+#define LEDC_FREQ         5000
+
+
+void app_main(void) // Main
+{
+
+  //  Estrutura de dados para receber  as váriaveis  de configuração de frequência (1Hz, 100 Hz e outros), modo (HIGH ou LOW) e selecionar o TIMER (0,1,2)  
+  
+  ledc_timer_config_t timer = {                   // Configuração do timer 
+
+      .speed_mode      = LEDC_LOW_SPEED_MODE,     // Modo de Velocidade -> LOW
+      .duty_resolution = LEDC_TIMER_10_BIT,       // Resolução do do ciclo de trabalho (2^10 = 1024 valores)
+      .timer_num       = LEDC_TIMER_0,            // Utilizado o TIMER 0
+      .freq_hz         = LEDC_FREQ,               // Frequência de operação do sinal PWM
+      .clk_cfg         = LEDC_AUTO_CLK            // Seleção automatica da fonte geradora do clock (interna ou externa)
+    
+  };
+
+  
+  ledc_timer_config(&timer); // Envia o endereço  da estrutura timer para a função de configuração do canal PWM 
+ 
+ /*
+   NOTA:
+   A frequencia e a resolução do ciclo de trabalho são independentes. Para uma elevada frequência do PWM, 
+   terá uma baixa resolução do ciclo de trabalho disponivel e vice-versa  
+ */
+
+ //  Estrutura de dados para receber  as váriaveis  de configuração de frequencia (1Hz, 100 Hz e outros), modo (HIGH ou LOW), selecionar o TIMER (0,1,2) 
+  
+  ledc_channel_config_t channel_LEDC = {
+      .gpio_num   =   LEDC_GPIO,             // Seleciona o pino para atuar o PWM
+      .speed_mode =   LEDC_LOW_SPEED_MODE,   // Modo de Velocidade -> LOW
+      .channel    =   LEDC_CHANNEL_0,           
+      .timer_sel  =   LEDC_TIMER_0,
+      .duty       =   0,
+      .hpoint     =   0
+    
+    };
+  
+  ledc_channel_config(&channel_LEDC);
+ 
+ 
+  ledc_fade_func_install(0); // Inicializa o serviço do Fade
+  
+  for(;;){ // Loop
+
+   // Define e inicia a função de fade no periférico LEDC
+    ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , 0               , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);
+    ledc_set_fade_time_and_start( channel_LEDC.speed_mode , channel_LEDC.channel , LEDC_RESOLUTION , LEDC_FADE_TIME , LEDC_FADE_WAIT_DONE);
+  
+  
+  }// endLoop
+
+}//endMain
+
+/*
+ *** Paramentrização da função " ledc_set_fade_time_and_start(); " ***
+
+ledc_set_fade_time_and_start(ledc_mode_tspeed_mode, ledc_channel_tchannel, uint32_t target_duty, uint32_t max_fade_time_ms, ledc_fade_mode_tfade_mode)
+
+  ledc_mode_tspeed_mode     -> modo do timer utilizado
+  ledc_channel_tchannel     -> indice do canal LEDC (0-7)
+  uint32_t target_duty      -> (2 ** resolução_ciclo_de_trabalho) -  1
+  uint32_t max_fade_time_ms -> tempo máximo (ms) para o fading  
+  ledc_fade_mode_tfade_mode ->  
+*/
+
+

O programa desenvolvido possui uma estrutura bem simples e não é necessário acrescentar nenhuma biblioteca, apenas a manutenção dos arquivos de cabeçalho já presentes no projeto.

+

Ao criar um novo projeto no IDF automaticamente já temos arquivos configurados e prontos para programação do dispositivo, desta forma digite e comente as linhas do seguinte código no arquivo main.c :

+

Você encontra o projeto completo na documentação da Franzininho: PWM_LEDC

+

Caso ainda não tenha instalado e configurado o IDF no seu computador ou tenha dúvidas sobre as ferramentas, acesse o tutorial de instalação (Clique Aqui).

+

Compilação

+

Após a codificação vamos compilar o código, mas antes selecione o set-target para ESP32-S2. Caso não possua a placa Franzininho WiFi altere o target para o modelo de ESP32 utilizando em seu projeto.

+

idf.py set-target esp32s2

+

Ao final da compilação o resultado final deve ser semelhante à imagem mostrada abaixo, em caso de erros retorne os passos anteriores e revise seu código.

+

Imagem do Terminal Visual Code

+

Após a etapa de compilação vamos enviar o código fonte para nossa placa, no editor pressione o ícone abaixo e aguarde alguns segundos para assim dar início ao upload do programa “PWM” (seta preta) .

+

Barra inferior do Visual Code

+

Resultados

+

Após enviar seu código e com o circuito devidamente montado o LED externo conectado começará a aumentar e diminuir sua intensidade luminosa gradualmente criando o fade desejado. Na figura 5 temos a imagem do osciloscópio mostrando a forma de onda gerada e o duty cycle atuando no momento e na figura 6 o circuito em perfeito funcionamento.

+

Saída do sinal PWM

+

Imagem do circuito em funcionamento

+

Conclusão

+

Neste exemplo apresentamos tópicos intermediários sobre a manipulação do periférico LED Control, utilizamos conceitos importantes da linguagem C estrutura de dados e ponteiros implementado na configuração do sinal pulsado.

+

Deve-se deixar claro que o artigo aborda um conteúdo para darmos os primeiros passo com este periférico, encorajamos que o leitor reconfigure a saída do sinal PWM como também acesse a documentação oferecida pela Espressif para compreender como o hardware do chip comporta-se com cada configuração realizada além das funções implementadas em software.

+
AutorHalysson Junior
Data:22/07/2021
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos/index.html b/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos/index.html index ccb53cb68..7b2a9d1ba 100755 --- a/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos/index.html +++ b/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passos/index.html @@ -1,22 +1,158 @@ - + - -Primeiros Passos com ESP-IDF | Franzininho - - - + +Primeiros Passos com ESP-IDF | Franzininho + + + -
-

Primeiros Passos com ESP-IDF

Este documento tem como objetivo ajudá-lo a configurar o ESP-IDF (Espressif IoT Development Framework) para trabalhar com a Franzininho WiFi que usa o ESP32-S2 da Espressif.

Ao final, faremos um exemplo simples para compilar, gravar e monitorar usando o ESP-IDF, assim, garantiremos que tudo estará funcionando.

Introdução

Para essa configuração, vamos instalar o ESP-IDF e usá-lo através de linha de comando. Caso você queira usar o IDF integrado a ambientes de desenvolvimento integrado (IDE) como VScode e Eclipse, confira os seguintes links:

Você poderá instalar o ESP-IDF no seu sistema operacional preferido (Linux, Windows, macOS).

Para a experiência completa, você precisará de uma placa Franzininho WiFi, Computador: com Windows, Linux ou macOS

Passo 1 - Instalação dos pré-requisitos

Algumas ferramentas precisam ser instaladas no computador antes de prosseguir para as próximas etapas. Siga os links abaixo para obter as instruções para o seu sistema operacional:

É muito importante a instalação de todos os pré-requisitos.

Passo 2 - Instalação do ESP-IDF

Nessa etapa vamos instalar o ESP-IDF e conjunto de ferramentas e bibliotecas. Vamos usar o código mantido pela Espressif no repositório do ESP-IDF

O ESP-IDF é o framework oficial da Espressif para o desenvolvimento de aplicações parar toda a família ESP32. O procedimento apresentado aqui servirá para trabalhar com toda a família ESP32. Porém, vamos dar foco ao ESP32-S2 que é usado na Franzininho WiFi.

Linux e macOS

Abra o terminal e execute:

mkdir -p ~/esp
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git

O ESP-IDF será baixado no seguinte repositório ~/esp/esp-idf.

Windows

Além de instalar as ferramentas, o ESP-IDF Tools Installer para Windows apresentado no passo 1 ele também baixa uma cópia do ESP-IDF. Dessa forma você não precisará baixar o ESP-IDF agora, se já tiver baixado anteriormente junto aos pré-requisitos.

Se desejar fazer o download do ESP-IDF sem a ajuda do ESP-IDF Tools Installer, consulte estas instruções.

Instalando O ESP-IDF e ferramentas

Além do ESP-IDF, você também precisa instalar as ferramentas usadas pelo ESP-IDF, como compilador, depurador, pacotes Python, etc.

Windows

O ESP-IDF Tools Installer para Windows apresentado no passo 1 instala todas as ferramentas necessárias.

Se você deseja instalar as ferramentas sem a ajuda do ESP-IDF Tools Installer, abra o Prompt de Comando e siga estas etapas:

cd %userprofile%\esp\esp-idf
install.bat

Ou no Windows PowerShell

cd ~/esp/esp-idf
./install.ps1

Linux e macOS

No Linux ou macOS há um script para instalação.Abra o terminal e execute:

cd ~/esp/esp-idf
./install.sh

Ou se tiver usando o Fish:

cd ~/esp/esp-idf
./install.fish

Configurando as variáveis de ambientes

As ferramentas instaladas ainda não foram adicionadas à variável de ambiente PATH. Para tornar as ferramentas utilizáveis na linha de comando, algumas variáveis de ambiente devem ser definidas. ESP-IDF fornece alguns scripts que ajudam nesse processo.

Windows

O ESP-IDF Tools Installer para Windows cria um atalho “ESP-IDF Command Prompt” no menu Iniciar. Este atalho abre o Prompt de Comando e configura todas as variáveis de ambiente necessárias. Você pode abrir este atalho e prosseguir para a próxima etapa.

Caso não funcione e você precise configurar manualmente, execute os seguintes comandos:

Prompt de Comando:

%userprofile%\esp\esp-idf\export.bat

Windows PowerShell:

.$HOME/esp/esp-idf/export.ps1

Linux e macOS

No terminal execute:

. $HOME/esp/esp-idf/export.sh

Ou no Fish(suportado apenas em versões a partir da 3.0.0):

. $HOME/esp/esp-idf/export.fish
Importante

Você precisa fazer isso toda vez que iniciar o terminal para usar o ESP-IDF.

Passo 3 - Criando um novo projeto

Agora que já temos as ferramentas instaladas, vamos fazer um exemplo para validar o funcionamento das mesmas. Vamos executar o exemplo blink que já vem no IDF.

Copiando um projeto exemplo

Vamos copiar o projeto blink para preservarmos o exemplo presente na pasta do IDF:

Windows

cd %userprofile%\esp
xcopy /e /i %IDF_PATH%\examples\get-started\blink blink

Linux e macOS

cd ~/esp
cp -r $IDF_PATH/examples/get-started/blink .

Fique a vontade para testar os outros exemplos também.

O sistema de compilação ESP-IDF não oferece suporte a espaços nos caminhos para o ESP-IDF ou para projetos.

Configuração

Agora vamos configurar o target para qual será compilado e já fazer uma configuração no menuconfig. No nosso caso vamos trabalhar com o ESP32-S2:

Windows

cd %userprofile%\esp\blink
idf.py set-target esp32s2
idf.py menuconfig

Linux e macOS

cd ~/esp/blink
idf.py set-target esp32s2
idf.py menuconfig

Será aberto o menuconfig: -menuconfig

Acesse a opção Component config ---> -menuconfig

Em seguida ESP System Settings ---> -menuconfig

Agora selecione Channel for console output (Default: UART0) ---> -menuconfig

E por fim, selecione (X) USB CDC: -menuconfig

Salve(S), Enter, enter, Saia do menu(ESC)

Essa configuração permitirá que usemos a USB no próximo upload.

Importante

Sempre que iniciar um projeto novo faça essas configuração para que continue usando a USB como interface de programação.

Para mais detalhes acesse:

Compilando o projeto em modo DFU

A primeira compilação nós vamos fazer usando o modo DFU, que já vem por padrão no ESP32-S2 permitindo o upload através da USB:

Para crie a imagem DFU:

idf.py dfu

A primeira compilação pode demorar um pouco. Da até pra ir pegar um café ;)

Após a compilação, conecte a Franzininho WiFi no computador. Antes de fazermos o upload é necessário entrar no modo DFU. Para entrar no modo DFU pressione as teclas na seguinte sequencia:

  1. pressione e segure a tecla BOOT
  2. pressione rapidamente e solte a tecla RESET
  3. solte a tecla BOOT

Dessa forma a placa entrará no modo DFU e poderá receber o firmware através da USB.

Para fazer a gravação, digite:

idf.py dfu-flash
Dica

Caso a gravação através da USB não funcione, veja esse link com as instruções de configurações da USB

Após alguns segundos a placa estará gravada.

Pressione novamente o botão RESET.

Compilação, gravação e monitor em modo normal

Agora você poderá compilar, gravar e monitorar usando a porta USB. Esse processo é idêntico ao que fazemos para desenvolver com o ESP32:

Compilar:

idf.py build

Gravar:

idf.py -p PORT [-b BAUD] flash

Monitorar:

idf.py -p /dev/ttyUSB0 monitor

Maravilha, você configurou o ambiente para trabalhar com o ESP-IDF.

Caso queira trabalhar com a extensão para VSCODE, confira o video:

- - +

Primeiros Passos com ESP-IDF

Este documento tem como objetivo ajudá-lo a configurar o ESP-IDF (Espressif IoT Development Framework) para trabalhar com a Franzininho WiFi que usa o ESP32-S2 da Espressif.

+

Ao final, faremos um exemplo simples para compilar, gravar e monitorar usando o ESP-IDF, assim, garantiremos que tudo estará funcionando.

+

Introdução

+

Para essa configuração, vamos instalar o ESP-IDF e usá-lo através de linha de comando. Caso você queira usar o IDF integrado a ambientes de desenvolvimento integrado (IDE) como VScode e Eclipse, confira os seguintes links:

+ +

Você poderá instalar o ESP-IDF no seu sistema operacional preferido (Linux, Windows, macOS).

+

Para a experiência completa, você precisará de uma placa Franzininho WiFi, Computador: com Windows, Linux ou macOS

+

Passo 1 - Instalação dos pré-requisitos

+

Algumas ferramentas precisam ser instaladas no computador antes de prosseguir para as próximas etapas. Siga os links abaixo para obter as instruções para o seu sistema operacional:

+ +

É muito importante a instalação de todos os pré-requisitos.

+

Passo 2 - Instalação do ESP-IDF

+

Nessa etapa vamos instalar o ESP-IDF e conjunto de ferramentas e bibliotecas. Vamos usar o código mantido pela Espressif no repositório do ESP-IDF

+

O ESP-IDF é o framework oficial da Espressif para o desenvolvimento de aplicações parar toda a família ESP32. O procedimento apresentado aqui servirá para trabalhar com toda a família ESP32. Porém, vamos dar foco ao ESP32-S2 que é usado na Franzininho WiFi.

+

Linux e macOS

+

Abra o terminal e execute:

+
mkdir -p ~/esp
+cd ~/esp
+git clone --recursive https://github.com/espressif/esp-idf.git
+
+

O ESP-IDF será baixado no seguinte repositório ~/esp/esp-idf.

+

Windows

+

Além de instalar as ferramentas, o ESP-IDF Tools Installer para Windows apresentado no passo 1 ele também baixa uma cópia do ESP-IDF. Dessa forma você não precisará baixar o ESP-IDF agora, se já tiver baixado anteriormente junto aos pré-requisitos.

+

Se desejar fazer o download do ESP-IDF sem a ajuda do ESP-IDF Tools Installer, consulte estas instruções.

+

Instalando O ESP-IDF e ferramentas

+

Além do ESP-IDF, você também precisa instalar as ferramentas usadas pelo ESP-IDF, como compilador, depurador, pacotes Python, etc.

+

Windows

+

O ESP-IDF Tools Installer para Windows apresentado no passo 1 instala todas as ferramentas necessárias.

+

Se você deseja instalar as ferramentas sem a ajuda do ESP-IDF Tools Installer, abra o Prompt de Comando e siga estas etapas:

+
cd %userprofile%\esp\esp-idf
+install.bat
+
+

Ou no Windows PowerShell

+
cd ~/esp/esp-idf
+./install.ps1
+
+

Linux e macOS

+

No Linux ou macOS há um script para instalação.Abra o terminal e execute:

+
cd ~/esp/esp-idf
+./install.sh
+
+

Ou se tiver usando o Fish:

+
cd ~/esp/esp-idf
+./install.fish
+
+

Configurando as variáveis de ambientes

+

As ferramentas instaladas ainda não foram adicionadas à variável de ambiente PATH. Para tornar as ferramentas utilizáveis na linha de comando, algumas variáveis de ambiente devem ser definidas. ESP-IDF fornece alguns scripts que ajudam nesse processo.

+

Windows

+

O ESP-IDF Tools Installer para Windows cria um atalho “ESP-IDF Command Prompt” no menu Iniciar. Este atalho abre o Prompt de Comando e configura todas as variáveis de ambiente necessárias. Você pode abrir este atalho e prosseguir para a próxima etapa.

+

Caso não funcione e você precise configurar manualmente, execute os seguintes comandos:

+

Prompt de Comando:

+
%userprofile%\esp\esp-idf\export.bat
+
+

Windows PowerShell:

+
.$HOME/esp/esp-idf/export.ps1
+
+

Linux e macOS

+

No terminal execute:

+
. $HOME/esp/esp-idf/export.sh
+
+

Ou no Fish(suportado apenas em versões a partir da 3.0.0):

+
. $HOME/esp/esp-idf/export.fish
+
+

Você precisa fazer isso toda vez que iniciar o terminal para usar o ESP-IDF.

+

Passo 3 - Criando um novo projeto

+

Agora que já temos as ferramentas instaladas, vamos fazer um exemplo para validar o funcionamento das mesmas. Vamos executar o exemplo blink que já vem no IDF.

+

Copiando um projeto exemplo

+

Vamos copiar o projeto blink para preservarmos o exemplo presente na pasta do IDF:

+

Windows

+
cd %userprofile%\esp
+xcopy /e /i %IDF_PATH%\examples\get-started\blink blink
+
+

Linux e macOS

+
cd ~/esp
+cp -r $IDF_PATH/examples/get-started/blink .
+
+

Fique a vontade para testar os outros exemplos também.

+

O sistema de compilação ESP-IDF não oferece suporte a espaços nos caminhos para o ESP-IDF ou para projetos.

+

Configuração

+

Agora vamos configurar o target para qual será compilado e já fazer uma configuração no menuconfig. No nosso caso vamos trabalhar com o ESP32-S2:

+

Windows

+
cd %userprofile%\esp\blink
+idf.py set-target esp32s2
+idf.py menuconfig
+
+

Linux e macOS

+
cd ~/esp/blink
+idf.py set-target esp32s2
+idf.py menuconfig
+
+

Será aberto o menuconfig: +menuconfig

+

Acesse a opção Component config ---> +menuconfig

+

Em seguida ESP System Settings ---> +menuconfig

+

Agora selecione Channel for console output (Default: UART0) ---> +menuconfig

+

E por fim, selecione (X) USB CDC: +menuconfig

+

Salve(S), Enter, enter, Saia do menu(ESC)

+

Essa configuração permitirá que usemos a USB no próximo upload.

+

Sempre que iniciar um projeto novo faça essas configuração para que continue usando a USB como interface de programação.

+

Para mais detalhes acesse:

+ +

Compilando o projeto em modo DFU

+

A primeira compilação nós vamos fazer usando o modo DFU, que já vem por padrão no ESP32-S2 permitindo o upload através da USB:

+

Para crie a imagem DFU:

+
idf.py dfu
+
+

A primeira compilação pode demorar um pouco. Da até pra ir pegar um café ;)

+

Após a compilação, conecte a Franzininho WiFi no computador. Antes de fazermos o upload é necessário entrar no modo DFU. Para entrar no modo DFU pressione as teclas na seguinte sequencia:

+
    +
  1. pressione e segure a tecla BOOT
  2. +
  3. pressione rapidamente e solte a tecla RESET
  4. +
  5. solte a tecla BOOT
  6. +
+

Dessa forma a placa entrará no modo DFU e poderá receber o firmware através da USB.

+

Para fazer a gravação, digite:

+
idf.py dfu-flash
+
+

Caso a gravação através da USB não funcione, veja esse link com as instruções de configurações da USB

+

Após alguns segundos a placa estará gravada.

+

Pressione novamente o botão RESET.

+

Compilação, gravação e monitor em modo normal

+

Agora você poderá compilar, gravar e monitorar usando a porta USB. Esse processo é idêntico ao que fazemos para desenvolver com o ESP32:

+

Compilar:

+
idf.py build
+
+

Gravar:

+
idf.py -p PORT [-b BAUD] flash
+
+

Monitorar:

+
idf.py -p /dev/ttyUSB0 monitor
+
+

Maravilha, você configurou o ambiente para trabalhar com o ESP-IDF.

+

Caso queira trabalhar com a extensão para VSCODE, confira o video:

+
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais/index.html b/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais/index.html index b5ae70170..e28614774 100755 --- a/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais/index.html +++ b/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitais/index.html @@ -1,18 +1,43 @@ - + - -Explore as entradas e saídas digitais da Franzininho WiFi no MicroPython | Franzininho - - - + +Explore as entradas e saídas digitais da Franzininho WiFi no MicroPython | Franzininho + + + -
-

Explore as entradas e saídas digitais da Franzininho WiFi no MicroPython

Introdução

A Franzininho WiFi conta com pinos que podem operar em dois modos: OUTPUT e INPUT. Além disso, é possível usar resistores internos nos pinos configurados como Pull-Up ou Pull-Down para os pinos configurados como entradas.

Neste artigo, vamos explorar como utilizar o MicroPython para controlar os pinos de I/O.

Para isso vamos criar um código para manipular os LEDs e botões da placa Franzininho WiFi LAB01, permitindo criar funcionalidades personalizadas e interativas.

Recursos necessários

Para iniciar o trabalho com os GPIOs, é essencial possuir o diagrama de pinos da placa Franzininho WiFI LAB01 à disposição, pois isso permitirá que você identifique tanto os nomes quanto as funções associadas a cada um deles.

Tabela 1 – Franzininho WiFi LAB01 mapeamento de pinos

PinoRecurso
IO1LDR
IO2BT6
IO3BT5
IO4BT4
IO5BT3
IO6BT2
IO7BT1
IO8OLED_SDA
IO9OLED_SCL
IO10TFT_DC
IO11TFT_RES
IO12LED AZUL
IO13LED VERDE
IO14LED VERMELHO
IO15DHT11
IO17BUZZER
IO35TFT_SDA
IO36TFT_SCL

Nesta prática iremos utilizar o LED RGB e os botões da Franzininho WiFi LAB01, conforme destacado na Figura abaixo:

Figura 1 – Resumo dos recursos da placa -entradas e saídas digitais da Franzininho WiFi com MicroPython

Módulos do MicroPython

O machine contém funções específicas relacionadas ao hardware de uma placa em particular. A maioria das funções neste módulo permitem obter acesso direto e irrestrito aos blocos de hardware em um sistema, como: pinos, I2C, UART, SPI, ADC.

No MicroPython, como no Python, é possível importar apenas parte de uma biblioteca, ao invés de importar a biblioteca inteira. Um recurso útil que utilizaremos bastante.

A biblioteca ‘utime’ é uma versão projetada para microcontroladores da biblioteca ‘time’. Essa biblioteca é útil para inserir os atrasos necessários em muitos projetos.

Obs: se você esquecer e usar import time , não se preocupe: o MicroPython usará automaticamente a biblioteca utime em seu lugar.

Código

Com a Franzininho WiFi conectada ao seu computador, abra o Thonny e crie um novo arquivo contendo o código a seguir:

Para criar o programa que controla o LED RGB, começamos com a instrução from machine import Pin. Isso instrui o MicroPython a importar apenas a função Pin da biblioteca machine, em vez de importar a biblioteca inteira. Dessa forma, teremos acesso apenas à funcionalidade necessária para controlar os pinos da placa.

É importante enfatizar que o Micropython é case-sensitive, isso significa que se você digitar pin a biblioteca não será reconhecida, então se atente no uso das letras maiúsculas e minúsculas.

Em seguida, vamos nomear os LEDs e associá-los aos pinos da placa como saída (Pin.OUT). Consultando a tabela de pinos da Franzininho WiFi LAB01, identificamos que o pino 12 é responsável pela cor azul do LED RGB, o pino 13 pela cor verde e o pino 14 pela cor vermelha. Com isso fazemos a atribuição setando todos os pinos como saída.

De forma semelhante, realizamos o mesmo procedimento com os botões. Ao consultar a tabela de pinos, identificamos que o pino 7 corresponde ao botão 1, o pino 6 ao botão 2 e o pino 5 ao botão 3. É importante lembrar que esses dispositivos operam com a configuração pull-up, e essa informação deve ser incluída no programa.

Por último, o loop principal monitora constantemente o estado dos botões para determinar se o LED deve ser ligado. Há uma pequena pausa de 100 milissegundos entre cada atualização do LED em resposta ao estado dos botões. Esses atrasos são usados para evitar que a leitura dos botões e as alterações nos LEDs aconteçam muito rapidamente e possam ser difíceis de perceber.

Se você não possui a Franzininho WiFi LAB01 para testar o projeto, é possível testar o programa utilizando a montagem do circuito em uma protoboard.

Pressione as teclas e verifique que os leds acenderão conforme a tecla pressionada:

Funcionamento

Conclusão

Neste artigo, explicamos o funcionamento básico dos pinos de I/O da Franzininho WiFi usando a placa de aplicação Franzininho WiFi LAB01. Exploramos as bibliotecas e funções essenciais que nos permitem configurar esses pinos e acessar seus estados lógicos.

Encorajamos que continue desenvolvendo suas habilidades de programação e eletrônica, adaptando o código e criando projetos mais complexos. Isso permitirá explorar todo o potencial da Franzininho WiFi LAB01 com o MicroPython.

AutorSthefania Fernandes
Data:17/11/2023
- - +

Explore as entradas e saídas digitais da Franzininho WiFi no MicroPython

Introdução

+

A Franzininho WiFi conta com pinos que podem operar em dois modos: OUTPUT e INPUT. Além disso, é possível usar resistores internos nos pinos configurados como Pull-Up ou Pull-Down para os pinos configurados como entradas.

+

Neste artigo, vamos explorar como utilizar o MicroPython para controlar os pinos de I/O.

+

Para isso vamos criar um código para manipular os LEDs e botões da placa Franzininho WiFi LAB01, permitindo criar funcionalidades personalizadas e interativas.

+

Recursos necessários

+

Para iniciar o trabalho com os GPIOs, é essencial possuir o diagrama de pinos da placa Franzininho WiFI LAB01 à disposição, pois isso permitirá que você identifique tanto os nomes quanto as funções associadas a cada um deles.

+

Tabela 1 – Franzininho WiFi LAB01 mapeamento de pinos

+
PinoRecurso
IO1LDR
IO2BT6
IO3BT5
IO4BT4
IO5BT3
IO6BT2
IO7BT1
IO8OLED_SDA
IO9OLED_SCL
IO10TFT_DC
IO11TFT_RES
IO12LED AZUL
IO13LED VERDE
IO14LED VERMELHO
IO15DHT11
IO17BUZZER
IO35TFT_SDA
IO36TFT_SCL
+

Nesta prática iremos utilizar o LED RGB e os botões da Franzininho WiFi LAB01, conforme destacado na Figura abaixo:

+

Figura 1 – Resumo dos recursos da placa +entradas e saídas digitais da Franzininho WiFi com MicroPython

+

Módulos do MicroPython

+

O machine contém funções específicas relacionadas ao hardware de uma placa em particular. A maioria das funções neste módulo permitem obter acesso direto e irrestrito aos blocos de hardware em um sistema, como: pinos, I2C, UART, SPI, ADC.

+

No MicroPython, como no Python, é possível importar apenas parte de uma biblioteca, ao invés de importar a biblioteca inteira. Um recurso útil que utilizaremos bastante.

+

A biblioteca ‘utime’ é uma versão projetada para microcontroladores da biblioteca ‘time’. Essa biblioteca é útil para inserir os atrasos necessários em muitos projetos.

+

Obs: se você esquecer e usar import time , não se preocupe: o MicroPython usará automaticamente a biblioteca utime em seu lugar.

+

Código

+

Com a Franzininho WiFi conectada ao seu computador, abra o Thonny e crie um novo arquivo contendo o código a seguir:

+

Para criar o programa que controla o LED RGB, começamos com a instrução from machine import Pin. Isso instrui o MicroPython a importar apenas a função Pin da biblioteca machine, em vez de importar a biblioteca inteira. Dessa forma, teremos acesso apenas à funcionalidade necessária para controlar os pinos da placa.

+

É importante enfatizar que o Micropython é case-sensitive, isso significa que se você digitar pin a biblioteca não será reconhecida, então se atente no uso das letras maiúsculas e minúsculas.

+

Em seguida, vamos nomear os LEDs e associá-los aos pinos da placa como saída (Pin.OUT). Consultando a tabela de pinos da Franzininho WiFi LAB01, identificamos que o pino 12 é responsável pela cor azul do LED RGB, o pino 13 pela cor verde e o pino 14 pela cor vermelha. Com isso fazemos a atribuição setando todos os pinos como saída.

+

De forma semelhante, realizamos o mesmo procedimento com os botões. Ao consultar a tabela de pinos, identificamos que o pino 7 corresponde ao botão 1, o pino 6 ao botão 2 e o pino 5 ao botão 3. É importante lembrar que esses dispositivos operam com a configuração pull-up, e essa informação deve ser incluída no programa.

+

Por último, o loop principal monitora constantemente o estado dos botões para determinar se o LED deve ser ligado. Há uma pequena pausa de 100 milissegundos entre cada atualização do LED em resposta ao estado dos botões. Esses atrasos são usados para evitar que a leitura dos botões e as alterações nos LEDs aconteçam muito rapidamente e possam ser difíceis de perceber.

+

Se você não possui a Franzininho WiFi LAB01 para testar o projeto, é possível testar o programa utilizando a montagem do circuito em uma protoboard.

+

Pressione as teclas e verifique que os leds acenderão conforme a tecla pressionada:

+

Funcionamento

+

Conclusão

+

Neste artigo, explicamos o funcionamento básico dos pinos de I/O da Franzininho WiFi usando a placa de aplicação Franzininho WiFi LAB01. Exploramos as bibliotecas e funções essenciais que nos permitem configurar esses pinos e acessar seus estados lógicos.

+

Encorajamos que continue desenvolvendo suas habilidades de programação e eletrônica, adaptando o código e criando projetos mais complexos. Isso permitirá explorar todo o potencial da Franzininho WiFi LAB01 com o MicroPython.

+
AutorSthefania Fernandes
Data:17/11/2023
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos/index.html b/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos/index.html index 60ad8264a..c0c4134c4 100755 --- a/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos/index.html +++ b/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passos/index.html @@ -1,17 +1,52 @@ - + - -Primeiros Passos com MicroPython | Franzininho - - - + +Primeiros Passos com MicroPython | Franzininho + + + -
-

Primeiros Passos com MicroPython

A Franzininho WIFI é uma placa de desenvolvimento de hardware de código aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal é tornar o desenvolvimento de projetos eletrônicos mais acessível a makers, entusiastas e desenvolvedores brasileiros.

A placa pode ser programada de várias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes.

A Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns são:

  • ESP-IDF, Arduino, CircuitPython e MicroPython

A Franzininho WiFi LAB01 é uma placa de expansão para a placa Franzininho WiFi, com a proposta de ser um laboratório para auxiliar no ensino e aprendizagem do ESP32, baseada na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experiências.

Nessa série de artigos, vamos explorar a programação em MicroPython com a Franzininho WiFi LAB01. Primeiramente, é preciso entender que o MicroPython é uma implementação completa da linguagem Python 3 para rodar em hardware embarcado.

Assim, para poder programar a sua placa Franzininho WiFi com MicroPython é preciso, primeiro, gravar o firmware do MicroPython nela. Para facilitar a instalação do MicroPython, vamos usar a ferramenta de gravação através do browser, criada pela comunidade Franzininho: franzininho.github.io (funciona no Chrome e similares). Aproveitamos para agradecer ao Ewerton Sousa pela contribuição com essa ferramenta.

A seguir apresentamos os passos para gravação do MicroPython na Franzininho WiFI e a IDE que usaremos nessa serie de artigos.

Gravando o MicroPython na Franzininho WiFi

Acesse a ferramenta Franzininho – ESP Web Tools. Com essa ferramenta é possível obter o firmware não somente o firmware do Micropython, mas também das outras ferramentas de software que a placa suporta. Então, atente-se para selecionar a aba do MicroPython, conforme exibido abaixo:

Ferramenta de Gravação

Seguindo o tutorial, comece conectando sua placa Franzininho a uma das portas USB de seu computador. Em seguida coloque sua placa em modo DFU que significa executar os seguintes passos:

  1. Pressione e segure o botão boot;
  2. Pressione o botão reset;
  3. Após soltar o reset solte o boot.

Franzininho WiFI

Feito isso, clique no botão Conectar do site franzininho.github.io, selecione a placa e clique em conectar:

Conectando a placa a ferramenta

Com a placa conectada, clique em instalar MicroPython:

Intale o MicroPython

Selecione a opção apagar dispositivo:

Apagar dispositivo

Clique em instalar e aguarde finalizar a instalação (mantenha a página aberta até o final da instalação):

Instalando o MicroPython

Instalando o MicroPython

Uma vez instalado clique novamente no botão de reset para iniciar o MicroPython.

Tudo pronto, agora é possível programar sua Franzininho WiFi LAB01 com MicroPython.

Observação: Quando você colocar a placa em modo DFU, o buzzer pode ser ativado, o que pode causar ruído indesejado. Para evitar isso, desconecte o jumper do buzzer (IO17), que é o primeiro da esquerda para a direita.

Apresentando o Thonny IDE

O Thonny é um IDE popular para Python e MicroPython e é o que recomendamos para a programação da Franzininho WiFi.

Para realizar o download, basta visitar o site thonny.org e selecionar o link de download localizado no topo da página, conforme o seu sistema operacional.

Em seguida, inicie o Thonny enquanto a placa ainda estiver conectada via USB. Na parte inferior direita, selecione a opção MicroPython (ESP32). Desta forma, o Thonny irá detectar automaticamente a Franzininho WiFi.

MicroPython Conectado

Agora tudo está pronto para iniciar seus projetos com MicroPython na Franzininho WiFi.

AutorSthefania Fernandes
Data:10/11/2023
- - +

Primeiros Passos com MicroPython

A Franzininho WIFI é uma placa de desenvolvimento de hardware de código aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal é tornar o desenvolvimento de projetos eletrônicos mais acessível a makers, entusiastas e desenvolvedores brasileiros.

+

A placa pode ser programada de várias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes.

+

A Franzininho WiFi pode ser programada de diversas formas, entre elas as mais comuns são:

+
    +
  • ESP-IDF, Arduino, CircuitPython e MicroPython
  • +
+

A Franzininho WiFi LAB01 é uma placa de expansão para a placa Franzininho WiFi, com a proposta de ser um laboratório para auxiliar no ensino e aprendizagem do ESP32, baseada na Franzininho WiFi. Ela vem com diversos recursos onboard que facilitam o desenvolvimento de atividades e experiências.

+

Nessa série de artigos, vamos explorar a programação em MicroPython com a Franzininho WiFi LAB01. Primeiramente, é preciso entender que o MicroPython é uma implementação completa da linguagem Python 3 para rodar em hardware embarcado.

+

Assim, para poder programar a sua placa Franzininho WiFi com MicroPython é preciso, primeiro, gravar o firmware do MicroPython nela. Para facilitar a instalação do MicroPython, vamos usar a ferramenta de gravação através do browser, criada pela comunidade Franzininho: franzininho.github.io (funciona no Chrome e similares). Aproveitamos para agradecer ao Ewerton Sousa pela contribuição com essa ferramenta.

+

A seguir apresentamos os passos para gravação do MicroPython na Franzininho WiFI e a IDE que usaremos nessa serie de artigos.

+

Gravando o MicroPython na Franzininho WiFi

+

Acesse a ferramenta Franzininho – ESP Web Tools. Com essa ferramenta é possível obter o firmware não somente o firmware do Micropython, mas também das outras ferramentas de software que a placa suporta. Então, atente-se para selecionar a aba do MicroPython, conforme exibido abaixo:

+

Ferramenta de Gravação

+

Seguindo o tutorial, comece conectando sua placa Franzininho a uma das portas USB de seu computador. Em seguida coloque sua placa em modo DFU que significa executar os seguintes passos:

+
    +
  1. Pressione e segure o botão boot;
  2. +
  3. Pressione o botão reset;
  4. +
  5. Após soltar o reset solte o boot.
  6. +
+

Franzininho WiFI

+

Feito isso, clique no botão Conectar do site franzininho.github.io, selecione a placa e clique em conectar:

+

Conectando a placa a ferramenta

+

Com a placa conectada, clique em instalar MicroPython:

+

Intale o MicroPython

+

Selecione a opção apagar dispositivo:

+

Apagar dispositivo

+

Clique em instalar e aguarde finalizar a instalação (mantenha a página aberta até o final da instalação):

+

Instalando o MicroPython

+

Instalando o MicroPython

+

Uma vez instalado clique novamente no botão de reset para iniciar o MicroPython.

+

Tudo pronto, agora é possível programar sua Franzininho WiFi LAB01 com MicroPython.

+

Observação: Quando você colocar a placa em modo DFU, o buzzer pode ser ativado, o que pode causar ruído indesejado. Para evitar isso, desconecte o jumper do buzzer (IO17), que é o primeiro da esquerda para a direita.

+

Apresentando o Thonny IDE

+

O Thonny é um IDE popular para Python e MicroPython e é o que recomendamos para a programação da Franzininho WiFi.

+

Para realizar o download, basta visitar o site thonny.org e selecionar o link de download localizado no topo da página, conforme o seu sistema operacional.

+

Em seguida, inicie o Thonny enquanto a placa ainda estiver conectada via USB. Na parte inferior direita, selecione a opção MicroPython (ESP32). Desta forma, o Thonny irá detectar automaticamente a Franzininho WiFi.

+

MicroPython Conectado

+

Agora tudo está pronto para iniciar seus projetos com MicroPython na Franzininho WiFi.

+
AutorSthefania Fernandes
Data:10/11/2023
\ No newline at end of file diff --git a/en/docs/franzininho-wifi/franzininho-wifi-dev-edition/index.html b/en/docs/franzininho-wifi/franzininho-wifi-dev-edition/index.html index 4f0318b44..3e212d21c 100755 --- a/en/docs/franzininho-wifi/franzininho-wifi-dev-edition/index.html +++ b/en/docs/franzininho-wifi/franzininho-wifi-dev-edition/index.html @@ -1,19 +1,57 @@ - + - -Placa Franzininho WiFi dev Edition | Franzininho - - - + +Placa Franzininho WiFi dev Edition | Franzininho + + + -
-

Placa Franzininho WiFi dev Edition

Atenção

Essa placa foi feita apenas como protótipo. Não está em produção

A Franzininho WiFi Developer Edition é uma placa de desenvolvimento para avaliar os módulos ESP32-S2 (Wroom e Wrover) e desenvolver a nova geração de placas Franzininho. O projeto Franzininho foi criado para desenvolver habilidades em pessoas nas áreas de eletrônica e programação, por meio de atividades no formato DIY e em conjunto com a cultura maker, no Brasil.

Placa Franzininho WiFi Developer Edition Front

Como não existem muitas placas no mercado brasileiro com ESP32-S2, desenvolvemos o Franzininho WiFi Developer Edition (em 2020) para servir como plataforma de desenvolvimento ESP32-S2 e nos ajudar a avaliar e validar aplicações com este SoC.

Placa Franzininho WiFi Developer Edition

Características

  • ESP32-S2 module( Wrover ou Wroom):
    • Xtensa®single-core32-bit LX7 microprocessor, up to 240 MHz
    • 128 KB ROM
    • 320 KB SRAM
    • 16 KB SRAM in RTC
    • 2 MB (8 Mbit) PSRAM ( Only with Wrover Module)
    • WiFi 802.11 b/g/n
  • Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera interface, IR, pulse counter, LED PWM, TWAI(compatible with ISO 11898-1), USB 1.1OTG, ADC, DAC, touch sensor, temperature sensor.
  • USB Type-A Male
  • RGB LED (WS2812) (GPIO 18)
  • 40 pin broken out to 2x20 2.54mm header pins(36 GPIO) - Breadboard Friendly
  • Reset and DFU (BOOT0) buttons to get into the ROM bootloader (which is a USB serial port so you don’t need a separate cable!)
  • Serial debug pins ( TX and RX, for checking the hardware serial debug console) -JTAG pads for advanced debugging access.
  • 3.3 V Power On LED
  • 3.3 V Regulator
  • Power:
    • Micro USB port (default power supply)
    • 5V and GND header pins
    • 3V3 and GND header pins
  • Dimensions: 72 mm x 30 mm
  • Works with ESP-IDF or CircuitPython

Placa Franzininho WiFi Developer Edition back

Pinout

Pinout placa Franzininho WiFi Developer Edition

Licença

O projeto é um hardware de código aberto e está disponível na licença de hardware aberto do CERN.

A placa Franzininho WiFi Developer Edition é certificada na OSHWA: -UID BR000006

oshwa

- - +

Placa Franzininho WiFi dev Edition

Essa placa foi feita apenas como protótipo. Não está em produção

+

A Franzininho WiFi Developer Edition é uma placa de desenvolvimento para avaliar os módulos ESP32-S2 (Wroom e Wrover) e desenvolver a nova geração de placas Franzininho. O projeto Franzininho foi criado para desenvolver habilidades em pessoas nas áreas de eletrônica e programação, por meio de atividades no formato DIY e em conjunto com a cultura maker, no Brasil.

+

Placa Franzininho WiFi Developer Edition Front

+

Como não existem muitas placas no mercado brasileiro com ESP32-S2, desenvolvemos o Franzininho WiFi Developer Edition (em 2020) para servir como plataforma de desenvolvimento ESP32-S2 e nos ajudar a avaliar e validar aplicações com este SoC.

+

Placa Franzininho WiFi Developer Edition

+

Características

+
    +
  • ESP32-S2 module( Wrover ou Wroom): +
      +
    • Xtensa®single-core32-bit LX7 microprocessor, up to 240 MHz
    • +
    • 128 KB ROM
    • +
    • 320 KB SRAM
    • +
    • 16 KB SRAM in RTC
    • +
    • 2 MB (8 Mbit) PSRAM ( Only with Wrover Module)
    • +
    • WiFi 802.11 b/g/n
    • +
    +
  • +
  • Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera interface, IR, pulse counter, LED PWM, TWAI(compatible with ISO 11898-1), USB 1.1OTG, ADC, DAC, touch sensor, temperature sensor.
  • +
  • USB Type-A Male
  • +
  • RGB LED (WS2812) (GPIO 18)
  • +
  • 40 pin broken out to 2x20 2.54mm header pins(36 GPIO) - Breadboard Friendly
  • +
  • Reset and DFU (BOOT0) buttons to get into the ROM bootloader (which is a USB serial port so you don’t need a separate cable!)
  • +
  • Serial debug pins ( TX and RX, for checking the hardware serial debug console) +JTAG pads for advanced debugging access.
  • +
  • 3.3 V Power On LED
  • +
  • 3.3 V Regulator
  • +
  • Power: +
      +
    • Micro USB port (default power supply)
    • +
    • 5V and GND header pins
    • +
    • 3V3 and GND header pins
    • +
    +
  • +
  • Dimensions: 72 mm x 30 mm
  • +
  • Works with ESP-IDF or CircuitPython
  • +
+

Placa Franzininho WiFi Developer Edition back

+

Pinout

+

Pinout placa Franzininho WiFi Developer Edition

+

Licença

+

O projeto é um hardware de código aberto e está disponível na licença de hardware aberto do CERN.

+

A placa Franzininho WiFi Developer Edition é certificada na OSHWA: +UID BR000006

+

oshwa

\ No newline at end of file diff --git a/en/docs/franzininho-wifi/franzininho-wifi/index.html b/en/docs/franzininho-wifi/franzininho-wifi/index.html index cc95e8269..c08843631 100755 --- a/en/docs/franzininho-wifi/franzininho-wifi/index.html +++ b/en/docs/franzininho-wifi/franzininho-wifi/index.html @@ -1,17 +1,75 @@ - + - -Placa Franzininho WiFi | Franzininho - - - + +Placa Franzininho WiFi | Franzininho + + + -
-

Placa Franzininho WiFi

A Franzininho WIFI é uma placa de desenvolvimento de hardware de código aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal é tornar o desenvolvimento de projetos eletrônicos mais acessível a makers, entusiastas e desenvolvedores brasileiros.

A placa pode ser programada de várias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes.

Neste texto, apresentaremos os recursos disponíveis, as formas de programação e informações relevantes para aqueles que estão iniciando o uso da Franzininho WiFi ou têm interesse em conhecê-la.

Compre sua Franzininho WiFi (com frete gratis) clicando neste link

Placa Franzininho WiFi

Resumo de recursos da placa Franzininho WiFi:

A Franzininho WiFi possui os seguintes recursos:

  • Módulo ESP32-S2
    • Microcontrolador Xtensa® single-core32-bit LX7 operando em até 240 MHz
    • Memórias: 128 KB de ROM, 320 KB de SRAM, 16 KB SRAM no RTC, 4MB de Flash
    • WiFi 802.11 b/g/n
    • Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera, IR,contador de pulsos, LED PWM, TWAI(CAN), USB 1.1 OTG, ADC, DAC, touch, sensor de temperatura interno.
  • Pinout:
    • 40 pinos divididos em 2×20 headers de 2,54 mm
    • 35 GPIOs
    • Compatível com protoboard
  • 2 LEDS de uso geral
  • Botões: 1xReset, 1 x Boot
  • USB: conector micro USB – OTG 1.1
  • Alimentação:
    • 5V via conector USB
    • 5V e GND via pinos
    • 3V3 e GND via pinos
  • Formas de programação:
    • ESP-IDF,
    • Arduino,
    • CircuitPyhton,
    • MicroPython,
    • Zephyr,
    • NuttX

Pinout da Franzininho WiFi

A imagem a seguir exibe o pinout da Franzininho WiFi com mapeamento dos pinos e recursos:

Nova Franzininho WiFI: pinout

Licença

A placa Franzininho WiFi é um projeto de hardware de código aberto, licenciado sob a CERN Open Hardware License. Essa licença é utilizada em projetos de hardware que são desenvolvidos e disponibilizados como código aberto, permitindo que outras pessoas possam reproduzir e criar derivações do projeto. Para garantir a conformidade com a licença, é importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar derivações do projeto. Dessa forma, podem garantir que estão seguindo as diretrizes corretas e respeitando a licença escolhida para o projeto.

Você encontra o projeto do hardware no Github organização Franzininho: https://github.com/Franzininho/Franzininho-WiFi

Simulação da Franzininho WiFi no Wokwi

O Wokwi é uma ferramenta de simulação online e gratuita que permite que desenvolvedores de projetos eletrônicos testem suas criações em um ambiente leve e intuitivo. Com suporte a diversas placas de desenvolvimento, incluindo o Arduino Uno, ESP32, RP2040, e muitas outras, o simulador é um diferencial na área. A ferramenta oferece recursos exclusivos, como simulação de Wi-Fi, Analisador Lógico Virtual, Depuração avançada com GDB, simulação de cartão SD, API dos chips (criação de chips personalizados) e integração com o Visual Studio Code.

A placa Franzininho WiFi também é suportada no simulador. Para começar a criar projetos, acesse a lista de placas suportadas pelo Wokwi e comece a testar suas criações em um ambiente seguro e de fácil acesso. Além disso, compartilhar seus projetos com a comunidade pode ajudar outros desenvolvedores a iniciarem no universo da eletrônica, permitindo que cresçam juntos e desenvolvam soluções cada vez mais inovadoras.

A figura a seguir exibe a Franzininho WiFi no ambiente de simulação do Wokwi:

Franzininho WiFi

Entenda melhor sobre a ferramenta, acessando os links abaixo:

Documentação do Wokwi

Simulação Franzininho WiFi

Documentação da Franzininho Wokwi

Componente para o Fritzing

O Fritzing é uma ferramenta open-source que permite a interação com o hardware, possibilitando a montagem de circuitos eletrônicos, criação de placas de circuito impresso e inclusão do código-fonte do projeto proposto. Com sua riqueza de detalhes e ampla variedade de componentes, o Fritzing é uma opção ideal para documentação de projetos. Para facilitar a documentação de projetos, criamos um componente para ser adicionado ao Fritzing:

Franzininho WiFi

- - +

Placa Franzininho WiFi

A Franzininho WIFI é uma placa de desenvolvimento de hardware de código aberto, baseada no ESP32-S2 e criada no Brasil. A sua finalidade principal é tornar o desenvolvimento de projetos eletrônicos mais acessível a makers, entusiastas e desenvolvedores brasileiros.

+

A placa pode ser programada de várias maneiras, adequando-se tanto a iniciantes quanto a desenvolvedores experientes.

+

Neste texto, apresentaremos os recursos disponíveis, as formas de programação e informações relevantes para aqueles que estão iniciando o uso da Franzininho WiFi ou têm interesse em conhecê-la.

+

Compre sua Franzininho WiFi (com frete gratis) clicando neste link

+

Placa Franzininho WiFi

+

Resumo de recursos da placa Franzininho WiFi:

+

A Franzininho WiFi possui os seguintes recursos:

+
    +
  • Módulo ESP32-S2 +
      +
    • Microcontrolador Xtensa® single-core32-bit LX7 operando em até 240 MHz
    • +
    • Memórias: 128 KB de ROM, 320 KB de SRAM, 16 KB SRAM no RTC, 4MB de Flash
    • +
    • WiFi 802.11 b/g/n
    • +
    • Interfaces: GPIO, SPI, LCD, UART, I2C, I2S, Camera, IR,contador de pulsos, LED PWM, TWAI(CAN), USB 1.1 OTG, ADC, DAC, touch, sensor de temperatura interno.
    • +
    +
  • +
  • Pinout: +
      +
    • 40 pinos divididos em 2×20 headers de 2,54 mm
    • +
    • 35 GPIOs
    • +
    • Compatível com protoboard
    • +
    +
  • +
  • 2 LEDS de uso geral
  • +
  • Botões: 1xReset, 1 x Boot
  • +
  • USB: conector micro USB – OTG 1.1
  • +
  • Alimentação: +
      +
    • 5V via conector USB
    • +
    • 5V e GND via pinos
    • +
    • 3V3 e GND via pinos
    • +
    +
  • +
  • Formas de programação: +
      +
    • ESP-IDF,
    • +
    • Arduino,
    • +
    • CircuitPyhton,
    • +
    • MicroPython,
    • +
    • Zephyr,
    • +
    • NuttX
    • +
    +
  • +
+

Pinout da Franzininho WiFi

+

A imagem a seguir exibe o pinout da Franzininho WiFi com mapeamento dos pinos e recursos:

+

Nova Franzininho WiFI: pinout

+

Licença

+

A placa Franzininho WiFi é um projeto de hardware de código aberto, licenciado sob a CERN Open Hardware License. Essa licença é utilizada em projetos de hardware que são desenvolvidos e disponibilizados como código aberto, permitindo que outras pessoas possam reproduzir e criar derivações do projeto. Para garantir a conformidade com a licença, é importante que os desenvolvedores consultem e sigam os requisitos especificados na mesma antes de reproduzir ou criar derivações do projeto. Dessa forma, podem garantir que estão seguindo as diretrizes corretas e respeitando a licença escolhida para o projeto.

+

Você encontra o projeto do hardware no Github organização Franzininho: https://github.com/Franzininho/Franzininho-WiFi

+

Simulação da Franzininho WiFi no Wokwi

+

O Wokwi é uma ferramenta de simulação online e gratuita que permite que desenvolvedores de projetos eletrônicos testem suas criações em um ambiente leve e intuitivo. Com suporte a diversas placas de desenvolvimento, incluindo o Arduino Uno, ESP32, RP2040, e muitas outras, o simulador é um diferencial na área. A ferramenta oferece recursos exclusivos, como simulação de Wi-Fi, Analisador Lógico Virtual, Depuração avançada com GDB, simulação de cartão SD, API dos chips (criação de chips personalizados) e integração com o Visual Studio Code.

+

A placa Franzininho WiFi também é suportada no simulador. Para começar a criar projetos, acesse a lista de placas suportadas pelo Wokwi e comece a testar suas criações em um ambiente seguro e de fácil acesso. Além disso, compartilhar seus projetos com a comunidade pode ajudar outros desenvolvedores a iniciarem no universo da eletrônica, permitindo que cresçam juntos e desenvolvam soluções cada vez mais inovadoras.

+

A figura a seguir exibe a Franzininho WiFi no ambiente de simulação do Wokwi:

+

Franzininho WiFi

+

Entenda melhor sobre a ferramenta, acessando os links abaixo:

+

Documentação do Wokwi

+

Simulação Franzininho WiFi

+

Documentação da Franzininho Wokwi

+

Componente para o Fritzing

+

O Fritzing é uma ferramenta open-source que permite a interação com o hardware, possibilitando a montagem de circuitos eletrônicos, criação de placas de circuito impresso e inclusão do código-fonte do projeto proposto. Com sua riqueza de detalhes e ampla variedade de componentes, o Fritzing é uma opção ideal para documentação de projetos. Para facilitar a documentação de projetos, criamos um componente para ser adicionado ao Fritzing:

+

Franzininho WiFi

\ No newline at end of file diff --git a/en/docs/franzininho-wifi/wokwi/primeiros-passos/index.html b/en/docs/franzininho-wifi/wokwi/primeiros-passos/index.html index 408bedfa3..47305d17a 100755 --- a/en/docs/franzininho-wifi/wokwi/primeiros-passos/index.html +++ b/en/docs/franzininho-wifi/wokwi/primeiros-passos/index.html @@ -1,17 +1,44 @@ - + - -Como simular a Franzininho WiFi no Wokwi | Franzininho - - - + +Como simular a Franzininho WiFi no Wokwi | Franzininho + + + -
-

Como simular a Franzininho WiFi no Wokwi

Wokwi é um simulador de eletrônica online. Você pode usá-lo para simular Arduino, ESP32 e muitas outras placas, componentes e sensores populares. Foi desenvolvido para makers, por makers.

Você pode usar o Wokwi para aprender a programar o Franzininho WiFi, criar protótipos de suas idéias, e compartilhar seus projetos com outros makers.

Wokwi Franzininho WiFi

Dica

Use o Template do Franzininho wifi clicando na imagem acima para começar um novo projeto no Wokwi.

Saiba mais

Documentação da Franzininho WiFi no WokWi

Caso queira saber mais sobre outras funcionalidades do simulador, dê uma olhada na lista abaixo. Você pode também consultar as peças na lista de Referência do Diagrama, disponível na documentação do Wokwi.

Exemplos no simulador

- - +

Como simular a Franzininho WiFi no Wokwi

Wokwi é um simulador de eletrônica online. Você pode usá-lo para simular Arduino, ESP32 e muitas outras placas, componentes e sensores populares. Foi desenvolvido para makers, por makers.

+

Você pode usar o Wokwi para aprender a programar o Franzininho WiFi, criar protótipos de suas idéias, e compartilhar seus projetos com outros makers.

+

Wokwi Franzininho WiFi

+

Use o Template do Franzininho wifi clicando na imagem acima para começar um novo projeto no Wokwi.

+

Saiba mais

+

Documentação da Franzininho WiFi no WokWi

+

Caso queira saber mais sobre outras funcionalidades do simulador, dê uma olhada na lista abaixo. Você pode também consultar as peças na lista de Referência do Diagrama, disponível na documentação do Wokwi.

+ +

Exemplos no simulador

+
\ No newline at end of file diff --git a/en/docs/index.html b/en/docs/index.html index dac71f021..a99185dfd 100755 --- a/en/docs/index.html +++ b/en/docs/index.html @@ -1,17 +1,30 @@ - + - -Welcome to Franzinho project documentation | Franzininho - - - + +Welcome to Franzinho project documentation | Franzininho + + + -
-

Welcome to Franzinho project documentation

Here you find the documents (Under development) to work with all boards and kits Franzinho.

If you need help and can't find it here, feel free to join the community on Discord

If you are not familiar with the Franzinho project, here is a brief summary:

About the Franzininho project

The project Franzininho it was created with the objective of encouraging and empowering Brazilians to become protagonists in the development of electronic projects involving embedded systems and IoT.

We seek to make the study of current technologies accessible to Brazilian society through content, teaching materials, development tools, shared projects and the community involved.

We work based on the following pillars: Open source software and hardware, open teaching materials, community, knowledge sharing, collaboration.

Join the community

Contact the organizers

- - +

Welcome to Franzinho project documentation

Here you find the documents (Under development) to work with all boards and kits Franzinho.

+

If you need help and can't find it here, feel free to join the community on Discord

+

If you are not familiar with the Franzinho project, here is a brief summary:

+

About the Franzininho project

+

The project Franzininho it was created with the objective of encouraging and empowering Brazilians to become protagonists in the development of electronic projects involving embedded systems and IoT.

+

We seek to make the study of current technologies accessible to Brazilian society through content, teaching materials, development tools, shared projects and the community involved.

+

We work based on the following pillars: Open source software and hardware, open teaching materials, community, knowledge sharing, collaboration.

+

Join the community

+ +

Contact the organizers

+
\ No newline at end of file diff --git a/en/docs/programacao/tutoriais-introducao/index.html b/en/docs/programacao/tutoriais-introducao/index.html index 3645b817c..abf838b58 100755 --- a/en/docs/programacao/tutoriais-introducao/index.html +++ b/en/docs/programacao/tutoriais-introducao/index.html @@ -1,17 +1,16 @@ - + - -Introdução | Franzininho - - - + +Introdução | Franzininho + + + -
-

Introdução

Configuração da Arduino IDE

Para a correta compilação e gravação da placa Franzininho DIY na IDE do Arduino, é necessário a correta configuração da IDE.

danger

TBD

- - +

Introdução

Configuração da Arduino IDE

+

Para a correta compilação e gravação da placa Franzininho DIY na IDE do Arduino, é necessário a correta configuração da IDE.

+

TBD

\ No newline at end of file diff --git a/en/index.html b/en/index.html index 066e51b8b..045339d8b 100755 --- a/en/index.html +++ b/en/index.html @@ -2,16 +2,13 @@ - -Documentação Franzininho | Franzininho - - - + +Documentação Franzininho | Franzininho + + + -
-

Franzininho

O projeto Franzininho tem o objetivo de incentivar as pessoas na tecnologia através da cultura maker e do faça você mesmo.

Open hardware

Open hardware

Os projetos Franzininho são open hardware, ou seja, são disponibilizado ao público de modo que qualquer um pode construir, modificar, distribuir e utilizar a partir dos arquivos.

Open Source

Open Source

Trabalhamos com softwares open source e todo os nossos materiais seguem esse formato.

Educação Aberta

Educação Aberta

Nossos materiais contribuem para uma educação aberta e inclusiva. São desenvolvidos de forma colaborativa e revisados pela comunidade.

- - +

Franzininho

O projeto Franzininho tem o objetivo de incentivar as pessoas na tecnologia através da cultura maker e do faça você mesmo.

Open hardware

Open hardware

Os projetos Franzininho são open hardware, ou seja, são disponibilizado ao público de modo que qualquer um pode construir, modificar, distribuir e utilizar a partir dos arquivos.

Open Source

Open Source

Trabalhamos com softwares open source e todo os nossos materiais seguem esse formato.

Educação Aberta

Educação Aberta

Nossos materiais contribuem para uma educação aberta e inclusiva. São desenvolvidos de forma colaborativa e revisados pela comunidade.

\ No newline at end of file diff --git a/en/sitemap.xml b/en/sitemap.xml index 5d9021959..19e429c0c 100755 --- a/en/sitemap.xml +++ b/en/sitemap.xml @@ -1 +1 @@ -https://franzininho.github.io/en/blogweekly0.5https://franzininho.github.io/en/blog/archiveweekly0.5https://franzininho.github.io/en/blog/hello-worldweekly0.5https://franzininho.github.io/en/blog/holaweekly0.5https://franzininho.github.io/en/blog/tagsweekly0.5https://franzininho.github.io/en/blog/tags/docusaurusweekly0.5https://franzininho.github.io/en/blog/tags/facebookweekly0.5https://franzininho.github.io/en/blog/tags/helloweekly0.5https://franzininho.github.io/en/blog/tags/holaweekly0.5https://franzininho.github.io/en/blog/welcomeweekly0.5https://franzininho.github.io/en/docs/weekly0.5https://franzininho.github.io/en/docs/badge/badgeweekly0.5https://franzininho.github.io/en/docs/FranzBoy/franzboyweekly0.5https://franzininho.github.io/en/docs/franzininho-c0/arduino-identificacao-pinosweekly0.5https://franzininho.github.io/en/docs/franzininho-c0/arduino-primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-c0/arduino-todolistweekly0.5https://franzininho.github.io/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeideweekly0.5https://franzininho.github.io/en/docs/franzininho-c0/franzininho-c0-boardweekly0.5https://franzininho.github.io/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolistweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/bootloaderweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/brilho-ledweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/drivers-micronucleusweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/elefante-coloridoweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/entradas-analogicasweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/entradas-saidas-digitaisweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/buzzerweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/contadoresweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digitalweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/hello-worldweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/int-extweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/saida-digitalweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/timer0weekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/timer0-intweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/todoweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/girassol-automatizadoweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/identificando-componentesweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/led-rgbweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/leitura-teclaweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/lista-de-materiaisweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/montagemweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/pacoteweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/picsimlab/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/pisca-ledweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/saidas-pwmweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/semaforoweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/sensor-luz-ldrweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/sobreweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/tecla-liga-desligaweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/theremimweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/tutoriais-i2cweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/wokwi/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-tiny/franzininho-tinyweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi-lab01weekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-arduino/blinkweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-arduino/dht11weekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboardweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/dht11weekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2cweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicasweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitaisweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentasweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/hello-worldweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacaoweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/pwmweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04weekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/serial-consoleweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motorweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivoweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-espidf/awsweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogicaweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-espidf/entrada-digitalweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idfweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-espidf/ledcweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitaisweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/franzininho-wifiweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/franzininho-wifi-dev-editionweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/wokwi/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/Franzino/franzinoweekly0.5https://franzininho.github.io/en/docs/Franzino/upload-com-arduino-unoweekly0.5https://franzininho.github.io/en/docs/Franzino/upload-conversor-serialweekly0.5https://franzininho.github.io/en/docs/FranzMakey/franzmakeyweekly0.5https://franzininho.github.io/en/docs/FranzMakey/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/LaboratorioSistemasIot/adaptadores/arduino-unoweekly0.5https://franzininho.github.io/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFWweekly0.5https://franzininho.github.io/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNOweekly0.5https://franzininho.github.io/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIotweekly0.5https://franzininho.github.io/en/docs/programacao/tutoriais-introducaoweekly0.5https://franzininho.github.io/en/weekly0.5 \ No newline at end of file +https://franzininho.github.io/en/weekly0.5https://franzininho.github.io/en/blogweekly0.5https://franzininho.github.io/en/blog/archiveweekly0.5https://franzininho.github.io/en/blog/hello-worldweekly0.5https://franzininho.github.io/en/blog/holaweekly0.5https://franzininho.github.io/en/blog/tagsweekly0.5https://franzininho.github.io/en/blog/tags/docusaurusweekly0.5https://franzininho.github.io/en/blog/tags/facebookweekly0.5https://franzininho.github.io/en/blog/tags/helloweekly0.5https://franzininho.github.io/en/blog/tags/holaweekly0.5https://franzininho.github.io/en/blog/welcomeweekly0.5https://franzininho.github.io/en/docs/weekly0.5https://franzininho.github.io/en/docs/badge/badgeweekly0.5https://franzininho.github.io/en/docs/FranzBoy/franzboyweekly0.5https://franzininho.github.io/en/docs/franzininho-c0/arduino-identificacao-pinosweekly0.5https://franzininho.github.io/en/docs/franzininho-c0/arduino-primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-c0/arduino-todolistweekly0.5https://franzininho.github.io/en/docs/franzininho-c0/config-franzininho-c0-stm32cubeideweekly0.5https://franzininho.github.io/en/docs/franzininho-c0/franzininho-c0-boardweekly0.5https://franzininho.github.io/en/docs/franzininho-c0/franzininho-c0-stm32cubeide-todolistweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/bootloaderweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/brilho-ledweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/drivers-micronucleusweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/elefante-coloridoweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/entradas-analogicasweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/entradas-saidas-digitaisweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/buzzerweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/contadoresweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/entrada-digitalweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/hello-worldweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/int-extweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/saida-digitalweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/timer0weekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/timer0-intweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/exemplos-avr-libc/todoweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/girassol-automatizadoweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/identificando-componentesweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/led-rgbweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/leitura-teclaweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/lista-de-materiaisweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/montagemweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/pacoteweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/picsimlab/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/pisca-ledweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/saidas-pwmweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/semaforoweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/sensor-luz-ldrweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/sobreweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/tecla-liga-desligaweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/theremimweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/tutoriais-i2cweekly0.5https://franzininho.github.io/en/docs/franzininho-diy/wokwi/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-tiny/franzininho-tinyweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi-lab01weekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-arduino/blinkweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-arduino/dht11weekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-arduino/neopixel-onboardweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-arduino/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/dht11weekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/display-oled-i2cweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-analogicasweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/entradas-saidas-digitaisweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/ferramentasweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/hello-worldweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/irrigacaoweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/pwmweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/sensor-hcsr04weekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/serial-consoleweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/servo-motorweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-circuitpython/touch-capacitivoweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-espidf/awsweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-espidf/entrada-analogicaweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-espidf/entrada-digitalweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-espidf/hello-world-esp-idfweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-espidf/ledcweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-espidf/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-micropython/entradas-saidas-digitaisweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/exemplos-micropython/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/franzininho-wifiweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/franzininho-wifi-dev-editionweekly0.5https://franzininho.github.io/en/docs/franzininho-wifi/wokwi/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/Franzino/franzinoweekly0.5https://franzininho.github.io/en/docs/Franzino/upload-com-arduino-unoweekly0.5https://franzininho.github.io/en/docs/Franzino/upload-conversor-serialweekly0.5https://franzininho.github.io/en/docs/FranzMakey/franzmakeyweekly0.5https://franzininho.github.io/en/docs/FranzMakey/primeiros-passosweekly0.5https://franzininho.github.io/en/docs/LaboratorioSistemasIot/adaptadores/arduino-unoweekly0.5https://franzininho.github.io/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFWweekly0.5https://franzininho.github.io/en/docs/LaboratorioSistemasIot/bibliotecas/biblioteca-laboratorioFW_ARDUNOweekly0.5https://franzininho.github.io/en/docs/LaboratorioSistemasIot/LaboratorioSistemasIotweekly0.5https://franzininho.github.io/en/docs/programacao/tutoriais-introducaoweekly0.5 \ No newline at end of file diff --git a/index.html b/index.html index 6894e474b..5fed9ef7e 100755 --- a/index.html +++ b/index.html @@ -2,16 +2,13 @@ - -Documentação Franzininho | Franzininho - - - + +Documentação Franzininho | Franzininho + + + -
-

Franzininho

O projeto Franzininho tem o objetivo de incentivar as pessoas na tecnologia através da cultura maker e do faça você mesmo.

Open hardware

Open hardware

Os projetos Franzininho são open hardware, ou seja, são disponibilizado ao público de modo que qualquer um pode construir, modificar, distribuir e utilizar a partir dos arquivos.

Open Source

Open Source

Trabalhamos com softwares open source e todo os nossos materiais seguem esse formato.

Educação Aberta

Educação Aberta

Nossos materiais contribuem para uma educação aberta e inclusiva. São desenvolvidos de forma colaborativa e revisados pela comunidade.

- - +

Franzininho

O projeto Franzininho tem o objetivo de incentivar as pessoas na tecnologia através da cultura maker e do faça você mesmo.

Open hardware

Open hardware

Os projetos Franzininho são open hardware, ou seja, são disponibilizado ao público de modo que qualquer um pode construir, modificar, distribuir e utilizar a partir dos arquivos.

Open Source

Open Source

Trabalhamos com softwares open source e todo os nossos materiais seguem esse formato.

Educação Aberta

Educação Aberta

Nossos materiais contribuem para uma educação aberta e inclusiva. São desenvolvidos de forma colaborativa e revisados pela comunidade.

\ No newline at end of file